Newsgroup: it.comp.java
Titolo: Esercizio - Lungo

Salve a tutti!
Da poco ho iniziato ad utilizzare java come linguaggio di programmazione e
devo dire che non è molto facile!!! :)
A parte tutto dovrei svolgere il seguente esercizio, non ho molte idee da
cui partire.. e volevo sapere se esistevano siti o compilatori che
aiutassero ad ottenere il codice java!
Grazie per le eventuali risposte.
____________
SCOPO
Implementare un prototipo di un sistema che aiuti studenti delle scuole
elementari/medie nello studio della geometria. Lo strumento dovra'
permettere di disegnare figure geometriche, muovere tali figure nel piano e
calcolarne superficie e perimetro. Il prototipo dovra' servire a raffinare
le specifiche del sistema e a testare l'architettura delle classi. Una buon
prototipo dovrebbe poi poter essere esteso ad un  sistema reale. (Questa
tecnica di progettazione viene chiamata Prototipazione Evolutiva.)
Il laboratorio è organizzato in più parti, questa suddivisione è pensata per
guidare la costruzione in modo incrementale del codice da sviluppare, per
l'esame sarà sufficiente portare una versione comprensiva di tutte le parti,
senza duplicazione di codice.
PARTE 1
Per prima cosa ci occupiamo di modellare il dominio del sistema (cioe' le
figure geometriche). Circoscriveremo il problema considerando solo un
sottoinsieme di figure per le quali considereremo solo gli aspetti
geometrici (non quelli grafici) e testeremo gli aspetti modellati. In
particolare scegliamo le seguenti figure:
punti,
circonferenze, e
rettangoli.
1)  Definire una classe astratta, Figura che contiene i campi (sceglierne la
visibilità, il tipo) comuni a tutte le figure geometriche. Una delle
informazioni (campo) che e' da rappresentare e la seguente:
id, una stringa che permette di identificare la particolare figura (questa
puo' essere o assegnata all'atto di creare la figura se specificato
dall'utente o generata automaticamente). L'identificatore deve poter essere
modificato.
Inoltre  Figura avra' i seguenti metodi (sceglierne la visibilità, il tipo
dell'eventuale valore/oggetto restituito, il tipo degli eventuali parametri
e la caratterizzazione se astratto oppure no)
setId, per settare l'identificatore della figura
getId, per restituire l'idenitificatore della figura
trasla, che prende due interi, incrX e incrY, e trasla la figura di
incrementandone le coordinate di queste quantita'
area, che restituisce (se possibile) l'area della figura
perimetro, che restituisce (se possibile) il perimetro della figura.
2) Definire la sottoclasse (concreta) di Figura: Punto con i seguenti campi
e metodi (di nuovo scegliere visibilita', ecc...)
x, e y gli interi che sono le coordinate del punto
setX, setY, getX, e getY i metodi per restituire e settare le coordinate del
Punto
chiaramente in Punto i metodi: trasla, area, e perimetro di Figura, vanno
ridefiniti ed inoltre ridefiniamo toString e equals di Object. In
particolare:
trasla, avra' l'ovvia definizione di aggiungere incrX a x e incrY a y
area e perimetro devono sollevare una eccezione che ci dice che l'operazione
non e' applicabile. Scegliete voi se definire una vostra classe o usare la
classe RunTimeException, questa ultima soluzione e' la piu' semplice!
toString deve stampare una forma leggibile dell'oggetto. Esempio se ho un
punto con id "p1" e coordinate x=3 e y=5 potrei stampare: "p1[x:3,y:5]"
equals  controlla se l'oggetto e' di tipo Punto ed ha le stesse coordinate.
Definite anche un metodo
toString(String s) con un parametro di tipo String (questo e' diverso dal
precedente) e deve stampare una forma leggibile dell'oggetto in cui invece
dell' identificatore id nella stringa c'e' ileparametro. Esempio se ho un
punto con id "p1" e coordinate x=3 e y=5 e chiamo toStrimg("p7") potrei
stampare: "p7[x:3,y:5]"
La classe Punto avra' i seguenti costruttori:
Punto(), costruttore di default. Scegliete voi i valori di x e y e
l'identificatore da dare alla classe
Punto(int x, int y), scegliete voi l'identificatore da dare alla classe
Punto(int x, int y, String id), il costruttore che dovrebbe essere usato
dagli atri e anche dal programma.
3) Definire la sottoclasse (concreta) di Figura: Cerchio con i seguenti
campi e metodi (di nuovo scegliere visibilita', ecc...)
centro, raggio. Il centro e' un Punto e il raggio un intero.
setCentro, setRaggio, getCentro, e getRaggio i metodi per restituire e
settare il centro e il raggio.
anche in Cerchio i metodi: trasla, area, e perimetro di Figura, vanno
ridefiniti ed inoltre ridefiniamo toString e equals di Object. In
particolare:
trasla, avra' l'ovvia definizione di cambiare il centro traslandolo.
area e perimetro restituiscono quello che devono
toString deve stampare una forma leggibile dell'oggetto. Come per il punto
scegliere una stringa da cui sia facile estrarre l'informazione (per il
centro potete utilizzare il toString con parametro del Punto)
equals  controlla che l'oggetto parametro sia di tipo Cerchio ed abbia il
centro e raggio equals a centro e raggio.
Per i costruttori definire
Cerchio(), costruttore di default. Scegliete voi i valori di centro raggio e
l'identificatore da dare alla classe
Cerchio(int x, int y, int raggio), genera un Punto per il centro, scegliete
voi l'identificatore da dare alla classe
Cerchio(int x, int y,int raggio, String id), il costruttore che dovrebbe
essere usato dagli atri e anche dal programma.
4) Definire la sottoclasse (concreta) di Figura: Rettangolo con i seguenti
campi e metodi (di nuovo scegliere visibilita', ecc...)
bassoDestra, altoSinistra. Il 2 Punti in basso a destra ed in alto al
sinistra.
setBD, setAS, getBD, e getAS i metodi per restituire e settare i 2 punti in
basso a destra ed in alto al sinistra.
anche in Rettangolo i metodi: trasla, area, perimetro, toString e equals
vanno ridefiniti.
Definire i costruttori seguendo l'esempio della classe Cerchio.
5) Allo stesso tempo cominciamo a pensare ad un insieme di tests che
possiamo fare per verificare che quello che le nostre classi fanno e'
corretto. Definiamo una classe con un metodo static main (come quelli degli
esempi) nella quale
si mantenga un insieme di figure che sono le figure costruite fino ad ora,
ed
una figura che e' la figura selezionata alla quale applicare le operazioni:
trasla,  area, perimetro, cancella
e in cui siano definiti i metodi
stampaStato() che stampa le figure costruite fino ad ora e la figura che e'
attualmente selezionata
seleziona(String s) che cerca fra le figure se c'e' ne e' una con id uguale
a s e la sleziona altrimenti non cambia la figura selezionata
seleziona(Figura f) che cerca fra le figure se c'e'  f e la sleziona
altrimenti non cambia la figura selezionata
All'inizio testeremo le classi semplicemente
costruendo una figura
selezionando una figura
eseguendo: trasla, area, perimetro, e cancella sulla figura selezionata.
dopo ogni operazione chiamate il metodo stampaStato() per accertarvi che
l'operazione sia stata eseguita correttamente.

FAQ: 
http://space.tin.it/computer/csadun/javafaq.html
Ciao,
    Bruno.
---
| Bruno Bossola 
| A Java Software Engineer :-)
| 
http://digilander.iol.it/bbossola
|
| Membro del JUG Torino - 
http://www.jugtorino.it
| 

Se vuoi te lo posso fare io e poi te lo spedisco...
aahh


quanto costi?!? :P

Stavo scherzando..:::::::------))))))))))
Non so neanche se ne sarei in grado.. probabilmente no....
Buon lavoro....

aiutassero ad ottenere il codice java!
[CUT]
Io ne conosco che aiutano solo ad imparare a *farselo*.
http://groups.google.com
http://space.tin.it/computer/csadun/javafaq.html
http://java.sun.com/docs/books/tutorial/
http://www.bruceeckel.com/Books/TIJ
HTH
-- 
Ciao
	Fabrizio C.