Modificare le classi MattonellaTriangolare, MattonellaRettangolare, MattonellaQuadrata dell'esercizio 2 della seconda esercitazione, in modo tale che:
Sia possibile effettuare una uguaglianza profonda tra oggetti di tali classi ridefinendo il metodo equals.
In particolare si assuma che due mattonelle di qualsiasi tipo sono uguali anche se il loro prezzo unitario è diverso
Sia possibile effettuare una copia profonda tra oggetti di tali classi definendo il metodo clone ed implementando le interfacce opportune.
E' realmente necessario definire/ridefinire tali metodi per tutte e tre le classi?
Scrivere un piccolo main per verificarne il funzionamento.
Definire una interfaccia Figura che verrà successivamente implementata da alcune classi per rappresentare figure geomentriche in un piano cartesiano.
Specificatamente, tale interfaccia definisce tre metodi:
boolean appartienePunto(Punto p)
Circonferenza getCirconferenzaCircoscritta()
float getArea()
In particolare quando implementato da una classe che rappresenta una figura geometrica, il metodo 1 deve restituire true/false a seconda se un dato punto di coordinate (x,y) ?interno o meno alla figura data. Il metodo 2 restituisce un oggetto della classe Circonferenza che identifica la circonferenza circoscritta alla figura, cioè la più piccola circonferenza per cui tutti i punti della figura sono interni alla circonferenza. Il metodo 3 restituisce l'area della figura.
La classe Circonferenza definisce esclusivamente due propriet?centro (di tipo Punto) e raggio (di tipo float), settabili dal costruttore e leggibili da opportuni metodi getter. Esiste inoltre la classe Punto che definisce le proprietà x e y, anche esse settabili dal costruttore e leggibili da opportuni metodi getter.
Esiste poi una classe PianoCartesiano che rappresenta un piano cartesiano. I metodi forniti dalla classe sono i seguenti:
void aggiungiFigura(Figura f): Aggiunge le figure geometriche al piano, che sono oggetti che implementano l'interfaccia Figura. Non è possibile aggiungere una figura se si sovrappone ad un'altra esistente. Si supponga che due figure si sovrappongono se le loro circonferenze circoscritte lo fanno.
float getSommaAree(): Restituisce la somma delle area di tutte le figure geometriche aggiunte all'area
Figura dammiOggetto(Punto p): Restituisce la figura che contiene quel punto oppure null se nessuna figura contiene il punto.
L'esercizio consiste nel realizzare:
|
Suggerimenti per la realizzazione
Per memorizzare internamente agli oggetti PianoCartesiano gli oggetti che implementano Figura si consiglia di utilizzare l'implementazione delle liste tramite java.util.LinkedList e utilizzare i Generics per garantire che tale lista contenga solamente oggetti che implementano l'interfaccia Figura.
Per memorizzare internamente agli oggetti PianoCartesiano gli oggetti che implementano Figura si consiglia di sostituire java.util.LinkedList con java.util.HashSet e utilizzare i Generics per garantire che tale lista contenga solamente oggetti che implementano l'interfaccia Figura. Inoltre, occorre ridefinire equals opportunamente.
Due circonferenze y=a*x2+b*y+c e y=d*x2+e*y+f si intersecano se Math.sqrt((b-e)2 - 4*(a-d)*(c-f))>0.
Se (α,β) sono le coordinate del centro e r ?il raggio, allora: