Description des modèles de classes.
Dans cette partie sont présentés des concepts avancés:
- visibilités et autre éléments sur les attributs et opérations
- composition, association qualifiées, class associatives
- héritages avec différentes subtilités
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .
Uml: Diagrammes de classes -- Concepts avances --- 27
1. 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...
2. megaplanet
Concepts à utiliser à bon escient,Concepts à utiliser à bon escient,
uniquementuniquement
lorsque nécessaire...lorsque nécessaire...
2
3. 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
4. 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
5. 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}
6. 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
++ publicpublic visiblevisible
~~ packagepackage visible dans le package uniquementvisible 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 !
7. 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
8. megaplanet
8
Déclaration d'opérationsDéclaration d'opérations
[/] [[/] [ visibilitévisibilité ]] nomnom [[ (( paramsparams )) ] [] [ :: typetype ] [] [ {{ propsprops...... }} ]]
paramsparams :=:= [[ inin || 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
9. megaplanet
9
Enumérations et Types de donnéesEnumérations et Types de données
<<enumeration>>
Jour
Lundi
Mardi
Mercredi
Jeudi
Vendredi
Samedi
Dimanche
<<enumeration>>
Titre
Secretaire
President
Tresorier
VicePresident
Membre
ExempleExemple
d’utilisationd’utilisation nom : String
joursDeReunion : Jour[*]
dateDeCreation : Date
Association1901
<<datatype>>
Date
compare()
jour()
mois()
année()
x : integer
y : 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 typiquementType de données typiquement
définis dans des « librairies »définis dans des « librairies »
10. 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
13. megaplanet
13
CompositionComposition
Contraintes liées à la composition :
1. Un objet composant ne peut être que dans 1 seul objet composite
2. Un objet composant n’existe pas sans son objet composite
3. Si un objet composite est détruit, ses composants aussi
Voiture Roue
4
Pneu
Jante
1
1
Dépend de la situation modélisée !
(Ex: vente de voitures vs. casse)
17. megaplanet
17
CompositionComposition
: Point
x = 0
y = 0
: Point
x = 0
y = 10
: Point
x = 10
y = 0
: Polygone
c1 : Cercle
rayon = 5
: Point
x = 10
y = 0
Point
x
y
Polygone 3..* Cercle
rayon
1
M1
M0
18. megaplanet
18
Voiture
Volant : Volant
Roue : 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
Volant
1
Roue 4
sièges : Siège
*
19. megaplanet
19
Associations intra vs. inter compositesAssociations intra vs. inter composites
Voiture
Volant
1
Roue 4
*
0..1
0..1
*
Volant
Roue
Voiture
1
4
Marque
*
1
Marque
1
*
Exemple
20. megaplanet
20
AggregationAggregation
aggregation =
cas particulier d’association
+ contraintes décrivant la notion d'appartenance... ?
Partage possible
Pas de concensus sur la signification exacte de l'aggrégation
Utiliser avec précautions (ou ne pas utiliser...)
Point
x
y
Figure **
Supprimé en UML2.0
22. megaplanet
22
Contraintes prédéfinies sur lesContraintes 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éDe
Compte
Ligne
Opération*
{ordered,addOnly}
lignes
Peut être très utile!
23. 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
Emploi
salaire
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
24. megaplanet
24
Classes associativesClasses associatives
jean
marie
salaire = 1500
xerox
employé
e1
ujf
employé
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
Emploi
salaire
augmenter()
sociétés
M1
M0
25. 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
26. megaplanet
26
Classes associativesClasses associatives
Emploi
salaire
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
Emploi
salaire
sociétés
Ci-dessus, une personne peut avoir deux emplois, mais pas dans la même
société
p1 s1
e1
27. megaplanet
27
Classes associatives : traductionClasses associatives : traduction
A
rolea(s)
carda cardb
C
roleb(s)
B
A
1 1
BC
rolebrolea
cardacardb
Il ne peut y avoir qu'un objet C entre un
objet A et un objet B donné
Transformation
systèmatique
pour revenir aux
concepts de base
c[s] c[s]
28. megaplanet
28
Classes associatives : traductionClasses associatives : traduction
Personne
employés
* 0..2
Emploi
sociétés
Socié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
31. megaplanet
31
Exemple 2Exemple 2
Joueur
joueurs
* *
Participation
nbDeButs
matchs
M0
paul finale
p1
p2
Situation
possible ? match
matchjoueur
joueur
Joueur
joueur
1 1
Participation
nbDeButs
match
participations
*
participations
Match
*
Un joueur peut il avoir
plusieurs participations à
un match donné ?
Match
32. megaplanet
32
Exemple 2Exemple 2
Joueur
joueurs
* *
Participation
nbDeButs
matchs
M0
paul finale
p1
p2
Situation
impossible match
matchjoueur
joueur
Joueur Voiture
joueur
1 1
Participation
nbDeButs
match
participations
*
participations
Match
*
Une seule participation à
un match donné pour un
joueur donné
34. megaplanet
34
Exemple 3Exemple 3
Personne
propriétaires
* *
CarteGrise
dateDélivrance
voitures
M0
paul la106
cg1
cg2
voitures
voiturespropriétaires
propriétaires
Personne Voiture
propriétaire
1 1
CarteGrise
dateDélivrance
voiture
{ordered}
* {ordered}
carteGrises
*
carteGrises
Voiture
Situation possible car on
garde l'historique et paul
peut acheter deux fois la
même voiture
37. megaplanet
37
Classes associativesClasses associatives
Les classes associatives sont des associations mais aussi des classes.
Personne Société
employés
*
Emploi
salaire
augmenter()
sociétés
0..2
FicheDePaye *
{ordered}
Ajouter les notions de fiches de payes, de supervision et d’évaluation
38. megaplanet
38
Classes associativesClasses associatives
Les classes associatives sont des associations mais aussi des classes.
Personne Société
employés
*
Emploi
salaire
augmenter()
sociétés
0..2
FicheDePaye *
{ordered}
responsable
0..1
subordonnés *
Supervision
Evaluation
*
39. megaplanet
39
Associations qualifiéesAssociations qualifiées
Repertoire Fichiernom
0..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
41. megaplanet
41
Cardinalité des Associations QualifiéesCardinalité des Associations Qualifiées
Banque Comptenc
0..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 Case
nl : NumLigne
nc : NumCol
11
Cas plus rare: cardinalité 1 (généralement c'est une erreur)
42. megaplanet
42
Attributs de l'associationAttributs de l'association
Repertoire Fichiernom
0..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
r2
r2
f1
f2
nom="a"
nom="b"
nom="f"
43. megaplanet
43
Problème classiqueProblème classique
Repertoire Fichiernom
0..1
Souvent l'index est également un attribut de classe indexée
Solution correcte:
1
/nom
Le nom du fichier correspond au nom qu'a
le fichier dans le répertoire
2 erreurs communes:
Repertoire Fichiernom
11
nom
Repertoire Fichiernom
11
nom
44. megaplanet
44
Classes associatives : traductionClasses associatives : traduction
Repertoire Fichiernom
0..1*
Repertoire Fichier
nom
**
Contient
Contient
Transformation
systèmatique
pour revenir aux
concepts de base
Un répertoire contient 0 ou 1
fichier pour un nom donné
Les attributs du
qualifieur sont
des attributs de
l'association
45. megaplanet
45
Synthèse sur les associationsSynthèse sur les associations
<AssociationX
Cardinalités
ClasseA ClasseB
roleA 0..*
attributZ
{frozen}
Nom de rôle
sens de
lecture
AssociationX
Contrainte
Navigation
Classe associative
Composition
(ou aggregation )
Nom d ’association
x : string
46. 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
47. 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()
48. megaplanet
48
Classes et méthodes abstraitesClasses et méthodes abstraites
Une 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()
49. megaplanet
49
Classes abstraites du point de vueClasses abstraites du point de vue
ensemblisteensembliste
Figure
surface()
déplacer()
Cercle
surface()
Polygone
surface()
Figures
Cercles Polygones
Carré
surface()
Triangle
surface()
Triangles Carrés
c1
c2
c3
c4
t1
t2
ca1
ca2
M0M1
51. 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
É lectriquePoel
Appareil
MicroOndes
Appareils
Chauffages
electriques
Chauffage
Appareils
électriques
Poels
Micro
ondes
M0M1
52. megaplanet
52
Points liés à l’héritagePoints 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 multiple
Une classe peut elle hériter de plusieurs classes ?
Classification simple vs. classification multiple
Un objet peut-il être simultanément
instance de plusieurs classes?
Classification statique vs. classification dynamique
Un objet peut-il changer de classe pendant l’exécution ?
53. 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 multiple
une classe peut hériter de plusieurs classes
Classification simple
un objet est instance d’une seule classe
Classification statique
un objet est créé à partir d’une classe donnée
et n’en change pas