Progettazione del Software

Documenti analoghi
SOLUZIONE. Requisiti. Requisiti (cont.) Requisiti (cont.)

SOLUZIONE. Requisiti. Requisiti (cont.) Requisiti (cont.) Sapienza - Università di Roma Facoltà di Ingegneria

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

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

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

SAPIENZA Università di Roma, Facoltà di Ingegneria

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

SAPIENZA Università di Roma, Facoltà di Ingegneria

La fase di realizzazione. Realizzazione di una classe UML con soli attributi. Traduzione in Java del diagramma delle classi

Eccezioni. Comportamento di default (esempio) Propagazione delle eccezioni

SAPIENZA Università di Roma, Facoltà di Ingegneria

Fasi del ciclo di vita del software (riassunto)

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

A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas

Università di Roma La Sapienza Facoltà di Ingegneria

Esercizio: Lista Circolare

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

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

Sapienza - Università di Roma Facoltà di Ingegneria dell Informazione Corso di Laurea in Ingegneria Informatica

Realizzazione di una classe con un associazione

STRUTTURE DATI: OLTRE GLI ARRAY LISTE

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

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

Principi di Progettazione del Software a.a

Esercitazione 2. Corso di Tecniche di Programmazione

Corso di Fondamenti di Informatica I

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

Programmazione ad Oggetti. Java Parte II

Principi di Progettazione del Software. Principi di Progettazione del Software a.a

OCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali. Esempio Animali

Esempio: Interfacce. Gioco Interfacce

Polimorfismo parametrico vs polimorfismo per inclusione

GESTIONE DEGLI ERRORI

Modelli e strumenti per la generazione automatica di codice

Esempio: Interfacce. Gioco Interfacce

Progetto E versione del 12 marzo 2007

Alcuni diagrammi. OCL (Object Constraint Language)

La classe Object. Ce li ha anche HelloWorld!!!

Insegnamento di Basi di Dati

La classe java.lang.object

FONDAMENTI DI INFORMATICA C Linguaggio Java: Eccezioni

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

Università degli Studi di Roma La Sapienza, Facoltà di Ingegneria. Corso di INGEGNERIA DEL SOFTWARE (Ing. Informatica, Nuovo Ordinamento)

Esercitazione n 2. Obiettivi

Espressioni: da dove si parte. Critiche al modello. Critiche al modello. Critiche al modello. Risultato. Fondamenti di Informatica T2 Modulo 2

Strutture dati. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Catia Trubiani. Laboratorio di Ingegneria del Software a.a

Diagrammi di classe e sistemi orientati agli oggetti

Ereditarietà (ultima)

Progettazione del Software

Fondamenti di Informatica T2 Modulo 2. Corso di Laurea in Ingegneria Informatica Anno accademico 2008/2009. Enumerativi

Programmazione a oggetti

Esempio 2: Subtyping

Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I)

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Esempi in Java di program.ne O-O

Alberi Binario in Java

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

Esercitazione. Docente Ing. Mariateresa Celardo

Fondamenti di Informatica I

RICHIAMI DI PROGRAMMAZIONE A OGGETTI. Corso di Informatica Medica

Programmazione I. 11 gennaio Considerate la seguente gerarchia di classi (rappresentata mediante un diagramma UML): +f(double x):

Riassunto. La programmazione OO. Oggi. Esempio

Programmazione ad oggetti Prova scritta 15 Gennaio 2013

16 - Ereditarietà, tipi e gerarchie

16 - Ereditarietà, tipi e gerarchie

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali

Astrazioni sui dati : Specifica di Tipi di Dato Astratti in Java

Il diagramma delle classi è raffigurato in Figura 1, insieme alla descrizione della responsabilità sulle associazioni.

Corso sul linguaggio Java

Ereditarietà e Polimorfismo

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali. Esempio Animali

Generics & Collections

Laboratorio 9 ( Java 4 ) Classe astratta per BFS su grafo

