Sei sulla pagina 1di 20

Casagrande Marco

4^A I.T.I.

05/12/2013

Progetto Biblioteca

Casagrande Marco

4^A I.T.I.

05/12/2013

Sommario
Introduzione ..................................................... 3 Cenni teorici .................................................... 4
Gestione dell'input/output predefinito ............................... 4 Serializzazione degli oggetti su file ................................ 5 Ereditariet ......................................................... 6
Overloading ............................................................... 6 Overriding ................................................................ 6 Upcasting ................................................................. 6 Downcasting ............................................................... 6

Programma progettoBiblioteca ..................................... 7


Main ................................................................. 8
manu ...................................................................... 8 pause ..................................................................... 8 clear ..................................................................... 8 main ...................................................................... 8

Libro ............................................................... 10
Libro .................................................................... 10 getISBN .................................................................. 10 getAutore ................................................................ 10 visualizza ............................................................... 10 acquisisci ............................................................... 10

Data ................................................................ 12
Data ..................................................................... 12 visualizza ............................................................... 12 acquisisci ............................................................... 12

LibroScolastico ..................................................... 14
LibroScolastico .......................................................... 14 visualizza ............................................................... 14 acquisisci ............................................................... 14

Biblioteca .......................................................... 16
Biblioteca ............................................................... 16 inserimento .............................................................. 16 cercaLibro ............................................................... 16 eliminazione ............................................................. 16 visualizzaPreISBN ........................................................ 17 visualizzaPreAutore ...................................................... 17 visualizzaTutti .......................................................... 17 salvaSuFile .............................................................. 17 leggiDaFile .............................................................. 17

Conclusioni ..................................................... 19 2

Casagrande Marco

4^A I.T.I.

05/12/2013

Introduzione
Nella seguente relazione verr descritto il funzionamento del programma in linguaggio java progettoBiblioteca. Tale programma fornisce all'utente la possibilit di memorizzare in una struttura dati i propri libro, i libri possono essere normali o libri scolastici. Seguiranno: 1) I cenni teorici per la realizzazione del programma 2) Analisi del programma e delle classi che lo compongono (Sommario)

Casagrande Marco

4^A I.T.I.

05/12/2013

Cenni teorici
Gestione dell'input/output predefinito
Nel linguaggio di programmazione Java possibile visualizzare le nostre variabili sullo standart output di sistema (finestra testuale sullo schermo). Per fare cio si utilizza l'istruzione
System.out.print("...");

L'oggetto System.out un oggetto predefinito della classe PrintStream che dispone di vari metodi come il println (che accetta come parametro una stringa o un dato primitivo) o il print (che a differenza del println non effettua il vai a capo dopo la visualizzazione del parametro). Per l'input da tastiera esiste invece l'oggetto System.in della classe InputStream che associato allo standart input (la tastiera). Tuttavia, data la complessit delle operazioni di input, necessario incapsulare l'oggetto System.in in un oggetto di classe BufferedReader:
BufferedReader tastiera=new BufferedReader(new InputStreamRead(Sytem.in);

Ora possiamo utilizzare il metodo readLine dell'oggetto tastiera che ritorna una stringa che noi abbiamo inserito da tastiera (nel caso in cui vogliamo leggere da tastiera un intero dovremmo usare i metodi di conversione statico della classe Integer parseInt sul valore ritornato da readLine). L'istruzione readLine deve necessariamente essere inserita all'interno del costrutto try/catch:
try { s = tastiera.readLine(); } catch(java.io.IOEXCEPTION e){...}

fatto questo saremmo in grado di gestire eventuali errori di I/O. (Sommario)

Casagrande Marco

4^A I.T.I.

05/12/2013

Serializzazione degli oggetti su file


La serializzazione di un oggetto ci permette di salvarlo in un supporto di memorizzazione sequenziale (come un file). La serializzazione salva l'intero stato dell'oggetto in modo che in seguito possa essere ricreato nello stesso stato in cui era quando stato salvato, questo processo chiamato deserializzazione. Il processo di serializzazione avviene creando un oggetto della classe FileOutputStream, a cui viene passato il nome del file su cui scrivere il file, e poi incapsulato in un oggetto della classe ObjectOutputStram, il quale ci offre il metodo writeObject, che ci permette di scrivere sul file un oggetto.
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("file.dat")); try{ out.writeObject(vetBiblioteca); out.close(); } catch(FileNotFoundException e){...} catch(IOException e){...}

