Sei sulla pagina 1di 4

Homework

3
Corso d i p rogrammazione O rientata a gli O ggetti
BIAR2 ( Ing. I nformatica e A utomatica)
A.A. 2 014/2015

1 Introduzione
Si vuole realizzare un modulo Java per la gestione delle espressioni algebriche basate su numeri binari. Per
fare questo si richiede limplementazione di una gerarchia di seguito specificata.

2 Progettazione ed implementazione
Tutte le classi seguenti devono essere immutabili.

2.1 EnumOperazioneBitBit (Enum)


EnumOperazioneBitBit: rappresenta un tipo di operazione binaria bit a bit e pu assumere i seguenti
valori: AND, OR, XOR.
La classe dovr essere definita nel package type.

2.2 EnumOperazioneAritmetica (Enum)


EnumOperazioneAritmetica: rappresenta un tipo di operazione binaria bit a bit e pu assumere i
seguenti valori: SOMMA, PRODOTTO, SOTTRAZIONE, RAPPORTO.
La classe dovr essere definita nel package type.

2.3 Bin32 (Interfaccia)


Bin32: Si tratta della interfaccia base e rappresenta un qualunque numero binario a 32 bit utilizzando, per i
valori negativi, la rappresentazione mediante complemento a 2. E definita come interfaccia e fornisce i
seguenti metodi di istanza:

boolean[] getRappresentazione(): restituisce, attraverso un vettore di 32 elementi, la


rappresentazione del numero binario in cui il valore false corrisponde a 0 e true corrisponde ad 1.
o

Il bit meno significativo (LSB) si trova bella posizione con indice 0 del vettore.

int converti (): restituisce il numero intero corrispondente al valore decimale

int segno(): ritorna 1 se il segno del numero positivo, -1 altrimenti.

public String toString(): ritorna la versione stampabile delloggetto. Per ogni sottoclasse viene
descritto il formato di ritorno.

public boolean equals(Object o): verifica luguaglianza profonda ed in particolare ritorna true solo se
loggetto this ed il riferimento sono dello stesso tipo ed hanno gli stessi valori nei campi di istanza.

public Bin32 not(): restituisce il negato del valore binario passato come parametro.

Linterfaccia dovr essere definita nel package bin.

2.4 Bin32Abstract (classe astratta)


Bin32Abstract: una classe astratta che implementa Bin32 ed effettua loverride dei seguenti metodi
finali:

public final int converti()

public final int segno()

public final Bin32 not()

La classe dovr essere definita nel package bin.

2.5 OperazioneBinaria (Interfaccia)


OperazioneBinaria: Rappresenta una qualunque operazione tra valori binari. Linterfaccia definisce i
seguenti metodi:

Bin32 calcola() throws NumberFormatException: calcola il valore dellespressione, rilanciando


leccezione NumberFormatException con opportuno messaggio di errore nel caso in cui loperazione
non possa essere eseguita (vedere implementazioni sottoclassi)
o

Tutte le implementazioni del metodo non devono fare side-effect

La classe dovr essere definita nel package bin.op.

2.6 Costante (Classe)


Costante: La classe rappresenta un valore binario costante a 32 bit. Estende Bin32Abstract e definisce i
seguenti metodi di istanza:

costruttore ad un argomento di tipo (boolean[] v) che costruisce un numero binario costante


rappresentato dai bit del vettore. Si ricorda che il bit meno significativo (LSB) si trova nella posizione 0
del vettore.
o

Se uno degli argomenti nullo rilanciare leccezione NullPointerException con messaggio


parametri null non ammessi

Se il vettore vuoto o supera i 32 elementi rilanciare leccezione di tipo


IllegalArgumentException con il messaggio vettore errato

Costruttore ad un argomento di tipo int che prende un valore intero e lo memorizza in forma binaria a
32 bit

public String toString(): ritorna la stampa del numero binario a 32 bit con 0 e 1.

Es: se il numero binario corrisponde al numero decimale 7 si dovr stampare


00000000000000000000000000000111 in cui il bit meno significativo visualizzato a
destra ed sempre rappresentato a 32 bit.

Il metodo Bin32 calcola() throws NumberFormatException in questo caso non dovr mai rilanciare
eccezioni (ERRORE NEL TESTO IGNORARE)

