Laboratorio di Programmazione - A.A. 2004/05
Esercitazione 2
Parte 1.
Si vogliono gestire gli abiti consegnati in un guardaroba di un teatro.
Il Guardaroba ha un nome e una collezione di abiti depositati.
Ogni abito consegnato è contrassegnato da un codice (una stringa)
che lo identifica univocamente e la collezione degli abiti depositati nel
guardaroba deve essere mantenuta ordinata rispetto a questo codice.
Gli oggetti di tipo Abito sono rappresentati tramite una
classe Java Abito
già definita che si trova
in un package packa
, il cui codice è
in packa.
Gli oggetti Guardaroba supportano le seguenti funzionalità:
- crea: che, data una stringa n che rappresenta il nome
del Guardaroba, crea un oggetto Guardaroba con nome
n, che inizialmente non ha alcun abito depositato;
- nome: che restituisce il nome del Guardaroba;
- presente: che, data una stringa c rappresentante
il codice di un abito depositato, restituisce
true se il codice c è associato ad
un abito depositato nel
Guardaroba, false altrimenti;
- numeroAbitiDepositati: che restituisce il numero di abiti
depositati nel Guardaroba;
- qualePosizione: che, data una stringa c
rappresentante il codice di un abito depositato, restituisce un intero
rappresentante la posizione dell'abito depositato nella collezione (0 per
il primo elemento, numeroAbitiDepositati-1 per l'ultimo),
oppure lancia una eccezione se
tale codice non è presente nel guardaroba. Poiché la
collezione degli abiti depositati deve essere ordinata questo metodo deve
soddisfare la seguente condizione: dati due codici c1 e
c2 tali che c1 precede c2 secondo l'ordine
lessicografico delle stringhe, allora qualePosizione(c1)
deve essere minore di qualePosizione(c2).
- qualeCodice: che, dato un intero n
rappresentante la posizione di un abito nella collezione
(0 per il primo elemento, numeroAbitiDepositati-1 per l'ultimo),
restituisce la
stringa corrispondente al codice dell'abito depositato;
se l'indice della posizione è fuori dai limiti si
generi una eccezione;
- qualeAbito: che, data una stringa c
rappresentante il codice di un abito depositato, restituisce l'oggetto
Abito
corrispondente, oppure lancia una eccezione se
tale codice non è presente nel guardaroba;
- consegnaAbito: che, dati un abito a e un codice
c, aggiunge l'informazione nel Guardaroba, mantenendo
la collezione ordinata secondo il codice; se esiste già un abito
associato al codice c, si lanci una eccezione;
- ritiraAbito: che, dato il codice c di un abito,
elimina l'abito dal guardaroba; se il codice non
è presente non fa nulla;
Realizzare una classe Guardaroba
che implementi queste
funzionalità all'interno del package packg
.
Si ricorda che il confronto lessicografico tra stringhe è ottenuto
tramite il metodo public int compareTo(String anotherString)
della classe String
, il quale restituisce un valore
negativo se la stringa oggetto di invocazione precede la stringa
argomento, un numero positivo in caso contrario e 0
se le due stringhe sono uguali.
Parte 2.
Realizzare la classe ServiziGuardaroba
in un package
packs
, contenente i metodi statici:
- verificaOrdinato, che, dato un guardaroba g,
verifica se le informazioni in esso contenute sono ordinate rispetto
all'ordinamento lessicografico dei codici;
-
arrayAbiti, che, dati un guardaroba g
e una array di interi a rappresentante le posizioni degli
abiti nel guardaroba, restituisca un array di abiti (oggetti della
classe
Abito
) della stessa dimensione di a
e in cui ogni componente contiene l'abito che nel guardaroba si trova
in posizione a[i], oppure null
se tale posizione
è al di fuori degli indici.
Parte 3.
Scrivere una classe esterna a tutti i package definiti
precedentemente, cliente di Guardaroba
e
ServiziGuardaroba
, contenente un metodo main
,
che utilizzi tutte le funzionalità delle due classi.