3ª relazione(parte obbligatoria)



Scaricare 12.41 Kb.
10.12.2017
Dimensione del file12.41 Kb.

3ª RELAZIONE(parte obbligatoria)
Descrizione del problema:

Date certe strutture software si chiede di sviluppare in base alle stesse del codice in grado di gestire la costruzione di figure bidimensionali quali cerchi, rettangoli e triangoli.


Analisi:

Ciò che è richiesto prevede l’uso di una classe che erediti metodi da quella fornita in partenza. In particolare, studiando la documentazione allegata si scopre come il software a disposizione consente la visualizzazione di punti e rette, oltre alla possibilità di variarne la grandezza ed il colore. Il costruttore di questa classe non fa altro che creare una finestra bianca.


Progetto:

Il concetto da seguire per lo sviluppo di questo progetto è quello dell’eridetarietà: si deve creare una nuova classe in grado di svolgere operazioni più complesse, più raffinate, basandosi su una già esistente, provvedendo a migliorarne le funzionalità. In particolare bisogna passare da una classe SimpleDrawPad in grado di gestire punti e rette ad una classe DrawPad per la visualizzazione di figure piane.

Ci sarà bisogno di un costruttore, il quale dovrà richiamare quello di SimpleDrawPad, in quanto DrawPad ne è una classe derivata, e di metodi che disegnino rettangoli, triangoli e circonferenze a piacere. Avremo perciò i metodi drawRectangle, drawTriangle e drawCircle.

Implementazione:

Come accennato in precedenza il costruttore di DrawPad invoca, tramite il comando “super” che consente l’accesso ai metodi della classe madre, il costruttore di SimpleDrawPad: questo basta a definirlo perché la finestra sulla quale si andrà a disegnare può essere la stessa della classe base.

Il metodo draw Rectangle ha come argomenti quattro interi che rappresentano le coordinate di due vertici del rettangolo, in particolare di due vertici che si trovino sulla stessa diagonale, in modo tale che sia possibile ottenere le coordinate dei restanti due tramite una combinazione degli argomenti. Per la visualizzazione viene invocato, sempre utilizzando “super”, il metodo drawLine, il quale disegna una linea datii suoi estremi.

Il metodo drawTriangle è simile al precedente, ma richiede in ingresso tre coppie di interi, le quali rappresentano i tre vertici del triangolo.

Il metodo drawCircle ha come argomenti tre interi: le coordinate del centro ed il raggio della circonferenza che si vuole disegnare.

Il concetto è che tramite un ciclo for si disegnino tanti punti facenti parte della circonferenza, talmente vicini da sembrare continui.

Per l’implementazione di questo metodo si sono dovuti utilizzare comandi della classe Math, quali il seno, il coseno e la costante pi greco. Inoltre, siccome il valore di ritorno dei metodi cos e sin è di tipo double, mentre gli argomenti di drawPoint devono essere degli interi, ho dovuto utilizzare l’operazione di cast per convertire i valori double a valori int.

Siccome DrawPad estende SimpleDrawPad si possono utilizzare i metodi di quest’ultima per cambiare spessore e colore degli oggetti DrawPad.


Casi d’uso:

Per testare il funzionamento del codice ho creato, senza tanta fantasia, un file Example.java nel quale sono invocati tutti i metodi disponibili.

Per prima cosa viene creato “pippo”, un oggetto DrawPad, il quale invoca, subito dopo, il metodo show, che la classe DrawPad ha ereditato da SimpleDrawPad.

A questo punto vengono visualizzati un rettangolo, un triangolo ed una circonferenza, cambiando di volta in volta, tramite i metodi setCurrentThickness e setCurrentColor, le impostazioni riguardanti lo spessore del segno ed il colore.





Questo è l’output che si presenta a schermo.



Concetti e tecniche acquisiti:

Con questa esercitazione ho imparato a gestire l’ereditarietà tra classi, nonché ad utilizzare la documentazione fornita con classi già pronte, siano esse fornite dall’esercitazione o standard del java.



3ªRELAZIONE(parte facoltativa)
Descrizione del problema:

