Diploma Universitario in Ingegneria Informatica Esame di Fondamenti di Informatica II - primo modulo A.A. 1998/99 - Appello del 21 dicembre 1998 - Compito B Problema 1 Si vuole progettare una classe in modo tale che ogni oggetto della classe rappresenti le prenotazioni fatte da gruppi organizzati per una recita in un teatro. La specifica del corrispondente tipo astratto e': TipoAstratto Recita Commento ogni valore del tipo rappresenta le prenotazioni da gruppi per una recita in un teatro Domini Rec (dominio di interesse), Gruppo (con la funzione NumMembri che consente di calcolare quanti sono i membri del gruppo) Funzioni Crea : (Intero) --> Rec precondizioni e postcondizioni per Crea(k) = r pre_: nessuna post_: r rappresenta le prenotazioni per una recita con capienza di k posti; i posti sono indicati con numeri interi da 1 fino alla capienza, e sono tutti liberi Capienza : (Rec) --> Intero precondizioni e postcondizioni per Capienza(r) = k pre_: nessuna post_: k e' il numero di posti totali per la recita r Prenota : (Rec, Gruppo) --> Rec precondizioni e postcondizioni per Prenota(r,g) = s pre_: per la recita r ci sono ancora posti liberi sufficienti ad ospitare il gruppo g post_: s e' uguale a r, con la differenza che in s sono prenotati in piu' rispetto a r tanti posti quanti sono i membri del gruppo g; i posti vengono assegnati in ordine crescente; ovvero, se k e' il primo posto libero in r, allora in s vengono assegnati al gruppo g i posti da k in poi QualeGruppo : (Rec; Intero) --> (Boolean; Gruppo) precondizioni e postcondizioni per QualeGruppo(r,i) = (b,g) pre_: nessuna post_: se esiste un gruppo che ha prenotato in r un insieme di posti dal numero i in poi, allora b = true e g e' tale gruppo; altrimenti b = false e g non e' significativo FineTipoAstratto Si assuma che esista la classe Gruppo, e che le uniche operazioni lecite sugli oggetti di questa classe siano il costruttore di copia, l'assegnazione, la verifica di uguaglianza, e la funzione NumMembri(), specificata come segue: g.NumMembri() restituisce il numero di membri che compongono il gruppo g. Domanda 1 Si chiede di illustrare le scelte di progetto riguardante la realizzazione del tipo astratto Recita mediante una classe Recita in C++. Domanda 2 Si chiede di scrivere la classe Recita che realizza il tipo astratto Recita 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 e' facoltativa. Problema 2 Realizzare una funzione esterna (non friend) alla classe Recita che, dato un oggetto r della classe Recita, calcoli quanti posti sono ancora liberi in r. Problema 3 Illustrare la specifica del tipo astratto Grafo, e scrivere la classe che realizza tale tipo astratto con lo schema con side-effect senza condivisione di memoria. La scrittura del file .h e' obbligatoria, mentre quella del file .cpp e' facoltativa.