Diploma Universitario di Ingegneria Informatica
Esame di Fondamenti di Informatica II - primo modulo
A.A. 2001/02 - Appello del 17 luglio 2002
Problema 1 Si consideri la seguente specifica del
tipo astratto Molo:
- TipoAstratto Molo
- Sorte Molo (sorta per il dominio di interesse)
- Funzioni
- Crea: (String, Int) --> Molo
precondizioni e postcondizioni per Crea(c, n) = m
pre: nessuna
post: m è
un molo, avente codice c e contenete n posti barca
numerati sequenzialmente da 0 a n-1; i posti barca
del molo sono tutti liberi (non hanno una barca associata);
- NumPostiBarca: (Molo) --> Int
precondizioni e postcondizioni per NumPostiBarca(m) =
n
pre: nessuna
post: n è il numero di posti barca del
molo m;
- Libero: (Molo, Int) --> Boolean
precondizione e postcondizioni per
Libero(m,i) = b
pre: 0 <= i < NumPostiBarca(m)
post: b=true se il posto barca i del molo
m è libero, b=false altrimenti
- AssegnaPostoBarca: (Molo, Int, Barca) --> Molo
precondizioni e postcondizioni per
AssegnaPostoBarca(m,i,b) = m'
pre: 0 <= i < NumPostiBarca(m) e
Libero(m,i) = true
post: m' è il molo ottenuto dal molo
m assegnando alla barca b il posto barca
numero i;
- LiberaPostoBarca: (Molo, Int) --> Molo
precondizioni e postcondizioni per
LiberaPostoBarca(m,i) = m'
pre: 0 <= i < NumPostiBarca(m)
post: m' è il molo ottenuto dal molo
m liberando (qualora fosse occupato) il
posto barca numero i;
- DammiBarca: (Molo, Int) --> Barca
precondizioni e postcondizioni per
DammiBarca(m,i) = b
pre: 0 <= i < NumPostiBarca(m) e
Libero(m,i) = false
post: b è la barca che occupa il posto
numero i nel molo m;
- DammiUnPostoLibero: (Molo) --> Int
precondizione e postcondizioni per
DammiUnPostoLibero(m) = i
pre: nessuna
post: i è il numero di un qualsiasi
posto barca libero, se non ci sono posti liberi allora
i=-1.
FineTipoAstratto
Si vuole scrivere una classe C++ Molo che realizzi il tipo
astratto Molo, considerando che per riferirsi al tipo astratto
Barca è necessario utilizzare la classe Barca
che si suppone già realizzata, ma della quale non si conosce
nulla.
Domanda 1 Si illustrino le scelte di progetto relative
alla realizzazione del tipo astratto Molo mediante la classe C++
Molo.
Domanda 2 Si scriva la classe Molo
(file .h e file .cpp) secondo le scelte di progetto illustrate per la
Domanda 1. Scrivere il codice di tutte le funzioni pubbliche e private
della classe.
Problema 2 Realizzare una funzione
SituazionePostiBarca esterna (non friend) della classe
Molo che dato un molo m restituisca un array di
booleani a di dimensione pari al numero di posti barca presenti
in m e tale che ogni posizione i all'interno dell'array
contenga true se il posto barca numero i di m
è assegnato ad una barca, false altrimenti.
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.