Diploma Universitario in Ingegneria Informatica
Esame di Fondamenti di Informatica II - primo modulo
A.A. 1998/99 - Appello del 26 aprile 1999

Problema 1  Si vuole progettare una classe in modo tale che ogni oggetto della classe rappresenti un'azienda con i suoi impiegati. La specifica del corrispondente tipo astratto è:

TipoAstratto Azienda
Domini
   Az (dominio di interesse), Imp (dominio per il tipo Impiegato), Tur (dominio per il tipo Turno)
Funzioni
  
Crea : (Intero) --> Az
precondizioni e postcondizioni per Crea(k) = a
pre: nessuna
post: a è un'azienda con 0 impiegati, e con il vincolo di non poter assumere più di k impiegati
Massimo : (Az) --> Intero
precondizioni e postcondizioni per Massimo(a) = k
pre: nessuna
post: k è il numero massimo di impiegati che l'azienda a può assumere
Quanti : (Az) --> Intero
precondizioni e postcondizioni per Quanti(a) = q
pre: nessuna
post: q è il numero di impiegati in a
Assume : (Az,Imp) --> Az
precondizioni e postcondizioni per Assume(a,i) = b
pre: l'azienda a ha un numero di impiegati minore al massimo consentito per essa, e i non è impiegato in a
post: b è l'azienda pari ad a con la differenza che b ha i come impiegato in più, e ad i non è stato assegnato alcun turno
Assegna : (Az,Imp,Tur) --> Az
precondizioni e postcondizioni per Assegna(a,i,t) = b
pre: i è impiegato in a
post: b è l'azienda pari ad a, con la differenza che t viene aggiunto ai turni assegnati a i in b
Togli : (Az,Imp,Tur) --> Az
precondizioni e postcondizioni per Togli(a,i,t) = b
pre: i è impiegato in a e t è uno dei turni asseganti a i in a
post: b è l'azienda pari ad a, con la differenza che t non è tra i turni assegnati a i in b
EstAssegnato : (Az,Imp,Tur) --> Intero
precondizioni e postcondizioni per EstAssegnato(a,i,t) = j
pre: nessuna
post: se i non è impiegato in a, allora j = -1; se i è impiegato in a e t non è uno dei turni assegnati a i in a, allora j = 0; se i è impiegato in a e t è uno dei turni assegnati a i in a, allora j = 1
FineTipoAstratto

Domanda 1  Si chiede di illustrare le scelte di progetto riguardante la realizzazione del tipo astratto Azienda mediante una classe Azienda in C++. Per riferirsi ai tipi astratti Impiegato e Turno è necessario utilizzare le classi già definite Impiegato e Turno, delle quali però non è nota né la definizione né la dichiarazione.

Domanda 2  Si chiede di scrivere la classe Azienda che realizza il tipo astratto Azienda secondo le scelte di progetto illustrate per la Domanda 1. Se la progettazione della classe richiede la ridefinizione del costruttore di copia e dell'operatore di assegnazione, la specifica delle loro istruzioni è facoltativa.

Problema 2  Realizzare una funzione esterna (non friend) alla classe Azienda che, data un'azienda a, un turno t, ed un insieme s di impiegati, calcoli quanti sono gli impiegati in s che lavorano nell'azienda a, e a quanti di questi è stato assegnato il turno t nell'azienda a. Si noti che per realizzare la funzione si deve decidere il modo in cui rappresentare i dati da fornire alla funzione stessa.

Problema 3  Dare le definizioni di: schema concettuale, relazione has-a, relazione has-many, relazione isa. Illustrare un esempio di schema concettuale con almeno una relazione has-a, una relazione has-many ed una relazione isa.