Génie logiciel avancé



Documents pareils
UML. Diagrammes de classes (suite) Delphine Longuet.

Diagramme de classes

UML (Diagramme de classes) Unified Modeling Language

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Université de Bangui. Modélisons en UML

basée sur le cours de Bertrand Legal, maître de conférences à l ENSEIRB Olivier Augereau Formation UML

Cours de Génie Logiciel

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

UML et les Bases de Données

GOL502 Industries de services

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

OCL - Object Constraint Language

Chapitre VI- La validation de la composition.

Apprendre la Programmation Orientée Objet avec le langage Java (avec exercices pratiques et corrigés)

MODELISATION UN ATELIER DE MODELISATION «RATIONAL ROSE»

II. Modèle conceptuel le modèle entité-association

Modèle conceptuel : diagramme entité-association

IFT2255 : Génie logiciel

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Object Constraint Language (OCL)

3. UML - Unified Modeling Language Diagrammes statiques

Chapitre I : le langage UML et le processus unifié

Table des matières Sources

Bases de données. Chapitre 1. Introduction

GOL-502 Industrie de services. Travaux Pratique / Devoir #7

Sommaire. G. Pujolle, F. Ravat, C. Soulé-Dupuy, G. Zurfluh

TD/TP PAC - Programmation n 3

Présentation générale de la méthode orientée objet : O.M.T. (Rumbaugh & al.)

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

3. SPÉCIFICATIONS DU LOGICIEL. de l'expression des besoins à la conception. Spécifications fonctionnelles Analyse fonctionnelle et méthodes

Chapitre 2. Classes et objets

PRODIGE V3. Manuel utilisateurs. Consultation des métadonnées

Génie Logiciel avec Ada. 4 février 2013

Chapitre 1 : Introduction aux bases de données

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Traduction des Langages : Le Compilateur Micro Java

Héritage presque multiple en Java (1/2)

Programmation Orientée Objet

Les diagrammes de modélisation

Modélisation de bases de données : Le modèle relationnel

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

Méthodologies Orientées-Objet!

Modélisation Conceptuelle. Partie 2: Le modèle Entité-Association

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

PRODIGE V3. Manuel utilisateurs. Consultation des métadonnées

Information utiles. webpage : Google+ : digiusto/

Cahier Technique. «Développer une application intranet pour la gestion des stages des étudiants» Antonin AILLET. Remi DEVES

Modèle Entité/Association

2 Grad Info Soir Langage C++ Juin Projet BANQUE

Objets et Programmation. origine des langages orientés-objet

Bases de Données. Plan

TP1 : Initiation à Java et Eclipse

Systèmes d information et bases de données (niveau 1)

BTS S.I.O PHP OBJET. Module SLAM4. Nom du fichier : PHPRévisionObjetV2.odt Auteur : Pierre Barais

Christian Soutou UML 2. pour les. bases de données. Avec 20 exercices corrigés. Groupe Eyrolles, 2007, ISBN :

Classes et Objets en Ocaml.

Développement d un interpréteur OCL pour une machine virtuelle UML.

Chap. 3: Le modèle de données entité-association (E.A.)

TD/TP PAC - Programmation n 3

Recherche dans un tableau

C est quoi le SWAT? Les équipes décrites par James Martin s appellent SWAT : Skilled With Advanced Tools.

Généralités sur le Langage Java et éléments syntaxiques.

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Ingénierie des Modèles. Méta-modélisation

Génie Logiciel Orienté Objet UML

Cours 1: Java et les objets

Ingénérie logicielle dirigée par les modèles

Débuter avec EXPRESS. Alain Plantec. 1 Schema 2

Le niveau conceptuel : la modélisation des bases de données

Initiation à JAVA et à la programmation objet.

UML (Paquetage) Unified Modeling Language

Programmer en JAVA. par Tama

Application web de gestion de comptes en banques

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

Modélisation des données

Stratégie de groupe dans Active Directory

COUCHE 7/OSI : TRANSFERT DE FICHIERS FTAM

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Cours STIM P8 TD 1 Génie Logiciel

Patrons de Conception (Design Patterns)

Conception des bases de données : Modèle Entité-Association

Site Web de paris sportifs

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

LES TYPES DE DONNÉES DU LANGAGE PASCAL

MEDIAplus elearning. version 6.6

OMGL6 Dossier de Spécifications

Rappel sur les bases de données

Cours: Administration d'une Base de Données

Pascal Brunot Hadrien Cambazard UML FOR BUSINESS INTELLIGENCE PROJECT

