SOLUZIONE. Requisiti. Requisiti (cont.) Requisiti (cont.)

Documenti analoghi
SAPIENZA Università di Roma, Facoltà di Ingegneria

Esercitazioni di Progettazione del Software. Esercitazione (Prova al calcolatore del 17 settembre 2010)

SAPIENZA Università di Roma, Facoltà di Ingegneria

Progetto E versione del 12 marzo 2007

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1

La fase di realizzazione. La fase di realizzazione (cont.) Traduzione in Java del diagramma degli use case

Obiettivi dell esercitazione. Requisiti (cont.) Requisiti. Università di Roma La Sapienza A.A Facoltà di Ingegneria Sede di Latina

Realizzazione di una classe con un associazione

Parte 6 Esercitazione sull accesso ai file

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Fasi del ciclo di vita del software (riassunto) Progetto: generalità. Progetto e realizzazione (riassunto)

La fase di progetto e realizzazione. PROGETTAZIONE DEL SOFTWARE (Ing. Gestionale) Diagramma delle classi realizzativo

ESERCIZI DI MODELLAZIONE E-R

UML. Il linguaggio UML e ArgoUML. Ingegneria dei sistemi software 2009/ /09/2009

Corso di Laurea Ingegneria Informatica Laboratorio di Informatica

Programmazione Orientata agli Oggetti in Linguaggio Java

Unità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

Il sistema informativo deve essere di tipo centralizzato e accessibile mediante un computer server installato nella rete locale dell albergo.

Si considerino le seguenti specifiche per la realizzazione di un sito web per la gestione di abbonamenti a riviste di vario genere..

Linguaggio C: introduzione

Mini-Corso di Informatica

Trasmissione dei dati sanitari

Principi di Progettazione del Software a.a " Introduzione al corso! Prof. Luca Mainetti! Università del Salento!

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Matematica e-learning - Corso Zero di Matematica. Gli Insiemi. Prof. Erasmo Modica A.A.

GUIDA ALLA DOMANDA DI AMMISSIONE AI CORSI DI DOTTORATO DI RICERCA A CURA DELLA UOS FORMAZIONE POST LAUREAM DOTTORATI DI RICERCA

XML e Windows Phone. Semplice tutorial per l'utilizzo di documenti e dati XML in un'app per Windows Phone.

Esonero del corso di Programmazione a Oggetti

Definizione di metodi

Ingegneria del Software

Procedura operativa per la gestione della funzione di formazione classi prime

Hardware, software e periferiche. Facoltà di Lettere e Filosofia anno accademico 2008/2009 secondo semestre

I database. Introduzione alla teoria delle basi di dati

public double getlato() restituisce la lunghezza del lato del quadrato che esegue il metodo.

2. Simulazione discreta: entità ed operazioni

Servizio Conservazione No Problem

Diagrammi di classe e sistemi orientati agli oggetti

float somma_float(float a, float b) int get_ascii(char c)

Heap e code di priorità

Uso di metodi statici. Walter Didimo

STUDIO. Esercizi proposti a lezione cap. 3 rev. dic da Ulmann, Widom Introduzione ai database. indirizzo. titolo. nome. recitain. attori.

INDICE. Vista Libretto Livello Digitale 2. Importazione di dati da strumento 3. Inserisci File Vari 5. Compensazione Quote 5.

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.

Progettazione del Software, Laurea in Ingegneria Gestionale Progettazione del Software Laurea in Ing. Gestionale

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Il Bollino GRIN: coordinamento nazionale per le lauree di informatica

Array multidimensionali e stringhe

Gestione Stato di Famiglia

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

SOLUZIONE. Requisiti. Requisiti (cont.) Fase di analisi. Università di Roma La Sapienza Facoltà di Ingegneria

Lezioni di Ricerca Operativa 2 Dott. F. Carrabs

INFORMATICA GRAFICA - FONDAMENTI DI INFORMATICA Ing. Civile - Edile/Architettura Dott. Penzo SOLUZIONE PROVA SCRITTA DEL 16/09/2002.

Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 14/02/2012 / Foglio delle domande / VERSIONE 1

Alcune idee sui sistemi software e la loro architettura

Segreteria Studenti del Polo di Latina Corsi di laurea delle Facoltà di

CONCETTI E ARCHITETTURA DI UN SISTEMA DI BASI DI DATI

Esercizio 1: archivio CD e DVD

