CLASS DIAGRAM PARTE 1 -...

31
Istituto di Scienza e Tecnologie dell'Informazione “A. Faedo” Software Engineering Laboratory CLASS DIAGRAM CLASS DIAGRAM PARTE 1 PARTE 1 UML The Unified Modeling Language Guglielmo De Angelis [email protected]

Transcript of CLASS DIAGRAM PARTE 1 -...

Istituto di Scienza e Tecnologie dell'Informazione “A. Faedo”Software Engineering Laboratory

CLASS DIAGRAMCLASS DIAGRAMPARTE 1PARTE 1

UML The Unified Modeling Language

Guglielmo De Angelis

[email protected]

SOFTWARE ENGINEERING LABORATORY

la famiglia di diagrammi UML

» structure diagrams» class diagram» object diagram» component diagram» deployment diagram» composite structure diagram» package diagram

» behavior diagrams» state machine diagram» activity diagram» use case diagram» interaction diagrams

» sequence diagram» communication

diagram» interaction overview

diagram» timing diagram

SOFTWARE ENGINEERING LABORATORY

object oriented : concetti fondamnetali

I concetti fondamentali del mondo Object Oriented sono:

» classe» oggetto» messaggio» metodo» operazione» ereditarietà» polimorfismo (non lo considereremo)