AGRÉGATION «ÉCONOMIE ET GESTION»

Premiers Pas en Programmation Objet : les Classes et les Objets

Chapitre VIII. Les bases de données. Orientées Objet. Motivation

Architecture d'entreprise : Guide Pratique de l'architecture Logique

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

Sommaire. Conduite de projet Méthode d analyse et de conception. Processus unifié. Objectifs d un processus de développement

Auto-évaluation Programmation en Java

MASTER II ECONOMIE ET GESTION Spécialité Management des Organisations de la Neteconomie

Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines)

Programmation par les Objets en Java

Transcription:

Université Paris-Sud L3 MIAGE apprentissage Année 2014-2015 Génie logiciel avancé Conception Delphine Longuet delphine.longuet@lri.fr

Documentation du processus de GL Cahier des charges Analyse des besoins Spécification Spécification Cahier des charges fonctionnel Conception architecturale Conception détaillée Conception Dossier de conception Programmation D. Longuet - Génie logiciel 2

Conception Objectif Fournir une vue interne de la structure du logiciel : le dossier de conception détaillée Proposer une architecture logicielle/matérielle Définir les différents composants du logiciel Associer les fonctionnalités spécifiées aux composants Enjeu Contrat entre les développeurs et le chef de projet Chef de projet : la solution proposée répond à la spécification Développeurs : la conception structure la réalisation D. Longuet - Génie logiciel 3

Contenu du document de conception Conception générale Description de la structure globale du logiciel Description succinte de la dynamique du logiciel Conception détaillée Structure détaillée du logiciel Réalisation des cas d'utilisation Nouvelle version de l'interface Réalisation des contraintes de performance, sécurité... D. Longuet - Génie logiciel 4

Architecture logicielle Structure du logiciel en termes de composants Fonctionnalités associées aux composants Interfaces entre les composants Dépendances entre les composants Décomposition des composants en sous-composants Objectif Éviter les oublis/redondances de fonctionnalités Décentraliser le développement Faciliter l'intégration D. Longuet - Génie logiciel 5

Réalisation des exigences Réalisation des cas d'utilisation Diagrammes de séquence instanciés sur le diagramme de classes : réalisation d'une fonctionnalité comme suite d'interactions entre des objets du système Algorithmes principaux en pseudo-code Réalisation des exigences non fonctionnelles Solutions adoptées pour répondre aux contraintes de performance, sécurité... Objectif Validation de la conception par rapport au cahier des charges fonctionnel D. Longuet - Génie logiciel 6

Objets et classes Conception orientée objet : Représentation du système comme un ensemble d'objets interagissant Diagramme de classes Représentation de la structure interne du logiciel Utilisé surtout en conception mais peut être utilisé en analyse Diagramme d'objets Représentation de l'état du logiciel (objets + relations) Diagramme évoluant avec l'exécution du logiciel - création et suppression d'objets - modification de l'état des objets (valeurs des atributs) - modification des relations entre objets D. Longuet - Génie logiciel 7

Diagramme de classes rôle association Emprunteur nom : string caution : int emprunteur 0..1 emprunts * Exemplaire codebarre : int retour : Date multiplicité 1..* copies Place travée : int étagère : int niveau : int 1 * place livres 1 livre Livre titre : string auteur : string ISBN : int caution : int D. Longuet - Génie logiciel 8

Diagramme d'objets HugoMis1:Exemplaire HugoMis:Livre codebarre = 123 titre = "Les misérables" Jean:Emprunteur nom = "Jean" caution = 20 retour = null HugoMis2:Exemplaire codebarre = 124 auteur = "Hugo" ISBN = 12346 caution = 5 P1:Place travée = 1 retour = 30/03/2015 étagère = 3 niveau = 2 P2:Place Pierre:Emprunteur nom = "Pierre" caution = 13 BalzacP1:Exemplaire codebarre = 987 retour = null BalzacPeau:Livre titre="la peau de chagrin" auteur = "Balzac" travée = 5 étagère = 2 niveau = 1 ISBN = 96785 caution = 4 D. Longuet - Génie logiciel 9

Contraintes associées au diagramme Contraintes non exprimées dans le diagramme de classes Le code barre d'un exemplaire et l'isbn d'un livre sont uniques Un utilisateur ne peut pas emprunter plus d'un exemplaire d'un même livre Si un exemplaire est emprunté, sa date de retour n'est pas null Si un exemplaire n'est pas emprunté, sa date de retour est null La caution et l'isbn d'un livre, les numéros de travée, étagère et niveau sont des entiers positifs Invariants à ajouter explicitement dans la documentation, à prendre en compte dans l'implantation pour respecter le cahier des charges D. Longuet - Génie logiciel 10