Il processo di deserializzazione dell'oggetto dal file analogo ma l'oggetto utilizzato della classe FileInputStream incapsulato nell'oggetto della classe ObjectInputStream, il quale ci offre il metodo readObject che ritorna un oggetto della classe Object e di conseguenza dovremmo effettuare un casting al tipo di oggetto a cui lo si assegna. Sia la serializzazione che la deserializzazione vanno inserite nel costrutto try/catch. In tutti e due i casi al termina delle operazioni sul file l'oggetto della classe ObjectOutputStram/ObjectInputStream va chiuso con il medoto close.
ObjectInputStream in = new ObjectInputStream(new FileInputStream("file.dat")); try{ vetBiblioteca = (Vector)in.readObject(); in.close(); } catch(FileNotFoundException e){...} catch(IOException e){...} catch(ClassNotFoundException e){...}

(Sommario)

Casagrande Marco

4^A I.T.I.

05/12/2013

Ereditariet
L'ereditariet un meccanismo di astrazione finalizzato alla creazione di gerarchie di classi. L'estensione di una classe possibile con il comando extends. La classe che viene estesa detta superclasse. In java possibile estendere una sottoclasse da una sola superclasse (non possibile l'ereditariet multipla). Una sorta di ereditariet multipla possibile estendendo pi interfacce (classi contenenti solo metodi astratti, ossia vuoti) con il comando implements. anche possibile estendere una classe da una sola superclasse e da una o pi interfacce. (Sommario)

Overloading
La tecnica di overloading ci permette di denifire pi metodo con lo stesso nome all'interno della stessa classe a patto che differiscano nella firma per numero e tipo dei parametri specificati. Sar il compilatore, in base ai parametri che passiamo al costruttore, che richiamer quello giusto. (Sommario)

Overriding
La tecnica di overridding esistenti nella superclasse. (Sommario) permette di ridefinire metodi gi

Upcasting
In java, in una gerarchia di classi, possibile effettuare il casting di un oggetto di una sottoclasse in un oggetto della superclasse (avviene ad esempio nella serializzazione, dove avviene il casting di un oggetto di una classe in un oggetto della superclasse Object). (Sommario)

Downcasting
In java, in una gerarchia di classi, possibile effettuare il casting di un oggetto di una superclasse in un oggetto della sottoclasse (avviene ad esempio nella deserializzazione, dove avviene il casting di un oggetto della superclasse Object in un oggetto di una sua sottoclasse). L'operazione di downcasting consentita dal compilatore ma genera un errore run-time e dovremmo gestire l'eccezione ClassCastException. (Sommario)

Casagrande Marco

4^A I.T.I.

05/12/2013

Programma progettoBiblioteca
UML programma progettoBiblioteca 1

(Sommario)

Casagrande Marco

4^A I.T.I.

05/12/2013

Main
manu
Il metodo menu un metodo pubblico, statico della classe main il quale come parametro accetta un vettore di String. Il metodo visualizza le stringa una di seguito all'altra e acquisisce un intero da tastiera e lo ritorna. (Sommario)

pause
Il metodo pause un metodo pubblico, statico della classe main il quale stampa a video il messaggio: "Premi invio..." e attende che l'utente prema invio. Questo metodo serve a interrompere momentaneamente il programma per far si che i messaggi a video vengano correttamente letti dall'utente. (Sommario)

clear
Il metodo clear un metodo pubblico, statico della classe main il quale stampa a video 50 vai a capo. Questo metodo serve a ripulire la finestra testuale. (Sommario)

main
Il metodo main un metodo pubblico, statico della classe main. Il metodo main il metodo che gestisce l'intero programma. Nel main viene instanziato l'oggetto della classe Biblioteca e viene richiamato il metodo menu. In base al valore dell'intero ritornato dal menu (e di conseguenza alla scelta dell'utente) verranno richiamati i vari metodi della classe Biblioteca. Dopo la visualizzazione di ogni messaggio derivante dall'invocazione dei metodi della classe Biblioteca viene richiamato il metodo pause e successivamente il metodo clear. Dopo di che verr nuovamente visualizzato il men. Prima del termine del programma il vettore contenente i libri verr salvato su file con il metodo salvaSuFile. (Sommario)

Casagrande Marco UML classe Main 1

4^A I.T.I.

