Progettazione del Software



Похожие документы
Progettazione del Software A.A.2008/09

Progettazione del Software

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

Alessandra Raffaetà. Basi di Dati

Modello dei Dati ENTITÀ-RELAZIONE (ENTITY-RELATIONSHIP) é l insieme di concetti, simboli, regole che useremo per rappresentare il modello concettuale

Informatica (Basi di Dati)

Progettazione del Software. Emiliano Casalicchio. Dipartimento di Informatica e Sistemistica SAPIENZA Università di Roma Sede di Rieti

Esercitazione di Basi di Dati

Corso di Sistemi di Elaborazione delle Informazioni I Anno 2005/2006. Esercizi entità relazione risolti. a cura di Angela Campagnaro

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

Progettare una basi di dati vuole dire progettare la struttura dei dati e le applicazioni

Progetto PI , passo A.2 versione del 6 febbraio 2007

Modulo 4: Ereditarietà, interfacce e clonazione

Realizzazione di una classe con un associazione

Telerilevamento e GIS Prof. Ing. Giuseppe Mussumeci

Dalla progettazione concettuale alla modellazione di dominio

MODELLO RELAZIONALE. Introduzione

PROGETTAZIONE CONCETTUALE

Basi di dati. Le funzionalità del sistema non vanno però ignorate

Gli attributi di STUDENTE saranno: Matricola (chiave primaria), Cognome, Nome.

Cardinalità e identificatori. Informatica. Generalizzazioni. Generalizzazioni. Generalizzazioni. Generalizzazioni

Modello Relazionale. Modello Relazionale. Relazioni - Prodotto Cartesiano. Relazione: tre accezioni. Es. Dati gli insiemi

Progettaz. e sviluppo Data Base

Modellazione dei dati in UML

DB - Modello relazionale dei dati. DB - Modello Relazionale 1

Basi di dati. (Sistemi Informativi) teoria e pratica con Microsoft Access. Basi di dati. Basi di dati. Basi di dati e DBMS DBMS DBMS

Basi di dati. Il Modello Relazionale dei Dati. K. Donno - Il Modello Relazionale dei Dati

Definizione Un modello astratto è la rappresentazione formale di idee e conoscenze relative a un fenomeno.

Modello Relazionale dei DBMS - Vincoli Tradizionalmente, esistono quattro modelli logici: Gerarchico Reticolare Relazionale A oggetti XML I modelli

Università degli Studi di L Aquila. Facoltà di Ingegneria. Corso di Laurea in Ingegneria Elettronica Corso di Sistemi Informativi

Progettazione di Basi di Dati

Organizzazione degli archivi

Basi di dati. Concetti introduttivi ESEMPIO. INSEGNAMENTI Fisica, Analisi, Aule. Docenti. Entità Relazioni Interrogazioni. Ultima modifica: 26/02/2007

Database. Si ringrazia Marco Bertini per le slides

Corso di Basi di Dati A.A. 2014/2015

Soluzione dell esercizio del 2 Febbraio 2004

Rappresentazione grafica di entità e attributi

Basi di dati 9 febbraio 2010 Compito A

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Lezioni di Matematica 1 - I modulo

Claudia Raibulet

ALGEBRA DELLE PROPOSIZIONI

Progettazione Logica. Progettazione Logica

Programmi e Oggetti Software

Funzioni in C. Violetta Lonati

Traccia di soluzione dell esercizio del 25/1/2005

Il Modello Relazionale

Compito Sistemi Informativi LA. Tempo concesso : 90 minuti 25 Marzo 03 Nome: Cognome: Matricola: Esercizio 1

PROGETTAZIONE CONCETTUALE

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

Basi di dati. Maurizio Lenzerini. Dipartimento di Informatica e Sistemistica Antonio Ruberti Università di Roma La Sapienza. Anno Accademico 2011/2012

Lezione 4. Modello EER

Compito DA e BD. Tempo concesso: 90 minuti 12 giugno 03 Nome: Cognome: Matricola: Esercizio 1

Database 1 biblioteca universitaria. Testo del quesito

Corso di Informatica

I casi d uso corrispondono ai compiti che l attore (che può essere una persona fisica e non) può svolgere.

Database. Appunti di Amaranto Oronzo e Giancane Diego Lezione dell Ing. Lucia Vaira 24/04/2014

Progettazione di Database. Un Esempio

Database: collezione di fatti, registrabili e con un ben preciso significato, relazionati fra di loro

IL SISTEMA INFORMATIVO

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

Guida Compilazione Piani di Studio on-line

