 |
dix979 |
.illuminato.
Registered: Sep 2004
Posts: 192 (0.03 al dì)
Location: Milano
Corso: Informatica
Anno: 2
Time Online: 1 Day, 16:05:34 [...]
Status: Offline
Edit | Report | IP: Logged |
Ecco il testo del progetto
Obiettivo del progetto è la realizzazione di due classi ShiftRegister, e
ShiftRegisterMajority (oltre che di altre semplici classi che definiscono delle eccezioni).
Cos’è uno “shift register”: è un dispositivo in grado di contenere un certo numero di informazioni di un certo tipo (in questo esempio, supponiamo valori interi). L’inserimento di un nuovo valore nella prima posizione di uno shift register fa sì che, preliminarmente, vi sia uno slittamento a destra di una posizione dei valori già presenti nello shift register, partendo dalla prima posizione.
Ad esempio, assumendo di considerare uno shift register di lunghezza 3 contenente valori interi (inizialmente vuoto) ecco come cambia il suo contenuto dopo avere inserito, nell’ordine, 57, 34, 17, 10, 10.
57
34 57
17 34 57
10 17 34
10 10 17
L’obiettivo del progettino è la realizzazione di due classi che definiscono degli shift register di lunghezza data, e contenenti informazioni di un qualsiasi tipo (ad esempio, delle stringhe), purché omogenee e tra loro confrontabili, e sui quali, oltre all’operazione di inserimento (o scrittura), sia definita una particolare operazione di lettura (basata su un certo tipo di “votazione”, che può essere per unanimità o a maggioranza).
Ecco una descrizione delle classi da implementare, in termini di costruttori e metodi pubblici che esse devono mettere a disposizione
classe ShiftRegister
/* costruttore senza parametri: crea uno shift register di capacità (lunghezza) 3, inizialmente con tutti valori uguali a null */
public ShiftRegister ()
/* costruttore con parametro: crea uno shift register di capacità size
inizialmente con tutti valori uguali a null;
se size è minore di 3, allora solleva l’eccezione controllata IllegalSizeException */
public ShiftRegister (int size) throws IllegalSizeException
/* metodo che inserisce (scrive) nello shift register un oggetto (obj) di una qualsiasi classe che implementi l’interfaccia Comparable, nel modo spiegato attraverso l’esempio di cui sopra.
Se obj è null allora l’operazione non ha alcun effetto*/
public void write (Comparable obj)
/* metodo che legge il contenuto dello shift register, restituendo null se non tutti gli oggetti in esso contenuti sono uguali, altrimenti restituisce un riferimento ad uno qualsiasi degli oggetti (che tra loro sono tutti uguali);
solleva l’eccezione controllata NotFullRegException se il registro non è pieno */
public Object read ( ) throws NotFullRegException
/* metodo che restituisce il riferimento all’oggetto “più grande” contenuto nello shift register;
solleva l’eccezione EmptyRegException se il registro è vuoto */
public Object max ( ) throws EmptyRegException
/* ritorna una rappresentazione del contenuto dello shift register ;
se esso è vuoto ritorna un messaggio opportuno
*/
public String toString ()
classe ShiftRegisterMajority
E’ una sottoclasse di ShiftRegister, che dispone di due costruttori, analoghi a quelli della superclasse; il costruttore con parametro (che fissa la capacità, o size, del registro) dovrà sollevare una eccezione IllegalSizeException nel caso il valore del parametro (size) sia minore di tre, oppure sia un numero pari.
Dovrà ridefinire il metodo read della superclasse in modo che esso ritorni null se non vi sono almeno (size/2)+1 oggetti contenuti nello shift register uguali tra loro, altrimenti restituisce un riferimento ad uno qualsiasi degli (size/2)+1 oggetti uguali tra loro
classi che definiscono le eccezioni
per ciascuna delle eccezioni controllate menzionate in precedenza dovrà essere definita la corrispondente classe (anche una implementazione semplicissima, o triviale, va bene)
Tutte le classi dovranno essere inviate in un unico file <nome_cognome>.java (nessuna va dichiarata public) entro il 30 Gennaio 2005. Si dovrà usare l’apposita form, che sarà disponibile sul sito del laboratorio di programmazione (turno 1) fra qualche giorno
|