Progettazione del Software A.A.2008/09



Documenti analoghi
Progettazione del Software

Progettazione del Software

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

Progettazione del Software Analisi

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

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

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

Modellazione dei dati in UML

Informatica Industriale Modello funzionale Casi d uso

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

Funzioni in C. Violetta Lonati

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

Informatica (Basi di Dati)

Dalla progettazione concettuale alla modellazione di dominio

Raccolta dei Requisiti con i Casi D'uso. Corso di Ingegneria del Software Anno Accademico 2012/13

Progettaz. e sviluppo Data Base

Soluzione dell esercizio del 2 Febbraio 2004

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

Esercitazione di Basi di Dati

Ingegneria del Software 5. Esercizi sui casi d uso. Dipartimento di Informatica Università di Pisa A.A. 2014/15

Sequence Diagram e Collaboration Diagram

Concetti di base di ingegneria del software

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

ALGEBRA DELLE PROPOSIZIONI

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. Le funzionalità del sistema non vanno però ignorate

Università di Roma La Sapienza, Facoltà di Ingegneria

Informatica Industriale Modello funzionale: Informazione Progettazione concettuale

Sistemi Informativi I Caso di studio con applicazione di UML

Object Oriented Software Design

UML Diagrammi delle classi. UML Diagramma classi 1

PRENOTAZIONI APPELLI ON LINE tramite SOL-SegreteriaOnLine

Regione Piemonte Portale Rilevazioni Crediti EELL Manuale Utente

Gestione del workflow

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

Telerilevamento e GIS Prof. Ing. Giuseppe Mussumeci

La Progettazione Concettuale

Progetto PC versione del 11 luglio 2007

Traccia di soluzione dell esercizio del 25/1/2005

Comunità on Line Manuale Utente. Fascicolo 1. Come iscriversi a Comunità On Line. Versione 1.1

Introduzione alla programmazione in C

Il Modello Relazionale

Gestione degli appelli e verbalizzazione degli esami online GUIDA DOCENTI. (versione 1.0 del )

connessioni tra i singoli elementi Hanno caratteristiche diverse e sono presentati con modalità diverse Tali relazioni vengono rappresentate QUINDI

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

Guida Compilazione Piani di Studio on-line

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

Strumenti di modellazione. Gabriella Trucco

Activity Diagrams. Ing. Orazio Tomarchio

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

Corso di Informatica

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

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

Capitolo 13. Interrogare una base di dati

Alessandra Raffaetà. Basi di Dati

Object Oriented Programming

Indice generale. OOA Analisi Orientata agli Oggetti. Introduzione. Analisi

Artifact Centric Business Processes (I)

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

IL SISTEMA INFORMATIVO

Uso di base delle funzioni in Microsoft Excel

Soluzione dell esercizio del 12 Febbraio 2004

LA GESTIONE DELLE VISITE CLIENTI VIA WEB

Progettazione di Database. Un Esempio

Elementi di UML (7): Diagrammi dei componenti e di deployment

PROGETTAZIONE CONCETTUALE

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

Corso sul linguaggio SQL

Esempio 1: CarMatch. Direzione centrale Sedi centrali per ogni paese Concessionarie locali di franchising UML 2

Join in SQL (primo modo) Informatica. Tabella Dipartimento. Interrogazione 4a. Interrogazione 4b. Interrogazione 4a

MANUALE MOODLE STUDENTI. Accesso al Materiale Didattico

Concetto di Funzione e Procedura METODI in Java

Studente: SANTORO MC. Matricola : 528

MODELLO RELAZIONALE. Introduzione

LABORATORIO DI PROGRAMMAZIONE EDIZIONE 1, TURNO B

SCRUTINIO ON LINE 2 PERIODO

INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI

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

ING SW. Progetto di Ingegneria del Software. e-travel. Requisiti Utente. Specifiche Funzionali del Sistema

Fasi di creazione di un programma

APPUNTI DI MATEMATICA ALGEBRA \ INSIEMISTICA \ TEORIA DEGLI INSIEMI (1)

Programmi e Oggetti Software

Sequenza alternativa degli eventi: Variazione di prezzo superiore al 20% per almeno un articolo.

MODELLO E/R. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Progettazione del Software

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti

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

Metodologie di programmazione in Fortran 90

Università degli Studi di Parma Facoltà di Scienze MM. FF. NN. Corso di Laurea in Informatica. Ingegneria del Software. La fase di Analisi

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

Ingegneria del Software 11. Esercizi riassuntivi. Dipartimento di Informatica Università di Pisa A.A. 2014/15

Sviluppata da: Lo Russo - Porcelli Pag. 1 di 6 6FRSR utilizzare il DBMS Postgresql per imparare il linguaggio SQL.

object oriented analysis

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

Generazione Automatica di Asserzioni da Modelli di Specifica

Progetto di Applicazioni Software


Basi di dati. Esercizi sul modello E.R.

Realizzazione di una classe con un associazione

Lezioni di Matematica 1 - I modulo

Transcript:

Laurea in Ing. Informatica ed Ing. dell Informazione Sede di latina Progettazione del Software A.A.2008/09 Domenico Lembo* Dipartimento di Informatica e Sistemistica A. Ruberti SAPIENZA Università di Roma http://www.dis.uniroma1.it/~lembo Seconda parte UML Use Case Diagrams Il diagramma degli use case Ricordiamo che lo schema concettuale (per le finalità di questo corso) è costituito da: Diagramma delle classi (e degli oggetti) Diagramma degli use case Il diagramma degli use-case descrive le funzionalità fondamentali che il sistema deve realizzare, in termini di scenari di utilizzo del sistema *Le slide seguenti sono il frutto di una rielaborazione di analogo materiale redatto da Marco Cadoli, Giuseppe De Giacomo e Maurizio Lenzerini, Domenico Lembo Progettazione del Software Seconda Parte 1 Domenico Lembo Progettazione del Software Seconda Parte 2 Use case Un use case rappresenta una tipica interazione tra un utente ed il sistema software da realizzare. Un Use Case cattura una qualche funzione visibile dall utente, e la sua descrizione si ottiene attraverso l interazione tra analista ed utente in fase di analisi. In altre parole, un Use Case definisce un particolare modo di utilizzare il sistema, il quale offre servizi e funzionalità in risposta a eventi prodotti da attori esterni. Use case Un Use Case modella un processo (o un insieme di processi) che è trasversale rispetto alle classi, cioè coinvolge più classi allo stesso livello, e sarebbe una forzatura modellarlo come una operazione di una singola classe Un Use Case è in genere composto da diverse operazioni, che non vengono definite in modo dettagliato nel diagramma. Vedremo, quando parleremo di specifica di un Use Case, come queste operazioni vengono definite Domenico Lembo Progettazione del Software Seconda Parte 3 Domenico Lembo Progettazione del Software Seconda Parte 4

Use Case: Attori Un Use Case è formulato sulla base delle funzionalità offerte dal sistema così come sono percepite dagli utenti. Oltre agli Use Case, un altro componente fondamentale del diagramma degli Use Case è l attore. Un attore è un ruolo che un utente (una persona o un sistema esterno) riveste interagendo con il sistema. Lo stesso utente può essere rappresentato da più di un attore (può rivestire più ruoli). Più utenti possono essere rappresentati dallo stesso attore. Use case: diagramma Un diagramma degli use case è un grafo i cui nodi possono essere Attori Use Case mentre gli archi rappresentano la comunicazione tra gli attori e gli use case, i legami d uso tra use case l estensione di uno use case da parte di un altro Domenico Lembo Progettazione del Software Seconda Parte 5 Domenico Lembo Progettazione del Software Seconda Parte 6 Componenti di un diagramma degli use case Associazione Use Case Attore associazione inclusione estensione generalizzazione extend La partecipazione di un attore ad uno Use Case è rappresentata da un arco di associazione (opzionalmente etichettato con un nome) tra il simbolo dell attore e il simbolo di Use Case. In generale, questo significa che l attore comunica con lo Use Case. Attore: un ruolo rivestito da un utilizzatore del sistema (essere umano, altro sistema,..) Caso d uso: una particolare modalità di utilizzo del sistema Relazioni nel diagramma degli use case Domenico Lembo Progettazione del Software Seconda Parte 7 Pianificatore Finanziario esegue Analisi di mercato Domenico Lembo Progettazione del Software Seconda Parte 8

Esempio di diagramma degli use case Inclusione Sistema di Fatturazione chiede-iscrizione fattura Iscrizione ad un corso Questo use case descrive la funzione mediante la quale uno studente si iscrive ad un corso professionale Sistema esterno responsabile della fatturazione per l iscrizione ai corsi Una relazione d inclusione tra use case è rappresentata da una freccia tra lo use case che e quello che è incluso. La freccia è etichettata con. Una relazione d inclusione da un Use Case A ad un Use Case B, indica che ogni istanza dello Use Case A rà anche il comportamento specificato per lo Use Case B. In altre parole, qualche funzionalità di A richiede di servirsi di qualche funzionalità di B. A B Domenico Lembo Progettazione del Software Seconda Parte 9 Domenico Lembo Progettazione del Software Seconda Parte 10 Inclusione Viene usata quando c è una funzionalità che è comune tra più use case ed è quindi conveniente metterla a fattor comune può essere utilizzato per modellare componenti riutilizzati/riutilizzabili Estensione La relazione estende tra use case è rappresentata da una freccia etichettata con extend dallo Use Case che definisce l estensione allo Use Case base. La relazione extend tra un Use Case A ed un Use Case B indica che ogni istanza di B, in condizioni particolari (specificate nell estensione per semplicità lo ometteremo), viene estesa con le funzionalità di una istanza di A. A extend B Analisi di mercato Stampa rapporti Viene usata quando si ha uno use case che è simile ad un altro ma fa qualcosa in più Catturare il comportamento normale prima (use case A) Tracciare tutte le eccezioni e variazioni come use cases extend (A più B) Per uno stesso Use Case, i comportamenti definiti attraverso diverse estensioni possono occorrere all interno di ogni singola sua istanza. Domenico Lembo Progettazione del Software Seconda Parte 11 Domenico Lembo Progettazione del Software Seconda Parte 12

Esempi di extend e Inclusione vs Estensione chiede-iscrizione fattura Sistema di Fatturazione Iscrizione ad un corso Verifica pagamento extend Controllo utente Calcola sconto Entrambe fattorizzano comportamenti comuni a più use case Usare extend quando si stanno descrivendo variazioni dalla funzionalità standard Usare quando si sta ripetendo la stessa funzionalità in più use case separati e si vogliono quindi evitare queste ripetizioni Domenico Lembo Progettazione del Software Seconda Parte 13 Domenico Lembo Progettazione del Software Seconda Parte 14 Generalizzazione Esempi di extend, e generalizzazione La generalizzazione si applica sia ad attori. Un attore A è generalizzazione di un attore B quando B è visto come un caso particolare di A. chiede-iscrizione Verifica pagamento Il concetto di generalizzazione è simile a quello usato nel diagramma delle classi. convenzionato Iscrizione ad un corso Controllo utente fattura Sistema di Fatturazione extend Calcola sconto Domenico Lembo Progettazione del Software Seconda Parte 15 Domenico Lembo Progettazione del Software Seconda Parte 16

Esercizio 7 Facendo riferimento all esercizio 6, considerare le specifiche aggiuntive (in rosso), e tracciare il corrispondente diagramma degli use case: 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, il numero di studenti di un corso di laurea, e la media del numero di esami sostenuti per gli studenti di un corso di laurea. Segreteria Professore Esercizio 7: soluzione effettua iscrizione verbalizza Controlli Iscrizione a corso di laurea Media voti Numero studenti Numero esami Verbalizzazione Domenico Lembo Progettazione del Software Seconda Parte 17 Domenico Lembo Progettazione del Software Seconda Parte 18 Aspetti metodologici nella costruzione del diagramma degli Use Case Un metodo comunemente usato per costruire il diagramma degli Use Case prevede i seguenti passi Individua gli Use Case generali di interesse Individua gli attori Individua le associazioni tra attori e Use Case Individua altri Use Case, più specifici, se ce ne sono Determina le relazioni tra Use Case Individua le generalizzazioni tra attori e tra Use Case, Individua le relazioni extend tra Use Case Controllo di qualità Correggi, modifica, estendi Controllo di qualità del diagramma degli Use Case Sono stati colti tutti gli aspetti insiti nei requisiti? Sono state individuate tutte le associazioni e tutte le generalizzazioni? Ci sono ridondanze nel diagramma? È alta la coesione dei singoli Use Case? È basso l accoppiamento tra diversi Use Case? Domenico Lembo Progettazione del Software Seconda Parte 19 Domenico Lembo Progettazione del Software Seconda Parte 20

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 Specifica di una classe La specifica di una classe C ha la seguente forma: InizioSpecificaClasse C Specifica della operazione 1 Specifica della operazione N Domenico Lembo Progettazione del Software Seconda Parte 21 Domenico Lembo Progettazione del Software Seconda Parte 22 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 Domenico Lembo Progettazione del Software Seconda Parte 23 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 Domenico Lembo Progettazione del Software Seconda Parte 24

Esempio di specifica di una operazione Nome: stringa Cognome: stringa Matricola: int Età: int Iscrizione(c: CorsoDiLaurea) 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 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 Domenico Lembo Progettazione del Software Seconda Parte 25 Domenico Lembo Progettazione del Software Seconda Parte 26 Precondizioni e postcondizioni Precondizioni e Postcondizioni specificano in maniera dichiarativa le condizioni (il cosa), e non indicano il modo con cui si verificano tali condizioni (il come) Nella specifica si fa in genere riferimento alle classi ed alle associazioni del class diagram, ai parametri in input e, in caso i parametri siano oggetti, alle loro proprietà (se necessario anche dinamiche operazioni), accedute tramite la notazione. Nella specifica delle operazioni di classi, si può fare anche riferimento all oggetto di invocazione (tramite la parola chiave this) ed alle sue proprietà (ovviamente, per operazioni di uno Use Case non ha senso parlare di oggetto di invocazione) Nella specifica di uno Use Case è possibile fare riferimento ad altri Use Case (in particolare in presenza di una inclusione) La specifica può essere data in linguaggio naturale oppure in maniera formale, con notazione matematica. Diversi livelli di precisione sono possibili (in seguito si forniranno versioni alternative). Qualunque sia il livello di precisione scelto, la specifica deve mantenere il carattere dichiarativo (non ci devono essere dettagli procedurali, ad es. parti di algoritmi). Utilizzare i nomi delle classi e delle associazioni del class diagram e fare riferimento la sua semantica è un modo per definire specifiche corrette e significative. Domenico Lembo Progettazione del Software Seconda Parte 27 Esempio di diagramma delle classi Matricola: int Età: int NumEsami: int Iscrizione(c: CorsoDiLaurea) MediaVoti( ): real Professore Codice: stringa Età: int NumVerb: int Verbalizza (s:, c: Corso, v: int) iscritto Esame Voto: int 0..1 CorsoDiLaurea Nome: stringa Codice: stringa NumeroStud( ): int Corso Nome: stringa Disciplina: stringa Domenico Lembo Progettazione del Software Seconda Parte 28

Esempio di specifica di classi InizioSpecificaClasse Professore Verbalizza(s:, c: Corso, v: int) pre: s non ha ancora sostenuto l esame c (non esite un link di tipo Esame che colleghi s, c ed un qualsiasi professore), e 18 v 31 post:s ha sostenuto l esame per il corso c con il professore this con voto v (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 Nota: Fra parentesi, in corsivo, è indicata una versione alternativa, con precisi riferimenti al class diagram ed alla sua semantica (istanze, link, ecc) Esempio di specifica di classi (2) InizioSpecificaClasse Iscrizione(c: CorsoDiLaurea) pre: this non è iscritto ad alcun corso di laurea (non esiste alcun link di tipo iscritto che coinvolge this) post:this è iscritto al CorsoDiLaurea c (this e c sono collegati da un link di tipo iscritto) MediaVoti( ) : real pre: this è iscritto ad un corso di laurea (esite un link di tipo iscritto che coinvolge this) e this.numesami > 0 post : result è la media dei voti degli esami sostenuti da this Domenico Lembo Progettazione del Software Seconda Parte 29 Domenico Lembo Progettazione del Software Seconda Parte 30 Specifica mediante una notazione formale InizioSpecificaClasse Professore Verbalizza(s:, c: Corso, v: int) pre : ( p p Professore <s,p,c> Esame) 18 v 31 post : Esame = pre(esame) {<s,this,c>} Esame.voto(<s,this,c>) = v s.numesami = pre(s.numesami) + 1 this.numverb = pre(this.numverb) + 1 Si noti che Esame rappresenta tutte le istanze dell associazione Esame (un insieme di terne di oggetti studente-professore-corso) Un istanza di associazione si rappresenta con le parentesi angolari, che racchiudono l elenco degli oggetti che la costituiscono (es., <s,p,c>) Il valore che un attributo F di un associazione A assegna ad un istanza i A si denota con A.F(i) (ad es., Esame.voto(<s,this,c>) ) Domenico Lembo Progettazione del Software Seconda Parte 31 Specifica mediante una notazione formale(2) InizioSpecificaClasse Iscrizione(c: CorsoDiLaurea) pre : ( c2 c2 CorsoDiLaurea <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 > p p Professore c Corso <this,p,c> Esame Esame.voto (<this,p,c>) = v} Σ <c,v> Voti v result = this.numesami Nota: Definire Voti come l insieme {v p p Professore c Corso <this,p,c> Esame Esame.voto (<this,p,c>) = v} Sarebbe stato scorretto: voti uguali in esami diversi sarebbero contati una sola volta! Domenico Lembo Progettazione del Software Seconda Parte 32

Esempio di diagramma di use case Esempio di specifica di use case InizioSpecificaUseCase Controlli iscrizione Iscrizione a corso di laurea MediaVoti(s: ): real pre : s è iscritto ad un corso di laurea e s.numesami > 0 post : result = s.mediavoti() // invoca operazione di Segreteria Professore effettua Controlli verbalizza Verbalizzazione NumeroStudenti(c: CorsoDiLaurea): int pre : nessuna post : result = c.numerostud( ) //invoca operazione di CorsoDiLaurea MediaEsami(c: CorsoDiLaurea): real pre : c ha almeno uno studente iscritto post : result è la media del numero di esami sostenuti dagli studenti iscritti al corso di laurea c Domenico Lembo Progettazione del Software Seconda Parte 33 Domenico Lembo Progettazione del Software Seconda Parte 34 Specifica mediante una notazione formale InizioSpecificaUseCase Controlli MediaVoti(s: ): real pre : ( c c CorsoDiLaurea <s,c> iscritto) s.numesami > 0 post : result = s.mediavoti( ) NumeroStudenti(c: CorsoDiLaurea): int pre : true post : result = c.numerostud( ) Esercizio Scrivere la specifica delle seguenti operazioni usando una notazione formale: Operazione NumeroStud() della classe CorsoDiLaurea Operazione MediaEsami() dello use case Controlli Suggerimento: Per contare gli elementi di un insieme I è possibile usare l operatore card, specificando card(i). Domenico Lembo Progettazione del Software Seconda Parte 35 Domenico Lembo Progettazione del Software Seconda Parte 36

Soluzione InizioSpecificaClasse CorsoDiLaurea NumeroStud():int pre : true post : result = card({ s s <s,this> iscritto}) InizioSpecificaUseCase Controlli MediaEsami(c: CorsoDiLaurea): real pre : ( s s <s,c> iscritto) post : Definiamo EsamiDelCorso come l insieme {<s,p,co> s p Professore co Corso <s,p,co> Esame <s,c> iscritto} result = card(esamidelcorso) c.numerostud( ) Domenico Lembo Progettazione del Software Seconda Parte 37