GENERALIZZAZIONE E SPECIALIZZAZIONE ISA 1

Object Oriented Software Design

Progettazione : Design Pattern Creazionali

Basi di dati. Concetti Introduttivi ESEMPIO. Fisica, Analisi, Informatica. Entità Relazioni Interrogazioni. Database 2

DFD DISPENSA DEL CORSO DI SISTEMI INFORMATIVI UNIVERSITÀ DEGLI STUDI DI VERONA FACOLTÀ DI MM.FF.NN LAUREA SPECIALISTICA IN INFORMATICA

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

PRENOTAZIONI APPELLI ON LINE tramite SOL-SegreteriaOnLine

Lo schema concettuale risultante dalla progettazione concettuale è l input alla fase di progettazione logica.

Gestione Voti Scolastici

Progettazione base dati relazionale

SAPIENZA Università di Roma, Facoltà di Ingegneria

Capitolo 2. Operazione di limite

Corrispondenze e funzioni

Università di Roma La Sapienza, Facoltà di Ingegneria

DIPARTIMENTO IMPIEGATO PROGETTO SEDE. (0,1) (1,1) DIREZIONE Cognome. Codice. Telefono (0,1) (1,N) AFFERENZA. Stipendio (0,N) Nome (1,1) Età

Alcune nozioni di base di Logica Matematica

ALGEBRA RELAZIONALE RIEPILOGO

CAPITOLO 7 ESERCIZI SUL MODELLO ER

SISTEMI INFORMATIVI AVANZATI -2010/ Introduzione

Basi Di Dati, 09/12/2003

progettare buone gerarchie

Elena Baralis 2013 Politecnico di Torino 1

Introduzione all Information Retrieval

Modulo 2 Data Base 2

!"#$%&&'()#*%+%+!"#$"',,'()#*%+ -")%*&'&'+'$.)+-$$%&&) !"#$%&&'(%)'*+%",#-%"#.'%&'#/0)-+#12"+3,)4+56#7+#.')8'9

Elementi di Algebra Relazionale

RIFERIMENTI ATTORI GLOSSARIO. ERRORI COMUNI REV. REQUISITI INGEGNERIA DEL SOFTWARE Università degli Studi di Padova

Il database management system Access

I Sistemi Informativi

Il modello relazionale

Associazioni. Informatica. Associazioni. Associazioni. Associazioni. Attributi. Possono esistere associazioni diverse che coinvolgono le stesse entità

Abilità Informatiche A.A. 2010/2011 Lezione 9: Query Maschere Report. Facoltà di Lingue e Letterature Straniere

Segreteria da campo. Database Relazionali

PROCESSO DI INDICIZZAZIONE SEMANTICA

Транскрипт:

L4.4 Progettazione del Software Emiliano Casalicchio Dipartimento di Informatica e Sistemistica SAPIENZA Università di Roma Sede di Rieti http://www.ce.uniroma2.it/courses/psw

Seconda Parte La fase di analisi I Class e Object diagram: Generalizzazioni Controllo qualità E.Casalicchio -- Progettazione del SW a.a. 2009/10 2

Generalizzazione in UML Fino ad ora abbiamo assunto che due classi siano sempre disgiunte. In realtà sappiamo che può accadere che tra due classi sussista la relazione is-a, e cioè che ogni istanza di una sia anche istanza dell altra. In UML la relazione is-a si modella mediante la nozione di generalizzazione La generalizzazione coinvolge una superclasse ed una o più sottoclassi (dette anche classi derivate). Il significato della generalizzazione è il seguente: ogni istanza di ciascuna sottoclasse è anche istanza della superclasse Quando la sottoclasse è una, la generalizzazione modella appunto la relazione is-a tra la sottoclasse e la superclasse E.Casalicchio -- Progettazione del SW a.a. 2009/10 3

Generalizzazione in UML Esempio di generalizzazione (siccome la generalizzazione coinvolge due classi, essa modella la relazione is-a): Generalizzazione (o relazione is-a) Libro Superclass e LibroStorico Sottoclasse E.Casalicchio -- Progettazione del SW a.a. 2009/10 4

Ereditarietà in UML Principio di ereditarietà: ogni proprietà della superclasse è anche una proprietà della sottoclasse, e non si riporta esplicitamente nel diagramma Dal fatto che 1. Ogni istanza di Libro ha un Titolo 2. Ogni istanza di LibroStorico è una istanza di Libro segue logicamente che 3. Ogni istanza di LibroStorico ha un Titolo Libro Titolo: stringa LibroStorico Epoca: stringa Titolo ereditato da Libro. Epoca ulteriore proprietà Ragionamento sillogistico (cfr. opera di Aristotele più di due millenni fa) E.Casalicchio -- Progettazione del SW a.a. 2009/10 5

