53
megaplanet UML : UML : Diagrammes de Classes Diagrammes de Classes Concepts avancés Concepts avancés Visibilité, Déclaration d'attributs et d'opérations Visibilité, Déclaration d'attributs et d'opérations Navigation, Composition, Aggrégation Navigation, Composition, Aggrégation Classe associative, Association qualifiée… Classe associative, Association qualifiée… Classe abstraite, Héritage multiple Classe abstraite, Héritage multiple Classification multiple, dynamique Classification multiple, dynamique Concepts à utiliser à bon escient, Concepts à utiliser à bon escient, lorsque nécessaire et uniquement lorsque nécessaire... lorsque nécessaire et uniquement lorsque nécessaire...

Uml: Diagrammes de classes -- Concepts avances --- 27

Embed Size (px)

Citation preview

Page 1: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet

UML :UML :Diagrammes de ClassesDiagrammes de Classes

Concepts avancésConcepts avancés

Visibilité, Déclaration d'attributs et d'opérationsVisibilité, Déclaration d'attributs et d'opérations

Navigation, Composition, AggrégationNavigation, Composition, Aggrégation

Classe associative, Association qualifiée…Classe associative, Association qualifiée…

Classe abstraite, Héritage multipleClasse abstraite, Héritage multiple

Classification multiple, dynamiqueClassification multiple, dynamique

Concepts à utiliser à bon escient, Concepts à utiliser à bon escient, lorsque nécessaire et uniquement lorsque nécessaire...lorsque nécessaire et uniquement lorsque nécessaire...

Page 2: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet

Concepts à utiliser à bon escient,Concepts à utiliser à bon escient,

uniquement uniquement lorsque nécessaire...lorsque nécessaire...

2

Page 3: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 3

UML ? ... une question de style et de contexteUML ? ... une question de style et de contexte

S'adapter ...S'adapter ...

� au niveau d'abstractionau niveau d'abstraction� au domaine d'applicationau domaine d'application� aux outils utilisésaux outils utilisés� aux savants et ignorantsaux savants et ignorants� ingénierie vs. retro-ingénierieingénierie vs. retro-ingénierie

Page 4: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 4

Concepts « avancés »Concepts « avancés »

Descriptions plus préciseDescriptions plus précise� (1) Attributs et opérations(1) Attributs et opérations� (2) Associations(2) Associations� (3) Généralisation(3) Généralisation

Page 5: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 5

(1) attributs et opérations(1) attributs et opérations

� Visibilité, Portée, Dérivation, …Visibilité, Portée, Dérivation, …� Enumérations et types de donnéesEnumérations et types de données� {frozen}, {addonly}, {ordered}, {nonunique}{frozen}, {addonly}, {ordered}, {nonunique}

Page 6: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 6

+ # - Visibilité des éléments+ # - Visibilité des éléments

� Eviter les dépendances entre classes et paquetagesEviter les dépendances entre classes et paquetages

++ public public visiblevisible

~~ package package visible dans le package uniquement visible dans le package uniquement

## protégé protégé visible dans la classe et ses sous-classesvisible dans la classe et ses sous-classes

-- privé privé visible dans la classe uniquementvisible dans la classe uniquement

� Lors de la conception et de l'implémentation, pas avant !Lors de la conception et de l'implémentation, pas avant !� La sémantique exacte dépend du langage de programmation !La sémantique exacte dépend du langage de programmation !

Page 7: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 7

Déclaration d'attributsDéclaration d'attributs

[/] [ [/] [ visibilitévisibilité ] ] nomnom [ [ :: typetype ] [ ] [card ordrecard ordre] [ ] [ == valeur-initialevaleur-initiale ] [ ] [ {{ propsprops... ... }} ] ]

exemples:exemples: age

+age

/age

- solde : Integer = 0

# age : Integer [0..1]

# numsecu : Integer {frozen}

# motsClés : String [*] {addOnly}

nbPersonne : Integer

� Adapter le niveau de détail au niveau d'abstractionAdapter le niveau de détail au niveau d'abstraction

Page 8: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 8

Déclaration d'opérationsDéclaration d'opérations

[/] [ [/] [ visibilitévisibilité ] ] nomnom [ [ (( paramsparams ) ) ] [ ] [ :: typetype ] [ ] [ {{ propsprops... ... }} ] ]