05/12/2013

(Sommario)

Casagrande Marco

4^A I.T.I.

05/12/2013

Libro
La classe Libro la classe atta ad acquisire un libro che verr poi memorizzato nella biblioteca. Ha come attributi l'ISBN del libro, il titolo, l'autore, il numero di pagine, il prezzo, la collocazione e la data di pubblicazione. (Sommario)

Libro
La classe Libro ha due costruttore, un costruttore vuoto e un costruttore a cui vengono passati i parametri necessari a inizializzare tutti gli attributi (inizializza il prezzo a 0 se il parametro passato minore di 0 e il numero di pagine a 1 se il parametro passato minore di 1). (Sommario)

getISBN
Il metodo getISBN un metodo pubblico della classe Libro che restituisce l'attributo ISBN del libro. (Sommario)

getAutore
Il metodo getAutore un metodo pubblico della classe Libro che restituisce l'attributo ISBN del libro. (Sommario)

visualizza
Il metodo visualizza un metodo pubblico della classe Libro che visualizza riga per riga gli attributi della classe secondo il formato (per l'attributo di tipo Data viene richiamato il metodo visualizza della classe Data):
Titolo: titolo1 Autore: autore1

... (Sommario)

acquisisci
Il metodo acquisisci un metodo pubblico della classe Libro che setta tutti gli attributi della classe acquisendo i valori da tastiera. (Sommario)

10

Casagrande Marco UML classe Libro 1

4^A I.T.I.

05/12/2013

(Sommario)

11

Casagrande Marco

4^A I.T.I.

05/12/2013

Data
La classe Data costruisce la classe Libro e LibroScolastico. (Sommario) data che verr richiamata nella

Data
La classe Libro ha due costruttore, un costruttore vuoto e un costruttore a cui vengono passati i parametri necessari a inizializzare tutti gli attributi (inizializza l'attributo giorno a 1 se il parametro passato minore di 1 e a 31 se il parametro maggiore di 31). (Sommario)

visualizza
Il metodo visualizza un metodo pubblico della classe Data che visualizza riga per riga gli attributi della classe secondo il formato:
31/gennaio/2013

(Sommario)

acquisisci
Il metodo acquisisci un metodo pubblico della classe Data che setta tutti gli attributi della classe acquisendo i valori da tastiera. (Sommario)

12

Casagrande Marco UML classe Data 1

4^A I.T.I.

05/12/2013

(Sommario)

13

Casagrande Marco

4^A I.T.I.

05/12/2013

LibroScolastico
La classe LibroScolastico la classe atta ad acquisire un libro scolastico che verr poi memorizzato nella biblioteca. una classe derivata dalla classe Libro, e ne aggiunge gli attributi materia e ordine (elementari, superiori,...). Ridefinisce il metodo visualizza e acquisisci. (Sommario)

LibroScolastico
La classe LibroScolastico ha due costruttore, un costruttore vuoto e un costruttore a cui vengono passati i parametri necessari a inizializzare tutti gli attributi (validando il prezzo positivo e il numero di pagine maggiore di uno). Il costruttore per l'inizializzazione degli attributi comune a Libro richiama il costruttore della superclasse. (Sommario)

visualizza
Il metodo visualizza ridefinisce il metodo visualizza della superclasse. Al suo interno viene richiamato il metodo visualizza della classe Libro e vengono stampati a video a anche gli attributi materia e ordine. (Sommario)

acquisisci
Il metodo acquisisci ridefinisce il metodo acquisisci della superclasse. Al suo interno viene richiamato il metodo acquisisci della classe Libro e vengono acquisiti anche la materia e l'ordine. (Sommario)

14

Casagrande Marco UML classe LibroScolastico 1

4^A I.T.I.

05/12/2013

(Sommario)

15

Casagrande Marco

4^A I.T.I.

05/12/2013

Biblioteca
La classe Biblioteca la classe atta a memorizzare i libri che vengono inseriti. Permette inoltre di eliminarli, visualizzarli, salvarli su file e leggerli da un file. (Sommario)

Biblioteca
Il costruttore della classe Biblioteca accetta un parametro di tipo String che contiene il percorso del file da cui verr caricato l'attributo di tipo Vector contente i libri acquisiti (oggetti Libro e LibroScolastico) ordinati in modo crescente in base all'attributo ISBN. Il costruttore appunto inizializza il Vector grazie al metodo leggiDaFile gli viene assegnato l'oggetto letto. (Sommario)

inserimento
Il metodo inserimento un metodo pubblico della classe Biblioteca. Questo metodo accetta come parametro un oggetto della classe Libro e passa il suo ISBN al metodo cerca, e in base al valore da esso restituito inserir il libro nel Vector in ordine crescente in base all'ISBN oppure no. Il metodo ritorna la posizione pi uno negativa in cui stato inserito il libro, oppure la posizione pi uno se il libro non stato inserito e quindi gi presente nel Vector. (Sommario)

cercaLibro
Il metodo cercaLibro un metodo pubblico della classe Biblioteca. Questo metodo accetta come parametro una variabile di tipo String che corrisponde all'ISBN del libro da cercare. Se il libro gi presente nel Vector restituir un intero corrispondente alla posizione pi uno in cui il libro presente nel Vector, altrimenti restituisce la posizione pi uno negativa in cui il libro dovrebbe essere inserito (rispettando l'ordine crescente degli ISBN dei libri presenti). (Sommario)

eliminazione
Il metodo eliminazione un metodo pubblico della classe Biblioteca. Questo metodo accetta come parametro una variabile di tipo String che corrisponde all'ISBN del libro da eliminare. Questo parametro viene passato al metodo cercaLibro. Se il libro presente verr eliminato e il metodo restituir true, altrimenti non verr effettuata nessuna operazione e restituir false. (Sommario) 16

Casagrande Marco

4^A I.T.I.

05/12/2013

visualizzaPreISBN
Il metodo visualizzaPreISBN un metodo pubblico della classe Biblioteca. Questo metodo accetta come parametro una variabile di tipo String che corrisponde all'ISBN del libro da visualizzare. Questo parametro viene passato al metodo cercaLibro. Se il libro presente viene visualizzato. (Sommario)

visualizzaPreAutore
Il metodo visualizzaPreAutore un metodo pubblico della classe Biblioteca. Questo metodo accetta come parametro una variabile di tipo String che corrisponde all'autore del libro da visualizzare. Questo metodo visualizza tutti i libro dell'autore passato al metodo. (Sommario)

visualizzaTutti
Il metodo visualizzaTutti un metodo pubblico della classe Biblioteca. Questo metodo visualizza tutti i libro presenti nel Vector. (Sommario)

salvaSuFile
Il metodo salvaSuFile un metodo pubblico della classe Biblioteca. Questo metodo serializza l'attributo di tipo Vector della classe Biblioteca, contenente tutti i libri inseriti, in un file (il nome del file stato passato al costruttore della classe Biblioteca). (Sommario)

leggiDaFile
Il metodo leggiDaFile un metodo pubblico della classe Biblioteca. Questo metodo deserializza l'attributo di tipo Vector della classe Biblioteca da un file (il nome del file stato passato al costruttore della classe Biblioteca), cos da caricare tutti i libri precedentemente salvati. (Sommario)

17

Casagrande Marco UML classe Biblioteca 1

4^A I.T.I.

05/12/2013

(Sommario)

18

Casagrande Marco

4^A I.T.I.

05/12/2013

Conclusioni
La risoluzione del programma non stata molto impegnativa, una volta acquisita padronanza con la classe Vector. Tale classe la pi utilizzata in tutto il programma ed grazie ad essa se possiamo memorizzare i libri che acquisiamo e di conseguenza tutte le operazioni proposte all'utente vengono eseguite sul Vector (a parte l'acquisizione del libro). Di conseguenza una volta risolte le problematica relativa alla ricerca del libro nel vettore, all'inserimento di esso e alla sua eliminazione gli altri metodi non richiedevano molto sforzo. Il lavoro svolto servito a capire e superare le problematiche dell'acquisizione di un valore da tastiera, e del salvataggio di oggetti in strutture dati apposite.

19

Casagrande Marco

4^A I.T.I.

05/12/2013

INDICE DELLA FIGURE


UML PROGRAMMA PROGETTOBIBLIOTECA 1 ............................................ 7 UML CLASSE MAIN 1 ............................................................. 9 UML CLASSE LIBRO 1 ........................................................... 11 UML CLASSE DATA 1 ............................................................ 13 UML CLASSE LIBROSCOLASTICO 1 ................................................. 15 UML CLASSE BIBLIOTECA 1 ...................................................... 18

20