RETI DI CALCOLATORI Linguaggio Java: Eccezioni

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Alma Mater Studiorum Università di Bologna. Scuola di Ingegneria e Architettura. Tecnologie Web T. Esercitazione Riepilogo

Studente (Cognome Nome):

Alma Mater Studiorum Università di Bologna. Scuola di Ingegneria e Architettura. Tecnologie Web T. Esercitazione 09 Riepilogo

Progetto PI , passo A.1 versione del 10 aprile 2007

Prova d Esame Compito A

Progetto PI , passo A.3 versione del 28 marzo 2007

Riassunto: cos è la OOP? classi astratte, interfacce, classi interne. Scaletta. Figura con area()? Figura senza area()? Stefano Mizzaro 1.

Compute engine generici in RMI

Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

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

Gestione delle eccezioni

18 - Classi parzialmente definite: Classi Astratte e Interfacce

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Riassunto. I mattoni di base di un programma Java. Oggi. Un programma complicato. Oggi. Perché è complicato? Stefano Mizzaro 1.

Programmazione orientata agli oggetti Classi astratte e interfacce

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

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

Laboratorio di Programmazione 1 [Java]

Oggetti e classi. Cos è un oggetto

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Transcript:

Progettazione del Software Simulazione di esame Domenico Fabio Savo Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio Ruberti Sapienza Università di Roma Anno Accademico 2015/2016

Requisiti L applicazione da progettare riguarda la gestione di un agenzia immobiliare che si occupa della vendita di immobili siti in città facendo da intermediaria fra proprietari ed acquirenti, che sono entrambi clienti dell agenzia. Di ciascun immobile interessa l indirizzo (via e numero civico), il piano, i metri quadri, la scala (opzionale), il prezzo di vendita, ed il proprietario (uno solo). Ciascun proprietario è caratterizzato dal nome, dal cognome, dalla data di nascita, dal numero di telefono e dagli immobili che possiede (almeno uno). L agenzia classifica come acquirenti tutti i clienti che si rivolgono ad essa per acquistare un immobile. Si noti che un proprietario di un immobile può risultare anche acquirente se interessato all acquisto di altri immobili. Degli acquirenti interessa il nome, il cognome ed il numero di telefono. Domenico Fabio Savo Progettazione del Software 2

Requisiti (cont.) Gli acquirenti visitano gli immobili su appuntamento, di cui interessa la data, l ora, l acquirente per il quale è stato fissato (uno solo) e l immobile oggetto dell appuntamento (uno solo). Ovviamente, un acquirente deve poter visitare anche più di una volta lo stesso immobile. Sugli immobili gli acquirenti possono presentare offerte di acquisto. Di ciascuna offerta interessa la data, l importo, l immobile a cui si riferisce e l acquirente che la effettua. Ovviamente, un acquirente deve poter effettuare anche più di una offerta per lo stesso immobile. Delle offerte accettate interessa inoltre la data in cui si stabilisce di stipulare il rogito. Domenico Fabio Savo Progettazione del Software 3

Requisiti (cont.) L agente immobiliare utente dell applicazione è interessato ad effettuare alcuni controlli. In particolare: dato un insieme I di offerte di acquisto, restituire l insieme degli acquirenti che hanno presentato offerte fra quelle contenute in I che risultano accettate; data un offerta o per un immobile i, restituire l insieme di appuntamenti che l acquirente che presenta l offerta o ha preso per visionare l immobile i. Domenico Fabio Savo Progettazione del Software 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. Domanda 3. Svolgere la fase di realizzazione, producendo un programma Java e motivando, qualora ce ne fosse bisogno, le scelte effettuate. Domenico Fabio Savo Progettazione del Software 5

Requisiti (cont.) È obbligatorio realizzare in Java solo i seguenti aspetti dello schema concettuale: le classi Offerta ed Acquirente, le associazioni che legano Offerta ed Acquirente, e le loro eventuali superclassi e/o sottoclassi. Nella realizzazione si ignorino tutte le altre associazioni a cui le classi menzionate partecipano; la prima operazione dello use case; il codice di classi eccezione eventualmente usate per la realizzazione dei punti precedenti. Domenico Fabio Savo Progettazione del Software 6