paramsparams := := [ [ in in | | outout| | inoutinout ] ] nomnom [ [ :: type] [ type] [ ==defaut ] [defaut ] [{{ propsprops... ... }} ] ]

/getAge()

+ getAge() : Integer

- updateAge( in date : Date ) : Boolean

# getName() : String [0..1]

+getAge() : Integer {isQuery}

+addProject() : { concurrency = sequential }

+addProject() : { concurrency = concurrent }

+main( in args : String [*] {ordered} )

� Adapter le niveau de détail au niveau d'abstractionAdapter le niveau de détail au niveau d'abstraction

Page 9: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 9

Enumérations et Types de donnéesEnumérations et Types de données

<<enumeration>>Jour

LundiMardiMercrediJeudiVendrediSamediDimanche

<<enumeration>>Titre

SecretairePresidentTresorierVicePresidentMembre

ExempleExempled’utilisationd’utilisation nom : String

joursDeReunion : Jour[*]dateDeCreation : Date

Association1901

<<datatype>>Date

compare()jour()mois()année()

x : integery : integer

<<datatype>>Point

<<datatype>>GeoLocation

� Utilisable comme type d’attributsUtilisable comme type d’attributs� Valeurs (pas d’identité)Valeurs (pas d’identité)

� Type de données typiquement Type de données typiquement définis dans des « librairies »définis dans des « librairies »

Page 10: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 10

(2) associations(2) associations

� Association uni/bi directionnelleAssociation uni/bi directionnelle� Composition et AggrégationComposition et Aggrégation� {frozen}, {addonly}, {ordered}, {nonunique}{frozen}, {addonly}, {ordered}, {nonunique}� Classes associativesClasses associatives� Associations qualifiéesAssociations qualifiées

Page 11: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 11

NavigationNavigation

Client Compte1

titulaire

Association unidirectionnelleOn ne peut naviguer que dans un sens

A priori, que dans les diagrammes de spécifications et d'implémentationEn cas de doute, ne pas mettre de flêche !!!

*

UML2.0

Page 12: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 12

CompositionComposition

Voiture Roue

composition = cas particulier d’association

+ contraintes décrivant la notion de "composant"...

4Pneu

Jante

1

1

Notion intuitive de "composants" et de "composites"

Page 13: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 13

CompositionComposition

Contraintes liées à la composition :1. Un objet composant ne peut être que dans 1 seul objet composite2. Un objet composant n’existe pas sans son objet composite3. Si un objet composite est détruit, ses composants aussi

Voiture Roue4

Pneu

Jante

1

1

Dépend de la situation modélisée !(Ex: vente de voitures vs. casse)

Page 14: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 14

0..1

CompositionComposition

DocumentChapitre Section

Figure

1..* 1..*

0..*

Contraintes liées à la composition :1. Un objet composant ne peut être que dans 1 seul objet composite2. Un objet composant n’existe pas sans son objet composite3. Si un objet composite est détruit, ses composants aussi

Page 15: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 15

CompositionComposition

DocumentChapitre Section

Figure

1..* 1..*1

0..*

1..*

Contrainte :le graphe d'objets forme un arbre (ou une forêt)

: document

: chapitre

: chapitre

: section

: section

: figure

: figure

: section

M1

M0

Page 16: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 16

CompositionComposition

Point

xy

Polygone 3..* Cercle

rayon1

M1

M0

Page 17: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 17

CompositionComposition

: Point

x = 0y = 0

: Point

x = 0y = 10

: Point

x = 10y = 0

: Polygone

c1 : Cercle

rayon = 5

: Point

x = 10y = 0

Point

xy

Polygone 3..* Cercle

rayon1

M1

M0

Page 18: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 18

Voiture

Volant : VolantRoue : Roue [4] sièges : Siège [*]

Autres notations pour la CompositionAutres notations pour la Composition

Voiture

Volant

Roue

1

4

Siège*

sièges

Voiture

Volant1

Roue 4

sièges : Siège*

Page 19: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 19

Associations intra vs. inter compositesAssociations intra vs. inter composites

Voiture

Volant1

Roue 4*

0..1

0..1

*

Volant

RoueVoiture

1

4

Marque

*1

Marque1

*

Exemple

Page 20: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 20

AggregationAggregation

aggregation = cas particulier d’association

+ contraintes décrivant la notion d'appartenance... ?