Ereditarietà in UML: istanze Libro Titolo: stringa LibroStorico Epoca: stringa Instance-of s: LibroStorico Titolo = Odissea Epoca = greca s è istanza sia di LibroStorico (classe più specifica) sia di Libro non è più vero che due classi diverse sono disgiunte: Libro e LibroStorico non sono ovviamente disgiunte resta comunque vero che ogni istanza ha una ed una sola classe più specifica di cui è istanza; in questo caso la classe più specifica di s è LibroStorico s ha un valore per tutti gli attributi di LibroStorico, sia quelli propri, sia quelli ereditati dalla classe Libro E.Casalicchio -- Progettazione del SW a.a. 2009/10 6

Ereditarietà sulle associazioni Studente Nome: stringa Cognome: stringa Matricola: int Età: int StudenteStraniero Nazionalità: stringa esame Voto: int Corso Nome: stringa Disciplina: stringa 1. Ogni istanza di Studente può essere coinvolta in un numero qualunque di istanze della associazione esame 2. Ogni istanza di StudenteStraniero è una istanza di Studente quindi 3. Ogni istanza di StudenteStraniero può essere coinvolta in un numero qualunque di istanze della associazione esame E.Casalicchio -- Progettazione del SW a.a. 2009/10 7

Ereditarietà sulle molteplicità C1 A x..y D C2 1. Ogni istanza di C 1 è coinvolta in al minimo x e al massimo y istanze dell associazione A 2. Ogni istanza di C 2 è una istanza di C 1 quindi 3. Ogni istanza di C 2 è coinvolta in al minimo x e al massimo y istanze dell associazione A E.Casalicchio -- Progettazione del SW a.a. 2009/10 8

Esercizio 5: individuare gli errori Studente Matricola: int Età: int iscrizione 1..1 CorsoDiLaurea Nome: stringa StudenteStraniero Nazionalità: stringa residenza 1..1 Comune Nome: stringa f: CorsoDiLaurea s: StudenteStraniero Nazionalità = India t: Studente Matricola = 546723 Età = 21 iscrizione iscrizione residenza c: CorsoDiLaurea Nome = inginf d: Comune Nome = Tivoli iscrizione residenza Nome = ingele iscrizione v: StudenteStraniero Matricola = 1234 Età = 20 Nazionalità = India E.Casalicchio -- Progettazione del SW a.a. 2009/10 9

Soluzione dell esercizio 5 Studente CorsoDiLaurea Matricola: int Età: int iscrizione 1..1 Nome: stringa errori StudenteStraniero Nazionalità: stringa residenza 1..1 Comune Nome: stringa f: CorsoDiLaurea s: StudenteStraniero Nazionalità = India t: Studente Matricola = 546723 Età = 21 iscrizione iscrizione residenza c: CorsoDiLaurea Nome = inginf d: Comune Nome = Tivoli iscrizione residenza Nome = ingele iscrizione v: StudenteStraniero Matricola = 1234 Età = 20 Nazionalità = India E.Casalicchio -- Progettazione del SW a.a. 2009/10 10

Generalizzazione in UML Finora, abbiamo considerato la generalizzazione come mezzo per modellare la relazione is-a tra due classi. La superclasse però può anche generalizzare diverse sottoclassi rispetto ad un unico criterio (che si può indicare con un nome, che è il nome della generalizzazione) Generalizzazione Tra Maschio e Persona e tra Femmina e Persona sussiste la relazione is-a Maschio Persona sesso Femmina Superclass e nome della generalizzazione (non obbligatorio) Sottoclassi E.Casalicchio -- Progettazione del SW a.a. 2009/10 11

Diverse generalizzazioni della stessa classe La stessa superclasse può partecipare a diverse generalizzazioni Persona occupazione CodFiscale: stringa Età: int sesso Studente Lavoratore Maschio Femmina AnnoDiCorso: int Anzianità: int Sindacato: stringa {0..1} ServMilitare: bool Concettualmente, non c è alcuna correlazione tra due generalizzazioni diverse, perchè rispondono a due criteri diversi di classificare le istanze della superclasse E.Casalicchio -- Progettazione del SW a.a. 2009/10 12