SOLUZIONE Domenico Fabio Savo Progettazione del Software 7

Fase di analisi Domenico Fabio Savo Progettazione del Software 8

Diagramma delle classi Domenico Fabio Savo Progettazione del Software 9

Diagramma degli use case Domenico Fabio Savo Progettazione del Software 10

Specifica dello use case InizioSpecificaUseCase Operazioni acquirentiofferteaccettate (I: Insieme Offerte ): Insieme Acquirenti pre: nessuna post: result è l insieme degli acquirenti che hanno presentato offerte fra quelle contenute in I che sono istanze di OffertaAccettata appuntamentiimmobileconofferta (o: Offerta): Insieme Appuntamenti pre: nessuna post: sia i l immobile a cui o si riferisce, ed a l acquirente che presenta o, result è l insieme di appuntamenti che a ha preso per vedere i FineSpecifica Domenico Fabio Savo Progettazione del Software 11

Fase di progetto Domenico Fabio Savo Progettazione del Software 12

Algoritmi per le operazioni dello use-case Adottiamo i seguenti algoritmi: Per l operazione acquirentiofferteaccettate: result = new Insieme<Acquirenti>; per ogni offerta o contenuta in I se o appartiene a OffertaAccettata sia l il link di tipo effettuatada in cui o è coinvolta aggiungi l.acquirente a result; return result; Domenico Fabio Savo Progettazione del Software 13

Per l operazione appuntamentiimmobileconofferta: result = new Insieme<Appuntamenti>; sia l il link di tipo peracquisto in cui o è coinvolta Immobile i = l.immobile; sia ll il link di tipo effettuatada in cui o è coinvolta Acquirente a = ll.acquirente; per ogni link k di tipo fissatoda in cui a è coinvolto sia kk il link di tipo pervisita in cui k.appuntamento è coinvolto se kk.immobile=i aggiungi k.appuntamento a result; return result;

Responsabilità sulle associazioni 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. possiede Proprietario SÌ 3 Immobile SÌ 3 pervisita Appuntamento SÌ 2,3 Immobile NO peracquisto Offerta SÌ 2,3 Immobile NO effettuatada Offerta SÌ 2,3 Acquirente NO fissatoda Appuntamento SÌ 3 Acquirente SÌ 2 Domenico Fabio Savo Progettazione del Software 14

Strutture di dati 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. Domenico Fabio Savo Progettazione del Software 15

Corrispondenza fra tipi UML e Java Riassumiamo le nostre scelte nella seguente tabella di corrispondenza dei tipi UML. Tipo UML intero reale Stringa Insieme data ora Rappresentazione in Java int float String HashSet Data Ora Si assume di aver definito dei tipi di dato Java Data ed Ora. Domenico Fabio Savo Progettazione del Software 16

Tabelle di gestione delle proprietà di classi UML Riassumiamo le nostre scelte differenti da quelle di default mediante la tabella delle proprietà immutabili e la tabella delle assunzioni sulla nascita. Classe UML Cliente Cliente Offerta Offerta Proprietà immutabile nome cognome dataoff importo Proprietà Classe UML nota alla nascita non nota alla nascita Si ricorda che di default tutte le proprietà sono mutabili; le proprietà singole sono note alla nascita le proprietà multiple non sono note alla nascita. Domenico Fabio Savo Progettazione del Software 17

Altre considerazioni Valori alla nascita: Non sembra ragionevole assumere che per qualche proprietà esistano valori di default validi per tutti gli oggetti. Domenico Fabio Savo Progettazione del Software 18

Fase di realizzazione Domenico Fabio Savo Progettazione del Software 19

