chapitre 3 complément le diagramme des classes. iv. le langage ocl ocl (object constraint language)...

21
Chapitre 3 Complément Le diagramme des classes

Upload: simonette-landais

Post on 04-Apr-2015

116 views

Category:

Documents


7 download

TRANSCRIPT

Page 1: 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

Chapitre 3

Complément

Le diagramme des classes

Page 2: 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

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

UML2 Cours CSI2 - ISG 2008/2009

Page 3: 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

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

UML3 Cours CSI2 - ISG 2008/2009

Page 4: 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

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

UML4 Cours CSI2 - ISG 2008/2009

Comptenom: Stringsolde:Integer

Cons()

Débiter()

Créditer()

Page 5: 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

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.

UML5 Cours CSI2 - ISG 2008/2009

Page 6: 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

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

UML6 Cours CSI2 - ISG 2008/2009

Page 7: 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

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

UML7 Cours CSI2 - ISG 2008/2009

Page 8: 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

IV.4 Accès aux objets

UML8 Cours CSI2 - ISG 2008/2009

Page 9: 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

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

UML9 Cours CSI2 - ISG 2008/2009

Page 10: 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

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

UML10 Cours CSI2 - ISG 2008/2009

Page 11: 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

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

UML11 Cours CSI2 - ISG 2008/2009

Page 12: 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

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

UML12 Cours CSI2 - ISG 2008/2009

Page 13: 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

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

UML13 Cours CSI2 - ISG 2008/2009

Page 14: 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

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.

UML14 Cours CSI2 - ISG 2008/2009

Page 15: 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

IV.6 Relations ensemblistes entrecollections

union Retourne l'union de deux collections

Intersection Retourne l'intersection de deux collections

Exemples (col1 -> intersection(col2)) -> isEmpty() col1 = col2 -> union(col3)

UML15 Cours CSI2 - ISG 2008/2009

Page 16: 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

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.

UML16 Cours CSI2 - ISG 2008/2009

Page 17: 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

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)

UML17 Cours CSI2 - ISG 2008/2009

Page 18: 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

IV.7 Opérations sur éléments d'une collection

Dans le contexte de la classe Banquecompte -> select( c | c.solde > 1000)compte -> reject( solde > 1000) compte -> collect( c : Compte | c.solde)(compte -> select( solde > 1000 ))->

collect( c | c.solde)

UML18 Cours CSI2 - ISG 2008/2009

Page 19: 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

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

UML19 Cours CSI2 - ISG 2008/2009

Page 20: 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

IV.8 Types OCL

Les types de collectionSet : 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 }

UML20 Cours CSI2 - ISG 2008/2009

Page 21: 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

IV.8 Types OCL

Commentaire en OCL : utilisation de -- Exemplecontext 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

UML21 Cours CSI2 - ISG 2008/2009