UML - ..::Alberto Ferrari::.. · os’è UML E’ un linguaggio di progettazione, da non onfondere...

Post on 30-Aug-2019

5 views 0 download

transcript

UMLUNIFIED MODELING LANGUAGE

Cos’è UMLE’ un linguaggio di progettazione, da non confondere con i linguaggi di programmazione (C, C++, Java,…)

Fornisce una serie di diagrammi per rappresentare ogni tipo di modellazione

Alcuni ambienti di programmazione sono in grado di convertire diagrammi UML in codice e viceversa

Diagrammi UMLdiagramma dei casi d’uso (use case)

diagramma delle classi (class)

diagramma di sequenza (sequence)

diagramma di collaborazione (collaboration)

diagramma di stato (statechart)

diagramma delle attività (activity)

diagramma dei componenti (component)

diagramma di distribuzione (deployment)

Analisi di un problemaDIAGRAMMA DEI CASI D’USO

Definizione dei requisitiRequisiti: insieme delle funzionalità che il sistema deve rendere disponibili agli utenti (non necessariamente persone)

Si definisce ◦ “cosa” fa il sistema

◦ non “come” lo fa

L’insieme dei requisiti descrive il comportamento esterno del sistema (black box)

In UML -> diagramma dei casi d’uso◦ attori

◦ casi d’uso

Un esempio

Tipi di requisitiFunzionali

descrivono le funzionalità che il sistema rende disponibili all◦ ’utente (normalmente interazione utente-sistema)

sono gli unici che compaiono nei diagramma dei casi d◦ ’uso

Non funzionalidescrivono caratteristiche del sistema ◦(per esempio prestazionali)

Tecnologicidescrivono aspetti tecnologici◦(esempio tipo di linguaggio utilizzato)

Priorità dei requisitiMust

◦ indispensabile

Should◦ desiderabile

May◦ opzionale

Diagramma UML dei casi d’usoAttori

◦ Entità che non fanno parte del sistema ma interagiscono con esso

◦ rappresentati da icone con la denominazione del ruolo

Casi d’uso◦ ovali con all’interno la descrizione (verbo/complemento)

Linee◦ di collegamento fra attori e casi d’uso

◦ è possibile attribuire un nome per chiarire il ruolo che svolge l’attore

Relazione fra casi d’usoInclusione

Il caso d◦ ’uso puntato è necessariamente compreso nel caso d’uso da cui parte la freccia

EstensioneIl caso d◦ ’uso puntato è facoltativamente compreso nel caso d’uso da cui parte la freccia

GeneralizzazioneIl caso d◦ ’uso da cui parte la freccia è un caso particolare di quello puntato

Esempio

Rappresentazione alternativa

IndicazioniIndividuare gli attori

◦ chi usa il sistema?

◦ chi ottiene informazioni dal sistema?

◦ chi fornisce informazioni al sistema?

◦ quali altri sistemi interagiscono con questo?

Individuare i casi d’uso◦ per quale scopo gli attori usano il sistema?

◦ quali funzioni sono richieste?

◦ quali informazioni sono elaborate dal sistema?

Specifica dei casi d’usoNome del Caso d’Uso

Precondizioni◦ condizioni che devono essere verificate prima di eseguire il caso d’uso

Postcondizioni◦ stato in cui il caso d’uso lascia il sistema

Un esempioNegozio di noleggio DVD: informatizzazione della gestione prestiti

Il cliente utilizza il sistema per ricercare e richiedere in prestito un film

Il negoziante utilizza il sistema per registrare i prestiti e i rientri dai prestiti:

richiede i dati del cliente prima di effettuare il prestito◦

verifica la disponibilità del film di cui sono presenti più copie◦

Diagramma dei casi d’uso

Maggior dettaglio

Specifica di un caso d’uso

OOADOBJECT-ORIENTED ANALYSIS AND DESIGN

Diagramma delle classiRappresenta le classi che compongono il sistema, cioè le collezioni di oggetti, ciascuno con il proprio stato e comportamento (attributi ed operazioni)

Specifica, mediante associazioni, le relazioni fra le classi

Un esempio

Nome

Attributi (proprietà)

Operazioni (metodi)

Classe Metodi e Attributi

SchedaAnagrafica

-nome:String-cognome:String