Considerazioni iniziali Il compito richiede di realizzare solo quanto segue: 1. la classe UML Offerta; 2. la classe UML OffertaAccettata; 3. la classe UML Acquirente; 4. la classe UML Cliente; 5. l associazione UML effettuatada su cui ha responsabilità Offerta ma non Acquirente; 6. la prima operazione dello use case; 7. la classe Java EccezioneMolteplicita. Procederemo quindi ignorando tutte le altre classi, entità e casi d uso che non sono fra quelli menzionati sopra. Domenico Fabio Savo Progettazione del Software 20

Struttura dei file e dei package \---AppAgenziaImm Appuntamento.java Immobile.java TipoLinkPossiede.java TipoLinkFissatoDa.java EccezionePrecondizioni.java EccezioneMolteplicita.java Operazioni.java +---Cliente Cliente.java +---Acquirente Acquirente.java +---Proprietario Proprietario.java +---Offerta Offerta.java ---OffertaAccettata OffertaAccettata.java \---TipiDato Data.java Ora.java Domenico Fabio Savo Progettazione del Software 21

La classe Java Cliente package AppAgenziaImm.Cliente; import AppAgeziaImm.*; import java.util.*; public abstract class Cliente { protected final String nome; protected final String cognome; protected String telefono; public Cliente(String n, String c) { nome = n; cognome = c; public String getnome() { return nome; public String getcognome() { return cognome; public void settelefono(string t) { telefono = t; public String gettelefono() { return telefono; Domenico Fabio Savo Progettazione del Software 22

La classe Java Acquirente package AppAgenziaImm.Acquirente; import AppAgenziaImm.Cliente.*; import AppAgenziaImm.*; import java.util.*; public class Acquirente extends Cliente { public Acquirente(String n, String c) { super(n,c); Domenico Fabio Savo Progettazione del Software 23

package AppAgenziaImm.Offerta; import AppAgenziaImm.*; import AppAgenziaImm.TipiDato.*; import java.util.*; public class Offerta { protected final Data dataoff; protected final float importo; protected Acquirente offerente; protected static final int MOLT_MIN = 1; public Offerta(Data d, float i) { dataoff = d; importo = i; La classe Java Offerta public Data getdata() { return data; public float getimporto() { return importo; public void setofferente(acquirente a) { offerente = a; public Acquirente getofferente() throws EccezioneMolteplicita { if (offerente == NULL) throw new EccezioneMolteplicita("molteplicita minima violata"); return offerente; Domenico Fabio Savo Progettazione del Software 24

La classe Java OffertaAccettata package AppAgenziaImm.OffertaAccettata; import AppAgenziaImm.Offerta.*; import AppAgenziaImm.*; import java.util.*; import AppAgenziaImm.TipiDato.*; public class OffertaAccettata extends Offerta { protected Data datarogito; public OffertaAccettata(Data d, float i) { super(d,i); public void setdatarogito(data d){ datarogito =d; public Data getdatarogito(){ return datarogito; Domenico Fabio Savo Progettazione del Software 25

Realizzazione in Java degli use case package AppAgenziaImm; import AppAgenziaImm.Offerta.*; import AppAgenziaImm.OffertaAccettata.*; import AppAgenziaImm.Acquirente.*; import AppAgenziaImm.Proprietario.*; import java.util.*; public final class Operazioni { private Operazioni() { public static Set<Acquirenti> acquirentiofferteaccettate(set<offerte> I) throws EccezioneMolteplicita{ HashSet<Acquirenti> result = new HashSet<Acquirenti>(); Iterator<Offerte> it = I.iterator(); while(it.hasnext()) { Offerta o = it.next(); if (o instanceof OffertaAccettata) result.add(o.getofferente); return result; //... Domenico Fabio Savo Progettazione del Software 26

La classe EccezioneMolteplicita package AppAgenziaImm; public class EccezioneMolteplicita extends Exception { private String messaggio; public EccezioneMolteplicita(String m) { messaggio = m; public EccezioneMolteplicita() { messaggio = "Si e verificata una violazione delle molteplicità"; public String tostring() { return messaggio; Domenico Fabio Savo Progettazione del Software 27