Complément Le diagramme des classes

Slides:



Advertisements
Présentations similaires
Bratec Martin ..
Advertisements

NOTIFICATION ÉLECTRONIQUE
Fragilité : une notion fragile ?
SEMINAIRE DU 10 AVRIL 2010 programmation du futur Hôtel de Ville
Phono-sémantique différentielle des monosyllabes italiens
MAGGIO 1967 BOLOGNA - CERVIA ANOMALIES DU SOMMEIL CHEZ L'HOMME
droit + pub = ? vincent gautrais professeur agrégé – avocat
Transcription de la présentation:

Complément Le diagramme des classes Chapitre 3 Complément Le diagramme des classes

IV. Le langage OCL OCL (Object Constraint Language) est un langage d'expression permettant de décrire des contraintes sur des modèles objet. Une contrainte est une restriction sur une ou plusieurs valeurs d'un modèle. OCL fait partie de UML. OCL a été ajoutée par l'OMG à la version UML 1.1. L'origine des contraintes se situe dans la logique des assertions de Floyd-Hoare Cours CSI2 - ISG 2008/2009 UML

IV.1 Le contexte La contrainte est toujours associée à un élément du modèle( une classe, un cas d’utilisation) Context <element> Context equationSD Cours CSI2 - ISG 2008/2009 UML

IV.2 l’invariant Un invariant est une contrainte qui doit toujours être vérifiée pour toutes les instances d'un type, d'une classe ou d'un interface Inv: <expression> Context compte inv: solde>0 Compte nom: String solde:Integer Cons() Débiter() Créditer() Cours CSI2 - ISG 2008/2009 UML

IV.3 les pré et les post conditions pre: <expression> Pour toute opération, les droits de l'objet offrant le contrat sont définis par une pré-condition post: <expression> Les obligations sont précisées par une post-condition. Une post-condition doit être vérifiée au moment où l'opération se termine. Cours CSI2 - ISG 2008/2009 UML

IV.3 les pré et les post conditions Dans la postcondition, deux éléments particuliers sont utilisables Attribut result : référence la valeur retournée par l'opération mon_attribut@ pre : référence la valeur de mon_attribut avant l'appel de l'opération context ma_classe::mon_op(liste_param) : type_retour Cours CSI2 - ISG 2008/2009 UML

IV.3 les pré et les post conditions context Compte::Créditer pre: montant > 0 post: solde = solde@pre+Montant context Compte::getSolde() : int post: result = solde Cours CSI2 - ISG 2008/2009 UML

IV.4 Accès aux objets Cours CSI2 - ISG 2008/2009 UML

IV.4 Accès aux objets Dans une contrainte OCL associée à un objet, nous peuvons: Accéder à l'état interne de cet objet (ses attributs) Naviguer dans le diagramme : accéder de manière transitive à tous les objets (et leur état) avec qui il est en relation Nommage des éléments Attributs ou paramètres d'une opération : utilise leur nom directement Cours CSI2 - ISG 2008/2009 UML

IV.4 Accès aux objets Nommage des éléments Objet(s) en association : utilise le nom de la classe associée (en minuscule) ou le nom du rôle d'association du coté de cette classe Si cardinalité de 1 pour une association : référence un objet Si cardinalité > 1 : référence une collection d'objets Exemple1 dans le contexte compte: solde, banque, propriétaire, banque.clients, banque.clients.age Cours CSI2 - ISG 2008/2009 UML

IV.4 Accès aux objets Exemple 2: Le propriétaire d'un compte doit avoir plus de 18 ans context Compte inv: propriétaire.age >= 18 context Personne inv:age>=18 Cours CSI2 - ISG 2008/2009 UML

IV.5 Opérations sur objets et collections  IV.5 Opérations sur objets et collections OCL utilise un ensemble de primitives utilisables sur les collections size() : retourne le nombre d'éléments de la collection isEmpty() : retourne vrai si la collection est vide notEmpty() : retourne vrai si la collection n'est pas vide includes(obj) : vrai si la collection inclut l'objet obj excludes(obj) : vrai si la collection n'inclut pas l'objet obj including(obj) : la collection référencée doit être cette collection en incluant l'objet obj excluding(obj) : idem mais en excluant l'objet obj Cours CSI2 - ISG 2008/2009 UML

