UML-Digramma delle C.. - ESSeRE

essere.disco.unimib.it

UML-Digramma delle C.. - ESSeRE

Diagramma delle Classi (I)


Class Diagrams (Elaboration)

Descrizione statica del sistema:

classi

nomi

attributi

Metodi

relazioni tra classi

associazione (uso)

generalizzazione (ereditarietà)

aggregazione (contenimento)

...

.....


Classi

In UML una classe è composta da tre parti

nome

attributi (lo stato)

metodi (il comportamento)

Professore

nome

cognome

create()

delete()

Professore

create()

delete()

Professore

Professore

nome

cognome


Classi: come trovarle

Evidenziare i nomi (oggetti) nella specifica del problema

Considerare gli use case e gli scenari

Si definiscono gli use case

Si specificano alcuni use case in scenari

Si identificano gli oggetti propri di ogni scenario

Esaminando gli oggetti identificati negli scenari, alcuni oggetti

possono essere raggruppati in classi


Attributi

Gli attributi dipendono dal dominio

Persona (ambito bancario)

nome, cognome, codiceFiscale, numeroConto

Persona (ambito medico)

nome, cognome, allergie, peso, altezza

visibilita’ Nome: tipo

visibilita’ Nome: tipo = defaultValue


Classe


Attributi derivati

Quando si vuole avere un attributo calcolato e non memorizzato

Si usa quando non si vogliono ricalcolare tutti i valori per

quell’attributo nei vari oggetti

Un attributo derivato è un attributo il cui valore viene calcolato in

base ai valori di altri attributi

età

area, perimetro


Attributi: come individuarli

Direttamente nel testo della specifica

nomi che non sono buoni candidati per diventare classi

Durante la definizione delle classi stesse

Conoscenza del dominio applicativo


Operazioni e dominio

Tutte e sole le operazioni rilevanti per il dominio applicativo

Una persona ha un comportamento diverso in funzione al

dominio

Bancario

ricevePrestito, riceveCredito, apreConto

Medico

faEsame, prendeMedicina, vaOspedale

visibility name (parameter list) return_type expression

visibility: + public, # protected, - public


Relazioni

Tutti i sistemi sono composti da oggetti che collaborano per

realizzare le funzionalità richieste

Alcune relazioni sono: associazioni e aggregazioni

Un’associazione definisce un canale di comunicazione

bidirezionale fra due classi


Associazioni

Un’associazione indica una relazione tra classi

ad esempio persona che lavora per azienda

Un’associazione deve avere un nome

Il nome è solitamente un verbo (una etichetta al centro della

linea che definisce l’associazione)

Corso

appare

CartellaStudente


Associazioni: molteplicità

La molteplicità indica:

Se l’associazione è obbligatoria

La molteplicità dell’associazione definisce il numero di

istanze che prendono parte alla relazione: il numero

minimo e massimo di oggetti che possono essere

relazionati ad un altro oggetto

Corso

0..*

3 .. 10

Studente


Molteplicità

1..1

*

0..1

m..n, 4..7, 9

Esattamente 1

zero o più

zero o uno

entro gli estremi specificati


Associazioni

Motore

numero_cilindri

cilindrata

potenza

avvia()()

ferma()()

Auto

marca

modello

targa

velMax

getMarca()()

getModello()()

getTarga()()

avvia()()

ferma()()

Fra ogni istanza della classe auto e ogni istanza della classe motore c’è un

link


Associazioni

Una associazione descrive un gruppo di link con una struttura e

semantica comune

Un link è una connessione fisica o concettuale fra oggetti

Capacità di una istanza di inviare un messaggio ad un’altra istanza

Tipicamente implementata con un puntatore (un puntatore è un

attributo di un oggetto che contiene un reference esplicito ad un

altro oggetto) o una reference instance variable o come argomento

di un metodo o la creazione di una variabile locale


Associazioni

Le associazioni sono inerentemente bidirezionali, con due ruoli e

può essere attraversata nelle due direzioni

Il nome di un’associazione binaria usualmente si legge in una

particolare direzione

Le associazioni non vengono implementate in entrambe le direzioni

L’associazione rappresenta responsabilità (i.e.clienti e rodini del

cliente: uno o più metodi associati al cliente indicano quali ordini un

cliente ha fatto)


Ereditarietà

Bisogna considerare tutte le classi

Si devono ricercare eventuali comportamenti comuni

Aggiunta

Si aggiungono nuove proprietà alle classi

Modifica

Si ridefiniscono/modificano operazioni esistenti


Ereditarieta’


Aggregazioni

Le aggregazioni sono una forma particolare di

associazione: una parte è in relazione con un oggetto

(part-of)

Corso

1..*

1..1

Curriculum


Aggregazioni

Relazione tutto/parti (non ci possono essere aggregazioni acicliche,

transitiva e a-simmetrica: viene formato un grafo parzialmente

ordinato, grafo senza cicli)

Una parte può appartenere a più aggregati ed esiste

indipendentemente dal tutto


Associazione o aggregazione

Aggregazione se due oggetti sono “uniti” da una relazione