Partage possiblePas de concensus sur la signification exacte de l'aggrégationUtiliser avec précautions (ou ne pas utiliser...)

Point

xy

Figure **

Supprimé en UML2.0

Page 21: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 21

Composition vs. Aggregation Composition vs. Aggregation

OUI

NON

La présence de est parfois un indice d'incompétence :-)

Page 22: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 22

Contraintes prédéfinies sur les Contraintes prédéfinies sur les associationsassociations

{ ordered } : les éléments de la collection sont ordonnés { nonUnique } : répétitions possibles (UML2.0) { frozen } : fixé lors de la création de l ’objet, ne peut pas changer { addOnly } : impossible de supprimer un élément

RelevéDeCompte

LigneOpération*

{ordered,addOnly}

lignes

Peut être très utile!

Page 23: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 23

Classes associativesClasses associatives

Personne Socié téemployés

* 0..2

Pour associer des attributs et/ou des méthodes aux associations => classes associatives

Emploisalaire

augmenter()

Le nom de la classe correspond au nom de l’association(problème: il faut choisir entre forme nominale et forme verbale)

sociétés

Page 24: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 24

Classes associativesClasses associatives

jean

marie

salaire = 1500

xerox

employé

e1

ujfemployé

e2

salaire = 700

employé

e3

salaire = 1000

Le salaire est une information correspondant • ni à une personne, • ni à une société,

mais à un emploi (un couple personne-société).

Personne Sociétéemployés

* 0..2

Emploisalaire

augmenter()

sociétés

M1

M0

Page 25: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 25

Classes associativesClasses associatives

p1 Emploi>

s1

RAPPEL: Pour une association donnée, un couple d'objets ne peut être connectés que par un seul lien correspondant à cette association.(sauf si l'association est décorée par {nonunique} en UML2.0)

Emploi>

Cette contrainte reste vraie dans le cas où l’association est décrite à partir d ’une classe associative.

p1 s1

: Emploi

salaire = 1500

: Emploi

salaire = 700

Page 26: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 26

Classes associativesClasses associatives

Emploisalaire

Personne Socié téemployé

1 1

0..2 société*

Ci-dessus, une personne peut avoir deux emplois dans la même société

e2

p1 s1 e1

Personne Sociétéemployé

* 0..2

Emploisalaire

sociétés

Ci-dessus, une personne peut avoir deux emplois, mais pas dans la même société

p1 s1

e1

Page 27: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 27

Classes associatives : traductionClasses associatives : traduction

Arolea(s)

carda cardb

C

roleb(s)B

A1 1

BCrolebrolea

cardacardb

Il ne peut y avoir qu'un objet C entre un objet A et un objet B donné

Transformation systèmatique pour revenir auxconcepts de base

c[s] c[s]

Page 28: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 28

Classes associatives : traductionClasses associatives : traduction

Personneemployés

* 0..2

Emploi

sociétésSociét

é

Personne*1 1

sociétéSociétéEmploi

employé

0..2

Il ne peut y avoir qu'un Emploi entre une Personne et une Société

emplois emplois

Page 29: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 29

Virementmontant

Exemple 1Exemple 1

Compte

compteCrédité

*

Virementmontant

*compteDébité

Compte

compteCrédité

11compteDébité

* *Ou ?

M1

M0

c1 c2

v1

v2

Situationpossible ?

Peut-on avoir plusieurs virements entre deux comptes ?compteCrédité

compteCréditécompteDébité

compteDébité

Page 30: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 30

Virementmontant

Exemple 1Exemple 1

Compte

compteCrédité

*

Virementmontant

*compteDébité

Compte

compteCrédité

11compteDébité

* *

Il peut y avoir plusieurs virement entre deux comptes donnés

M0

c1 c2

v1

v2

Situationvalide compteCrédité

compteCréditécompteDébité

compteDébité

M1

Page 31: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 31

Exemple 2Exemple 2Joueur

joueurs

* *

ParticipationnbDeButs

matchs

M0

paul finale

p1

p2

Situationpossible ? match

matchjoueur

joueur

Joueurjoueur

1 1

ParticipationnbDeButs

match

participations

*

participations

Match

*

Un joueur peut il avoir plusieurs participations à un match donné ?

Match

Page 32: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 32

Exemple 2Exemple 2Joueur

joueurs

* *

ParticipationnbDeButs

