Progettazione del Software - A.A. 2009/10
Esercitazione 1 - 5/03/2010
Esercizio 1.
Dopo aver analizzato la realizzazione
del
Tipo astratto
Lista con uno schema realizzativo sia con side-effect (senza
condivisione di memoria) sia funzionale (con condivisione di memoria) realizzare
il Tipo Astratto Pila
con gli stessi schemi realizzativi. Scrivere anche due classi "main" per provare
le diverse realizzazioni.
- Effettuare opportunamente anche l'overriding del metodo hashcode
.
- Realizzare la classe utilizzando i Generics.
Esercizio 2.
- Realizzare il Tipo
astratto
Officina.
- Realizzare le seguenti implementazioni concrete della classe Mezzo
Bicicletta
- Costruttore Bicicletta(String unaMarca, String unModello, String
unColore)
- Il metodo getNumeroRuote() restituisce sempre 2.
Auto
- Costruttore Auto(String unaMarca, String unModello, String
unColore, String targa)
- Esiste un metodo getTarga() che restituisce la targe dell'auto
- Il metodo getNumeroRuote() restituisce sempre 4.
Camion
- Costruttore Camion(String unaMarca, String unModello, String
unColore, boolean rimorchio) dove rimorchio vale
true se il camion è provvisto di rimorchio.
- Esiste un metodo haRimorchio() che restituisce true se
il camion è provvisto di rimorchio.
- Il metodo getNumeroRuote() restituisce 8 se haRimorchio()
vale true oppure 4 se haRimorchio() vale false
- Realizzare una classe "main" per provare le implementazioni.
Note sulla realizzazione.
- Rappresentazione dei valori: dobbiamo rappresentare da una parte la partita
IVA dell'officina e dall'altra i mezzi presenti nell'officina con associato il
loro status. La partita IVA la rappresentiamo con un campo dati (variabile di
istanza) String.
- I mezzi presenti nell'officina le rappresentiamo in uno dei due modi:
- Attraverso una lista collegata (realizzata definendo una struttura
record-puntatore d oppure attraverso la classe
java.util.LinkedList del Java Collection Framework) in cui nodi contengono due informazioni: il
riferimento al mezzo e lo status del mezzo nell'officina rappresentato da un
valore enumerato (o booleano). L'uso di una lista collegata è giustificato dal fatto che
i mezzi devono essere inseriti ed eliminati dalla struttura dati che rappresenta
l'officina. Utilizzando una lista collegata, quando si aggiunge un certo mezzo a,
occorre verificare che il mezzo è già presente.
- Attraverso un Set (in particolare si suggerisce l'uso della classe
java.util.HashSet) in cui nodi contengono due informazioni: il
riferimento all'auto e lo status del mezzo nell'officina rappresentato da un
valore enumerato (o booleano). L'uso di un set è giustificato dal fatto
che i mezzi devono essere inseriti ed eliminati dalla struttura dati che rappresenta
l'officina. Nel caso in cui i nodi ridefiniscono opportunamente i metodi
equals() and hashCode()non è necessario effettuare il
corso se il mezzo è già presente. Infatti il Set non permetterebbe di
aggiungere un certo oggetto se ne esiste già un altro che ha lo stesso
valore di hashcode.
- Schema realizzativo: essendo Officina un tipo astrazione di entità
sceglieremo uno schema realizzativo con side-effect (senza condivisione di
memoria). Gli oggetti Mezzo verranno utilizzati in sharing.
- Interfaccia di classe: definiamo un metodo per ciascuna delle funzioni del
tipo astratto. Realizziamo la funzione crea
attraverso un costruttore con un parametro String per rappresentare
la partita IVA. Poiché Officina è un tipo astrazione di entità, il metodo
equals ereditato da Object che verifica l'uguaglianza superficiale
è sufficiente a definire l'uguaglianza tra officina (cioè un'officina è uguale
solo a se stessa).