Programmazione Orientata agli Oggetti

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

Compito Sistemi Informativi LA. Tempo concesso : 90 minuti 28 Giugno 05 Nome: Cognome: Matricola: Esercizio 1

Richiesta di contributo per il sostegno alla locazione di cui all art. 11, L. 431/98 e s.m.i.

VALORIZZAZIONE MOVIMENTI DI SCARICO E VALORIZZAZIONE TRASFERIMENTO COSTI DI ANALITICA

A.A. 2011/2012. GOMP Verifiche di conformità delle programmazioni di copertura

Esercitazione 6. Tutor: Ing. Diego Rughetti. Anno Accademico 2007/2008

2) FILE BINARI: è una sequenza di byte avente una corrispondenza uno a uno con la sequenza ricevuta dal dispositivo esterno.

Laurea triennale - Comunicazione&DAMS - UNICAL. Dr. Marco Manna 1

ALLEGATO: ISTRUZIONI PER L OPERATORE DI SEDE PER ACQUISIRE LE DOMANDE TELEMATICHE DI RICONGIUNZIONE

Tipi astratti di dato e loro realizzazione in Java

DOCUMENTAZIONE WEB RAIN - ACCESSO CLIENTI

Creare una funzione float square(float x). La funzione deve restituire il quadrato del parametro x.

Politecnico di Milano. Ingegneria del Software a.a. 2006/07. Appello del 14 settembre 2007 Cognome Nome Matricola

Note_Batch_Application 04/02/2011

Fondamenti di Informatica T1 Mappe

Appunti di informatica. Lezione 4 anno accademico Mario Verdicchio

Sul pattern Decorator

IL CONCETTO DI FILE. È illecito operare oltre la fine del file.

AXO - Architettura dei Calcolatori e Sistema Operativo. organizzazione strutturata dei calcolatori

Conoscenza delle norme di base in materia di protezione dei dati personali

Traduzione dello schema E-R in modello logico relazionale

Fast Patch 0336 Predisposizione operazioni superiori a euro Release 7.0

Docente: Prof. Marco Patella Tutor: Vincenzo Lomonaco

PENSIONI MINIME E MAGGIORAZIONI 2013: ATTENZIONE AI REDDITI

PROCEDIMENTO DI COMPILAZIONE DELLA SCIA E DELL EVENTUALE INTERCALARE REQUISITI PER L AVVIO DELL ATTIVITA DI AGENTE E/O RAPPRESENTANTE DI COMMERCIO

OPERA ANCONA JESI STAGIONE LIRICA Amore, gelosia, tradimento, follia: ritratti di donna

Corso di Fondamenti di Informatica Classi di istruzioni 2

Esame di INFORMATICA (*) Operazioni Aritmetiche: Somma. Lezione 3. Operazioni Aritmetiche: Somma. Operazioni Aritmetiche: Somma

public BankAccount() { balance = 0; } public BankAccount(double initialbalance) { balance = initialbalance; }

Laboratorio di Basi di Dati

Laboratorio di Informatica L-A 1. ne: M se macchina, P se parte Nel caso di macchina seguono: L identificatore

COMUNE DI SAN CALOGERO (PROVINCIA DI VIBO VALENTIA) TEL 0963 \ Telefax 0963\361458

Files in C++ Fondamenti di Informatica. R. Basili. a.a

MANUALE UTENTE Scrittura lettura ISEE su CSE Agosto 2013 Versione 1.0

GESTIONE EREDITARIA IMPRESA INDIVIDUALE (Il presente modello deve essere presentato in n. 2 copie + una per l interessato)

Università di Roma La Sapienza, Facoltà di Ingegneria

Classi. Oggetti e classi. Creazione e inizializzazione di oggetti in C++ Distruzione di oggetti in C++

OOP: L13: Eccezioni e loro trattamento in Java

FORMAZIONE ADDETTI ANTINCENDIO

Eccezioni ed asserzioni

FSM: Macchine a Stati Finiti

Transcript:

SAPIENZA Università di Roma Facoltà di Ingegneria Sede di Latina Corso di Laurea in Ingegneria Informatica e dell Informazione Requisiti Corso di PROGETTAZIONE DEL SOFTWARE Prof. Domenico Lembo A.A. 2008-09 Compito d esame del 15 luglio 2009 SOLUZIONE L applicazione da progettare riguarda la gestione della vendita di biglietti in un teatro. Ogni spettacolo che si svolge nel teatro è caratterizzato dal titolo (una stringa), dal nome del regista (una stringa) e dal nome degli attori che vi recitano (un insieme non vuoto di stringhe). Per uno spettacolo si prevedono un certo numero di repliche (almeno una), di cui interessa la data e l ora in cui si svolgono. Dei posti del teatro interessa conoscere la fila, il numero ed il tipo (platea, palco, galleria, ecc.). Alcuni posti sono adatti ad accogliere disabili. Univ. La Sapienza Sede di LT, Ing. Informatica & Ing. Informazione, Prog. del SW 2 Requisiti (cont.) Requisiti (cont.) Il costo del biglietto riferito ad un posto (un reale positivo) è stabilito in base al tipo di posto ed allo spettacolo (ad esempio, per lo spettacolo Cats, il costo dei posti di platea è di 50 euro). I posti possono essere prenotati. Di una prenotazione p interessa il nome del cliente (una stringa) che l ha effettuata, la data in cui è stata effettuata, la replica dello spettacolo a cui p si riferisce, ed i posti (almeno uno) che sono prenotati tramite p. Inoltre, se p prenota anche posti per disabili, interessa conoscere il tipo di disabilità (una stringa) di colui per cui è prenotato il posto. Si noti che data una prenotazione è di interesse conoscere i posti per disabili eventualmente prenotati (con annesse disabilità indicate per i vari posti prenotati). L addetto alla biglietteria del teatro è interessato ad effettuare alcuni controlli. In particolare: dato uno spettacolo s ed una tipologia di posto t, restituire il costo associato alla tipologia t per lo spettacolo s, se questo costo è specificato ed è unico. Restituire 1 in caso contrario (questo segnala una situazione di errore); dato un insieme I di posti ed una replica r, restituire l insieme dei posti in I che sono disponibili per r (cioè i posti contenuti in I che non risultano prenotati per r). Univ. La Sapienza Sede di LT, Ing. Informatica & Ing. Informazione, Prog. del SW 3 Univ. La Sapienza Sede di LT, Ing. Informatica & Ing. Informazione, Prog. del SW 4

Requisiti (cont.) Domanda 1. Basandosi sui requisiti riportati sopra, svolgere la fase di analisi producendo lo schema concettuale in UML per l applicazione e motivando, qualora ce ne fosse bisogno, le scelte effettuate. Domanda 2. Svolgere la fase di progetto, illustrando i prodotti rilevanti di tale fase e motivando, qualora ce ne fosse bisogno, le scelte effettuate. È obbligatorio solo progettare gli algoritmi e definire le responsabilità sulle associazioni. Fase di analisi Domanda 3. Svolgere la fase di realizzazione, producendo un programma Java e motivando, qualora ce ne fosse bisogno, le scelte effettuate. È obbligatorio realizzare in Java solo i seguenti aspetti dello schema concettuale: le classi TipoPosto e Spettacolo e le associazioni che le legano. Nella realizzazione si ignorino tutte le altre associazioni a cui le classi menzionate partecipano; il primo use case. Univ. La Sapienza Sede di LT, Ing. Informatica & Ing. Informazione, Prog. del SW 5 Univ. La Sapienza Sede di LT, Ing. Informatica & Ing. Informazione, Prog. del SW 6 Diagramma delle classi Diagramma degli use case Univ. La Sapienza Sede di LT, Ing. Informatica & Ing. Informazione, Prog. del SW 7 Univ. La Sapienza Sede di LT, Ing. Informatica & Ing. Informazione, Prog. del SW 8