matchs

M0

paul finale

p1

p2

Situationimpossible match

matchjoueur

joueur

Joueur Voiturejoueur

1 1

ParticipationnbDeButs

match

participations

*

participations

Match

*

Une seule participation à un match donné pour un joueur donné

Page 33: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 33

Exemple 3Exemple 3

Personneproprié taires

* *

CarteGrisedateDélivrance

voitures

M0

paul la106

cg1

cg2

Situationpossible ? voitures

voiturespropriétaires

proprié taires

Personne Voitureproprié taire

1 1

CarteGrisedateDélivrance

voiture

{ordered,nonUnique}

{ordered,nonUnique}

carteGrises

*

carteGrises

Voiture

Page 34: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 34

Exemple 3Exemple 3

Personneproprié taires

* *

CarteGrisedateDélivrance

voitures

M0

paul la106

cg1

cg2voitures

voiturespropriétaires

proprié taires

Personne Voitureproprié taire

1 1

CarteGrisedateDélivrance

voiture

{ordered}

* {ordered}

carteGrises

*

carteGrises

Voiture

Situation possible car on garde l'historique et paul peut acheter deux fois la même voiture

Page 35: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 35

Exemple 4Exemple 4

PersonneconjointsDécédés

*

Veuvage

datemontantAssurance

0..1

conjointLaisséVeuf

Ou ?

Personne

0..1

Veuvage

datemontantAssurance

*

conjointDécédéconjointLaisséVeuf 1 1

M0

paul marie

v1

v2

Situationpossible ? conjointsDécédés

conjointsDécédésconjointLaisséVeuf

conjointLaisséVeuf

Peut on toucher deux fois l'assurance ?

Page 36: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 36

Exemple 4Exemple 4

PersonneconjointsDécédés

*

Veuvage

datemontantAssurance

0..1

conjointLaisséVeuf

Personne

0..1

Veuvage

datemontantAssurance

*

conjointDécédéconjointLaisséVeuf 1 1

M0

paul marie

v1

v2

Situationillégale conjointsDécédés

conjointsDécédésconjointLaisséVeuf

conjointLaisséVeuf

Les deux solutions sont valides car la cardinalité 0..1 interdit cette situation de toute façon (cas particulier)

Ou

Page 37: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 37

Classes associativesClasses associatives

Les classes associatives sont des associations mais aussi des classes.

Personne Sociétéemployés

*

Emploisalaire

augmenter()

sociétés

0..2

FicheDePaye *{ordered}

Ajouter les notions de fiches de payes, de supervision et d’évaluation

Page 38: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 38

Classes associativesClasses associatives

Les classes associatives sont des associations mais aussi des classes.

Personne Sociétéemployés

*

Emploisalaire

augmenter()

sociétés

0..2

FicheDePaye *{ordered}

responsable

0..1

subordonnés *Supervision

Evaluation*

Page 39: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 39

Associations qualifiéesAssociations qualifiées

Repertoire Fichiernom0..1

