Ingegneria del Software

Documenti analoghi
LEZIONE 5 SEQUENCE DIAGRAM

SOMMARIO DIAGRAMMI DI SEQUENZA

Descrivono la collaborazione di un gruppo di oggetti per implementare collettivamente un comportamento

SOMMARIO. DIAGRAMMI DI SEQUENZA INGEGNERIA DEL SOFTWARE Università degli Studi di Padova. Introduzione. Partecipanti e messaggi.

Avete capito fino in fondo il concetto di nodo fine flusso? Che differenza c e tra fine flusso e fine attività? MODEL DIFFERENCES AND EVOLUTION

Modulo 11. Interazioni Diagrammi di sequenza Diagrammi di collaborazione. Descrivere il comportamento di un sistema software

Programma operativo Regione Lombardia/Ministero del Lavoro/Fondo Sociale Europeo, Obiettivo 3 Misura C3

Ingegneria del Software 18. Realizzazione casi d uso. Dipartimento di Informatica Università di Pisa A.A. 2014/15

UML: DIAGRAMMA DI SEQUENZA

Vincenzo Gervasi, Laura Semini Ingegneria del Software Dipartimento di Informatica Università di Pisa

Alcuni diagrammi. OCL (Object Constraint Language)

Corso di Laurea Specialistica in Ingegneria Informatica. Corso di Ingegneria del Software A. A Introduzione ad UML E.

I Diagrammi di Flusso OO

UML Introduzione a UML Linguaggio di Modellazione Unificato. Corso di Ingegneria del Software Anno Accademico 2012/13

UML. UML Book. Diagrammi di attività. Cosa sono? Notazione. Cosa sono?

Università di Bergamo Facoltà di Ingegneria INGEGNERIA DEL SOFTWARE. Paolo Salvaneschi A4_3 V2.1. Progettazione. Metodi e Linguaggi

Linguaggio Testuale. E un formalismo che consente di rappresentare gli algoritmi mediante semplici istruzioni in linguaggio «parlato»

Elementi di UML (5): Diagrammi di interazione

Corso di Ingegneria del Software. Activity Diagram

Istruzioni. Una istruzione semplice è qualsiasi espressione seguita da un punto e virgola. Esempio x = 0; y = 1;/* due istruzioni */

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

Laboratorio di Progettazione di Sistemi Software UML per Design Patterns e Refactoring

Le strutture di controllo in C++

Istruzioni di selezione in Java 1

Il linguaggio Java Istruzioni di Controllo

Catia Trubiani. Laboratorio di Ingegneria del Software a.a

I diagrammi di interazione

Un esempio di if annidati

Corso di Ingegneria del Software. Casi d uso

UML UNIFIED MODELING LANGUAGE

UML Unified Modeling Language

Istruzioni di selezione in Java 1

Sequence Diagram. Catia Trubiani. Laboratorio di Ingegneria del Software a.a

Lezione 5 e 6. Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza. Valentina Ciriani ( ) Laboratorio di programmazione

Programmazione ad Oggetti

Espressioni booleane. Esempio: temperatura <= 0 velocita > velocita max

Laboratorio di Sistemi Software UML per Design Patterns e Refactoring

<istruzione> ::= <istruzione-semplice> <istruzione> ::= <istruzione-di-controllo> <istruzione-semplice> ::= <espressione> ;

Programmazione A.A Costrutti di base. ( Lezione XII, parte I ) Gestione dell input. Prof. Giovanni Gallo Dr.

ISTRUZIONI. Le strutture di controllo permettono di aggregare istruzioni semplici in istruzioni più complesse.

<istruzione> ::= <istruzione-semplice> <istruzione> ::= <istruzione-di-controllo> <istruzione-semplice> ::= <espressione> ;

Rappresentazione degli algoritmi

Istruzioni di Controllo

Laboratorio di informatica Ingegneria meccanica

STRUTTURE DI CONTROLLO IN C. Docente: Giorgio Giacinto AA 2009/2010

Note sugli Statechart Diagrams

Paolo Bison. Fondamenti di Informatica Ingegneria Meccanica Università di Padova A.A. 2008/09

STRUTTURE DI CONTROLLO DEL C++

02/03/2016. LABORATORIO DI PROGRAMMAZIONE Corso di laurea in matematica 8 STRUTTURE DI CONTROLLO (1)

Java SE 7. Strutture di programmazione (2)

Programmazione C Massimo Callisto De Donato

Programmazione con Java

Prof. Pagani Corrado LINGUAGGIO C: SELEZIONE E CICLI

del Linguaggio C Istruzioni di iterazione

2. Modellazione dei casi d uso

Rappresentazione degli algoritmi

Corso di Ingegneria del Software. Esempi di casi d uso

Sequence Diagram e Collaboration Diagram

Istruzioni Condizionali

Use Case Diagram. Catia Trubiani. Laboratorio di Ingegneria del Software a.a

Istruzioni Condizionali

Analisi dei Casi d Uso

Corso di Fondamenti di Informatica

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

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

UML2. Concetti base. Andrea Polini. Laboratorio di Ingegneria del Software Corso di Laurea in Informatica L31 Università di Camerino

Linguaggio C Strutture di controllo

Corso di Informatica A.A

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica. Dispensa 17. A. Miola Gennaio 2012

Casi d uso. Marina Zanella - Ingegneria del Software UML: Casi d uso 1

Corso Base. Liceo Norberto Rosa Bussoleno Prof. Angelo GIORGIO

ITI M. FARADAY. Programmazione a. s

UML come abbozzo. Introduzione all UML. UML come linguaggio x programmi. UML come progetto dettagliato

osservazione: 1 MCD(m,n) min(m,n) = si provano i numeri compresi tra 1 e min(m,n) conviene iniziare da min(m,n) e scendere verso 1

Cast implicito. Il cast è fatto automaticamente quando un tipo più basso viene assegnato ad un tipo più alto. byte short int long float double

Strutture. Array dei nomi degli esami (MAX ESAMI è il massimo numero degli esami). Array con i crediti degli esami.

Programma operativo Regione Lombardia/Ministero del Lavoro/Fondo Sociale Europeo, Obiettivo 3 Misura C3

Elementi di UML (6): Diagrammi dinamici di flusso

Cominciamo ad analizzare la rappresentazione delle informazioni... di Cassino. C. De Stefano Corso di Fondamenti di Informatica Università degli Studi

LEZIONE 3 USE CASE DIAGRAM && ACTIVITY DIAGRAM

INFORMATICA. Strutture condizionali

A. Ferrari Object Oriented Design

Il linguaggio PHP. Insegnarvi tutto il PHP? Non esattamente Obiettivo: insegnarvi ad interagire via web con una base dati

Esercizi svolti in aula

ISTRUZIONI ISTRUZIONI SEMPLICI

JavaScript Core Language. Prof. Francesco Accarino IIS Atiero Spinelli Sesto San Giovanni via leopardi 132

Activity Diagrams (lezione 3)

Uso di Asserzioni alla Hoare nei Linguaggi O.O. Java Modeling Language

SOMMARIO DIAGRAMMI DI ATTIVITÀ INGEGNERIA DEL SOFTWARE. Introduzione. Concetti base. Introduzione. Concetti base

Istruzioni di Ciclo. Unità 4. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Istruzioni. Istruzioni semplici Istruzioni di controllo. Fondamenti di Informatica e laboratorio Istruzioni e Controllo del flusso

La Modellazione del Sistema: viste dinamiche e comportamentali. P Tramontana Modelli di sistema- Introduzione a UML Slide 1

Programma operativo Regione Lombardia/Ministero del Lavoro/Fondo Sociale Europeo, Obiettivo 3 Misura C3

Informatica AA 2005/06. Programmazione M.A. Alberti. Operatori in Java 1. Operatori in Java. Espressioni aritmetiche. Espressioni booleane

Microsoft Visio 2002 UML Sergio Colosio

Transcript:

Università degli Studi di Napoli Federico II Ingegneria del Software a.a. 2013/14 Lezioni : Sequence Diagram

Analisi dei requisiti individuare e rappresentare il comportamento dinamico. Forme diagrammatiche di UML per la rappresentazione degli aspetti dinamici: Sequence diagrams Acritivity diagrams Statecharts

Documento dei requisiti SW (da Lezione 6) Si focalizza sulla descrizione del sistema da sviluppare Cliente, utenti e sviluppatori contribuiscono alla stesura del documento di specifica dei requisiti Può essere usato come contratto tra cliente e sviluppatori Il documento prevede vari livelli di raffinamento, dal linguaggio naturale, al linguaggio strutturato, ai modelli UML. Tutti i documenti rappresentano la stessa informazione ma sono scritti usando linguaggi diversi, per utenti diversi

I Sequence Diagrams

Mappare Use case in Oggetti con Sequence Diagram Un Sequence Diagram lega use case e diagrammi di Cockburn con oggetti. mostra come il comportamento di uno use case (o scenario) è distribuito tra i suoi oggetti partecipanti Illustra la sequenza di interazioni tra gli oggetti necessaria per realizzare uno use case Oggetto di osservazione è l'aspetto puramente funzionale E' un tipo di documento che non è adeguato alla comunicazione con il committente. Il sequence diagram vede la partecipazione di oggetti che istanziano le classi nei Class Diagram prodotti nell'analisi dei requisiti e si conformano alle loro segnature Solo per i clienti esperti è più intuitivo e preciso dei diagrammi di Cockburn Fornisce una prospettiva diversa (dinamica) che consente di individuare classi mancanti e aree non chiare nelle specifiche

Sequence Diagram Mostra la sequenza temporale dei messaggi che gli oggetti si scambiano per portare a termine una funzionalità. E un diagramma di interazione: evidenzia come una funzionalità è realizzata tramite la collaborazione di un insieme di oggetti. E uno dei principali input per l implementazione dello scenario E utilizzato nell'analisi dei requisiti accoppiato ai Class diagram prodotti nell'analisi dei requisiti E' utilizzato ad un maggior livello di dettaglio in fase di System e Object design.

Sequence Diagram Instance:ClassB Instance:ClassA Oggetto tempo Linea di vita InvocazioneMetodo() in questo intervallo di tempo l oggetto è in vita e attivo Cancellazione ValoreDiRitorno Box di attivazione

Linee di vita Una linea di vita rappresenta un singolo partecipante (istanza di una classe) ad una interazione. Nome: usato per far riferimento alla linea Tipo: il nome della classe di cui la linea di vita rappresenta l'istanza Selettore: condizione booleana usata per selezioanre uan singola istanza (facoltativo, in assenza di selettore si fa riferimento a una istanza generica). Il tempo fluisce verticalmente dall'alto in basso Nell'intestazione del diagramma si trovano gli oggetti che esistono prima dell'invio del primo messaggio Oggetti creati durante l interazione compaiono sotto l'interazione La linea tratteggiata indica il tempo in cui l oggetto può ricevere messaggi

Messaggi Un messaggio rappresenta una forma di comunicazione tra due linee di vita. La chiamata di una operazione: un messaggio di chiamata; si usa la segnatura di un metodo della classe dell'istanza destinataria del messaggio La creazione/distruzione di una istanza: messaggio di creazione/distruzione; L'invio di un segnale. L attivazione è rappresentata da un rettangolo sulla linea della vita, da cui altri messaggi possono prendere origine (focus attivazione) La lunghezza del rettangolo rappresenta il tempo durante il quale l operazione è attiva

Messaggi: tipologie

Messaggi: sincroni/asincroni di ritorno Se l oggetto che invia il messaggio rimane in attesa che l oggetto ricevente ritorni dall'esecuzione del messaggio, si ha un messaggio sincrono Se l oggetto che invia il messaggio prosegue la propria elaborazione senza attendere che l'oggetto ricevente ritorni dall'esecuzione, si è in presenza di un messaggio asincrono. Il valore restituito all oggetto chiamante viene allegato ad un messaggio di ritorno La distinzione tra messaggi asincroni e sincroni viene di solito tralasciata in fase di analisi dei requisiti, così comle l'esplicitazione di tutti i ritorni.

Esempio d'uso Primo esempio Il manager seleziona aggiunta del corso Il manager indica il nome del corso Il sistema crea il nuovo corso. Secondo esempio Il manager seleziona rimozione corso Il manager indica il nome del corso Il sistema cancella il corso.

Esempio: Creazione

Esempio: Distruzione

Vincoli e invarianti di stato Lo stato di una istanza di classe è dato dal valore assunto dai suoi attributi. E' possibili esprimere nella linea di vita il vincolo che lo stato deve avere nel corso delle interazioni (invariante di stato). Nell'esempio successivo le paid, unpaid, delivered indicano stati dell'ordine. La specifica degli invarianti di stato costituisce il legame tra i diagrammi di sequenza e quelli di stato. Si possono aggiungere vincoli temporali sulla evoluzione della linea di vita marcando punti della linea di vita con etichette e scrivendo espressioni che coinvolgano le etichette

Vincoli e invarianti di stato

Flussi di controllo: Sintassi grafica generale degli operatori combinati

Frammenti combinati Operatore: determina come vengono eseguiti i suoi comandi Condizione di guardia: condizione booleana che stabilisce se gli operandi devono essere eseguiti (condizione booleana valutata a True). La condizione di guardia può essere associata all'intero frammento combinato o al singolo operando La condizione di guardia è unica nel frammento/operando La condizione di guardia precede la prima comunicazione del frammento/operando a cui si riferisce

Frammenti di selezione: opt, alt Opt equivale a un costrutto standard If (condizione) then operazione Ha un unico operando che viene eseguito solo se la condizione è vera Alt equivale a un costrutto standard del tipo If (condizione1) then operazione1 else If (condizione2) then operazione2... else If (condizionen) then operazionen Ogni operando ha una condizione di guardia e viene eseguito solo se essa è vera (solo una guardia può valutare a vero) L'operando opzionale con guardia [else] è eseguito se nessun altro operando ha guardia che valuta a vero.

Frammenti di selezione: opt, alt

Frammenti di iterazione: loop e break La sintassi loop min, max [condizione] operazione indica che Operazione viene eseguita min volte Finché condizione valuta a vero Operazione viene eseguita max-min volte. Possibili varianti Senza min, max e condizione rappresenta un ciclo infinito Se viene specificato solo min, si intende max=min La condizione è una espressione booleana ma può anche essere espressa testualmente in modo libero (se preciso) Break ha solo una condizione di guardia. Se la condizione di guardia di break è soddisfatta il ciclo viene e interrotto

Frammenti iterativi: loop

Frammenti iterativi: tipologie

Esempio

Linking sequence diagrams Se un Sequence è troppo complesso o fa riferimento ad un altro Sequence, si può utilizzare il REF, con: Un rettangolo con label REF, col nome dell altro diagramma Una freccia che punta a tale rettangolo Una eventuale condizione per specificare quando si fa il riferimento Customer Info ref Verify customer credit Approved? 25

Elenco degli operatori (1)

Elenco degli operatori (2)

Elenco degli operatori (3)

Sequence Diagram e parallelismo Il principio di base della modellazione della concorrenza è che ogni thread di controllo o processo concorrente viene modellato come un oggetto attivo Un oggetto attivo incapsula il proprio thread di controllo. Un oggetto attivo è una istanza di una classe attiva E' possibile mediante l'operatore par rappresentare esplicitamente forme di parallelismo Ogni operando rappresenta una componente che evolve parallelamente L'esecuzione dei messaggi appartenenenti a diverse componenti parallele è interfogliata. La possibile interfogliazione dei messaggi appartenenti a componenti parallele diverse può essere limitati usando un operatore che vincola sequenze di messaggi ad essere atomiche (operatore critical)

Sequence Diagram e parallelismo: esempio (1) Sistema di allarme antincendio e antintrusione.

Sequence Diagram e parallelismo: esempio(2) I monitor per i sensori antincendio e antintrusione e il loro controllore lavorano in parallelo (classi attive)

Esempio: il monitor antincendio e anintrusione controllano ciascuno un solo sensore. Controllo incendio prioritario sull'antintrusione.

Esempio: il monitor antincendio e anintrusione controllano ciascuno più sensori. Controllo incendio prioritario sull'antintrusione.

Sequence Diagram in fase di analisi Convenzioni per utilizzare i Sequence Diagrams con l euristica ThreeObject-Type: La colonna più a sinistra rappresenta l attore che inizia lo use case La seconda colonna -> oggetto Boundary con cui l attore interagisce per iniziare lo use case La terza colonna -> oggetto Control che gestisce il resto dello use case Le altre colonne possono rappresentare qualunque oggetto che interviene nel caso d uso. Gli oggetti Control creano altri oggetti Boundary/Entity e possono interagire con altri oggetti Oggetti Control accedono ad altri oggetti Entity e Boundary Gli oggetti Entity non accedono mai agli oggetti Control e Boundary: ciò rende più facile condividere oggetti Entity tra più use case

Esempio: ReportEmergency use case. FieldOfficer Report EmergencyButton press() «create» Manage EmergencyControl ReportEmergency Control «create» ReportEmergency Form fillcontents() submit() submitreport() «create» «destroy» Emergency Report submitreporttodispatcher()

Sequence diagram for the ReportEmergency use case (continued). Manage EmergencyControl submitreporttodispatcher() «create» Dispatcher IncidentForm createincident() «create» Incident submit() «create» «destroy» Acknowledgment

Sequence diagram for the ReportEmergency use case. FieldOfficer Manage EmergencyControl ReportEmergency Control acknowledgereport() «create» dismiss() Acknowledgment Notice endreporttransaction() «destroy» «destroy»

Analisi e Sequence Diagram Durante l analisi i Sequence Diagram sono usati per individuare nuovi oggetti comportamenti mancanti Disegnare Sequence Diagram è un attività laboriosa, quindi: Occorre dare priorità a quelle funzionalità problematiche o non ben specificate Per le parti ben definite può essere utile solo per evitare di posticipare alcune decisioni chiave

Esercizi Per prendere dimestichezza con il linguaggio dei sequence diagrams utile è lo svolgimento di esercizi di reverse engineering. Dato un frammento di codice in un linguaggio object-oriented: Ipotizzare un class diagram coerente con il codice esaminato. Produrre un sequence diagram che ne esprima il controllo. Si svolga l'esercizio per i frammenti di codice riportati nei lucidi seguenti

Esercizio 1 public class OrientedERBuilder extends ModelBuilder { private Hashtable relations;. public Object getmodel() { String model =""; for(enumeration elem = relations.elements();elem.hasmoreelements() ; ) { String[] currel = (String[]) elem.nextelement() ; model += "[ " + currel[0] + " ]----("+ currel[2] + "," + currel[3]+ ")---->[ " + currel[1]+ " ]\n"; } return model; } }

Esercizio 2 public class LineFigure extends BezierFigure { public Collection<Handle> createhandles(int detaillevel) { LinkedList<Handle> handles = new LinkedList<Handle>(); switch (detaillevel) { case -1 : // Mouse hover handles handles.add(new BezierOutlineHandle(this, true)); break; case 0 : handles.add(new BezierOutlineHandle(this)); for (int i=0, n = path.size(); i < n; i++) { handles.add(new BezierNodeHandle(this, i)); } break; } return handles; }

Esercizio (2)