Pages: [1]   Go Down
Print
Author Topic: Esercizio 3^ prova  (Read 2049 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
corsair
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 273



« on: 23-02-2010, 18:15:11 »

Salve colleghi, mi sono imbattuto in un esercizio della terza prova davvero strano [Emoticon] Asd e mi serve una mano a disegnare l'UML.... eccovi il testo:

Quote
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..

Code:
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?
« Last Edit: 23-02-2010, 18:42:24 by corsair » Logged
luca.cnz
Matricola
*
Offline Offline

Posts: 27


« Reply #1 on: 24-02-2010, 13:24:59 »

Quote
1)è normale che il nome delle figura piane sia un float?
Si, dato che e' richiesto espressamente dalla consegna.
Quote
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?
La memoria di 1 KB può essere rappresentata come array di 1024 byte, ovvero byte[1024].
Quote
3) che diamine sono i  metodi appiattisci() e ricongiungi()?
L'implementazione di questi due metodi non e' richiesta, quindi puoi limitarti alla loro dichiarazione.
Quote
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
La creazione di metodi abstract serve a permetterne il polimorfismo.

Il grafico dell'UML lo trovi a questo link
« Last Edit: 24-02-2010, 13:36:49 by luca.cnz » Logged
R3m
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 486



« Reply #2 on: 24-02-2010, 13:46:32 »

Vorrei aggiungere che per rappresentare la memoria l'array di 1024* numero di kb è l'unico modo possibile, dato che facendolo in altri modi avresti 1 punto in meno..cmq luca.cnz c'è un problema...dal sito dropbox non è possibile scaricare nulla..probabilmente non hai inserito la cartella come shared folder.
Logged

Ciò che è nostro è stato in campo sudato....ciò che vostro è stato in aula assegnato.
In serie B non sei mai stato perchè la prescrizione t'ha salvato.
crypt0
Apprendista Forumista
**
Offline Offline

Posts: 109


« Reply #3 on: 25-02-2010, 15:50:13 »

Io posso accedere!
Avrai cliccato sulla versione precedente del post, perchè ora il link è perfettamente funzionante
Logged
R3m
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 486



« Reply #4 on: 25-02-2010, 16:17:53 »

si vero ora funziona..ho notato solo un errore non c'è bisogno che metti <<static>> nelle variabili, basta scrivere
Code:
+static x: int
(ad esempio)
Logged

Ciò che è nostro è stato in campo sudato....ciò che vostro è stato in aula assegnato.
In serie B non sei mai stato perchè la prescrizione t'ha salvato.
crypt0
Apprendista Forumista
**
Offline Offline

Posts: 109


« Reply #5 on: 25-02-2010, 17:10:47 »

Ma è proprio un errore oppure si possono anche non mettere?
Logged
R3m
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 486



« Reply #6 on: 25-02-2010, 17:48:28 »

No, è proprio un errore, le <<>> si usano solo per i metodi o classi abstract, ovviamente il prof potrebbe ANCHE NON considerarlo, però perchè rischiare?
Logged

Ciò che è nostro è stato in campo sudato....ciò che vostro è stato in aula assegnato.
In serie B non sei mai stato perchè la prescrizione t'ha salvato.
crypt0
Apprendista Forumista
**
Offline Offline

Posts: 109


« Reply #7 on: 25-02-2010, 18:01:19 »

Le doppie parentesi acute si usano per indicare gli stereotipi.
In alcuni editor UML l'unico modo di indicare static e final è tramite gli stereotipi (cioè scrivendoli tra <<>>)
Logged
Pages: [1]   Go Up
Print
Jump to: