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.