II.3. s de classes
II.3. s de classes 1. Introduction
Introduction Les diagrammes d'uml de structure comportemental de classes de package d objets d activités de cas d utilisation de composant de déploiement de structure composite d interactions de transition d état de séquence de communication vue d ensemble des interactions de timing 3
Introduction Les diagrammes d'uml de structure comportemental de classes de package d objets d activités de cas d utilisation de composant de déploiement de structure composite d interactions de transition d état de séquence de communication vue d ensemble des interactions de timing 4
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 5
II.3. s de classes 2. Concepts fondamentaux
Concepts fondamentaux Classe Nom Attributs Opérations Commande datederéception estprépayée lignes prix expédier() fermer() 7
Concepts fondamentaux Commentaire Commentaire Commande datederéception estprépayée lignes prix -- Commentaire commentaire expédier() fermer() 8
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} 9
Concepts fondamentaux Multiplicité Équivalent aux cardinalités Attention au sens de lecture! 0..x : optionnel 1 : unique et obligatoire x..* : multiple A..B : borné 10
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} 11
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() 12
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() -lignes 1..* LigneCommande -quantité : Integer -prixunitaire : Double +calculertotal() : Double 13
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 -voitures * Voiture -modèle : String 14
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 possède4 1 * Voiture -modèle : String 15
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 Polygone -sommets 1 Point 3..* -centre Cercle 16
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 Entreprise 1 -salariés * Personne * -adhérents * Association 17
Concepts de base Composition vs. agrégation : exemples Cheval? Foie 18
Concepts de base Composition vs. agrégation : exemples Cheval 1 1 Foie 19
Concepts de base Composition vs. agrégation : exemples Voiture??? Moteur Roues Carrosserie 20
Concepts de base Composition vs. agrégation : exemples 1 Voiture 1 1 1 4 Moteur Roues Carrosserie 1 21
Concepts de base Composition vs. agrégation : exemples Cheval? Selle??? Sangle Tapis Etrier 22
Concepts de base Composition vs. agrégation : exemples Cheval * appartient 1 Selle appartient * * appartient * appartient 1 1 2 Sangle Tapis Etrier 23
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 24
Concepts de base Généralisation = héritage Forme Polygone Cercle 25
Concepts de base Attention à ne pas confondre héritage et instanciation Voiture -modèle -cylindrée -couleur Ferrari NON! 26
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é 27
II.3. s de classes 2. Concepts avancés
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 29
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 30
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; +begin() : Boolean +next() : Boolean +getvalue() : Object +isempty() : Boolean +size() : Integer +get(in i : Integer) : Object 31
Concepts avancés Concrétisation = héritage Liste +begin() : Boolean +next() : Boolean +getvalue() : Object +isempty() : Boolean +size() : Integer +get(in i : Integer) : Object Element -valeur : Object -suivant : Element 1 -eltdébut ListeChainee +begin() : Boolean +next() : Boolean +getvalue() : Object +isempty() : Boolean 32
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 Conteneur 33
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 +begin() : Boolean +next() : Boolean +getvalue() : Object +isempty() : Boolean +size() : Integer +get(in i : Integer) : Object Liste Conteneur +begin() : Boolean +next() : Boolean +getvalue() : Object +isempty() : Boolean +size() : Integer +get(in i : Integer) : Object 34
Concepts avancés 2 Des dépendances Commande -lignes[*] «interface» Conteneur +get(in i : Integer) : Object +size() : Integer Commande -lignes[*] Conteneur Commande -lignes[*] Conteneur Liste Liste Liste +begin() : Boolean +next() : Boolean +getvalue() : Object +isempty() : Boolean +size() : Integer +get(in i : Integer) : Object +begin() : Boolean +next() : Boolean +getvalue() : Object +isempty() : Boolean +size() : Integer +get(in i : Integer) : Object +begin() : Boolean +next() : Boolean +getvalue() : Object +isempty() : Boolean +size() : Integer +get(in i : Integer) : Object 35
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() produit -lignes 0..1 LigneCommande -quantité : Integer -prixunitaire : Double +calculertotal() : Double 36
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 37
Concepts avancés Implémentation équivalente à : Personne -numen -nom -adresse 1 * Emploi occupé -date_début -date_fin * 1 Emploi -numéro -composante -quotité 38
Concepts avancés Association n-aire Créneau -date -heure -durée Salle Filière Enseignant 39
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.) 40
Concepts avancés Exemples : soit le diagramme de classes 1 -directeur Hôtel -adresse : String -leschambres * Chambre -étage : Integer -numéro : Integer -nblits : Integer -lachambre 1 * -lesclients Personne -nom : String -prénom : String -age : Integer -lesrésidents * 41
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)) 42
Concepts avancés Contraintes entre associations -affectation -lesenseignants 1 Enseigne4 * Université {ou} Personne étudie4 1 * -lesetudiants 43
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 44
Concepts avancés Exemples Equidé Cheval Cheval {incomplete} {overlapping } Ane Mâle {complete} {disjoint} Femelle 45
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 Cible 46
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 47
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 ListePersonne -élément : Personne «bind»(personne) T Liste -élément : T 48
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} 49
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 50
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 51
Concepts avancés Exemple : 1 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. 52
Concepts avancés Auteur Editeur 0..* 0..* {disjoint, complete} * * 3 /édite AuteurIndividuel 2..* regroupe 0..* AuteurCollectif ContratEdition porte sur 4 Ouvrage {ordered } * 1 3 est régit par ContratType 1 53
II.4. s d'objets
Introduction Les diagrammes d'uml de structure comportemental de classes de package d objets d activités de cas d utilisation de composant de déploiement de structure composite d interactions de transition d état de séquence de communication vue d ensemble des interactions de timing 55
s d'objets Caractéristiques Montre les objets et leurs relations L état des objets est indiqué Utile lorsque les structures de classe sont complexes 56
s d'objets Exemple Grace : Personne -enfants 0..* nom = Kelly prénom = Grace mère conjoint 1 -père Personne -nom -prénom -conjoint 0..* -mère 1 Steph : Personne nom = de Monaco prénom = Stéphanie Albert : Personne nom = de Monaco prénom = Albert père Régnier : Personne nom = de Monaco prénom = régnier conjoint 57
II.5. s de paquets
Introduction Les diagrammes d'uml de structure comportemental de classes de package d objets d activités de cas d utilisation de composant de déploiement de structure composite d interactions de transition d état de séquence de communication vue d ensemble des interactions de timing 59
s de paquets Caractéristiques Paquet = regroupement d éléments 1 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 Gestion des clients 60
s de paquets Dépendances entre les paquets Gestion des comptes Gestion des clients 1 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 61
s 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 62
s 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.) 63
s de paquets Remarques Décomposer n est pas simple 1 Conserver la logique métier 2 Les structures d un modèle guident la décomposition. Par exemple: Un arbre d héritage Une arborescence de composition de classes 64
s de paquets Remarques Éviter les dépendances circulaires couplage fort entre les paquets Gestion des comptes Gestion des clients Gestion des produits 65