Objets et classes Objet : Entité concrète ou abstraite du domaine d'application Décrit par : identité (adresse mémoire) + état (attributs) + comportement (opérations) Classe : Regroupement d'objets de même nature (mêmes attributs + mêmes opérations) Objet = instance d'une classe MonLivretA : Compte MonCompteSuisse : Compte Compte numéro = 123456 devise = EUR numéro = 70054568 devise = CHF instances de numéro : int devise : Devise attributs solde = 3509,43 solde = 121000 solde : float déposer(montant : float) retirer(montant : float) déposer(montant : float) retirer(montant : float) déposer(montant : float) retirer(montant : float) opérations solde() : float solde() : float solde() : float D. Longuet - Génie logiciel 11

Attributs Classes Caractéristique partagée par tous les objets de la classe Associe à chaque objet une valeur Type associé simple (int, bool...), primitif (Date) ou énuméré Valeur des attributs = état de l'objet Objets différents (identités différentes) peuvent avoir les mêmes attributs Opérations «enumeration» Devise Service qui peut être demandé à tout objet de la classe Comportement commun à tous les objets de la classe Ne pas confondre avec une méthode = implantation de l'opération D. Longuet - Génie logiciel 12 EUR GBP USD CHF Compte numéro : int devise : Devise solde : float déposer(montant : float) retirer(montant : float) solde() : float type énuméré (pas une classe) attributs opérations

Relations entre classes Association entre classes : Relation binaire (en général) Rôle : Nomme l'extrémité d'une association, permet d'accéder aux objets liés par l'association à un objet donné Multiplicité : Contraint le nombre d'objets liés par l'association Personne nom : string prénom : string adresse : string naissance : Date ouvrircompte(init : float) rôle sespropriétaires sescomptes 1..2 possède * nom de multiplicité l'association (optionnel) Compte numéro : int devise : Devise solde : float déposer(montant : float) retirer(montant : float) solde() : float D. Longuet - UML 13

Attribut et association Rappel : Types des attributs simple, primitif ou énuméré En particulier, pas d'attribut dont le type est une classe du diagramme Mais association vers cette classe Compte Personne nom : string prénom : string adresse : string naissance : Date ouvrircompte(init : float) sonpropriétaire 1 possède sescomptes * numéro : int devise : Devise solde : float propriétaire : Personne déposer(montant : float) retirer(montant : float) solde() : float D. Longuet - UML 14