Generalizzazioni disgiunte Una generalizzazione può essere disgiunta (le sottoclassi sono disgiunte a coppie) o no Persona occupazione CodFiscale: stringa Età: int {disjoint} sesso Studente Lavoratore Maschio Femmina AnnoDiCorso: int Anzianità: int Sindacato: stringa {0..1} ServMilitare: bool generalizzazione non disgiunta generalizzazione disgiunta E.Casalicchio -- Progettazione del SW a.a. 2009/10 13

Generalizzazioni complete Una generalizzazione può essere completa (l unione delle istanze delle sottoclassi è uguale all insieme delle istanze della superclasse) o no Persona occupazione CodFiscale: stringa Età: int {disjoint, complete} sesso Studente Lavoratore Maschio Femmina AnnoDiCorso: int Anzianità: int Sindacato: stringa {0..1} ServMilitare: bool generalizzazione non completa generalizzazione completa E.Casalicchio -- Progettazione del SW a.a. 2009/10 14

Generalizzazioni Livello intensionale C C Livello estensionale A B A B C C A {disjoint} B A B E.Casalicchio -- Progettazione del SW a.a. 2009/10 15

Generalizzazioni Livello intensionale Livello estensionale C A {complete} B A C B C {disjoint,complete} C A B A B E.Casalicchio -- Progettazione del SW a.a. 2009/10 16

Ereditarietà multipla Attenzione: poichè un oggetto è istanza di una sola classe più specifica, due sottoclassi non disgiunte possono avere istanze comuni solo se hanno una sottoclasse comune (ereditarietà multipla) Persona Questo oggetto è istanza di StudenteLavoratore, Studente, Lavoratore, e Persona CodFiscale: stringa Età: int occupazione s: StudenteLavoratore Studente AnnoDiCorso: int Lavoratore Anzianità: int Sindacato: stringa {0..1} CodFiscale = SWDBAS Età = 25 AnnoDiCorso = 3 Anzianità = 5 Sindacato = {} EsenzioneTasse = 0 Instance-of StudenteLavoratore EsenzioneTasse: int Ereditarietà multipla E.Casalicchio -- Progettazione del SW a.a. 2009/10 17

Differenza tra classi disgiunte e non disgiunte Da quanto detto, la differenza tra due classi mutuamente disgiunte e due classi non mutuamente disgiunte sta solo nel fatto che due classi disgiunte non possono avere sottoclassi comuni, mentre è possibile definire una classe come sottoclasse di due classi non disgiunte Persona occupazione CodFiscale: stringa Età: int {disjoint} sesso Studente Lavoratore Maschio Femmina AnnoDiCorso: int Anzianità: int Sindacato: stringa {0..1} ServMilitare: bool È possibile definire una classe (ad Esempio StudenteLavoratore) che è sottoclasse sia di Studente sia di Lavoratore Non è possibile definire una classe che è sottoclasse sia di Maschio sia di Femmina E.Casalicchio -- Progettazione del SW a.a. 2009/10 18

Il problema delle classi disgiunte (1) Consideriamo la gerarchia di generalizzazione seguente: Persona occupazione CodFiscale: stringa Età: int {disjoint} sesso Studente Lavoratore Maschio Femmina AnnoDiCorso: int Anzianità: int Sindacato: stringa {0..1} ServMilitare: bool Questo diagramma descrive una situazione in cui non possono essere definite istanze di Studenti che sono anche esplicite istanze di Maschio (o di Femmina), e istanze di Lavoratore che sono anche istanze esplicite di Maschio (o di Femmina) E.Casalicchio -- Progettazione del SW a.a. 2009/10 19

Il problema delle classi disgiunte (2) Se vogliamo definirle si può ristrutturare lo schema in due modi. Primo modo: Persona occupazione CodFiscale: stringa Età: int {disjoint} sesso Studente Lavoratore Maschio Femmina AnnoDiCorso: int Anzianità: int Sindacato: stringa {0..1} ServMilitare: bool StudenteMaschio LavoratoreMaschio StudenteFemmina LavoratoreFemmina E.Casalicchio -- Progettazione del SW a.a. 2009/10 20

Secondo modo: Il problema delle classi disgiunte (3) Persona CodFiscale: stringa Età: int {disjoint} sesso Maschio ServMilitare: bool Femmina occupazione occupazione StudenteMaschio LavoratoreMaschio StudenteFemmina LavoratoreFemmina AnnoDiCorso: int Anzianità: int Sindacato: stringa {0..1} AnnoDiCorso: int Anzianità: int Sindacato: stringa {0..1} E.Casalicchio -- Progettazione del SW a.a. 2009/10 21

Differenza tra due isa e una generalizzazione occupazione Persona CodFiscale: stringa Età: int Studente Lavoratore Straniero Anziano AnnoDiCorso: int Anzianità: int Sindacato: stringa {0..1} PaeseOrigine: stringa PaeseOrigine: stringa Le due sottoclassi derivano da uno stesso criterio di classificazione delle istanze della superclasse Le due sottoclassi sono indipendenti, nel senso che il loro significato non deriva dallo stesso criterio di classificazione delle istanze della superclasse E.Casalicchio -- Progettazione del SW a.a. 2009/10 22

Specializzazione In una generalizzazione la sottoclasse non solo può avere proprietà aggiuntive rispetto alla superclasse, ma può anche specializzare le proprietà ereditate dalla superclasse. Specializzazione di un attributo: Se una classe C 1 ha un attributo A di tipo T 1, e se C 2 è una sottoclasse di C 1, specializzare A in C 2 significa definire A anche in C 2 ed assegnargli un tipo T 2 i cui valori sono un sottoinsieme dei valori di T 1. Persona specializzazione dell attributo Età Età: 0..120 Anziano Età: 70..120 E.Casalicchio -- Progettazione del SW a.a. 2009/10 23

Specializzazione Specializzazione di una associazione: Se una classe C 1 partecipa ad una associazione R con un altra classe C 3, e se C 2 è una sottoclasse di C 1, specializzare R in C 2 significa: Definire una nuova associazione R 1 tra la classe C 2 e una classe C 4 che è sottoclasse di C 3 (al limite C 4 può essere la classe C 3 stessa) Stabilire una dipendenza di tipo {subset} da R 1 a R Definire eventualmente molteplicità più specifiche su R 1 rispetto alle corrispondenti molteplicità definite su R (si noti che la molteplicità massima su R 1 deve essere minore o uguale a quella su R) Cittadino nascita 0..1 Città Straniero {subset} nascita-estero 1..1 CittàEstera specializzazione di associazione ereditato E.Casalicchio -- Progettazione del SW a.a. 2009/10 24

Operazioni Finora abbiamo fatto riferimento solamente a proprietà statiche (attributi e associazioni) di classi. In realtà, le classi (e quindi le loro istanze) sono caratterizzate anche da proprietà dinamiche, che in UML si definiscono mediante le operazioni. Una operazione associata ad una classe C indica che sugli oggetti della classe C si può eseguire una computazione, cioè una elaborazione (detta anche metodo), o per calcolare le proprietà o per effettuare cambiamenti di stato (cioè per modificare le proprietà) una operazione Persona Nome: stringa DataNascita: data Età(oggi: data): int Definizione delle operazioni E.Casalicchio -- Progettazione del SW a.a. 2009/10 25

Definizione di una operazione In una classe, una operazione si definisce specificando la segnatura (nome, parametri e il tipo del eventuale risultato) e non il metodo (cioè non la specifica di cosa fa l operazione) alfa (X: T1,, Xn: Tn): T nome dell operazione nome del parametro classe o tipo del parametro parametri (o argomenti) classe o tipo del risultato E.Casalicchio -- Progettazione del SW a.a. 2009/10 26

Definizione di una operazione Non è necessario che una operazione restituisca un valore o un oggetto. Una operazione può anche solo effettuare azioni senza calcolare un risultato. In questo caso l operazione si definisce così: alfa (X: T1,, Xn: Tn) nome dell operazione nome del parametro classe o tipo del parametro parametri (o argomenti) E.Casalicchio -- Progettazione del SW a.a. 2009/10 27

Osservazioni sulle operazioni (1) Una operazione di una classe C è pensata per essere invocata facendo riferimento ad una istanza della classe C, chiamata oggetto di invocazione. Esempio di invocazione: p.età(oggi) (dove p è un oggetto della classe Persona). In altre parole, nell attivazione di ogni operazione, oltre ai parametri c è sempre implicitamente in gioco un oggetto (l oggetto di invocazione) della classe in cui l operazione è definita E.Casalicchio -- Progettazione del SW a.a. 2009/10 28

Osservazioni sulle operazioni (2) Attenzione: le operazioni che si definiscono sul modello di analisi sono le operazioni che caratterizzano concettualmente la classe. Altre operazioni, più orientate alla realizzazione del software (come ad esempio le operazioni che consentono di gestire gli attributi, ossia conoscerne o cambiarne il valore), non devono essere definite in questa fase E.Casalicchio -- Progettazione del SW a.a. 2009/10 29

Esercizio 6 Tracciare il diagramma delle classi corrispondenti alle seguenti specifiche: Si vogliono modellare gli studenti (con nome, cognome, numero di matricola, età), il corso di laurea in cui sono iscritti, ed i corsi di cui hanno sostenuto l esame, con il professore che ha verbalizzato l esame, ed il voto conseguito. Di ogni corso di laurea interessa il codice e il nome. Di ogni corso interessa il nome e la disciplina a cui appartiene (ad esempio: matematica, fisica, informatica, ecc.). Di ogni professore interessa codice ed età. Al momento dell iscrizione, lo studente specifica il corso di laurea a cui si iscrive. Dopo l effettuazione di un esame, il professore comunica l avvenuta verbalizzazione dell esame con i dati relativi (studente, corso, voto). La segreteria vuole periodicamente calcolare la media dei voti di uno studente, e il numero di studenti di un corso di laurea. E.Casalicchio -- Progettazione del SW a.a. 2009/10 30

Esercizio 6: soluzione Studente Nome: stringa Cognome: stringa Matricola: int Età: int Iscrizione(c: CorsoDiLaurea) MediaVoti( ): real Professore Codice: stringa Età: int Verbalizza (s: Studente, c: Corso, v: int) iscritto Esame Voto: int CorsoDiLaurea Nome: stringa Codice: stringa NumeroStud( ): int Corso Nome: stringa Disciplina: stringa E.Casalicchio -- Progettazione del SW a.a. 2009/10 31

Specializzazione di operazioni Oltre agli attributi e alle associazioni, anche le operazioni si possono specializzare nelle sottoclassi. Una operazione si specializza specializzando i parametri e/o il tipo di ritorno. Persona Nome: stringa DataNascita: data Età(oggi: data): 0..120 specializzazione dell operazione Età( ) Anziano Età(oggi: data): 70..120 Si noti che il metodo associato ad una operazione specializzata in una sottoclasse è in genere diverso dal metodo associato alla stessa operazione nella superclasse E.Casalicchio -- Progettazione del SW a.a. 2009/10 32

Osservazione sui tipi Finora abbiamo semplicemente assunto che si possano usare nel diagramma delle classi i tipi di dato semplici (come ad esempio int, stringa, ecc.) In realtà, si possono usare anche tipi di dato più complessi. Ad esempio si possono usare tipi definibili attraverso costruttori come Record, Insieme, Lista, ecc. E.Casalicchio -- Progettazione del SW a.a. 2009/10 33

Osservazione sui tipi (2) Ad esempio, si può usare il tipo indirizzo come record con campi strada (di tipo stringa) e numero civico (di tipo int) Oppure, si può usare il tipo data come record con campi giorno (di tipo 1..31), mese (di tipo 1..12) e anno (di tipo int). E.Casalicchio -- Progettazione del SW a.a. 2009/10 34

Semantica dei diagrammi delle classi: riassunto E.Casalicchio -- Progettazione del SW a.a. 2009/10 35

Aspetti metodologici nella costruzione del diagramma delle classi Un metodo comunemente usato per costruire il diagramma delle classi prevede i seguenti passi Individua le classi e gli oggetti di interesse Individua gli attributi delle classi Individua le associazioni tra classi Individua gli attributi delle associazioni Determina le molteplicità di associazioni e attributi Individua le generalizzazioni, partendo o dalla classe più generale e scendendo nella gerarchia, oppure dalle classi più specifiche e risalendo nella gerarchia Determina le specializzazioni Individua le operazioni ed associale alle classi Controllo di qualità Correggi, modifica, estendi E.Casalicchio -- Progettazione del SW a.a. 2009/10 36

Controllo di qualità sul diagramma delle classi È stata fatta una scelta oculata su come modellare i vari concetti? Se con attributi o con classi Se con classi o con associazioni Sono stati colti tutti gli aspetti importanti delle specifiche? Si è verificato che le generalizzazioni non formano cicli? Le specializzazioni sono corrette? Si possono applicare ulteriori generalizzazioni? Ci sono classi che sono sottoinsiemi di classi disgiunte? E.Casalicchio -- Progettazione del SW a.a. 2009/10 37

Scelta tra attributi e classi La scelta deve avvenire tenendo presente le seguenti differenze tra classi e tipi E.Casalicchio -- Progettazione del SW a.a. 2009/10 38

Un concetto verrà modellato come una classe Scelta tra attributi e classi se le sue istanze hanno vita propria se le sue istanze possono essere identificate indipendentemente da altri oggetti se ha o si prevede che avrà delle proprietà indipendenti dagli altri concetti Se su di esso si predica nello schema concettuale un attributo se le sue istanze non hanno vita propria se ha senso solo per rappresentare proprietà di altri concetti se non si predica su di esso nello schema E.Casalicchio -- Progettazione del SW a.a. 2009/10 39

Scelta tra attributi e classi Le scelte possono cambiare durante l analisi. Esempio: Persona Nome: stringa Cognome: stringa CittaNascita: stringa Interessa anche la regione: Città diventa una classe Persona nascita 1..1 Città Nome: stringa Cognome: stringa Nome: stringa Regione: stringa E.Casalicchio -- Progettazione del SW a.a. 2009/10 40

Scelta tra classi e associazione Un concetto verrà modellato come una classe se le sue istanze hanno vita propria se le sue istanze possono essere identificate indipendentemente da altri oggetti se ha o si prevede che avrà delle associazioni con altri concetti una associazione se le sue istanze rappresentano n-ple di altre istanze se non ha senso pensare alla partecipazione delle sue instanze ad altre associazioni E.Casalicchio -- Progettazione del SW a.a. 2009/10 41

Scelta tra classi e associazioni Le scelte possono cambiare durante l analisi. Esempio: Giocatore Nome: stringa Cognome: stringa contratto DataFirma: Data 0..1 Squadra Nome: stringa Città: stringa Interessa anche il procuratore (con codice ed età), se c è: Contratto diventa una classe Giocatore Nome: stringa Cognome: stringa 1..1 0..1 firma Non esistono due istanze della classe Contratto connesse alla stessa coppia di Giocatore e Squadra Contratto DataFirma: Data procura con 1..1 0..1 Squadra Nome: stringa Città: stringa Procuratore Codice: stringa Età. intero E.Casalicchio -- Progettazione del SW a.a. 2009/10 42

Verifiche sulle generalizzazioni Il grafo delle generalizzazioni non può contenere cicli! A C B Ciclo nel grafo delle generalizzazioni: le classi C, B e D hanno le stesse istanze! D E.Casalicchio -- Progettazione del SW a.a. 2009/10 43

Verifiche sulle specializzazioni Specializzazione di un attributo: se una classe C 1 ha un attributo A di tipo T 1, se C 2 è una sottoclasse di C 1, e se A è specializzato in C 2, allora il tipo assegnato ad A in C 2 deve essere un tipo T 2 i cui valori sono un sottoinsieme dei valori di T 1. Specializzazione di una associazione: se una classe C 1 partecipa ad una associazione R con un altra classe C 3, se C 2 è una sottoclasse di C 1, ed R è specializzata in C 2 in una associazione R 1 con C 4 allora: tra R 1 ed R deve esserci una dipendenza di tipo {subset} per R 1 deve essere definita una molteplicità massima uguale o più ristretta che per R C 4 è una sottoclasse di C 3 (al limite C 3 e C 4 sono uguali) E.Casalicchio -- Progettazione del SW a.a. 2009/10 44

Si possono applicare ulteriori generalizzazioni? È bene verificare che gli attributi siano stati associati alle classi giuste in una generalizzazione Persona Persona Età: int sesso sesso Maschio Femmina Maschio Femmina Età: int Età: int E.Casalicchio -- Progettazione del SW a.a. 2009/10 45

Si possono applicare ulteriori generalizzazioni? È bene verificare se non sia il caso di introdurre nuove classi generalizzazioni Persona Maschio Età: int Femmina Età: int Età: int sesso Maschio Femmina E.Casalicchio -- Progettazione del SW a.a. 2009/10 46

La specifica Lo schema concettuale viene alla fine corredato da una specifica per ogni Classe una specifica per ogni Use Case La specifica di una classe ha lo scopo di definire precisamente il comportamento di ogni operazione della classe La specifica di un Use Case ha lo scopo di definire precisamente il comportamento di ogni operazione di cui lo Use Case è costituito E.Casalicchio -- Progettazione del SW a.a. 2009/10 47

Specifica di una classe La specifica di una classe C ha la seguente forma: InizioSpecificaClasse C Specifica della operazione 1 Specifica della operazione N FineSpecifica E.Casalicchio -- Progettazione del SW a.a. 2009/10 48

Specifica di un Use Case La specifica di un Use Case si fornisce facendo la lista delle operazioni (una o più) che costituiscono lo Use Case stesso, e fornendo poi la specifica di ogni operazione. La specifica di un Use Case D ha la seguente forma: InizioSpecificaUseCase D Specifica della operazione 1 Specifica della operazione N FineSpecifica E.Casalicchio -- Progettazione del SW a.a. 2009/10 49

