Julie Vachon, Hiver 2006
IFT2251 : Génie logiciel
Chapitre 4. Analyse orientée objets
Section 2. Diagramme de classesChap.4, Sect.2, p.2 Copyrights Julie Vachon, 2006
4.2. Diagramme de classes
1. Classe
Attribut Opérations Visibilité 2. Associations
Multiplicité, documentation, navigabilité Agrégation
Composition Association qualifiée Association dérivée Classe d’association 3. Généralisation
4. Pour préciser la spécification
Contraintes, notes, stéréotypes
Chap.4, Sect.2, p.3 Copyrights Julie Vachon, 2006
Références
Satzinger et al.
Chapitre 5. pages 176–183
Chapitre 7
Ghezzi et al.
Section 4.6.
Chap.4, Sect.2, p.4 Copyrights Julie Vachon, 2006
Introduction
Permet de décrire la structure statique du logiciel avec des
Classes (attributs, opérations)
Relations : associations, agrégations, compositions, héritage, dépendance
Distributeur + choisirBoisson() + verserBoisson() Écran
+ afficherMonnaie() + afficherNonDisp()
GestionMonnaie +insérerMonnaie() +retournerMonnaie()
Boisson +getPrix() +getQuantité() +setQuantité()
Thé froid Coca
1 * 1 1
Chap.4, Sect.2, p.5 Copyrights Julie Vachon, 2006
4.2.1. Classe
Classe
Remarque:
UML distingue opérations et méthodes:
Une méthode est une implémentation d’une opération.
Plusieurs méthodes peuvent implémenter une même opération.
Nom_de_la_classe
Attributs
Opérations
Chap.4, Sect.2, p.6 Copyrights Julie Vachon, 2006
Classe
Attributs
<visibilité> <portée> <nom_attribut> :
<type>
= <valeur_initiale>Nom_attribut: choisir un nom significatif Type
Types primitifs : boolean, real, integer, string, date, et les types énumérés (définis par l’utilisateur)
Types définis par une classe (interface)
Remarque: un modèle nedevrait pascomporter d’attribut de type classe, ces attributs (références sur des instances) sont représentés par des associations.
Valeur_initiale: valeur par défaut
Portée: attribut de classe (indiqué par un $ ou en soulignant le nom) ou d’instance.
Chap.4, Sect.2, p.7 Copyrights Julie Vachon, 2006
Classe
Opérations d’une classe
<visibilité> <portée> <nom_op>
(<liste_paramètres>) : <type_résultat>
Nom_op: choisir un nom significatif Liste_paramètres
<direction> <nom_paramètre> : <type> = valeur_initiale
<direction> := in | out | inout Type_résultatet type: primitif ou classe
Portée: opération de classe (indiqué par un $ ou en soulignant le nom) d’instance
Chap.4, Sect.2, p.8 Copyrights Julie Vachon, 2006
Classe
Visibilité
La visibilité d’un élément (attribut, opération, classe, etc.) est représentée par un des trois symboles : +, – ou #
Public
(+) : élément visible par toutes les instances de toutes les classes
Private
(–) : élément visible que par les instances de la classe
Protected
(#) : élément visible par toutes les
instances de la classe et de ses sous-classes
Chap.4, Sect.2, p.9 Copyrights Julie Vachon, 2006
Classe
Exemple
Employé – nom : String;
– date_embauche : Date – salaire : Integer;
– congés_autorisés : Integer;
– congés_pris : Integer;
nb_employé : Integer + congés_restant() : Integer salaire_moyen() : Integer
Chap.4, Sect.2, p.10 Copyrights Julie Vachon, 2006
4.2.2. Association
Lien = Connexion (physique ou conceptuelle) entre deux instances
Association = Ensemble de liens ayant une sémantique commune
Réflexive, binaire ou n-aire (peu fréquent)
Spécification d’une association
Cardinalité
Forme verbale (optionnel)
Rôles (optionnel)
Chap.4, Sect.2, p.11 Copyrights Julie Vachon, 2006
Association
Multiplicité (ou cardinalité)
Précise le nombre d’instances participantes
min..max
Où min et max sont des entiers
max
peut être non borné: ∗
Exemples
1..5 : entre une et cinq instances
6 : implique exactement six instances
2..∗ : implique deux ou plusieurs instances
∗
: implique plusieurs instances (ou aucune, 0..∗)
Chap.4, Sect.2, p.12 Copyrights Julie Vachon, 2006
Association
Multiplicité
Polygone forme sommet Point
∗ 3..∗
Professeur est_recteur
enseigne
Université
1 0..1
1..∗ 0..1
Chap.4, Sect.2, p.13 Copyrights Julie Vachon, 2006
Association
Cardinalité – Association n-aire
Pour un cours et un étudiant donné, il peut y avoir un (l’étudiant est inscrit) ou aucun professeur (l’étudiant n’est pas inscrit)
Un professeur peut donner plusieurs cours suivis par le même étudiant
Dans un cours, un professeur enseigne à plusieurs étudiants
Cours Professeur
Étudiant
inscription
∗ 0..1
∗
Chap.4, Sect.2, p.14 Copyrights Julie Vachon, 2006
Association
Documentation par noms de rôle
Spécifie la fonction d’une classe (de ses instances) pour une association
Information indispensable pour les associations réflexives
Personne épouse
mari 0..1 0..1
Chap.4, Sect.2, p.15 Copyrights Julie Vachon, 2006
Association
Documentation par une forme verbale
Nom : verbe ou substantif, près de la ligne qui représente l’association
Direction indiquée par triangle plein : précise le sens de lecture de l’association
Une association peut avoir deux noms, un par direction
Hôtel héberge Personne
est hébergée par
∗ 0..1
Chap.4, Sect.2, p.16 Copyrights Julie Vachon, 2006
Association
Association à navigabilité restreinte
Par défaut, une association est bidirectionnelle
Pour forcer une association unidirectionnelle et ainsi indiquer que les instances d’une classe ne peuvent être identifiées par les instances de l’autre, on restreint la navigabilité de cette façon:
À partir d’un électeur, on peut directement identifier le candidat pour lequel il a voté.
À partir d’un candidat, on ne peut pas retrouver directement les électeurs qui ont voté pour lui.
Électeur ∗ vote 0..1 Candidat
Chap.4, Sect.2, p.17 Copyrights Julie Vachon, 2006
Association
Agrégation
Association qui exprime une union marquéeet une relation de subordinationentre deux instances (agrégat, instance agrégée) Inclusion « possède » ou « a pour partie ».
Relation asymétrique, transitive.
Une instance agrégée peut être impliqué dans plus d’une association. [N’implique pas d’unicité]
Une instance agrégée peut exister sans son agrégat et inversement, i.e., les cycles de vie de l’agrégat et de l’instance agrégée sont indépendants. [N’implique pas de dépendance existencielle]
Chemin Segment
Agrégat Agrégé
Chap.4, Sect.2, p.18 Copyrights Julie Vachon, 2006
Association
Composition
Agrégation forteentre deux instances (un composite et un composant)
Inclusion « est composé (physiquement) de »
À un même moment, un composant ne peut appartenir qu’à un seul composite. [Unicité exigée]
Si le composite est détruit (ou copié), ses composants le sont aussi. [Implique une dépendance existiencielle]
Les composants peuvent être détruits avant le composite
Immeuble Appartement
Composite
Chap.4, Sect.2, p.19 Copyrights Julie Vachon, 2006
Association
Composition
Livre 1 ∗ Page
Paragraphe
∗ 1 Organisation
Comité exécutif
Membre 1 ∗
1 3..∗
0..1
La destruction d’un livre entraîne la destruction de ses pages et des paragraphes de texte qu’elles contiennent
La fin d’une organisation fait disparaître ses membres et son comité exécutif, la dissolution du comité n’engendre pas l’exclusion de ses membres
Chap.4, Sect.2, p.20 Copyrights Julie Vachon, 2006
Association Agrégation
Association
Association, agrégation, composition
Composition
Chap.4, Sect.2, p.21 Copyrights Julie Vachon, 2006
Association
Association, agrégation, composition
Association 1 ∗ Membre
Membre mon_association: Association
Association membres: set<Membre>
Chap.4, Sect.2, p.22 Copyrights Julie Vachon, 2006
Association
Association, agrégation, composition
Remplacer une association (agrégation, composition) par un attribut dont le type est une référence sur l’instance associée
Implémentation
≠Modélisation ⇒
InterditCaractère bidirectionnel de l’association
Révéler les multiplicités
Compréhension du modèle par les non spécialiste
Aspect visuel convivial de la représentation
Impact que peut avoir le retrait d’une classe
Chap.4, Sect.2, p.23 Copyrights Julie Vachon, 2006
Association
Association qualifiée
Portée restreinte par une clef
Le qualifiant est composé d’attributs précisant l’association Le qualifiant constitue une clef (un sélecteur) pour discriminer
certains liens parmi l’ensemble des liens dénotés par l’association
Le qualifiant agit comme un filtre sur l’association (N à M) Le qualifiant réduit la cardinalité effective de l’association
Utilisation discutable
Vol no_siège : string 1..∗ 0..1 Passager
départ : date Classequalifiée Qualifiant
Classe cible + No_vol: String
Chap.4, Sect.2, p.24 Copyrights Julie Vachon, 2006
Association
Association qualifiée
Banque no_compte : string ∗ 0..1 Client
(banque, no_compte) ⇒0 ou 1 personne personne ⇒plusieurs (banque, no_compte)
Échiquier no_ligne : integer 1 1 Case
no_colonne : integer
(échiquier, no_ligne, no_colonne) ⇒1 case case ⇒un seul (échiquier, no_ligne, no_colonne)
Chap.4, Sect.2, p.25 Copyrights Julie Vachon, 2006
Association
Association dérivée
Redondante, pourrait être déduites à partir des autres associations
Clarté (lors de l’analyse)
Efficacité (pour l’implantation uniquement !)
Les attributs d’une classe peuvent également être dérivés (si calculables à partir des autres attributs)
Facture
Commande
∗
1 Client
0..1
\adresséeAuClient 1 0..∗
1
Chap.4, Sect.2, p.26 Copyrights Julie Vachon, 2006
Association
Classe d’association
Classe associé à une association
Utilisée dans le cas des associations binaires « plusieurs à plusieurs » où chaque lien de l’association a des attributs avec des valeurs propres
Chaque instance de la classe d’association est associée à un lien unique entre deux instances de classe, sinon réifier l’association
Entreprise
Emploi
Personne
∗
∗
employeur employé
Si une personne peut occuper plusieurs emplois au sein d’une même entreprise, cette représentation est FAUSSE !
Une personne peut occuper différents emplois mais un seul dans une entreprise donnée
Si l’association est un ensemblede liens et non un sacde liens…
Chap.4, Sect.2, p.27 Copyrights Julie Vachon, 2006
Association
Association réifiée
L’association entre Personne et Entreprise a été réifiée pour exprimer concrètement le fait qu’une personne peut occuper plusieurs emplois dans la même entreprise
Entreprise Emploi
Personne
∗ 1
∗ 0..1
Réifier = Transformer en objet distinct ayant sa
propre identité (indépendante)
Si l’association est un sacde liens
Chap.4, Sect.2, p.28 Copyrights Julie Vachon, 2006
4.2.3. Généralisation
Relation entre un élément de description générale (super) et un élément de description plus spécifique (sous) cohérent
La relation se lit avec le verbe « être »
Licence
+ prix() : integer* Licence
académique + prix() : integer
Licence entreprise + prix() : integer Sous-classe Sous-classe
Super-classe
Chap.4, Sect.2, p.29 Copyrights Julie Vachon, 2006
Généralisation
Relation non réflexive, non symétrique, transitive
Class A
Class A
Class B
Class A
Class B
Class C
Chap.4, Sect.2, p.30 Copyrights Julie Vachon, 2006
Généralisation
Type d’héritage
Une super-classe peut avoir plusieurs sous-classes Une sous-classe peut avoir plusieurs super-classes: la
généralisation est alors multiple.
Animal
Mammifère Oiseau Carnivore Herbivore
Aigle
Vache
Chap.4, Sect.2, p.31 Copyrights Julie Vachon, 2006
4.2.4. Pour préciser la spécification
Contrainte
membre
délégué {sous-ensemble}
Comité Personne
Chap.4, Sect.2, p.32 Copyrights Julie Vachon, 2006
Pour préciser la spécification
Contraintes
Spécifier une propriété qu'un élément doit vérifier
Préciser le rôle ou la portée de tout élément d'un
modèle UML : classe, attribut…
Par exemple, sur une association, elles peuvent restreindre le nombre d'instances visées
S'exprimer en langage naturel ou en OCL (Object
Constraint Language)
Graphiquement, texte encadré d'accolades, si la
contrainte concerne deux éléments, elle est
positionnée sur une ligne pointillée entre les éléments
Chap.4, Sect.2, p.33 Copyrights Julie Vachon, 2006
Pour préciser la spécification
Notes
Afficher un commentaire, une information
Spécification d’une opération, contrainte.
Cette classe a été revue par les utilisateurs
« constraint » Une seule instance de solution peut exister à la fois
Solution
+ quadratic() : integer
{retourne sqrt(b*b -4*a*c/2*a)}
Chap.4, Sect.2, p.34 Copyrights Julie Vachon, 2006
Pour préciser la spécification…
Stéréotypes
Enrichir la sémantique (pas la structure) de la notation existante
Définir des distinctions d’usage
Stéréotypes prédéfinis
« includes », « extends », « interface »
Créer de nouvelles catégories d’éléments de
modélisation
« actor »Client
client
Stéréotype étiquette Stéréotype icône
Chap.4, Sect.2, p.35 Copyrights Julie Vachon, 2006
Parmi les objectifs d’apprentissage
Savoir lire, interpréter et créer un diagramme de classes
Comprendre et savoir utiliser les concepts relatifs à la description des classes (attributs, opération, visibilité, portée) Comprendre et savoir utiliser les concepts relatif à la description
des associations (multiplicités, rôles, forme verbales)
Expliquer et utiliser la distinction entre association, agrégation et composition
Expliquer et utiliser l’héritage
Expliquer et interpréter les concepts de classe d’association, d’association qualifiée, d’association dérivée, d’association à navigabilité restreinte
Interpréter une contrainte, une note ou un stéréotype
Chap.4, Sect.2, p.36 Copyrights Julie Vachon, 2006
Complément
Les transparents qui suivent ne sont pas au programme des examens
Observations sémantiques sur les différents types de relations
(généralisation, agrégation / composition)
Chap.4, Sect.2, p.37 Copyrights Julie Vachon, 2006
Généralisation
Distinction entre généralisation et héritage
Généralisation = Relation sémantique entre classes qui implique que l’interface de la sous-classe inclut toutes les opérations de l’interface de la super-classe
Héritage = Mécanisme par lequel les éléments de la super-classe sont réutilisés dans la sous-classe
Héritage d’interface
Héritage d’implémentation
Chap.4, Sect.2, p.38 Copyrights Julie Vachon, 2006
Généralisation
Objectifs sémantiques de la généralisation
Réutilisation (sous-classage)
Les attributs, les opérations, les relations et les contraintes définies dans les super-classes sont héritées intégralement dans les sous-classes
Substitutabilité (sous-typage)
Les instances d'une classe peuvent être utilisés en place des instances de leurs super-classe
Polymorphisme
Aptitude d'un même message à déclencher des opérations différentes, selon la classe de l’instance auquel il est destiné
Possibilité de définir des opérations sans implémentation = Opération abstraite
Chap.4, Sect.2, p.39 Copyrights Julie Vachon, 2006
Généralisation
Héritage d’interface
Héritage « sans danger »
La sous-classe hérite de la signatures des opérations de la super-classe, elle n’hérite d’aucune
implémentation
Permet de réaliser la propriété de substitutabilité (préserve le sous-typage)
Ce type d’héritage se fait souvent à partir
Classe abstraite (implémentation partielle)
Interface (aucune implémentation fournie)
Autorise le polymorphisme
Chap.4, Sect.2, p.40 Copyrights Julie Vachon, 2006
Généralisation
Héritage d’implantation
Héritage parfois « dangereux »
La sous-classe hérite du code de la super- classe (interface et implantation)
Permet la réutilisation de code
L’implémentation dans les sous-classes peut être redéfinie
Autorise le polymorphisme
Chap.4, Sect.2, p.41 Copyrights Julie Vachon, 2006
Généralisation
Héritage d’implémentation
Par extension
Ajout d’attributs et de méthodes sans modifier ce qui a été hérité
Toute redéfinition doit être faite avec attention pour ne pas modifier les propriétés
Par restriction (forme problématique)
Redéfinition ou retrait d’attributs ou de méthodes Par commodité (forme problématique à éviter)
Absence de relation taxonomique : « Segment » sous-classe de
« Point » Inconvénients
Problème de la classe de base fragile
Envoi de message dans tous les sens
Problèmes de l’héritage multiple
Chap.4, Sect.2, p.42 Copyrights Julie Vachon, 2006
Agrégation
Sémantique de l’agrégation
Propriétaire exclusif (composition)
Dépendance existentielle (les instances agrégées n’appartiennent qu’à un seul agrégat à la fois et la destruction de l’agrégat implique leur destruction)
Relation transitive
Relation asymétrique
Relation fixe (durant toute sa vie, une instance agrégée ne peut appartenir qu’à un même et unique agrégat : pas de reconnexions)
Propriétaire (composition)
Dépendance existentielle
Relation transitive
Relation asymétrique Possession
Relation transitive
Relation asymétrique Membre
Aucune propriété particulière, regroupement simple d’instances