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