IV.5 Opérations sur objets et collections  IV.5 Opérations sur objets et collections OCL utilise un ensemble de primitives utilisables sur les collections includesAll(ens) : la collection contient tous les éléments de la collection ens excludesAll(ens) : la collection ne contient aucun des éléments de la collection ens Self: pseudo-attribut référençant l'objet courant Exemples: propriétaire -> notEmpty() : il y a au moins un objet Personne associé à un compte propriétaire -> size() = 1 : le nombre d'objets Personne associés à un compte est de 1 Cours CSI2 - ISG 2008/2009 UML

IV.5 Opérations sur objets et collections  IV.5 Opérations sur objets et collections Exemples: banque.clients -> size() >= 1 : une banque a au moins un client banque.clients -> includes(propriétaire) : le propriétaire du compte (l'ensemble des clients de la banque associée au compte ) banque.clients.compte -> includes(self) : le compte appartient à un des clients de la banque du client en question. Cours CSI2 - ISG 2008/2009 UML

IV.6 Relations ensemblistes entre collections  IV.6 Relations ensemblistes entre collections union Retourne l'union de deux collections Intersection Retourne l'intersection de deux collections Exemples (col1 -> intersection(col2)) -> isEmpty() col1 = col2 -> union(col3) Cours CSI2 - ISG 2008/2009 UML

IV.7 Opérations sur éléments d'une collection  IV.7 Opérations sur éléments d'une collection OCL permet de vérifier des contraintes sur chaque élément d'une collection ou de définir une sous-collection à partir d'une collection en fonction de certaines contraintes select : retourne le sous-ensemble de la collection dont les éléments respectent la contrainte spécifiée reject : retourne le sous-ensemble de la collection dont les éléments ne respectant pas la contrainte collect : retourne une collection (de taille identique) construite à partir des éléments de départ. Le type des éléments contenus dans la nouvelle collection peut être différent de celui des éléments de départ. Cours CSI2 - ISG 2008/2009 UML

IV.7 Opérations sur éléments d'une collection  IV.7 Opérations sur éléments d'une collection exists : retourne vrai si au moins un élément respecte la contrainte spécifiée et faux sinon forAll : retourne vrai si tous les éléments respectent la contrainte spécifiée (pouvant impliquer à la fois plusieurs éléments de la collection). Syntaxe : collection -> primitive( expression ) collection -> primitive( elt : type | expression) collection -> primitive(elt | expression) Cours CSI2 - ISG 2008/2009 UML

IV.7 Opérations sur éléments d'une collection  IV.7 Opérations sur éléments d'une collection Dans le contexte de la classe Banque compte -> select( c | c.solde > 1000) compte -> reject( solde > 1000) compte -> collect( c : Compte | c.solde) (compte -> select( solde > 1000 ))-> collect( c | c.solde) Cours CSI2 - ISG 2008/2009 UML

IV.8 Types OCL Les types de base Integer Real String Boolean  IV.8 Types OCL Les types de base Integer 1, -2, 145 *, +, -, /, abs() Real 1.5, -123.4 *, +, -, /, floor() String 'bonjour' concat(), size(), substring() Boolean true, false And, or, not, xor, not, implies, if-then-else Cours CSI2 - ISG 2008/2009 UML

IV.8 Types OCL Les types de collection  IV.8 Types OCL Les types de collection Set : ensemble au sens mathématique, pas de doublons, pas d'ordre { 1, 4, 3, 5 } OrderedSet : ensemble avec ordre {1, 3, 4, 5 } Bag : comme un Set mais avec possibilité de doublons { 1, 4, 1, 3, 5, 4 } Sequence : un Bag dont les éléments sont ordonnés { 1, 1, 3, 4, 4, 5 } Cours CSI2 - ISG 2008/2009 UML

IV.8 Types OCL Commentaire en OCL : utilisation de -- Exemple  IV.8 Types OCL Commentaire en OCL : utilisation de -- Exemple context Personne inv: if age < 18 -- vérifie age de la personne then compte -> isEmpty() -- pas majeur : pas de compte else compte -> notEmpty() -- majeur : doit avoir -- au moins un compte endif Cours CSI2 - ISG 2008/2009 UML