part-of (i.e. auto con motore e ruote)

Associazione se due oggetti sono solitamente considerati

indipendenti

Curriculum 1..* Corso

1..1 Studente

3..10


Composizione

Una parte appartiene ad un unico “tutto” in un dato momento e non

ha vita indipendente (utile quando le parti devono essere allocate ed

inizializzate nel momento in cui il “tutto” è creato)

La Composizione può essere ricorsiva

Vantaggi in relazione ai rischi e problemi di memory management ed

il pericolo dei dangling pointers (si adatta bene alla garbage

collection)


Aggregazioni e Composizioni

Schhol

1..*

1

has

1..*

Department

1..*

1..*

0..1

assignedTo

member

*

Student

attends

1..*

Course

+chaiperson

0..1 1..*

teaches

Instructor

*

*


Associazioni riflessive

Un’associazione è riflessiva se coinvolge oggetti della stessa classe

oggetti multipli della stessa classe che collaborano in qualche

modo

Corso

0..*

0..*

Parte

Precedenze

Aggregazione


Esempio di diagramma delle classi


Diagramma delle Classi (II)


Relazioni durante l’analisi ed il progetto

Durante l’analisi si stabiliscono connessioni (associazioni e

aggregazioni) fra classi

Le connessioni sono date dalla natura stessa del problema

E’ molto utile pensare alle possibili molteplicità per esplicitare

assunzioni implicite

Durante il progetto

Le molteplicità vengono modificate e raffinate

Le associazioni stesse vengono raffinate


Quante classi?

Molte classi semplici implicano che ogni classe:

Incapsula meno intelligenza globale del sistema

È più riutilizzabile

È più facile da realizzare

Poche classi complesse implicano che ogni classe:

Incapsula più intelligenza globale del sistema

È meno riutilizzabile

È meno facile da realizzare

“one class should do one thing and do it well”


Attributi delle associazioni

L’attributo si mette all’interno dell’icona di una classe e si collega l’icona

all’associazione

La classe attributo può avere proprietà specifiche

È permesso una sola classe attributo per associazione

Studente

3..10

Grado

Corso


Classi associative

Persona

Compagnia

* 0..1

Impiego

periodo : LassoDiTempo

viene aggiunto un vincolo extra: ci può

esere solo un'istanza della classe

associativa tra ogni coppia di oggetti

associati


Da classe associativa a classe autonoma

Persona

1

0..1

*

0..1

Impiego

periodo : LassoDiTempo

*

Compagnia

1

in questo modo è permesso ad una

persona di avere più di un impiego nella

stessa compagnia


Classi Associative


Qualificatori

Un qualificatore è un attributo che può essere usato per ridurre

(precisare) la molteplicità delle associazioni (equivalente agli

array associativi, mappe, dizionari…)

Dipartimento

Id : ID

Professore

Dato un oggetto Dipartimento ed un valore

per un Id, c’è uno ed un solo oggetto Professore


Qualificatori

Ordine

Prodotto

+elemento della linea

0..1

LineaOrdine

ammontare:Numero

in relazione ad un ordine ci può essere

una sola linea d'ordine per ogni istanza

di prodotto: non si possono avere due

linee d'ordine relative allo stesso

prodotto nello stesso Ordine


Relazioni

Come le associazioni standard, l’associazione unidirezionale include

il nome di un ruolo (role name) e un valore di molteplicita’, ma

diversamente da quella bidirezionale contiene solo il nome del ruolo

e la molteplicita’ per la classe conosciuta (nella direzione

dell’associazione)

L’aggregazione è un tipo particolare di associazione in cui un

oggetto è in relazione con le sue parti, nella composizione “la parte

può appartenere ad un unico intero e vivono e muoiono con esso”

Le informazioni che definiscono il legame fra gli oggetti possono

essere rappresentati attraverso attributi, classi associative o classi

attributo

La molteplicità di un’associazione può essere definita per mezzo di

un qualificatore


Relazione di Dipendenza

Relazione fra due elementi dove il cambiamento in uno (supplier)

influenza l’altro (client)

Usata fra package implica la presenza di almeno una dipendenza fra

elementi dei package

Può essere di diversi tipi:

Abstraction (>, )

Binding (fra un elemento di un template al template)

Permission (, , )

Usage (, , ,…)

....

....


Relazione di Realizzazione

Relazione fra una specifica e la sua implementazione

Molto simile alla generalizzazione

A livello di specifica non c’e differenza fra realizzazione e

subtying


Realizzazione


Realizzazione e Dipendenza


InputStream


DataInput

OrderReader

DataInputStream

Realizzazione: una

classe implementa il

comportamento

Classi definite nel

package Java

standard java.io


Diagrammi dei Package

Permettono la partizione del sistema in sottosistemi (utili per

dominare la complessità del dominio)

raggruppamento delle classi correlate

esplicitazione delle dipendenze fra package

NewPackage


Diagramma dei Package


=> Esercitazione Biblioteca

=> Esercitazione Acquisti OnLine

Esercitazioni

More magazines by this user
Similar magazines