Problema 1 Si consideri la seguente specifica del tipo astratto Biblioteca:
Crea : (String) --> BB
precondizioni e postcondizioni per Crea(s) = b
pre: nessuna
post: b è una biblioteca avente nome s e
che insialemnte non ha alcun libro.
Nome : (BB) --> Stringa
precondizioni e postcondizioni per Nome(b) = s
pre: nessuna
post: s è il nome della biblioteca b.
Presente : (BB,Libro) --> boolean
precondizioni e postcondizioni per Presente(b,l) = v
pre: nessuna
post: v è true se 1 è un libro di b; false
altrimenti.
StatoLibro : (BB,Libro) --> (Intero, Persona)
precondizioni e postcondizioni per StatoLibro(b,l) = (s,p)
pre: l è un libro di b
post: s è pari a 1 se il libro è prestato,
in tal caso p è la persona a cui il libro è stato prestato;
s è pari a 0 se il libro è disponibile per il
prestito mentre s è pari a -1 se il libro è in restauro,
in entrambi questi casi p non è sigificativo.
Presta : (BB,Libro,Persona) --> BB
precondizioni e postcondizioni per Presta(b,l,p) = b'
pre: l è un libro disponibile di b
post: b' è la biblioteca ottenuta prestando il
libro l alla persona p.
Restaura : (BB,Libro) --> BB
precondizioni e postcondizioni per Restaura(b,l) = b'
pre: l è un libro disponibile di b
post: b' è la biblioteca ottenuta ponendo il libro
l in restauro.
RendiDisponibile : (BB,Libro) --> BB
precondizioni e postcondizioni per RendiDisponibile(b,l) = b'
pre: l è un libro di b in restauro o in
prestito
post: b' è la biblioteca ottenuta rendendo disponibile
il libro l.
Aggiungi : (BB, Libro) --> BB
precondizioni e postcondizioni per Elimina(b,l) = b'
pre: l non è un libro di b
post: b' è la biblioteca ottenuta aggiungendo
il libro l.
Elimina : (BB, Libro) --> BB
precondizioni e postcondizioni per Elimina(b,l) = b'
pre: l è un libro di b
post: b' è la biblioteca ottenuta eliminando il
libro l.
Si vuole scrivere una classe C++ Biblioteca che realizzi il tipo
astratto Biblioteca, considerando che per riferirsi al tipo astratto
Libro ed al tipo astratto Persona è necessario utilizzare
le classe Libro e Persona che si suppongono già
realizzata, della quali però non è nota la definizione.
Domanda 1 Si illustrino le scelte di progetto relative alla
realizzazione del tipo astratto Biblioteca mediante la classe C++ Biblioteca.
Domanda 2 Si scriva la classe Biblioteca (file
.h e file .cpp) secondo le scelte di progetto illustrate per la Domanda 1. Scrivere
il codice delle funzioni pubbliche e private della classe. La realizzazione
del codice delle funzioni che realizzano Nome, Presente, e
due a scelta tra Presta, Restaura, e RendiDisponibile
è opzionale; tutto il resto è obbligatorio.
Problema 2 Realizzare una funzione esterna (non friend)
della classe Biblioteca che, dato un oggetto bdi tipo Biblioteca,
restituisca un nuovo oggetto Biblioteca contenete gli stessi libri
ma tutti nello stato di diponibile.
Problema 3 Spiegare brevemente il significato delle nozioni di coesione, information hiding, accoppiamento, e interfacciamento esplicito, e descrivere i criteri fondamentali che legano tali nozioni con la qualità della modularizzazione.