Specifica dello use case Specifica dello use case InizioSpecificaUseCase Operazioni costobiglietto (s: Spettacolo,t:tipoPosto): Reale pre: nessuna post: se non esiste un link di tipo biglietto che coinvolge s e t result=-1 altrimenti sia l = s, t un link di tipo biglietto result= l.costo postidisponibili (I : Insieme Posti, r : Replica) : Insieme Posti pre: nessuna post: Si definisca l insieme J come segue FineSpecifica J = {p 0 I p r.p r Prenotazione p r, r riferitoa p r, p 0 perposto result= I J ( denota la differenza insiemistica) Univ. La Sapienza Sede di LT, Ing. Informatica & Ing. Informazione, Prog. del SW 9 Univ. La Sapienza Sede di LT, Ing. Informatica & Ing. Informazione, Prog. del SW 10 Algoritmi per le operazioni dello use-case Adottiamo i seguenti algoritmi: Per l operazione costobiglietto: Fase di progetto per ogni link l di tipo biglietto in cui s è coinvolto se l.tipoposto=t return l.costo //il link l=<s,t> è unico, quindi appena trovato //l algoritmo termina return -1; //questo comando viene eseguito solo se non si è trovato //il link <s,t> (e cioè, se non è specificato un costo //per posti di tipo t per lo spettacolo s) Per l operazione postidisponibili: postiprenotati = new Insieme<Posti>; per ogni link l di tipo riferitaa in cui r è coinvolto per ogni link k di tipo perposto in cui l.prenotazione è coinvolta se k.posto appartiene ad I aggiungi k.posto a postiprenotati; return I - postiprenotati; Univ. La Sapienza Sede di LT, Ing. Informatica & Ing. Informazione, Prog. del SW 11 Univ. La Sapienza Sede di LT, Ing. Informatica & Ing. Informazione, Prog. del SW 12

Responsabilità sulle associazioni Strutture di dati La seguente tabella delle responsabilità si evince da: 1. i requisiti, 2. la specifica degli algoritmi per le operazioni di classe e use-case, 3. i vincoli di molteplicità nel diagramma delle classi. Associazione Classe ha resp. biglietto TipoPosto NO Spettacolo SÌ 2 ditipo Posto SÌ 3 TipoPosto NO perposto Prenotazione SÌ 2,3 Posto NO perpostodisabile Prenotazione SÌ 1 PostoDisabile NO riferitaa Prenotazione SÌ 3 Replica SÌ 2 perspettacolo Spettacolo SÌ 3 Replica SÌ 2 Univ. La Sapienza Sede di LT, Ing. Informatica & Ing. Informazione, Prog. del SW 13 Abbiamo la necessità di rappresentare collezioni omogenee di oggetti, a causa: dei vincoli di molteplicità 0..* delle associazioni, delle variabili locali necessarie per vari algoritmi. Per fare ciò, utilizzeremo l interfaccia Set, e la classe HashSet del collection framework di Java 1.5. Univ. La Sapienza Sede di LT, Ing. Informatica & Ing. Informazione, Prog. del SW 14 Corrispondenza fra tipi UML e Java Tabelle di gestione delle proprietà di classi UML Riassumiamo le nostre scelte nella seguente tabella di corrispondenza dei tipi UML. Tipo UML Intero Reale Positivo Stringa Insieme Data Ora Con gestione opportuna delle precondizioni. Rappresentazione in Java int float String HashSet Data Ora Riassumiamo le nostre scelte differenti da quelle di default mediante la tabella delle proprietà immutabili e la tabella delle assunzioni sulla nascita. Classe UML Classe UML Posto Posto Spettacolo Spettacolo Prenotazione Prenotazione Proprietà immutabile fila numero titolo regista cliente data Proprietà nota alla nascita non nota alla nascita Si assume di aver definito dei tipi di dato Java Data ed Ora. Univ. La Sapienza Sede di LT, Ing. Informatica & Ing. Informazione, Prog. del SW 15 Univ. La Sapienza Sede di LT, Ing. Informatica & Ing. Informazione, Prog. del SW 16

Altre considerazioni Sequenza di nascita degli oggetti: Non dobbiamo assumere una particolare sequenza di nascita degli oggetti. Fase di realizzazione Valori alla nascita: Non sembra ragionevole assumere che per qualche proprietà esistano valori di default validi per tutti gli oggetti. Univ. La Sapienza Sede di LT, Ing. Informatica & Ing. Informazione, Prog. del SW 17 Univ. La Sapienza Sede di LT, Ing. Informatica & Ing. Informazione, Prog. del SW 18 Considerazioni iniziali Struttura dei file e dei package Il compito richiede di realizzare solo quanto segue: 1. la classe UML TipoPosto; 2. la classe UML Spettacolo; 3. l associazione UML biglietto su cui ha responsabilità la classe Spettacolo ma non la classe TipoPosto; 4. il primo use case. Procederemo quindi ignorando tutte le altre classi, entità e casi d uso che non sono fra quelli menzionati sopra. \---AppTeatro TipoPosto.java Spettacolo.java TipoLinkBiglietto.java Prenotazione.java Replica.java TipoLinkPerSpettacolo.java ManagerPerSpettacolo.java TipoLinkRiferitaA.java ManagerReiferitaA.java EccezionePrecondizioni.java EccezioneMolteplicita.java Operazioni.java +---Posto Posto.java +---PostoDisabile PostoDisabile.java \---TipiDato Data.java Ora.java Univ. La Sapienza Sede di LT, Ing. Informatica & Ing. Informazione, Prog. del SW 19 Univ. La Sapienza Sede di LT, Ing. Informatica & Ing. Informazione, Prog. del SW 20

// File AppTeatro/TipoPosto.java La classe Java TipoPosto else return false; public class TipoPosto { private String descrizione; public TipoPosto (String d){ descrizione = d; public void settipoposto(string d){ descrizione = d; public String gettipoposto(){ return descrizione; //due oggetti di classe TipoPosto sono ugualiu se la loro //descrizione coincide public boolean equals(object o) { if (o!= null && getclass().equals(o.getclass())) { TipoPosto t = (TipoPosto)o; return t.descrizione == descrizione; Univ. La Sapienza Sede di LT, Ing. Informatica & Ing. Informazione, Prog. del SW 21 La classe Java TipoLinkBiglietto // File AppTeatro/TipoLinkBiglietto.java public class TipoLinkBiglietto { private final Spettacolo lospettacolo; private final TipoPosto iltipoposto; private final float costo; public TipoLinkBiglietto(Spettacolo q, TipoPosto p, float c) throws EccezionePrecondizioni { if (q == null p == null) // CONTROLLO PRECONDIZIONI throw new EccezionePrecondizioni ("Gli oggetti devono essere inizializzati"); if (c<=0) // CONTROLLO PRECONDIZIONI throw new EccezionePrecondizioni ("Il costo deve essere un reale positivo"); lospettacolo = q; iltipoposto = p; costo =c; public boolean equals(object o) { if (o!= null && getclass().equals(o.getclass())) { TipoLinkBiglietto b = (TipoLinkBiglietto)o; return b.iltipoposto == iltipoposto && b.lospettacolo == lospettacolo; else return false; Univ. La Sapienza Sede di LT, Ing. Informatica & Ing. Informazione, Prog. del SW 22 public int hashcode() { return lospettacolo.hashcode() + iltipoposto.hashcode(); public Spettacolo getspettacolo() { return lospettacolo; public TipoPosto gettipoposto() { return iltipoposto; public float getcosto() { return costo; public String tostring() { return "<" + lospettacolo + ", " + iltipoposto + ", " + costo + "Euro >";

// File AppTeatro/Spettacolo.java import java.util.*; La classe Java Spettacolo public class Spettacolo { private final String titolo; private final String regista; private HashSet<String> cast; private HashSet<TipoLinkBiglietto> biglietti; private static final int MIN_ATTORI = 1; public Spettacolo(String t, String r) { titolo = t; regista = r; cast = new HashSet<String>(); biglietti = new HashSet<TipoLinkBiglietto>(); public String gettitolo() { return titolo; public String getregista() { return regista; public void InserisciCast(String s) { if (s!= null) cast.add(s); Univ. La Sapienza Sede di LT, Ing. Informatica & Ing. Informazione, Prog. del SW 23 public Set<String> getcast(){ if(cast.size()>min_attori) throw new EccezioneMolteplicita("L insieme di attori che recitano nel film e vuoto"); return (HashSet<String>) cast.clone(); public void InserisciLinkBiglietto(TipoLinkBiglietto t) { if (t!= null && t.getspettacolo()==this) biglietti.add(t); public void EliminaLinkBiglietto(TipoLinkBiglietto t) { if (t!= null && t.getspettacolo()==this) biglietti.remove(t); public Set<TipoLinkBiglietto> getlinkbiglietto(){ return (HashSet<TipoLinkBiglietto>) biglietti.clone(); La classe Java Operazioni // File AppTeatro/Operazioni.java import java.util.*; public final class Operazioni { private Operazioni() { public static float costobiglietto(spettacolo s, TipoPosto t) { Set<TipoLinkBiglietto> biglietti = s.getlinkbiglietto(); Iterator<TipoLinkBiglietto> it = biglietti.iterator(); while(it.hasnext()) { TipoLinkBiglietto b = it.next(); if (b.gettipoposto() == t) return b.getcosto(); return -1; //... Univ. La Sapienza Sede di LT, Ing. Informatica & Ing. Informazione, Prog. del SW 24