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.