Esercizio 7
Realizza una opportuna gerarchia di classi per modellare una collezione (C)
identificata da un nome, da un luogo, da un insieme di opere d'arte
e dalle informazioni relative al loro ingombro.
Radice della gerarchia è la classe astratta operadarte (OD)
contenente :
— i campi protetti titolo artista
— il costruttore
— il metodo public abstract double printingombro() che
restituisce l'ingombro dell'opera
— il metodo public boolean equals(Object o) che
verifica se due opere d'arte sono uguali ed altri metodi di interesse.
La sottoclasse quadro (Q) ha due variabili aggiuntive:altezza
e larghezza che identificano la misura del quadro.
La sottoclasse scultura (S) ha 3 variabili aggiuntive
altezza larghezza e profondità che identificano le misure della scultura.
Implementare le due classi concretizzando il metodo ingombro().
Realizzare poi, una classe collezione identificata da un nome e da un insieme di opere d'arte scrivere i seguenti metodi: inserire un opera d'arte, stampare la collezione , stampare l'occupazione di una data opera.
Considerando di associare i seguenti identificatori alle classi
OD (operadarte)
Q (quadro)
S (scultura)
C (collezione)
Possiamo ipotizzare la seguente gerarchia fra le classi:
class arte{
public static void main (String args []) {
//collezione
C c=new C("rockfeller","Los Angeles",5);
//opere
Q q1=new Q("natura morta","picasso",200,100);
Q q2=new Q("paesaggio","mantegna",150,100);
S s1=new S("david","donatello",150,100,200);
c.ins(q1);//inserimento
c.ins(q2);
c.ins(s1);
System.out.println(c);//stampa opere
c.geti(0).printingombro();//ingombro di
q1
c.geti(2).printingombro();//ingombro di
s1
System.out.println(c.geti(0).equals(c.geti(1)));//comparazione
}//fine main
}// fine classe class
//---------------------------------------
C { //collezione
private String nome;
private String luogo;
private OD T[];
C(String n,String l,int dim){nome=n;luogo=l;T = new OD[dim];}
public void ins(OD o){ //inserimento
for(int i=0;i< T.length;i++)
if(T[i]==null){T[i]=o;break;}
}//fine ins
public OD geti(int i){return T[i];}
public String toString() {
String st="nome:"+nome+"luogo:"+luogo+"\n";
for(int i=0;i< T.length;i++)
if(T[i]!=null) st+=T[i]+"\n";
return st;
}//fine toString
}//fine classe C
//---------------------------------------
abstract class OD{
abstract int ingombro();
protected String titolo;
protected String autore;
OD(String t,String a){titolo=t;autore=a;}//costruttore
public void printingombro(){
if(this instanceof Q)System.out.println(ingombro()+"
mq");
else System.out.println(ingombro()+" mc");
}//fine printingombro
public boolean equals(OD o){
if(this.titolo.equals(o.titolo)
&&
this.autore.equals(o.autore)) return true;
else return false;
}//fine equals
}//fine classe OD
//---------------------------------------
class Q extends OD{
private int larghezza;
private int altezza;
Q(String tit, String aut,int la,int al){
super(tit,aut);
larghezza=la;
altezza=al;
}//fine costruttore
public int ingombro(){return larghezza*altezza/10000;}
public String toString(){
String s = "tit:"+titolo+" aut: "+autore+" la:"+larghezza
+" al:"+altezza;
return s;
}//fine toString
}//fine class Q
//---------------------------------------
class S extends OD{
private int larghezza;
private int altezza;
private int profondita;
S(String tit, String aut,int la,int al,int p){
super(tit,aut);
larghezza=la;
altezza=al;
profondita=p;
}//fine costruttore
public int ingombro(){return larghezza*altezza*profondita/1000000;}
public String toString(){
String s = "tit: "+titolo+" aut:"+autore+" la:"
+larghezza+"
al:"+altezza +" prof:"+profondita;
return s;
}//fine toString
}//fine class S