Date certe strutture software si chiede di sviluppare in base alle stesse del codice in grado di gestire la costruzione di figure bidimensionali quali cerchi, rettangoli e triangoli.


Analisi:

Anche se dal punto di vista esterno il problema è lo stesso, viene richiesto di attuare un approccio diverso: bisogna poter disegnare delle figure senza passare da DrawPad, utilizzando invece la classe astratta Shape. Ciò che si vuole ottenere, in sostanza, non è la visualizzazione di una figura, quanto la sua creazione come entità vera e propria.


Progetto:

La linea logica da seguire è quella dell’astrazione. Data una classe astratta Shape nella quale, oltre ai metodi per ricavare le componenti di rosso verde e blu e lo spessore del segno, è presente il metodo astratto draw, il quale è solamente dichiarato e aspetta di essere definito.

Il compito di questa esercitazione è quello di creare classi Rectangle, Triangle e Circle che creino oggetti rettangolo, triangolo e circonferenza, e che in seguito siano in grado di disegnarli, implementando il metodo draw.

I costruttori di ogni classe dovranno, comunque, richiamare quello di shape, in quanto un rettangolo, ad esempio, è anche un oggetto di tipo Shape, visto che può essere impiegato in tutte le situazioni in cui è richiesto uno shape.


Implementazione:

La classe Rectangle, essendo derivata da Shape, ha a disposizione tutti i metodi di Shape; in più ha un proprio costruttore e definisce il metodo astratto draw.

Inoltre ha anche quattro campi private corrispondenti alle coordinate di due vertici che si trovino sulla stessa diagonale.

Il metodo Rectangle, il costruttore, ha come argomenti le coordinate dei due vertici più tutti quelli che si devono passare al costruttore di Shape. Al suo interno c’è prima di tutto un’invocazione al costruttore Shape e poi l’assegnamento dei valori ricevuti in ingresso ai campi privati.

L’implementazione del metodo draw ricorda il codice usato per la classe DrawPad, con l’aggiunta dei metodi della classe Shape che consentono di ricavare colore e spessore del segno, utili per poter impostare gli stessi direttamente all’interno di draw senza doverglieli passare come argomenti.

La classe Triangle, come Rectangle, può utilizzare titti i metodi di Shape, ha un proprio costruttore e ridefinisce il metodo draw; i suoi campi private sono tre coppie di interi corrispondenti alle coordinate dei vertici del triangolo che si vuole creare.

Il metodo Triangle ha in ingresso i valori da inserire nei suoi campi private più le informazioni necessarie ad invocare, grazie ad una super, il costruttore di Shape, la classe che estende.

Come per la classe precedente il codice è del tutto simile a quello usato nella prima parte dell’esercitazione, e come nella classe Rectangle vengono utilizzati i metodi di Shape per ricavare il colore e lo spessore.

La classe Circle ha come campi private tre interi rappresentanti le coordinate del centro ed il raggio.

Per il resto si possono fare le stesse considerazioni usate per i due casi precedenti.

In generale, che si abbia unoggetto Rectangle, Triangle o Circle, il metodo draw richiede in ingresso soltanto un oggetto SimpleDrawPad, dopodichè disegnerà la figura corretta, visto che il metodo draw fa comunque parte della classe Shape, alla quale fanno capo Rectangle, Triangle e Circle, ma viene implementato diversamente in ognuna di quest’ultime.

Il java riesce a gestire queste situazioni grazie alla politica di late binding unita al concetto di tipo di dato astratto (ADT).


Casi d’uso:

Come presentazione di questa esercitazione ho preparato un software d’esempio che, banalmente, costruisce un oggetto SimpleDrawPad ed uno di ciascuna delle classi create, e poi li disegna sul primo, come si vede dalla figura:





Concetti e tecniche acquisiti:

Con questa seconda parte della relazione ho miglirato la mia padronanza su situazioni in cui non ho a disposizione i sorgenti delle classi che sto utilizzando, ma solo i file .class.



Inoltre ho avuto un primo approccio con le classi astratte e mi è stato utile poter vedere coi miei occhi quali differenze ci possano essere a livello di concetto tra due classi che forniscono lo stesso servizio.




©astratto.info 2017
invia messaggio

    Pagina principale