Un qualifieur est un attribut (ou un ensemble d'attributs) dont la valeur sert à déterminer l'ensemble des instances associées à une instance via une association.

"Pour un répertoire, à un nom donné on associe qu'un fichier (ou 0 s'il existe aucun fichier de ce nom dans ce répertoire)."

Repertoire Fichier*

Correspond à la notion intuitive d'index absente ci-dessous

Page 40: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 40

ExempleExemple

Association1901 titre:Titre*

*Personne

0..1

*membres <<enumeration>>Titre

SecretairePresidentTresorier

Tresorier

President

Secretaire joe

sylvia

ahmed

fred

ass1

membres

membres

ass2 President

Page 41: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 41

Cardinalité des Associations QualifiéesCardinalité des Associations Qualifiées

Banque Comptenc0..1

0 comme cardinalité minimale, sauf si le domaine de l'attribut qualifieur est fini et toutes les valeurs ont une image.

Cas classique: cardinalité 0..1

Banque Employetitre**

Cas plus rare: cardinalité * (pas de contrainte particulière exprimée)

Echiquier Casenl : NumLignenc : NumCol 11

Cas plus rare: cardinalité 1 (généralement c'est une erreur)

Page 42: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 42

Attributs de l'associationAttributs de l'association

Repertoire Fichiernom0..1

Les attributs qualifieurs sont des attributs de l'association, pas de la classe

Exemple liens "hard" en Unix: un fichier peut correspondre à des noms différents dans des repertoires différents

*

r1

r2r2

f1

f2

nom="a"

nom="b"

nom="f"

Page 43: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 43

Problème classiqueProblème classique

Repertoire Fichiernom0..1

Souvent l'index est également un attribut de classe indexée

Solution correcte:

1

/nomLe nom du fichier correspond au nom qu'a le fichier dans le répertoire

2 erreurs communes:

Repertoire Fichiernom11

nom

Repertoire Fichiernom11

nom

Page 44: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 44

Classes associatives : traductionClasses associatives : traduction

Repertoire Fichiernom0..1*

Repertoire Fichier

nom

**

Contient

Contient

Transformation systèmatique pour revenir auxconcepts de base

Un répertoire contient 0 ou 1 fichier pour un nom donné

Les attributs du qualifieur sont des attributs de l'association

Page 45: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 45

Synthèse sur les associationsSynthèse sur les associations

<AssociationX

Cardinalités

ClasseA ClasseBroleA 0..*

attributZ

{frozen}

Nom de rôle

sens de lecture

AssociationX

Contrainte

Navigation

Classe associative

Composition

(ou aggregation )

Nom d ’association

x : string

Page 46: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 46

(3) généralisation(3) généralisation

� Ré-définitionRé-définition� Classes abstraitesClasses abstraites� Méthodes abstaitesMéthodes abstaites� Héritage simple vs. multipleHéritage simple vs. multiple� Classification simple vs. multipleClassification simple vs. multiple� Classification statique vs. dynamiqueClassification statique vs. dynamique

Page 47: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 47

Héritage et redéfinitionHéritage et redéfinition

Une sous classe peut redéfinir une méthode,à condition toutefois de rester compatible avec la définition originale

Figure

surface()déplacer()

Cercle

surface()

Polygone

surface()

Carré

surface()

Page 48: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 48

Classes et méthodes abstraitesClasses et méthodes abstraitesUne classe abstraite

• ne peut pas être instanciée• utile pour définir un comportement abstrait• peut contenir des méthodes abstraites

Un méthode abstraite• doit être définie dans une sous classe• est dans un classe abstraite

Figure

surface()déplacer()

Cercle

surface()

Polygone

surface()

Carré

surface()

Figure{abstract}

surface() {abstract}déplacer()

Figure

surface() déplacer()

Notations équivalentes

Triangle

surface()

Page 49: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 49

Classes abstraites du point de vue Classes abstraites du point de vue ensemblisteensembliste

Figure

surface()déplacer()

Cercle

surface()

Polygone

surface()

Figures

Cercles Polygones

Carré

surface()

Triangle

surface()

Triangles Carrésc1

c2

c3

c4

t1

t2

ca1

ca2

M0M1

Page 50: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 50

Classification vs. HéritageClassification vs. Héritage

M0

M1

Chien

medor

Chien Animal

medor

<<instanceOf>>

Classification Héritage/Spécialisation

coco

Page 51: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 51

Héritage multipleHéritage multiple

Une classe peut hériter de plusieurs super-classes

Interdit dans certains langages de programmation (p.e. Java et C#)

Chauffage AppareilÉ lectrique

Chauffage É lectrique Poel

Appareil

MicroOndes

Appareils

Chauffageselectriques

ChauffageAppareils

é lectriquesPoels

Microondes

M0M1

Page 52: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 52

Points liés à l’héritage Points liés à l’héritage et à la classificationet à la classification

Les modèles orientés-objets ne font pas tous les mêmes hypothèses

Héritage simple vs. héritage multipleUne classe peut elle hériter de plusieurs classes ?

Classification simple vs. classification multipleUn objet peut-il être simultanément instance de plusieurs classes?

Classification statique vs. classification dynamiqueUn objet peut-il changer de classe pendant l’exécution ?

Page 53: Uml: Diagrammes de classes -- Concepts avances --- 27

megaplanet 53

Hypothèses UML par défaultHypothèses UML par défault

Sauf si le contraire est indiqué explicitement, en UML les hypothèses par défaut sont :

Héritage multipleune classe peut hériter de plusieurs classes

Classification simpleun objet est instance d’une seule classe

Classification statiqueun objet est créé à partir d’une classe donnée et n’en change pas