{

fondam

en

tali

SOFTWARE ENGINEERING LABORATORY

classe

» modella una famiglia di entità del dominio di applicazione» le proprietà (attributi) » il comportamento (operazioni)

» raggruppa un insieme coeso di entità» coesione vs. accoppiamento

SOFTWARE ENGINEERING LABORATORY

classe

» modella una famiglia di entità del dominio di applicazione» le proprietà (attributi) » il comportamento (operazioni)

» raggruppa un insieme coeso di entità» coesione vs. accoppiamento

solo per capire ... prendiamo un esempio dalla chimica

composto : una sostanza nella quale due o più elementi sono uniti da legami chimiciacqua, acido solforico, cloruro di sodio (sale),

aonossido di carboniosoluzioni e/o miscugli (eterogenei) : un insieme di

sostanze che può essere decomposto per mezzo di metodi di separazione fisicibirra, acqua e sale, acqua e sabbia, acqua e olio

SOFTWARE ENGINEERING LABORATORY

classe

» modella una famiglia di entità del dominio di applicazione» le proprietà (attributi) » il comportamento (operazioni)

» raggruppa un insieme coeso di entità» coesione vs. accoppiamento

» modella entità fisiche, concettuali o software» mammifero, autoveicolo, grafo... OK

SOFTWARE ENGINEERING LABORATORY

oggetto

» rappresenta un “elemento del mondo reale” che si sta modellando

» manifestazione concreta di un’astrazione» ha un’identità ben definita e incapsula uno

stato e un comportamento» ha associato un tipo (definito dalla classe)

» un oggetto si relaziona ad una classe allo stesso modo di come un dato si relaziona ad un tipo (nei ling. di progr.)

» un oggetto è una istanza di una classe

SOFTWARE ENGINEERING LABORATORY

oggetto

»animale» rettile» mammifero» canide» cane : Bobby, Pluto

» felino» gatto : Tom, GattoConGliStivali

SOFTWARE ENGINEERING LABORATORY

operazione, metodo, messaggio

» operazione : specifica di un meccanismo di interazione (prototipo,

segnatura) che un oggetto mette a disposizione di altri oggetti

» metodo : implementazione vera e propria dell'operazione di un oggetto

» messaggio : è la richiesta di un metodo appartenente ad un oggetto A verso un metodo di un oggetto B

SOFTWARE ENGINEERING LABORATORY

class diagram

» mostra un insieme di classi, interfacce e le relazioni tra loro» dipendenza, associazione, aggregazione,

composizione, generalizzazione

» può essere visto come un grafo dove i nodi sono classi/interfacce e gli archi relazioni

» possono contenere anche package o sottosistemi (usati per raggruppare elementi)

SOFTWARE ENGINEERING LABORATORY

class diagram

» modella la struttura statica di una applicazione» elementi specificati e/o composti a design-

time

» si usa per modellare:» gli elementi di una applicazione (vocabolario)

» una classe è l’astrazione di un elemento nel dominio del problema

» semplici collaborazioni» una classe non vive da sola ma si relaziona con

altre al fine di fornire, “cooperativamente”, un comportamento complesso

SOFTWARE ENGINEERING LABORATORY

come rappresento una classe in UML -1-

NOME

ATTRIBUTI

OPERAZIONI

SOFTWARE ENGINEERING LABORATORY

compartimento nome

» definisce il nome di un’entità» stringa di testo

» semplice stringa» path (prefisso + “::” + nome_classe)

» convenzione» lettera iniziale maiuscola

SOFTWARE ENGINEERING LABORATORY

comparto attributi

» modella le proprietà di una classe» per ogni attributo, l’insieme di valori (tipo)

che esso può assumere

» le proprietà sono condivise tra tutti gli oggetti appartenenti a quella classe (che hanno quella classe come tipo)

» nel nostro esempio:» un sensore è caratterizzato da

» identificativo (univoco) » frequenza di rilemento della misura» modalità standby» contatore del numero di istanze attive

SOFTWARE ENGINEERING LABORATORY

comparto operazione

» le operazioni manipolano lo stato degli oggetti ( ovvero il valore degli attributi ) » hanno una segnatura: un tipo, nome e lista

di parametri

» operations compartment specifica cosa può fare una classe (e non come), ovvero che servizi offre» vedi slide 9 (operazione, metodo, messaggio)

» ad esempio il nostro sensore :» setSamplingFrequency, getMeasure

SOFTWARE ENGINEERING LABORATORY

come rappresento una classe in UML -2-

NOME

ATTRIBUTI

OPERAZIONI

SOFTWARE ENGINEERING LABORATORY

come rappresento una classe in UML -3-

TYPE &&MULTIPLICITY

SOFTWARE ENGINEERING LABORATORY

come rappresento una classe in UML -4-

DEFAULT VALUE

SOFTWARE ENGINEERING LABORATORY

come rappresento una classe in UML -5-

OPERAZIONE DI CLASSE

ATTRIBUTO DI CLASSE

SOFTWARE ENGINEERING LABORATORY

attributi ed operazioni di classe

» attributi : il valore è condiviso tra tutte le istanze

» operazioni : non richiedono una istanza della classe per essere invocate

SOFTWARE ENGINEERING LABORATORY

“vedo” / “non vedo”

» principio di information hiding (encapsulation)» separazione tra “interfaccia” e implementazione

» semantica del dato vs. implementazione della variabile

» obiettivo : nascondere le scelte che possono essere soggette a cambiamenti

SOFTWARE ENGINEERING LABORATORY

la visibilità di un elemento della classe

PRIVATE

PROTECTED

PUBLIC

SOFTWARE ENGINEERING LABORATORY

visibilità – public && private – (map in Java)

public class Sensor {

  public void Sensor(){

    this.numberOfInstances ++; 

  // OK

  }

}

public class testClass {

  public void testMethod(){

    Sensor s = new Sensor();

    s.setSamplingFrequency();// OK

    s.samplingFrequency = 10; // ERRORE 

  }

}

SOFTWARE ENGINEERING LABORATORY

visibilità – protected – (map in Java)

public class Sensor {

  public void setMuteOn(){this.isMute = true;// OK

  }

}

public class testClass {

  public void testMethod(){

    Sensor s = new Sensor();

    s.isMute = true ; // ERRORE

  }

} anche se nel caso generale protect e private sembranoequivalenti, non è cosi. la differenza c'è con la generalizzazione. rimandiamo il discorso più avanti.

SOFTWARE ENGINEERING LABORATORY

public, private, protected ?!?!

» principio di information hiding (encapsulation)» separazione tra “interfaccia” e implementazione

» semantica del dato vs. implementazione della variabile

» obiettivo : nascondere le scelte che possono essere soggette a cambiamenti

SOFTWARE ENGINEERING LABORATORY

public, private, protected ?!?!

» principio di information hiding (encapsulation)» separazione tra “interfaccia” e implementazione

» semantica del dato vs. implementazione della variabile

» obiettivo : nascondere le scelte che possono essere soggette a cambiamenti» REGOLA PRATICA : gli attributi sono sempre

privati, le operazioni possono essere pubbliche

» chiaramente» l’interfaccia deve essere particolarmente stabile» esistono operazioni get/set per accedere agli

attributi

SOFTWARE ENGINEERING LABORATORY

interfacce

» collezioni di operazioni che sono utilizzate per specificare un servizio di una classe o di un componente

» definisce solo la segnatura delle operazioni

» le operazioni possono avere attributi di visibilità (come nelle classi)

» non tutti i linguaggi orientati agli oggetti hanno le interfacce» C++ NO , Java SI, UML SI

SOFTWARE ENGINEERING LABORATORY

interfacce

» collezioni di operazioni che sono utilizzate per specificare un servizio di una classe o di un componente

» definisce solo la segnatura delle operazioni

» le operazioni possono avere attributi di visibilità (come nelle classi)

» non tutti i linguaggi orientati agli oggetti hanno le interfacce» C++ NO , Java SI, UML SI

ATTENZIONE: l'idea di INTERFACCIA è molto diversa

dall'idea di CLASSE. le interfacce non definiscono

NESSUN TIPO DI STATOle interfacce non definiscono

NESSUN TIPO di attributi

SOFTWARE ENGINEERING LABORATORY

interfacce

SOFTWARE ENGINEERING LABORATORY

proviamoci!

Una prof di matematica mantiene un archivio di esercizi per il suo corso. Gli esercizi (univocamente identificati da un codice) sono di 3 tipi: algebra, geometria, logica. Per ogni esercizio già assegnato, deve essere possibile risalire al compito scritto (contrassegnato dalla data) in cui era incluso. Per tutti e soli gli esercizi già assegnati è anche riportata la soluzione (un testo). A ogni compito è associato il voto (un valore) ottenuto da ogni studente che ha sostenuto il compito. Uno studente è contrassegnato dal numero di matricola.

SOFTWARE ENGINEERING LABORATORY

soluzione (primissima approssimazione)