Salve colleghi, mi sono imbattuto in un esercizio della terza prova davvero strano
![[Emoticon] Asd](http://forum.informatica.unict.it/Smileys/asd/[Emoticon] Asd.gif)
e mi serve una mano a disegnare l'UML.... eccovi il testo:
Si consideri la seguente situazione che si vorrebbe modellare con un opportuno insieme di classi
JAVA:
Si vuole creare un database di oggetti geometrici 2D e 3D. Una figura geometrica è
caratterizzata da un contenitore (char), ed è assegnata mediante le coordinate cartesiane dei
suoi vertici. Ogni figura piana è caratterizzata da un nome (float), e quelle solide da un
colore (byte). Si vogliono considerare triangoli, quadrati e pentagoni. Sui triangoli si può
eseguire l’operazione di ricongiunzione, mentre sui pentagoni si può eseguire
l’appiattimento. Per le figure piane considerate ha senso calcolare l’area, il perimetro, il
numero di lati ed un coefficiente di variazione. Ogni figura solida contiene al proprio
interno un dispositivo di equilibrio, caratterizzato dal numero seriale (20 caratteri), da un
codice numerico (long) e da una memoria da 1KB.
A: analisi e disegno.
Riportare il diagramma UML di tutte le classi che si ritengono necessarie alla corretta descrizione e
rappresentazione della situazione sopra descritta. Nella gerarchia ereditaria si considerino anche i
seguenti metodi eventualmente polimorfi e se ne dia un’implementazione:
• getTotale; restituisce il numero di figure create fino all’istante di invocazione
del metodo;
• getContenitore; restituisce il contenitore della figura;
• getDispositivo; restituisce il dispositivo di equilibrio;
• getCoefficiente; restituisce il coefficiente di variazione per ogni figura
calcolato mediante la formula:
o c·L per i triangoli,
o c^5 · Area / 0.9 per i quadrati,
o 7 · c + 3 · Perimetro per i pentagoni,
dove c è un coefficiente costante per tutte le figure piane ed L è il lato maggiore
del triangolo.
B: utilizzo delle classi.
Si fornisca un frammento di programma che descriva la creazione e l’inizializzazione casuale di una
collezione di 100 figure geometriche e
# si visualizzino le informazioni per ogni figura,
# si trovi la figura con il minimo(secondo l’ordinamento alfabetico) carattere contenitore,
# si ordinino (in base al coefficiente di variazione) in un array indipendente tutti i
quadrati della collezione (gli oggetti non devono essere clonati).
e quì c'è a grandi linee la gerarchia che ho ideato.. sono 7 classi + 2 classi di appoggio(Dispositivo e Vertice) non fate caso alle eventuali mancanze.. perchè sono proprio questi i miei dubbi.. che vi esporrò tra poco..
class:
Figura
variabili:
-contenitore:char
#vertici:vertice[]
static - totale:int
metodi:
+Figura(c:char,v:vertitce[])
+getTotale():int
+getContenitore():char
+toString():String
class:
Piana (estende figura)
variabili:
-nome:float
final #c:int
metodi:
+Piana(c:char,v:vertitce[], n:float)
+getLati():int ------>ritorna il numero dei lati della figura
+toString():String
class:
Solida (estende figura)
variabili:
-colore:byte
-disp:Dispositivo
metodi:
+Solida(c:char,v:vertitce[],col:byte,d:Dispositivo)
+toString():String
+getDispositivo():Dispositivo
class:
Triangolo (estende Piana)
variabili:
metodi:
+Triangolo(c:char,v:vertitce[], n:float)
+toString():String
+appiattisci():void
-latoMagg():double
+Area():double
+Perimetro():double
+getCoefficiente():double
class:
Quadrato (estende Piana)
variabili:
metodi:
+Quadrato(c:char,v:vertitce[], n:float)
+toString():String
+Area():double
+Perimetro():double
+getCoefficiente():double
class:
Pentagono (estende Piana)
variabili:
metodi:
+Pentagono(c:char,v:vertitce[], n:float)
+toString():String
+Area():double
+Perimetro():double
+getCoefficiente():double
+appiattisci():void
class:
Vertice
variabili:
-cord:double[]
metodi:
+Vertice(c:double[])
+toString():String
+distanza(v:Vertice):double
class:
Dispositivo
variabili:
-seriale :char[]
-cod:long
metodi:
+Disepositivo(s:char[],c:long)
+toString():String
1)è normale che il nome delle figura piane sia un float?
2)ho notato che in altri esercizi come quello delle chiavi si parla di memorie.. in questo caso 1KB, bisogna implementare questa cosa in qualche modo? magari mettendo una variabile final di tipo int?
3) che diamine sono i metodi appiattisci() e ricongiungi()?
4) Sono indeciso sull'inserire i metodi astratti Perimetro(), getCoefficiente() ed Area() all'interno di Piana che diventa così astratta, poiché in realtà nel main se ne può fare a meno.(tuttavia ripensandoci il testo lo richiede quando dice:Per le figure piane considerate ha senso calcolare l’area, il perimetro, il
numero di lati ed un coefficiente di variazione.)
Volevo precisare che i metodi toString() accodano al toString della propria super classe i valori delle proprie variabili o i toString degli oggetti in caso le variabili siano degli oggetti...
Per qualsiasi cosa che non vi è chiara dello pseudoUML chiedete pure.
Illuminatemi.
Edit: Mi son dimenticato di chiedervi una cosa.. ho fatto un uso abbondante di toString() in modo tale che nel main quando viene richiesto di stampare le info dei vari oggetti occorre richiamare solo il toString()... è una buona strategia?