Specifica di una operazione Che sia una operazione di una classe o una operazione di un Use Case, la specifica di una operazione ha la seguente forma: alfa (X: T1,, Xn: Tn): T pre: condizione post: condizione alfa (X: T1,, Xn: Tn): T è la segnatura dell operazione (T può mancare), pre rappresenta la precondizione dell operazione, cioè l insieme delle condizioni (a parte quelle già stabilite dalla segnatura) che devono valere prima di ogni esecuzione della operazione post rappresenta le postcondizioni della operazione, cioè l insieme delle condizioni che devono valere alla fine di ogni esecuzione della operazione E.Casalicchio -- Progettazione del SW a.a. 2009/10 50

Esempio di specifica di una operazione Studente Nome: stringa Cognome: stringa Matricola: int Età: int Iscrizione(c: Corso dilaurea) MediaVoti( ): real iscritto CorsoDiLaurea Nome: stringa Codice: stringa NumeroStud( ): int InizioSpecificaClasse CorsoDiLaurea NumeroStud() : int pre : nessuna post : result è uguale al numero di studenti iscritti nel corso di laurea this FineSpecifica E.Casalicchio -- Progettazione del SW a.a. 2009/10 51

Precondizioni e postcondizioni Nella specifica di una operazione, nella precondizione si usa this per riferirsi all oggetto di invocazione della operazione Nella specifica di una operazione, nella postcondizione si usa this per riferirsi all oggetto di invocazione della operazione nello stato corrispondente alla fine della esecuzione della operazione result per riferirsi al risultato restituito dalla esecuzione della operazione pre(alfa) per riferirsi al valore della espressione alfa nello stato corrispondente alla precondizione E.Casalicchio -- Progettazione del SW a.a. 2009/10 52

Esempio di diagramma delle classi Studente Matricola: int Età: int NumEsami: int Iscrizione(c: CorsoDiLaurea) MediaVoti( ): real iscritto 0..1 CorsoDiLaurea Nome: stringa Codice: stringa NumeroStud( ): int Professore Corso Codice: stringa Età: int NumVerb: int Esame Voto: int Nome: stringa Disciplina: stringa Verbalizza (s: Studente, c: Corso, v: int) E.Casalicchio -- Progettazione del SW a.a. 2009/10 53

Esempio di specifica di classi InizioSpecificaClasse Professore Verbalizza(s: Studente, c: Corso, v: int) pre : s non ha ancora sostenuto l esame c, e 18 v 31 post : this, s e c sono collegati da un link di tipo Esame, con voto v. Inoltre vale che s.numesami = pre(s.numesami) + 1, e this.numverb = pre(this.numverb) + 1 FineSpecifica InizioSpecificaClasse Studente Iscrizione(c: CorsoDiLaurea) pre : this non è iscritto ad alcun CorsoDiLaurea post : this è iscritto al CorsoDiLaurea c, MediaVoti() : real pre : this.numesami > 0 post : result è la media dei voti degli esami sostenuti da this FineSpecifica E.Casalicchio -- Progettazione del SW a.a. 2009/10 54

Specifica mediante una notazione formale InizioSpecificaClasse Professore Verbalizza(s: Studente, c: Corso, v: int) pre : ( p p Professore <s,p,c> Esame) 18 v 31 post : FineSpecifica Esame = pre(esame) {<s,this,c>} Esame.voto(s,this,c) = v s.numesami = pre(s.numesami) + 1 this.numverb = pre(this.numverb) + 1 E.Casalicchio -- Progettazione del SW a.a. 2009/10 55

Specifica mediante una notazione formale (2) InizioSpecificaClasse Studente Iscrizione(c: CorsoDiLaurea) pre : ( c2 <this,c2> iscritto) post : iscritto = pre(iscritto) {<this,c>} MediaVoti() : real pre : ( c c CorsoDiLaurea <this,c> iscritto) this.numesami > 0 post : definiamo Voti come l insieme {<c,v > int p p Professore c Corso <this,p,c> Esame Esame.voto (this,p,c) = v} FineSpecifica result = Σ <c,v> Voti v this.numesami E.Casalicchio -- Progettazione del SW a.a. 2009/10 56

Esercizio Scrivere la specifica delle seguenti operazioni usando una notazione formale: Operazione NumeroStud() della classe CorsoDiLaurea E.Casalicchio -- Progettazione del SW a.a. 2009/10 57

Soluzione InizioSpecificaClasse CorsoDiLaurea NumeroStud():int pre : true post : result = card({ s s Studente <s,this> iscritto}) FineSpecifica E.Casalicchio -- Progettazione del SW a.a. 2009/10 58