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