edutecnica

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