Problema 1 Si consideri la seguente specifica del tipo astratto NoleggioMotorini:
Crea : (Stringa, Intero) --> NM
precondizioni e postcondizioni per Crea(s,n) = m
pre: nessuna
post: m è un noleggio motorini avente come nome
s e che gestisce n motorini numerati da 0 a n-1; ciascun
motorino è inizialmente nello stato di funzionante e non
affittato.
Nome : (NM) --> Stringa
precondizioni e postcondizioni per Nome(m) = s
pre: nessuna
post: s è il nome del noleggio motorini m.
NumMotorini : (NM) --> Intero
precondizioni e postcondizioni per NumMotorino(m) = n
pre: nessuna
post: n è il numero di motorini gestiti dal noleggio
motorini m.
Noleggia : (NM,Intero,Persona) --> NM
precondizioni e postcondizioni per Noleggia(m,i,p) = m'
pre: i è compreso tra 0 e NumMotorini(m)
ed il motorino i-esimo è nello stato di funzionante
e non affittato
post: m' è il noleggio motorini ottenuto da m
ponendo l'i-esimo motorino nello stato di affittato dalla
persona p.
Restituito : (NM,Intero) --> NM
precondizioni e postcondizioni per Restituito(m,i) = m'
pre: i è compreso tra 0 e NumMotorini(m)-1
ed il motorino i-esimo è nello stato
di affittato
post: m' è il noleggio motorini ottenuto da m
ponendo l'i-esimo motorino nello stato di non affittato.
SiRompe : (NM,Intero) --> NM
precondizioni e postcondizioni per SiRompe(m,i) = m'
pre: i è compreso tra 0 e NumMotorini(m)-1
ed il motorino i-esimo è nello stato di funzionante
post: m' è il noleggio motorini ottenuto da m
ponendo l'i-esimo motorino nello stato di non funzionante e non affitato.
EstFunzionante : (NM,Intero) --> Booleano
precondizioni e postcondizioni per EstFunzionante(m,i) = b
pre: i è compreso tra 0 e NumMotorini(m)-1
post: b è true, se i-esimo motorino di m è nello stato di funzionante;
b è false altrimenti.
EstAffittato : (NM,Intero) --> (Booleano,Persona)
precondizioni e postcondizioni per EstAffittato(m,i) = (b,p)
pre: i è compreso tra 0 e NumMotorini(m)-1
post: b è true, se i-esimo motorino
di m è nello stato di affitato e in tal caso p
è la persona alla quale è affittato; b è
false altrimenti e in tal caso p non è significativo.
AggiungiMotorino : (NM) --> NM
precondizioni e postcondizioni per AggiungiMotorino(m) = m'
pre: nessuna
post: m' è il noleggio motorini ottenuto aggiungendo ad m il motorino NumMotorini(m}-esimo,
ponendolo inizialmente nello stato di funzionante e non affittato.
Si vuole scrivere una classe C++ NoleggioMotorini che realizzi
il tipo astratto NoleggioMotorini, considerando che per riferirsi al
tipo astratto Persona è necessario utilizzare la classe Persona
che si suppone già realizzata, della quale però non è nota
la definizione.
Domanda 1 Si illustrino le scelte di progetto relative alla
realizzazione del tipo astratto NoleggioMotorini mediante la classe C++
NoleggioMotorini.
Domanda 2 Si scriva la classe NoleggioMotorini
(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 della funzione AggiungiMotorino è opzionale; tutto
il resto è obbligatorio.
Problema 2 Realizzare una funzione esterna (non friend)
della classe NoleggioMotorini che, dato un oggetto m di
tipo NoleggioMotorini, restituisca un array contenente le persone
che hanno in affitto un motorino di m e la dimensione di detto array.
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.