Matteo Baldoni
Dipartimento di Informatica - Universita` degli Studi di Torino C.so Svizzera, 185 - I-10149 Torino (Italy)
e-mail: [email protected] - URL: http://www.di.unito.it/~baldoni
Linguaggi di
Porgrammazione: Paradigmi di Programmazione
Una breve introduzione ai Diagrammi di Classe
Introduzione
• I diagrammi di classe (Class Diagram) sono una notazione (grafica) per la descrizione dei tipi degli oggetti (classi) che fanno parte di un sistema ed i tipi di relazioni (statiche) che esistono tra di questi (es: associazioni, sottotipo, ecc.)
• Fa parte dello standard dell’Object Management Group chiamato Unified Modeling Language (UML)
• Riferimento:
Martin Fowler, UML Distilled (2nd ed.), Addison Wesley Longman, Inc., 2000Una breve introduzione ai Diagrammi di Classe 3
Perche` usarli?
• La ragione fondamentale e` comunicare con un formalismo indipendente dai linguaggi di
programmazione i concetti che guidano la
realizzazione di un sistema orientato agli oggetti
• Un programma scritto in un linguaggio orientato agli oggetti e` spesso difficile da leggere e capire (non ha una struttura “sequenziale”)
• Documentare un programma
Un esempio
• Tratto da Martin Fowler, UML Distilled (2nd ed.)
• In OOP
innanzitutto si individuano le classi del progetto e poi i metodi associati (prima i tipi di dati e poi le operazioni per
Una breve introduzione ai Diagrammi di Classe 5
Classe
Descrive:
• il nome della classe
• gli attibuti della classe specificandone il tipo, la visibilita` e l’eventuale inizializzazione
• le operazioni (metodi) contenute nella classe e le loro signature
• In italico i nomi delle classi astratte
Class Name Attributi
Operazioni
Abstract Class Name
Attributi
• Simile alle associazioni ma il loro tipo e` associato a semplici classi come stringhe, interi, reali,
booleani. Indicano un valore piuttosto che un puntatore (o riferimento)
• Puo` essere associato un valore di inizializzazione.
• La visibilita` e` indicata mediate i simboli + (public),
# (protected) e - (private) Class Name
Attributi
Operazioni Esempio:
-cont: int -nome: String
#lati: double[]
+base: double
Una breve introduzione ai Diagrammi di Classe 7
Operazioni
• Corrispondono nei linguaggi di programmazione ai metodi delle classi
• Come per gli attributi la visibilita` e` indicata
mediate i simboli + (public),
# (protected) e - (private)
• In italico i nomi dei metodi astratti (in classi astratte) Class Name
Attributi
Operazioni Esempio:
+area: double +perimetro: double -ipotenusa: double
Generalizzazione
• Descrive la relazione di ereditarieta` tra le varie classi di un progetto
• Denota la specializzazione di una classe
• Le sottoclassi estendono una sopraclasse, le sottoclassi ereditano i metodi delle sopraclassi e definiscono nuove
funzionalita`
Sopraclasse
Sottoclasse 1
Sottoclasse 2
Una breve introduzione ai Diagrammi di Classe 9
Associazione
• Descrive le relazioni esistenti tra le istanze di varie classi
• E` possibile indicare direzzione di accessibilita`
(mediante una freccia)
• E` possibile indicare la molteciplicita`
class A {
private SetOf_A setOfObjsA;
}
class B {
private B objectOfA;
} Classe A
Classe B role A
role B 1
*
Classe C role C 0..1
role A 1
Aggregazioni e Composizione
• Aggregazione: descrive le relazioni “e` parte-di”
• Composizione: descrive il fatto che oggetti siano composti di altri oggetti
• Difficile separare
nettamente associazioni, aggegrazioni, composizione.
In genere aggregazioni e composizioni indicano una piu` stretta dipendenza tra le istanze delle classi
• Esprimono (insieme Classe
aggregazione
Classe
composizione
Una breve introduzione ai Diagrammi di Classe 11
Interfacce
• Le interfacce sono indicate esplicitamente mediante apposita dicitura
• Analogamente le classi astratte
• Nomi delle classi e nomi dei metodi (astratti) in italico
• Una freccia tratteggiata unisce una intefaccia ad una sua implementazione
• Un altro tipo di freccia tratteggiata esprime dipendenza (intefacce e abstract non hanno istanze)
<<interface>>
Interface Name
realizzazione
dipendenza
Implementing Class
Client Class