+getNome():String+setNome(nome:String):void+getCognome():String+setCognome(cognome:String):void

public class SchedaAnagrafica {

private String nome;

private String cognome;

public String getNome() {

return nome;

}

public void setNome(String nome) {

this.nome = nome;

}

public String getCognome() {

return cognome;

}

public void setCognome(String cognome) {

this.cognome = cognome;

}

}

Modificatori

+Public: Libero Accesso

#Protected: Accessibile dalle Sottoclassi

-Private: Accessibile solo all’interno della classe

Static: Accessibili anche senza creare istanze

Ereditarietà

Classi Astratte e Metodi AstrattiUna Classe Astratta contiene metodi privi di implementazione

Per questa ragione non può essere istanziata

Il corsivo permette di distinguere le parti astratte da quelle concrete

InterfacceInsieme di operazioni che la classe offre ad altre classi

Rappresentata come una classe con specifica <<interface>>

Non ha attributi ma solo la dichiarazione di metodi

Interfaccia: esempiopublic interface Pesabile {

public int getPeso();

}

Ereditarietà multipla

interfaceMediaRecorder

+record:void

VideoRegistratore

LettoreDVD

interfaceMediaPlayer

+play:void+stop:void+pause:void+fastForward:void+rewind:void

RegistratoreDVD

In Java per esempio non è ammessa l’ereditarietà multipla (possibile in C++)

Le interfacce permettono di ovviare a questo problema: una classe può ereditare da una sola classe ma implementare varie interfacce

AssociazioneUn’Associazione rappresenta la possibilità cheun’istanza ha di inviare un messaggio ad un’altraistanza

In UML viene rappresentata con una freccia, in Java viene implementata tipicamente con un reference

Associazione: esempio

public class Automobile {

private Motore motore;

public void accendi() {

motore.inserisciMiscela();

motore.accendiCandele();

}

}

public class Motore {

public void inserisciMiscela() {…};

public void accendiCandele() {…};

}

DipendenzaLa Dipendenza indica che un determinato oggetto può, in certe circostanze, chiamare i metodi di un altro pur senza possederne un’istanza

La classe dipendente presuppone l’esistenza della classe da cui dipende.

Non vale il viceversa

In UML la dipendenza viene rappresentata con una freccia tratteggiata. In java tipicamente l’oggetto dipendente riceve un’istanza dell’oggetto da cui dipende come argomento di una chiamata a metodo

AggregazioneL’Aggregazione rappresenta un’associazione uno a molti

Esprime concetto “è parte di ” (part of), che si ha quando un insieme è relazionato con le sue parti

In UML l’aggregazione viene rappresentato con una freccia con la punta a diamante

Esempio di Aggregazione

ComposizioneUna Composizione è una relazione uno a molti che implica una forma di esclusività

E’ un caso particolare di aggregazione in cui:

◦ la parte (componente) non può esistere da sola, cioè senza la classe composto

◦ una componente appartiene ad un solo composto

La distruzione dell’oggetto che rappresenta il “tutto” provoca la distruzione a catena delle “parti”

Il diamante si disegna pieno

Esempio di Composizione

aggregazione / composizionePer distinguere l’aggregazione dalla composizione possiamo chiederci che destino devono avere gli oggetti-parte al momento che viene distrutto l’oggetto-tutto

Se non ha senso che gli oggetti-parte sopravvivano all’oggetto-tutto, allora siamo di fronte a una relazione compositiva (la cancellazione del rombo pieno che la rappresenta graficamente richiede la cancellazione del bordo e dell’area interna)

Se ha invece senso che gli oggetti-parte sopravvivano autonomamente all’oggetto-tutto, allora si ha una relazione aggregativa (la cancellazione del rombo vuoto che la rappresenta graficamente avviene cancellando il bordo, ma non richiede la cancellazione dell’area interna)

Esempio

Standard UMLMolteplicità

◦ 1 esattamente una istanza

◦ N esattamente N istanze

◦ 1..* una o più istanze

◦ 0..* zero o più istanze

◦ 1..N una o più istanze (massimo N)

◦ 0..N zero o più istanze (massimo N)

Il nome dell’attributo che realizza un’associazione statica tra classi non deve essere compreso nell’elenco degli attributi, ma deve essere indicato sull’estremita della rappresentazione grafica dell’associazione

Esempio “corretto”