Upload
megaplanet20
View
401
Download
4
Embed Size (px)
Citation preview
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...
megaplanet
Concepts à utiliser à bon escient,Concepts à utiliser à bon escient,
uniquement uniquement lorsque nécessaire...lorsque nécessaire...
2
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
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
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}
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 !
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
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
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 »
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
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
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"
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)
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
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
megaplanet 16
CompositionComposition
Point
xy
Polygone 3..* Cercle
rayon1
M1
M0
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
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*
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
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
megaplanet 21
Composition vs. Aggregation Composition vs. Aggregation
OUI
NON
La présence de est parfois un indice d'incompétence :-)
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!
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
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
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
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
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]
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
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é
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
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
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é
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
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
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 ?
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
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
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*
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
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
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)
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"
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
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
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
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
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()
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()
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
megaplanet 50
Classification vs. HéritageClassification vs. Héritage
M0
M1
Chien
medor
Chien Animal
medor
<<instanceOf>>
Classification Héritage/Spécialisation
coco
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
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 ?
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