Fondamenti di Informatica II - Progettazione del Software - A.A. 2014/15

Esercitazione 1 - 13/03/2015

I file ausiliari allo svolgimento dell'esercitazione possono essere scaricati qui.

Esercizio 1.

Dopo aver analizzato la realizzazione del Tipo astratto Pila con uno schema realizzativo sia con side-effect (senza condivisione di memoria) sia funzionale (con condivisione di memoria) realizzare il Tipo Astratto Lista con gli stessi schemi realizzativi. Scrivere anche due classi "main" per provare le diverse realizzazioni.

Per quanto riguarda la realizzazione funzionale del tipo astratto Lista si vogliono inoltre implementare le seguenti operazioni: Per realizzare queste operazioni facciamo uso della ricorsione, sfruttando il fatto che le liste sono definite induttivamente: la lista vuota una lista, aggiungendo un elemento in testa ad una lista (cons) otteniamo una lista, nient'altro una lista.

Esercizio 2.

Data l'implementazione fornita della classe Mezzo e lo schema concettuale in figura:
  1. Realizzare il Tipo astratto Officina.
  2. Realizzare le seguenti specializzazioni della classe Mezzo
  3. ridefinendo il metodo getNumeroRuote():

Auto

Camion

  1. Realizzare una classe "main" per provare le implementazioni.

Note sulla realizzazione.


TipoAstratto Pila(T)
Domini
  
Pila
: dominio di interesse del tipo
T
: dominio degli elementi che formano le liste
Funzioni
  
pilaVuota() -->  Pila
 
pre: nessuna
post: RESULT la pila vuota
estVuota(Pila p) -->  Boolean
 
pre: nessuna
post: RESULT true se la pila p vuota, false altrimenti
push(T e, Pila p) -->  Pila
 
pre: nessuna
post: RESULT la pila ottenuta da p inserendo e in cima
top(Pila p) -->  T
 
pre: p non la pila vuota
post: RESULT l'elemento affiorante di p
pop(Pila p) -->  Lista
 
pre: p non la pila vuota
post: RESULT la pila ottenuta da p eliminando l'elemento in cima
FineTipoAstratto

TipoAstratto Lista(T)
Domini
  
Lista
: dominio di interesse del tipo
T
: dominio degli elementi che formano le liste
Funzioni
  
listaVuota() -->  Lista
 
pre: nessuna
post: RESULT la lista vuota
estVuota(Lista l) -->  Boolean
 
pre: nessuna
post: RESULT true se la lista l vuota, false altrimenti
cons(T e, Lista l) -->  Lista
 
pre: nessuna
post: RESULT la lista ottenuta da l inserendo e come primo elemento
car(Lista l) -->  T
 
pre: l non la lista vuota
post: RESULT il primo elemento di l
cdr(Lista l) -->  Lista
 
pre: l non la lista vuota
post: RESULT la lista ottenuta da l eliminando il primo elemento
FineTipoAstratto

TipoAstratto Officina
Domini
  
Officina
: dominio di interesse del tipo
Mezzo
: dominio degli oggetti presenti nell'officina
Funzioni
  
crea(Stringa pi) -->  Officina
 
pre: nessuna
post: RESULT è un'officina avente pi come partita IVA e con nessuna auto
partitaIva(Officina o) -->  String
 
pre: nessuna
post: RESULT è la partita IVA dell'officina o
arrivaMezzo(Officina o, Mezzo a) -->  Officina
 
pre: a non è presente nell'officina
post: RESULT è l'officina ottenuta da o aggiungendo il mezzo a e attribuendo a tale auto lo status di inRiparazione
approntaMezzo(Officina o, Mezzo a) -->  Officina
 
pre: a è presente nell'officina ed ha con status inRiparazione
post: RESULT è l'officina ottenuta da o cambiando lo status del mezzo a in pronto
parteMezzo(Officina o, Mezzo a) -->  Officina
 
pre: a è presente nell'officina ed ha con status pronto
post: RESULT è l'officina ottenuta da o eliminando il mezzo a
estInRiparazione(Officina o, Mezzo a) -->  Boolean
 
pre: nessuna
post: RESULT è true se se a è presente nell'officina o ed ha lo status inRiparazione; false altrimenti
estPronto(Officina o, Mezzo a) -->  Boolean
 
pre: nessuna
post: RESULT è true se a è presente nell'officina o ed ha lo status pronto; false altrimenti
FineTipoAstratto