Associations particulières Association réflexive Personne nom : string prénom : string naissance : Date parents 2 * enfants association réflexive (d'une classe vers elle-même) Associations multiples Personne nom : string 1 prénom : string naissance : Date * propose loue plusieurs associations entre deux classes Appartement * adresse : string pièces : int * loyer : float D. Longuet - UML 15

Classe-association Permet de paramétrer une association entre deux classes par une classe Personne nom : string prénom : string naissance : Date Entreprise 1..* * nom : string ville : string Poste rôle : string début : Date classe-association fin : Date Équivalence en termes de classes et d'associations Personne nom : string prénom : string naissance : Date 1 Poste * rôle : string 1..* 1 début : Date fin : Date Entreprise nom : string ville : string D. Longuet - Génie logiciel 16

Classe-association Exemple de diagramme d'objets AlainDupuis : Personne nom = "Dupuis" prénom = "Alain" naissance = 15/01/1983 DevDupuisFnac : Poste rôle = "Développeur web" début =... fin =... Fnac : Entreprise nom = "Fnac" ville = "Bordeaux" DevDupontEssilor : Poste MarieDupont : Personne rôle = "Développeur web" nom = "Dupont" début =... prénom = "Marie" fin =... Essilor : Entreprise naissance = 4/12/1992 nom = "Essilor" ProjDupontEssilor : Poste ville = "Créteil" rôle = "Chef de projet web" JeanDupont : Personne début =... nom = "Dupont" fin =... prénom = "Jean" naissance = 20/08/1990 SecDupontEssilor : Poste rôle = "Secrétaire RH" début =... D. Longuet - Génie logiciel fin =... 17

Agrégation Association particulière entre classes Dissymétrique : une classe prédominante sur l'autre Relation de type composant-composite Deux types d'agrégation Agrégation faible Composition Exemple Lecteur de contenu audio permettant de créer des listes de lecture Liste de lecture * 1..* Morceau 1..* 1 Album agrégation faible composition D. Longuet - Génie logiciel 18

Agrégation faible Agrégation par référence Le composite fait référence à ses composants La création ou destruction du composite est indépendante de la création ou destruction de ses composants Un objet peut faire partie de plusieurs composites à la fois Exemple Une liste de lecture est composée d'un ensemble de morceaux Un morceau peut appartenir à plusieurs listes de lecture Supprimer la liste ne supprime pas les morceaux Liste de lecture * 1..* Morceau agrégation faible D. Longuet - Génie logiciel 19

Composition Agrégation par valeur Le composite contient ses composants La création ou destruction du composite entraîne la création ou destruction de ses composants Un objet ne fait partie que d'un composite à la fois Exemple Un morceau n'appartient qu'à un album La suppression de l'album entraîne la suppression de tous ses morceaux Morceau 1..* 1 Album composition D. Longuet - Génie logiciel 20

Hiérarchie de classes Principe : Regrouper les classes partageant des attributs et des opérations et les organiser en arborescence Spécialisation : raffinement d'une classe en une sous-classe Généralisation : abstraction d'un ensemble de classes en super-classe CompteÉpargne CompteCourant numéro : int numéro : int devise : Devise devise : Devise solde : float solde : float plafond : float découvertautorisé : float taux : float fraisdécouvert : float déposer (montant : float) déposer(montant : float) retirer(montant : float) retirer(montant : float) solde() : float solde() : float D. Longuet - Génie logiciel calculerintérêts() : float 21

Hiérarchie de classes Principe : Regrouper les classes partageant des attributs et des opérations et les organiser en arborescence Spécialisation : raffinement d'une classe en une sous-classe Généralisation : abstraction d'un ensemble de classes en super-classe spécialisation Compte numéro : int devise : Devise solde : float déposer(montant : float) retirer(montant : float) solde() : float super-classe généralisation CompteÉpargne CompteCourant plafond : float découvertautorisé : float sous-classes taux : float fraisdécouvert : float calculerintérêts() : float D. Longuet - Génie logiciel 22

Hiérarchie de classes Principe : Regrouper les classes partageant des attributs et des opérations et les organiser en arborescence Héritage : Construction d'une classe à partir d'une classe plus haute dans la hiérarchie (partage des attributs, opérations, contraintes...) classes héritant de la classe Compte Compte numéro : int devise : Devise solde : float déposer(montant : float) retirer(montant : float) solde() : float CompteÉpargne CompteCourant plafond : float découvertautorisé : float taux : float fraisdécouvert : float calculerintérêts() : float D. Longuet - Génie logiciel 23

Classe abstraite Classe sans instance, seulement une base pour classes héritées Notation : nom de la classe en italique (ou stéréotype «abstract») classe abstraite car un compte n'existe pas en soi Compte numéro : int devise : Devise solde : float déposer(montant : float) retirer(montant : float) solde() : float CompteÉpargne CompteCourant plafond : float découvertautorisé : float taux : float fraisdécouvert : float calculerintérêts() : float D. Longuet - Génie logiciel 24

Diagramme de classes revu Emprunt classe-association retour : Date Emprunteur Exemplaire nom : string caution : int 0..1 * codebarre : int 1..* composition 1 Place travée : int 1 * Ressource titre : string classe étagère : int caution : int abstraite niveau : int héritage Livre auteur : string ISBN : int Revue parution : Date volume : int D. Longuet - Génie logiciel 25

Opérations Opérations Service qui peut être demandé à tout objet de la classe Comportement commun à tous les objets de la classe Client Compte nom : string prénom : string naissance : Date ouvrircompte(init : float) devenirproprio(c : Compte) propriétaire 1..2 possède comptes 1..* numéro : int devise : Devise solde : float déposer(montant : float) retirer(montant : float) solde() : float D. Longuet - Génie logiciel 26

Effets possibles d'une opération Opérations Renvoyer le résultat d'un calcul MonLivretA : Compte numéro = 123456 devise = EUR solde = 3509,43 déposer(montant : float) retirer(montant : float) solde() : float solde() 3509,43 D. Longuet - Génie logiciel 27

Effets possibles d'une opération Opérations Renvoyer le résultat d'un calcul Modifier l'état du système - modification de la valeur des attributs MonLivretA : Compte numéro = 123456 devise = EUR solde = 3509,43 déposer(montant : float) retirer(montant : float) solde() : float déposer(150,0) MonLivretA : Compte numéro = 123456 devise = EUR solde = 3659,43 déposer(montant : float) retirer(montant : float) solde() : float D. Longuet - Génie logiciel 28

Effets possibles d'une opération Opérations Renvoyer le résultat d'un calcul Modifier l'état du système - modification de la valeur des attributs - ajout/suppressions de liens entre objets MarieDupont : Personne CompteJoint : Compte MarieDupont : Personne CompteJoint : Compte JeanDupont : Personne nom = "Dupont" devenirproprio(comptejoint) JeanDupont : Personne nom = "Dupont" prénom = "Jean" prénom = "Jean" naissance = 20/08/1990 naissance = 20/08/1990 ouvrircompte(init : float) ouvrircompte(init : float) devenirproprio(c : Compte) devenirproprio(c : Compte) D. Longuet - Génie logiciel 29

Effets possibles d'une opération Opérations Renvoyer le résultat d'un calcul Modifier l'état du système - modification de la valeur des attributs - ajout/suppressions de liens entre objets - création/destruction d'objets AnneBérou : Personne nom = "Bérou" prénom = "Anne" naissance = 14/12/1965 ouvrircompte(init : float) devenirproprio(c : Compte) ouvrircompte(1000,0) AnneBérou : Personne nom = "Bérou" prénom = "Anne" naissance = 14/12/1965 ouvrircompte(init : float) devenirproprio(c : Compte) LivretA : Compte numéro = 123456 devise = EUR solde = 1000,0 déposer(montant : float) retirer(montant : float) solde() : float D. Longuet - Génie logiciel 30

Héritage d'opération Opération commune aux sous-classes : Définition dans la super-classe déposer(montant : float) {solde := solde+montant} Compte numéro : int devise : Devise solde : float déposer(montant : float) retirer(montant : float) solde() : float opération commune à tous les comptes CompteCourant découvertautorisé : float fraisdécouvert : float CompteÉpargne plafond : float taux : float calculerintérêts() : float D. Longuet - Génie logiciel 31

Redéfinition d'opération Opération commune aux sous-classes : Définition dans la super-classe Possibilité de redéfinition locale de l'opération dans une sous-classe pour prendre en compte un cas particulier déposer(montant : float) {solde := solde+montant} Compte numéro : int devise : Devise solde : float déposer(montant : float) retirer(montant : float) solde() : float opération commune à tous les comptes déposer(montant : float) {if(solde+montant <= plafond) then solde := solde+montant} CompteCourant découvertautorisé : float fraisdécouvert : float redéfinition CompteÉpargne plafond : float taux : float calculerintérêts() : float déposer(montant : float) D. Longuet - Génie logiciel 32

Classe abstraite Classe sans instance car certaines opérations non définies Opération non définie en italique Nom de la classe en italique (ou stéréotype «abstract») Exemple : On ne peut pas calculer la surface d'une forme sans savoir de quelle forme il s'agit opération non définie (abstraite) nom : string Forme surface() : float D. Longuet - Génie logiciel 33

Polymorphisme Contexte : Définition d'une opération abstraite dans les classes héritant d'une classe abstraite Opération polymorphe : Opération définie dans différentes sous-classes mais opération spécifique à la sous-classe nom : string Forme surface = longueur*largeur surface() : float surface = pi*rayon*rayon Rectangle longueur : float largeur : float opération polymorphe Cercle rayon : float surface() : float surface() : float D. Longuet - Génie logiciel 34

Interface Liste d'opérations constituant un contrat à respecter par les classes réalisant l'interface Pas une classe, ne peut pas servir à créer des objets Toutes les opérations sont abstraites Point abscisse : float ordonnée : float égal(object o) : boolean supérieur(object o) : boolean classes réalisant l'interface «interface» Comparable Date égal(object o) : boolean jour : int supérieur(object o) : boolean mois : int année : int égal(object o) : boolean supérieur(object o) : boolean diff(date d) : int String content : string égal(object o) : boolean supérieur(object o) : boolean print() D. Longuet - Génie logiciel 35

Attributs et opérations de classes Notations avancées Attribut de classe : valeur commune à toutes les instances Opération de classe : opération sur la classe elle-même (création de nouvelles instances par exemple) Soulignés dans la classe Article - référence : int - prixht : float - nbinstances : int + calculerprixttc(taxe : float) : float + créer() + compterinstances() : int D. Longuet - Génie logiciel 36

Notations avancées Visibilité + : public, accessible à toutes les classes # : protégé, accessible uniquement aux sous-classes - : privé, inaccessible à tout objet hors de la classe Pas de visibilité par défaut Vecteur - début : Point - /fin : Point - longueur : float - angle : float # ajouter(v : Vecteur) : Vecteur + déplace(p : Point) D. Longuet - Génie logiciel 37

Attribut dérivé Peut être calculé à tout moment à partir d'autres informations du système Notation : /attribut Peut nécessiter des informations de plusieurs classes Vecteur attribut dérivé - début : Point - /fin : Point - longueur : float - angle : float # ajouter(v : Vecteur) : Vecteur + déplace(p : Point) fin = (longueur*cos(angle), longueur*sin(angle)) D. Longuet - Génie logiciel 38

Association dérivée Redondance d'une association : Association n'apportant pas d'information supplémentaire, se demander si nécessaire Banque nom : string 1..* banques 1 banque 1..* comptes Compte numéro : int devise : Devise solde : float 1..* comptes 1 propriétaire Client nom : string naissance : Date 1..* clients ClientsBanque D. Longuet - Génie logiciel 39

Association dérivée Redondance d'une association : Association n'apportant pas d'information supplémentaire, se demander si nécessaire Si nécessaire, la faire apparaître comme association dérivée Association dérivée : Peut être calculée à tout moment à partir d'autres informations du système Notation : /association Banque nom : string 1..* banques 1 banque 1..* comptes Compte numéro : int devise : Devise solde : float 1..* comptes 1 propriétaire Client nom : string naissance : Date 1..* clients association dérivée /ClientsBanque D. Longuet - Génie logiciel 40

Limites du diagramme de classes Diagramme de classes représente la structure du système en termes d'objets et de relations entre ces objets Ne permet pas de représenter : Valeurs autorisées des attributs Conditions sur les associations Relations entre les attributs ou entre les associations Expression des contraintes liées au diagramme : Notes dans le diagramme Texte accompagnant le diagramme OCL : langage de contraintes formel associé à UML D. Longuet - Génie logiciel 41

Propriétés : Contraintes, invariants Portant sur les éléments du modèle Doivent être vérifiées à tout instant En général, restriction sur les diagrammes d'objets possibles à partir du diagramme de classes Héritage des contraintes de la super-classe vers les sous-classes Contraintes présentes dans le diagramme : Type des attributs Multiplicités des associations D. Longuet - Génie logiciel 42

Contraintes sur les attributs {age = diff(naissance,today)} {naissance today} sous forme de note Personne nom : string naissance : Date /age : int {age 0} dans le diagramme Contraintes sur la classe Personne : L'âge est toujours positif L'âge est calculé comme la différence de la date de naissance et la date d'aujourd'hui La date de naissance est inférieure ou égale à la date d'aujourd'hui dans un document annexe D. Longuet - Génie logiciel 43

Contraintes associées à la multiplicité Compte numero : int * 1..* Personne nom : string devise : Devise solde : float prenom : string naissance : Date Par défaut : ensemble non ordonné 2 parents Personne nom : string enfants prenom : string *{ordered set} naissance : Date ensemble ordonné Commande numero : int total : float date : Date Pizza * 1..* id : int {bag} nom : string prix : float multi-ensemble (chaque élément peut apparaître plusieurs fois) PolygoneRempli multi-ensemble 1 ordonné 1..*{sequence} Point abscisse : float ordonnée : float D. Longuet - Génie logiciel 44

Contraintes sur les associations Salle nom : string capacité : int 1 1..* Place numéro : int contrainte sur une association nombre de places associées à une salle = capacité subordonné 1..* Personne nom : string prénom : string naissance : Date 0..1 chef 1..* 0..1 Entreprise employés employeur nom : string {pour toute Personne p, contrainte portant sur p.employeur = p.chef.employeur} plusieurs associations D. Longuet - Génie logiciel 45

Contraintes, invariants {age = diff(naissance,today)} nom : string Personne naissance : Date /age : int {age 0} 1 * ExpériencesPro entreprise : string entrée : Date sortie : Date {ordered set} * 1 {subset} appartient administre D. Longuet - Génie logiciel 46 * * Groupe thème : string création : Date L'âge est toujours positif L'âge est calculé comme la différence entre la date de naissance et la date d'aujourd'hui L'administrateur d'un groupe en est membre On a accès aux expériences professionnelles dans l'ordre de la date d'entrée