La classe dovr essere definita nel package bin.impl.

2.7 OperazioneBitBit (Classe final)


OperazioneBitBit: classe final che estende Bin32Abstract ed implementa OperazioneBinaria e che
rappresenta un valore binario associato ad una operazione bit a bit. La classe definisce i seguenti metodi di
istanza:

un costruttore a due argomenti EnumOperazioneBitBit op, Bin32valori che costruisce una


operazione bit a bit del tipo specificato da op, applicata ai valori binari specificati nel secondo
parametro.
o

Se uno degli argomenti nullo rilanciare leccezione NullPointerException con messaggio


parametri null non ammessi

Se

larray

di

valori

ha

lunghezza

minore

di

due

rilanciare

leccezione

IllegalArgumentException con il messaggio valori errati

public String toString(): ritorna la stampa dellespressione nella forma (prestando attenzione alle
parentesi tonde e allo spazio in mezzo) (OPERANDO_1 OPERATORE OPERANDO_2 OPERATORE
OPERANDO_N) in cui al posto di operatore si stamper il testo AND, OR, XOR a seconda dei casi.

Il metodo Bin32 calcola() throws NumberFormatException in questo caso non dovr mai rilanciare
eccezioni

La classe dovr essere definita nel package bin.op.

Nota: La classe estende Bin32 e quindi rappresenta anchessa un numero binario che corrisponde al risultato
delloperazione stessa.

2.8 OperazioneAritmetica (Classe final)


OperazioneAritmetica: classe final che estende Bin32Abstract ed implementa OperazioneBinaria e che
rappresenta un valore binario associato al risultato di una operazione aritmetica. La classe definisce i seguenti
metodi di istanza:

un costruttore a due argomenti Bin32 o1, EnumOperazioneAritmetica op, Bin32 o2 che costruisce
una operazione aritmetica del tipo specificato da op, applicata ai due argomenti o1 ed o2.
o

Se uno degli argomenti nullo rilanciare leccezione NullPointerException con messaggio


parametri null non ammessi

Il metodo Bin32 calcola() throws NumberFormatException deve rilanciare una eccezione con
messaggio overflow nel caso di overflow delloperazione

public String toString(): ritorna la stampa dellespressione nella forma (prestando attenzione alle
parentesi tonde e allo spazio in mezzo):
o

(OPERANDO_1 OPERATORE OPERANDO_2) dove al posto di operatore si stamper il


simbono +,-,*,/ a seconda dei casi

La classe dovr essere definita nel package bin.op.

Nota: La classe estende Bin32 e quindi rappresenta anchessa un numero binario che corrisponde al risultato
delloperazione stessa.

2.9 Controllo dellinput


Per linput fornito alle varie classi non ci sono vincoli. Ogni metodo dovr effettuare i dovuti controlli e
rilanciare le eccezioni indicate caso per caso nelle specifiche

2.10 Valutazione
A titolo di esempio viene fornito insieme al presente documento la classe java HWooP03Prova (contenuta
nel file HWooP03Prova.java) contenente un main di prova che effettua alcuni test di correttezza sulla classe
da inviare. Si tratta di test case differenti da quelli utilizzati poi per leffettiva valutazione del lavoro svolto e
non coprono tutte le casistiche dinteresse. Gli studenti sono quindi invitati ad effettuare i test che ritengono
opportuni in totale autonomia.
La verifica finale dellhomework avverr su una batteria di test non pubblici, opportunamente predisposta
dal docente: si considerer superato lhomework se almeno l95% dei test dar esito positivo.

3 Invio dei contributi


La consegna dellhomework dovr avvenire esclusivamente attraverso la piattaforma online allindirizzo

http://www.dis.uniroma1.it/~oop/moodle/ e consiste nellinvio di un unico file zip contenente al suo


interno tutti i file richiesti opportunamente organizzati in cartelle (ove richiesto), insieme agli eventuali file
necessari al funzionamento dello stesso. In particolare il file zip dovrebbe contenere tutti i file presenti nella
cartella src e sue sottocartelle. Non deve essere inclusa la classe di test fornita.
Fare riferimento al documento regolamento Homework disponibile sul sito del corso per maggiori
dettagli su modalit e vincoli.
La scadenza per la consegna dellelaborato fissata alle ore 14.00 del giorno 9 dicembre 2014