Diagrammes de classes Diagrammes d`objets Diagrammes de
Transcription
Diagrammes de classes Diagrammes d`objets Diagrammes de
II.3. Diagrammes de
classes
II.3. Diagrammes de
classes
1. Introduction
Introduction
Les diagrammes d'UML
Diagramme
Diagramme
de structure
Diagramme
de classes
Diagramme de
composant
Diagramme
de package
Diagramme de
déploiement
Diagramme
comportemental
Diagramme
d’objets
Diagramme
d’activités
Diagramme de
structure composite
Diagramme
d’interactions
Diagramme de
séquence
Diagramme vue
d’ensemble des
interactions
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
Diagramme de
cas d’utilisation
Diagramme de
transition d’état
Diagramme de
communication
Diagramme
de timing
3
Introduction
Les diagrammes d'UML
Diagramme
Diagramme
de structure
Diagramme
de classes
Diagramme de
composant
Diagramme
de package
Diagramme de
déploiement
Diagramme
comportemental
Diagramme
d’objets
Diagramme
d’activités
Diagramme de
structure composite
Diagramme
d’interactions
Diagramme de
séquence
Diagramme vue
d’ensemble des
interactions
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
Diagramme de
cas d’utilisation
Diagramme de
transition d’état
Diagramme de
communication
Diagramme
de timing
4
Diagrammes de classes
Diagramme central du modèle
Montre les classes et leurs relations
statiques
Le plus riche en notations
Les erreurs dans ce diagramme ont
souvent un impact sur les autres
diagrammes
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
5
II.3. Diagrammes de
classes
2. Concepts fondamentaux
Diagrammes de classes
Concepts fondamentaux
Classe
Nom
Attributs
Opérations
Commande
dateDeRéception
estPrépayée
lignes
prix
expédier()
fermer ()
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
7
Diagrammes de classes
Concepts fondamentaux
Commentaire
Commentaire
Commande
dateDeRéception
estPrépayée
lignes
prix
-- Commentaire
commentaire
expédier()
fermer()
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
8
Diagrammes de classes
Concepts fondamentaux
Attributs
Visibilité nom:type multiplicité=valDefaut {contrainte}
Visibilité : + public, - privé, # protégé
Nom : eq. nom d’un champ
Type : eq. type d’un champ
Multiplicité : indique la nature du champ ([0..1] pointeur, [1]
valeur, [x..*] conteneur)
valDefaut : valeur par défaut…
Contrainte : information supplémentaire sur l’attribut
Exemple : -insee:string[1]="" {readOnly}
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
9
Diagrammes de classes
Concepts fondamentaux
Multiplicité
Équivalent aux cardinalités
Attention au sens de lecture !
0..x : optionnel
1 : unique et obligatoire
x..* : multiple
A..B : borné
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
10
Diagrammes de classes
Concepts de base
Opérations
Visibilité nom(liste param):type_retour{propriété}
Liste param : chaque paramètre peut être détaillé
comme un attribut
On ne modélise que les opérations qui correspondent
à des responsabilités particulières de la classe (pas
d’accesseurs, etc.)
Exemple : +fact(n:int):int {récursive}
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
11
Diagrammes de classes
Concepts de base
Représentation détaillée (conception)
Commande
-dateDeRéception[0..1] : Date
#estPrépayée[1] : Boolean = false
-lignes[1..*] : LigneCommande
-prix[1]
+expédier() : Boolean
+fermer()
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
12
Diagrammes de classes
Concepts de base
Associations unidirectionnelles
Permet de représenter les attributs dont le type est
une classe du problème
Supporte les mêmes informations qu’un attribut
(cardinalités, visibilité, contraintes, etc.)
rôle
Commande
-dateDeRéception[0..1] : Date
#estPrépayée[1] : Boolean = false
-prix[1]
+expédier() : Boolean
+fermer()
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
-lignes
1..*
LigneCommande
-quantité : Integer
-prixunitaire : Double
+calculerTotal() : Double
13
Diagrammes de classes
Concepts de base
Associations bidirectionnelles
Lien structurel fort
Nécessite la synchronisation des deux classes
Personne
-nom : String
-propriétaire
1
-voitures
Voiture
-modèle : String
*
Ou bien
Personne
-nom : String
-propriétaire
1
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
-voitures
Voiture
-modèle : String
*
14
Diagrammes de classes
Concepts de base
Associations bidirectionnelles
Possibilité de ne nommer que l’association
Utilisation d’un verbe accompagné d’un sens de
lecture
Personne
-nom : String
Voiture
-modèle : String
possède4
1
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
*
15
Diagrammes de classes
Concepts de base
Composition forte : composition
Exprime « une partie de »
Une classe composant peut faire l’objet de plusieurs compositions
Un objet de la classe composant ne peut appartenir qu’à un seul
objet d’un composé
Cycles interdits !
Durées de vie identiques (destructions synchronisées)
La « navigabilité » peut être bidirectionnelle ou non
-sommets
1
Point
Polygone
3..*
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
Cercle
-centre
16
Diagrammes de classes
Concepts de base
Composition faible : agrégation
Sémantique identique à la composition
Le partage des objets composants est autorisé
Durées de vie différentes
-salariés
Entreprise
*
Personne
1
*
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
*
Association
-adhérents
17
Diagrammes de classes
Concepts de base
Composition vs. agrégation : exemples
Cheval
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
?
Foie
18
Diagrammes de classes
Concepts de base
Composition vs. agrégation : exemples
Cheval
Foie
1
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
1
19
Diagrammes de classes
Concepts de base
Composition vs. agrégation : exemples
Voiture
?
Moteur
?
Roues
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
?
Carrosserie
20
Diagrammes de classes
Concepts de base
Composition vs. agrégation : exemples
Voiture
1
1
1
1
Moteur
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
4
Roues
1
Carrosserie
21
Diagrammes de classes
Concepts de base
Composition vs.
agrégation : exemples
Cheval
?
Selle
?
Sangle
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
?
Tapis
?
Etrier
22
Diagrammes de classes
Concepts de base
Composition vs.
agrégation : exemples
Cheval
*
appartient
1
Selle
*
*
appartient
1
Sangle
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
*
appartient
1
Tapis
appartient
2
Etrier
23
Diagrammes de classes
Concepts de base
Agrégation
Identification d’une composition (ou agrégation)
Assemblage-parties
Collection-membres
Contenant-contenu
Modéliser autant que possible les compositions/agrégations
Augmente la lisibilité du modèle
Simplifie l’implémentation
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
24
Diagrammes de classes
Concepts de base
Généralisation
= héritage
Forme
Polygone
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
Cercle
25
Diagrammes de classes
Concepts de base
Attention à ne pas confondre héritage et
instanciation
Voiture
-modèle
-cylindrée
-couleur
Ferrari
NON!
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
26
Diagrammes de classes
Concepts de base
Exercice
distributeur de boisson
Servir
boisson
Consommateur
1. Recenser les classes
2. Identifier les relations
3. Créer un diagramme de classes simplifié
4. Créer un diagramme de classes détaillé
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
27
II.3. Diagrammes de
classes
2. Concepts avancés
Diagrammes de classes
Concepts avancés
Attributs et opérations statiques
Correspondent aux membres static en C++ ou Java
Indiqué par un souligné
Réservation
-identifiant : Integer
-date : Date
-compteur : Integer
+getProchainIdentifiant() : Integer
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
29
Diagrammes de classes
Concepts avancés
Classes utilitaires
Structuration des variables (et constantes) globales
Représentées par des classes stéréotypées
Les données membres sont statiques
«utility»
VariablesGlobales
-var1
-var2
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
30
Diagrammes de classes
Concepts avancés
Opérations et classes abstraites
Notés en italique
Les classes abstraites ont les mêmes relations que
les autres classes
Liste
bool arrivé = begin();
int t = 0;
while (next())
t++;
return t;
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
+begin() : Boolean
+next() : Boolean
+getValue() : Object
+isEmpty() : Boolean
+size() : Integer
+get(in i : Integer) : Object
31
Diagrammes de classes
Concepts avancés
Concrétisation = héritage
Liste
+begin() : Boolean
+next() : Boolean
+getValue() : Object
+isEmpty() : Boolean
+size() : Integer
+get(in i : Integer) : Object
ListeChainee
Element
-valeur : Object
-suivant : Element
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
1
-eltDébut
+begin() : Boolean
+next() : Boolean
+getValue() : Object
+isEmpty() : Boolean
32
Diagrammes de classes
Concepts avancés
Interfaces
« Sorte » de classe définie exclusivement par des
fonctions abstraites
Sert à l’implémentation d’autres classes et non à leur
structure
Deux notations :
«interface»
Conteneur
+get(in i : Integer) : Object
+size() : Integer
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
Conteneur
33
Diagrammes de classes
Concepts avancés
Interfaces
Une interface ne peut
avoir d’association
Elle peut avoir:
1 - Des
implémentations
«interface»
Conteneur
+get(in i : Integer) : Object
+size() : Integer
Liste
Liste
+begin() : Boolean
+next() : Boolean
+getValue() : Object
+isEmpty() : Boolean
+size() : Integer
+get(in i : Integer) : Object
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
Conteneur
+begin() : Boolean
+next() : Boolean
+getValue() : Object
+isEmpty() : Boolean
+size() : Integer
+get(in i : Integer) : Object
34
Diagrammes de classes
Concepts avancés
2
Des dépendances
Commande
-lignes[*]
Commande
-lignes[*]
«interface»
Conteneur
+get(in i : Integer) : Object
+size() : Integer
+begin() : Boolean
+next() : Boolean
+getValue() : Object
+isEmpty() : Boolean
+size() : Integer
+get(in i : Integer) : Object
-lignes[*]
Conteneur
Liste
Liste
+begin() : Boolean
+next() : Boolean
+getValue() : Object
+isEmpty() : Boolean
+size() : Integer
+get(in i : Integer) : Object
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
Commande
Conteneur
Liste
+begin() : Boolean
+next() : Boolean
+getValue() : Object
+isEmpty() : Boolean
+size() : Integer
+get(in i : Integer) : Object
35
Diagrammes de classes
Concepts avancés
Association qualifiée
Assimilable à une table associative
Le qualificateur (ex: produit) permet d’identifier 0 ou une
ligne de la commande
Pour manipuler (ajouter, consulter, etc.) une ligne d’une
commande, il faut obligatoirement un produit
Commande
-dateDeRéception[0..1] : Date
#estPrépayée[1] : Boolean = false
-prix[1]
+expédier() : Boolean
+fermer()
-lignes
produit
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
0..1
LigneCommande
-quantité : Integer
-prixunitaire : Double
+calculerTotal() : Double
36
Diagrammes de classes
Concepts avancés
Classes-associations
Permet d’ajouter des attributs, des opérations, etc.
sur des liens
Personne
-numen
-nom
-adresse
*
*
Emploi
-numéro
-composante
-quotité
Emploi occupé
-date_début
-date_fin
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
37
Diagrammes de classes
Concepts avancés
Implémentation équivalente à :
Personne
-numen
-nom
-adresse
1
*
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
Emploi
Emploi occupé
-date_début
-date_fin
*
1
-numéro
-composante
-quotité
38
Diagrammes de classes
Concepts avancés
Association n-aire
Créneau
-date
-heure
-durée
Salle
Filière
Enseignant
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
39
Diagrammes de classes
Concepts avancés
Contraintes
Information supplémentaire sur un élément
Placée entre accolade
Peut être un texte en langage naturel
Ou bien OCL (Object Constraint Language)
1 - Repose sur la logique propositionnelle
2 - Évite les ambiguïtés du langage naturel
3 - Il existe des outils pour OCL
4 - Permet de décrire les pré et post-conditions, ainsi que les
invariants sur un élément du modèle (attribut, rôle,
opération, etc.)
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
40
Diagrammes de classes
Concepts avancés
Exemples : soit le diagramme de classes
1
-lesChambres
Hôtel
-adresse : String
*
Chambre
-étage : Integer
-numéro : Integer
-nbLits : Integer
-directeur
-laChambre
*
1
-lesCLients
Personne
-nom : String
-prénom : String
-age : Integer
-lesRésidents
*
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
41
Diagrammes de classes
Concepts avancés
On peut exprimer les contraintes :
// Jamais de treizième étage
context Chambre inv:
self.étage <> 13
// Pas plus de résidents que de lits sauf s’il y a un
enfant de moins de 4 ans
context Chambre inv:
lesRésidents->size <= nbLits or
(lesRésidents>size = nbLits + 1 and
lesRésidents->exists(p : Personne | p.âge < 4))
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
42
Diagrammes de classes
Concepts avancés
Contraintes entre associations
1
Enseigne4
Université
-lesEnseignants
1
étudie4
-affectation
{ou}
*
Personne
*
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
-lesEtudiants
43
Diagrammes de classes
Concepts avancés
Contraintes de l’héritage
{incomplete} : les classes dérivées ne couvrent pas
toute la classe de base
{complete} : les classes dérivées couvrent toutes les
possibilités de la classe de base
{disjoint} : les classes dérivées sont disjointes donc
pas d’héritage multiple
{overlapping} : l’héritage multiple est possible
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
44
Diagrammes de classes
Concepts avancés
Exemples
Cheval
Equidé
Cheval
{incomplete}
{overlapping }
Ane
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
Mâle
{complete}
{disjoint}
Femelle
45
Diagrammes de classes
Concepts avancés
Dépendances
Relation sémantique mais non structurelle
La modification de la cible peut avoir des
répercussions sur la source
À éviter en analyse car faible intérêt sémantique
Source
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
Cible
46
Diagrammes de classes
Concepts avancés
Plusieurs stéréotypes :
« call » : la source appelle une opération de la cible
« create » : la source crée une instance de la cible
« permit » : le source est amie de la cible
« use » : la source a besoin de la cible pour être
implémentée
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
47
Diagrammes de classes
Concepts avancés
Classe paramétrable
Le type d’un champ est un paramètre de la classe
Doit être liée (bind) avec une classe qui instancie le
paramètre
T
ListePersonne
«bind»(Personne)
-élément : Personne
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
Liste
-élément : T
48
Diagrammes de classes
Concepts avancés
Attributs dérivés
Attribut dont la valeur est calculée à partir d’autres
attributs
Souvent associé à une contrainte qui donne la règle
de calcul
Produit
-prixHT
-TVA
-/prixTTC {prixTTC = prixHT*TVA}
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
49
Diagrammes de classes
Concepts avancés
Quelques anomalies
Classes sans relations
Classes sans attribut
Classes sans opérations
Relation 1-1
Pas forcément à supprimer, mais toujours se
poser la question
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
50
Diagrammes de classes
Concepts avancés
La pratique
Ne pas utiliser systématiquement toutes les notations
1 - En phase d’analyse : concepts fondamentaux
2 - En phase de conception/implémentation : concepts
avancés
Bien utiliser UML ne veut pas dire bien modéliser!
1 - La théorie ne remplace pas l’expérience
2 - Les design pattern peuvent améliorer le modèle de
conception
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
51
Diagrammes de classes
Concepts avancés
Exemple :
Un contrat d’édition est un accord entre un auteur
(éventuellement collectif) et un éditeur.
2 Les conditions générales d’un contrat sont stipulées dans un
contrat type.
3 Les clauses particulières sont ajoutées au contrat.
4 Le contrat ne concerne qu’un ouvrage, qui ne peut être édité
chez un autre éditeur.
1
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
52
Diagrammes de classes
Concepts avancés
Auteur
Editeur
0..*
0..*
*
{disjoint , complete}
3 /édite
*
AuteurIndividuel
2..* regroupe
0..*
AuteurCollectif
ContratEdition
*
1
3 est régit par
{ordered }
porte sur 4
Ouvrage
1
ContratType
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
53
II.4. Diagrammes d'objets
Introduction
Les diagrammes d'UML
Diagramme
Diagramme
de structure
Diagramme
de classes
Diagramme de
composant
Diagramme
de package
Diagramme de
déploiement
Diagramme
comportemental
Diagramme
d’objets
Diagramme
d’activités
Diagramme de
structure composite
Diagramme
d’interactions
Diagramme de
séquence
Diagramme vue
d’ensemble des
interactions
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
Diagramme de
cas d’utilisation
Diagramme de
transition d’état
Diagramme de
communication
Diagramme
de timing
55
Diagrammes d'objets
Caractéristiques
Montre les objets et leurs relations
L’état des objets est indiqué
Utile lorsque les structures de classe sont
complexes
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
56
Diagrammes d'objets
Exemple
Grace : Personne
nom = Kelly
prénom = Grace
conjoint
-enfants
0.
.*
mère
1
Personne
-père
1
-mère
-nom
-prénom
Steph : Personne
Albert : Personne
nom = de Monaco
prénom = Stéphanie
nom = de Monaco
prénom = Albert
père
conjoint
-conjoint
0..*
Régnier : Personne
nom = de Monaco
prénom = régnier
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
57
II.5. Diagrammes de
paquets
Introduction
Les diagrammes d'UML
Diagramme
Diagramme
de structure
Diagramme
de classes
Diagramme de
composant
Diagramme
de package
Diagramme de
déploiement
Diagramme
comportemental
Diagramme
d’objets
Diagramme
d’activités
Diagramme de
structure composite
Diagramme
d’interactions
Diagramme de
séquence
Diagramme vue
d’ensemble des
interactions
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
Diagramme de
cas d’utilisation
Diagramme de
transition d’état
Diagramme de
communication
Diagramme
de timing
59
Diagrammes de paquets
Caractéristiques
Paquet = regroupement d’éléments
Paquet de classes, de cas d’utilisation, de paquets, etc.
2 Parfois appelé paquetage, ou package
3 Renforce la modularité et la cohérence du modèle global
4 Un élément ne peut appartenir qu’à un seul paquet
1
Gestion des
clients
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
60
Diagrammes de paquets
Dépendances entre les paquets
Gestion des
comptes
Gestion des
clients
Un paquet A dépend d’un paquet B si au moins un élément
de A dépend d’un élément de B
2 La modification du paquet utilisé peut entraîner la
modification du paquet utilisateur mises à jour
synchronisées
1
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
61
Diagrammes de paquets
Intérêts:
1
Conserver une vue synthétique
Plus d’une douzaine d’éléments dans un diagramme
décomposition en paquets
= découpage ascendant
2
Organiser l’analyse d’un problème
Montrer les parties (paquets) cohérentes
Chaque partie est ensuite raffinée
= découpage descendant
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
62
Diagrammes de paquets
Remarques
Isoler des parties réutilisables
Contribue à la vue architecturale
Les paquets représentent les couches logicielles
Ont parfois une traduction directe dans les LOO
(package en JAVA, espace de noms en C++,
etc.)
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
63
Diagrammes de paquets
Remarques
Décomposer n’est pas simple
1
2
Conserver la logique métier
Les structures d’un modèle guident la
décomposition. Par exemple:
Un arbre d’héritage
Une arborescence de composition de classes
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
64
Diagrammes de paquets
Remarques
Éviter les dépendances circulaires couplage
fort entre les paquets
Gestion des
comptes
Gestion des
clients
Gestion des
produits
Module Génie Logiciel : Cours d'Analyse Orientée Objet.
65