Esercizio di esame
Si vogliono gestire le informazioni relative ad un guardaroba. Ogni capo di abbigliamento
è identificato da un codice (una stringa). Un Guardaroba può
contenere un numero arbitrario di stampelle, numerate sequenzialmente a partire
da 0. Ogni stampella nel guardaroba può essere libera oppure occupata da
un capo. Gli oggetti Guardaroba supportano le seguenti funzionalità:
- crea: che dato un intero n crea un oggetto
Guardaroba che inizialmente ha n stampelle libere;
- numStampelle: che restituisce il numero di stampelle del
guardaroba;
- assegnaStampella: che dato il codice c di un capo (una
stringa), occupa la prima stampella libera (ossia la stampella libera con
numero minimo) con il capo c e restituisce il numero della stampella,
se esiste una stampella è libera; lancia un'eccezione altrimenti;
- liberaStampella: che dato il numero n di una stampella
renda la stampella n libera;
- dammiCapo: che dato il numero n di una stampella,
restituisce il codice del capo che occupa la stampella n, se
questa è occupata; null altrimenti;
- cercaCapo: che dato il codice c di un capo,
restituisce il numero della stampella occupata dal capo c, se
questa è esiste; -1 altrimenti;
- numStampelleOccupate: che restituisce il numero di stampelle
occupate nel guardaroba;
- aggiungiStampelle: che dato un numero n aggiunge al
guardaroba n stampelle libere numerate sequenzialmente a partire
dall'ultima stampella già presente nel guardaroba;
- riordina: che sposta tutti i capi nel guardaroba in modo che
tutti le stampelle fino ad un certo numero siano occupate, ed elimina dal
guardaroba le rimanenti stampelle.
Domanda 1. Scrivere una classe Java Guardaroba
per rappresentare oggetti Guardaroba.
Domanda 2. Realizzare un metodo statico disposizioneCapi
cliente della classe Guardaroba
che, dato un guardaroba g
ed il nome f di un file, scrive sul file f, uno per riga,
il numero della stampella ed il codice del capo che la occupa, per tutte le
stampelle occupate del guardaroba g.
Domanda 3. Spiegare il meccanismo di gestione della memoria
in Java a fronte dell'attivazione di metodi. In particolare, illustrare come
avvengono il passaggio dei parametri e la restituzione del valore di ritorno.
Illustrare il meccanismo di gestione della memoria sull'esempio dell'esecuzione
di x = fattoriale(3);
da parte di un metodo main
,
dove x
è una variabile locale a main
e fattoriale
è un metodo, implementato in modo ricorsivo, per il calcolo del
fattoriale di un intero nonnegativo.