1. OCL - Object Constraint Language
La¨titia Matignon
e
laetitia.matignon@univ-lyon1.fr
D´partement Informatique - Polytech Lyon
e
Universit´ Claude Bernard Lyon 1
e
2012 - 2013
La¨titia Matignon
e
SIMA - OCL - Object Constraint Language
2012
1 / 36
2. Plan du cours
1
Introduction
2
Typologie des contraintes
3
Conception par contrats pour op´rations
e
4
Types de base et op´rations
e
5
Acc`s aux objets et navigation
e
6
Collection
7
Conclusion
La¨titia Matignon
e
SIMA - OCL - Object Constraint Language
2012
2 / 36
4. Introduction
Contraintes
Relation entre ´l´ments de mod´lisation : propri´t´ qui doit ˆtre vraie
ee
e
ee
e
Notation : − − − − − − − − {contrainte}
3 types de contraintes :
Contraintes pr´d´finies : disjoint, overlapping, xor, ...
e e
Contraintes exprim´es en langue naturelle (commentaires)
e
Contraintes exprim´es avec OCL (Object Constraint Language)
e
St´r´otypes :
ee
pr´condition ,
e
postcondition
e-mail
{xor}
Information
coordonnées postales
+ envoie()
{incomplet}
journal
La¨titia Matignon
e
{temps d'exécution
<10ms}
lettre
SIMA - OCL - Object Constraint Language
2012
4 / 36
5. Introduction
Pourquoi OCL ? Illustration par l’exemple
Application bancaire
Sp´cification
e
Un compte doit avoir un solde toujours positif
Un client peut poss´der plusieurs comptes
e
Un client peut ˆtre client de plusieurs banques
e
Un client d’une banque poss`de au moins un compte dans cette banque
e
Une banque g`re plusieurs comptes
e
Une banque poss`de plusieurs clients
e
Quelles sp´cifications ne sont exe
prim´es ?
e
La¨titia Matignon
e
SIMA - OCL - Object Constraint Language
2012
5 / 36
6. Introduction
Pourquoi OCL ? Illustration par l’exemple
Application bancaire
Sp´cification
e
Un compte doit avoir un solde toujours positif
Un client peut poss´der plusieurs comptes
e
Un client peut ˆtre client de plusieurs banques
e
Un client d’une banque poss`de au moins un compte dans cette banque
e
Une banque g`re plusieurs comptes
e
Une banque poss`de plusieurs clients
e
Le diagramme de classe ne permet
pas d’exprimer tout ce qui est d´fini
e
dans la sp´cification
e
La¨titia Matignon
e
SIMA - OCL - Object Constraint Language
2012
6 / 36
7. Introduction
Pourquoi OCL ? Illustration par l’exemple
Diagramme d’objets coh´rent avec le diagramme de classes et la
e
sp´cification.
e
La¨titia Matignon
e
SIMA - OCL - Object Constraint Language
2012
7 / 36
8. Introduction
Pourquoi OCL ? Illustration par l’exemple
Diagramme d’objets coh´rent avec le diagramme de classes mais qui ne
e
respecte pas la sp´cification attendue.
e
Une personne a un compte dans une banque o` elle n’est pas cliente
u
Une personne est cliente d’une banque mais sans y avoir de compte
La¨titia Matignon
e
SIMA - OCL - Object Constraint Language
2012
7 / 36
9. Introduction
OCL - Object Constraint Language
Langage de description de contraintes d’UML
Langage formel (mais simple ` utiliser), non ambig¨, grammaire
a
u
pr´cise
e
Sp´cifier des information suppl´mentaires importantes qui n’ont pas
e
e
pu l’ˆtre avec les ´l´ments de mod´lisation d’UML
e
ee
e
Standardis´ par l’OMG : sp´cification v2.0
e
e
http://www.omg.org/spec/OCL/
La¨titia Matignon
e
SIMA - OCL - Object Constraint Language
2012
8 / 36
10. Introduction
Utilisation
Principe
Langage d´claratif : les contraintes ne sont pas op´rationnelles.
e
e
Langage sans effet de bord : les instances ne sont pas modifi´es par
e
les contraintes.
Une expression OCL d´crit une contrainte ` respecter et pas une
e
a
impl´mentation d’op´ration.
e
e
OCL peut s’appliquer sur la plupart des diagrammes UML
La¨titia Matignon
e
SIMA - OCL - Object Constraint Language
2012
9 / 36
11. Introduction
Utilisation
Les contraintes OCL servent dans plusieurs situations :
description d’invariants de classe
Une contrainte qui doit ˆtre respect´e en permanence par toutes les
e
e
instances d’une classe
pr´-condition et post-conditions ` l’ex´cution d’une op´ration
e
a
e
e
Une contrainte qui doit ˆtre toujours vraie avant/apr`s l’ex´cution
e
e
e
d’une op´ration
e
contraintes sur la valeur retourn´e par une m´thode
e
e
initialisation d’un attribut
r`gles de d´rivation des attributs
e
e
Pr´ciser la valeur d’un attribut d´riv´
e
e e
expression des gardes (conditions dans les diagrammes dynamiques)
sp´cification du corps d’une op´ration
e
e
sp´cification d’une op´ration sans effet de bord (query)
e
e
...
La¨titia Matignon
e
SIMA - OCL - Object Constraint Language
2012
10 / 36
13. Typologie des contraintes
Plan
1
Introduction
2
Typologie des contraintes
3
Conception par contrats pour op´rations
e
4
Types de base et op´rations
e
5
Acc`s aux objets et navigation
e
6
Collection
7
Conclusion
La¨titia Matignon
e
SIMA - OCL - Object Constraint Language
2012
12 / 36
14. Typologie des contraintes
Notion de contexte
Toute contrainte OCL est li´e ` un contexte sp´cifique, l’´l´ment
e a
e
ee
auquel la contrainte est attach´e.
e
Syntaxe :
context monContexte
<st´r´otype> nomContrainte : Expression de la contrainte
e e
Le contexte peut ˆtre utilis´ ` l’int´rieur d’une expression grˆce au
e
ea
e
a
mot-clef self
Exemple :
context Compte : l’expression OCL s’applique ` la classe Compte,
a
c’est-`-dire ` toutes les instances de cette classe
a
a
context Compte::getSolde() : Real : l’expression OCL
s’applique ` la m´thode getSolde()
a
e
context Compte::cr´diter(somme : Real) : l’expression OCL
e
s’applique ` la m´thode cr´diter
a
e
e
context Compte:solde : Real : l’expression OCL s’applique `
a
l’attribut solde
La¨titia Matignon
e
SIMA - OCL - Object Constraint Language
2012
13 / 36
15. Typologie des contraintes
Invariants
Un invariant exprime une contrainte sur un objet ou un groupe
d’objets qui doit ˆtre respect´e en permanence
e
e
<st´r´otype> : inv
e e
context Compte
inv: solde > 0 -- solde d’un compte doit toujours etre positif
^
context Personne
inv: (age <= 140) and (age >=0) -- l’^ge est compris entre 0 et 140 ans
a
context Personne
inv : (self.age <= 140) and (self.age >=0)
context p:Personne
inv borneAge: (p.age <= 140) and (p.age >=0)
. permet d’acc´der ` une caract´ristique d’un objet (m´thode,
e
a
e
e
attribut, terminaison d’association)
self objet d´sign´ par le contexte
e
e
La¨titia Matignon
e
SIMA - OCL - Object Constraint Language
2012
14 / 36
16. Typologie des contraintes
Pr´-conditions & Post-conditions
e
Sp´cifie une contrainte qui doit ˆtre v´rifi´e avant/apr`s l’appel
e
e
e e
e
d’une op´ration
e
Contraindre l’ensemble des valeurs d’entr´e d’une op´ration (pre)
e
e
Sp´cifier la s´mantique d’une op´ration : ce qu’elle fait et non
e
e
e
comment elle le fait (post concerne les effets de bord (modification
d’un argument, d’un autre membre de la classe, etc.))
<st´r´otype> : pre post
e e
context Personne::setAge(a :entier)
pre : (a <= 140) and (a >=0) and (a >= age)
post : age = a -- on peut ´crire ´galement a=age
e
e
La¨titia Matignon
e
SIMA - OCL - Object Constraint Language
2012
15 / 36
17. Typologie des contraintes
Pr´-conditions & Post-conditions
e
Sp´cifie une contrainte qui doit ˆtre v´rifi´e avant/apr`s l’appel
e
e
e e
e
d’une op´ration
e
Contraindre l’ensemble des valeurs d’entr´e d’une op´ration (pre)
e
e
Sp´cifier la s´mantique d’une op´ration : ce qu’elle fait et non
e
e
e
comment elle le fait (post concerne les effets de bord (modification
d’un argument, d’un autre membre de la classe, etc.))
<st´r´otype> : pre post
e e
Op´rateurs sp´ciaux :
e
e
@pre : acc`s ` la valeur d’une propri´t´ avant l’ex´cution de
e a
ee
e
l’op´ration
e
result : acc`s au r´sultat de l’op´ration
e
e
e
context Compte::d´biter(somme : Real)
e
pre: somme > 0
post: solde = solde@pre - somme
context Compte::getSolde() : Real
post: result = somme
La¨titia Matignon
e
SIMA - OCL - Object Constraint Language
2012
15 / 36
18. Typologie des contraintes
Retour d’une op´ration
e
Sp´cifie le corps d’une op´ration
e
e
D´finit directement le r´sultat d’une op´ration
e
e
e
<st´r´otype> : body
e e
context Compte::getSolde() : Real
body : solde
La¨titia Matignon
e
SIMA - OCL - Object Constraint Language
2012
16 / 36
19. Typologie des contraintes
Valeur initiale et d´riv´e d’un attribut
e e
Sp´cifier la valeur initiale ou d´riv´ d’un attribut
e
e e
<st´r´otype> : init derive
e e
context Personne::age :entier
init : 0
context Personne::age : entier
derive : dateDeNaissance.getYear() - Date::current().getYear()
La¨titia Matignon
e
SIMA - OCL - Object Constraint Language
2012
17 / 36
20. Typologie des contraintes
D´finition de variables et d’op´rations
e
e
D´finir des variables pour simplifier l’´criture de certaines expressions
e
e
syntaxe : let variable : type = expression1 in expression2
context Personne
inv : let montantImposable : Real = salaire*0.8 in
if (montantImposable >= 100000)
then impot = montantImposable*45/100
else if (montantImposable >= 50000)
then impot = montantImposable*30/100
else impot = montantImposable*10/100
endif
endif
La¨titia Matignon
e
SIMA - OCL - Object Constraint Language
2012
18 / 36
21. Typologie des contraintes
D´finition de variables et d’op´rations
e
e
D´finir des variables pour simplifier l’´criture de certaines expressions
e
e
syntaxe : let variable : type = expression1 in expression2
D´finir des variables/op´rations utilisables dans plusieurs contraintes
e
e
de la classe
syntaxe : def variable : type = expression1
context Personne
def : montantImposable : Real = salaire*0.8
context Personne
def : ageCorrect(a :Real) :Boolean = (a>=0) and (a<=140)
on peut r´´crire l’invariant sur l’age :
ee
context Personne
inv: ageCorrect(age) -- l’^ge ne peut depasser 140 ans
a
La¨titia Matignon
e
SIMA - OCL - Object Constraint Language
2012
18 / 36
22. Conception par contrats pour op´rations
e
Plan
1
Introduction
2
Typologie des contraintes
3
Conception par contrats pour op´rations
e
4
Types de base et op´rations
e
5
Acc`s aux objets et navigation
e
6
Collection
7
Conclusion
La¨titia Matignon
e
SIMA - OCL - Object Constraint Language
2012
19 / 36
23. Conception par contrats pour op´rations
e
Conception par contrats
D´finition
e
La programmation par contrat est un paradigme de programmation
dans lequel le d´roulement des traitements est r´gi par des r`gles ou
e
e
e
contraintes appel´es assertions ou contrats
e
Le contrat est pass´ entre l’appelant d’une op´ration et l’appel´
e
e
e
(celui qui ex´cute l’op´ration) par l’interm´diaire des contraintes
e
e
e
Le but principal est de r´duire le temps de d´bogage des programmes
e
e
Librairie Java jContractor
La¨titia Matignon
e
SIMA - OCL - Object Constraint Language
2012
20 / 36
24. Conception par contrats pour op´rations
e
Conception par contrats
3 types d’assertion
Invariants, pr´ et postconditions permettent de faire une conception
e
par contrat
Si l’appelant respecte les contraintes de la pr´condition alors l’appel´
e
e
s’engage ` respecter la post-condition
a
Si l’appelant ne respecte pas la pr´condition, alors le r´sultat de
e
e
l’appel est ind´fini
e
Tester la satisfaction des assertions :
→ Avant l’appel de la m´thode : confiance dans l’utilisateur
e
→ Dans le corps de la m´thode : lever une exception
e
→ Pr´compilation
e
→ Outils Java 1.5 pour mettre en place des assertions : le mot-cl´
e
assert
Pour l’exemple pr´c´dent : Si l’appelant de l’op´ration d´biter
e e
e
e
passe une somme positive en param`tre, alors le compte est bien
e
d´bit´ de cette somme
e e
La¨titia Matignon
e
SIMA - OCL - Object Constraint Language
2012
21 / 36
25. Types de base et op´rations
e
Plan
1
Introduction
2
Typologie des contraintes
3
Conception par contrats pour op´rations
e
4
Types de base et op´rations
e
5
Acc`s aux objets et navigation
e
6
Collection
7
Conclusion
La¨titia Matignon
e
SIMA - OCL - Object Constraint Language
2012
22 / 36
26. Types de base et op´rations
e
Types de base et op´rations associ´es
e
e
Type
Boolean
Integer
Real
String
Exemples de valeurs
Op´rateurs
e
true ; false
and ; or ; xor ; not ; implies ; if-then-else-endif ; ...
1 ; -5 ; 2 ; 34 ; 26524 ; ...
* ; + ; - ; / ; abs() ; ...
1,5 ; 3,14 ; ...
* ; + ; - ; / ; abs() ; floor() ; ...
“To be or not to be ...”
concat() ; size() ; substring() ; ...
Types et op´rateurs pr´d´finis dans les contraintes OCL.
e
e e
Op´rateurs conditionnels
e
Certaines contraintes sont d´pendantes d’autres contraintes
e
if expr1 then expr2 else expr3 endif
Si l’expression expr1 est vraie alors expr2 doit ˆtre vraie sinon expr3 doit ˆtre
e
e
vraie
expr1 implies expr2
Si l’expression expr1 est vraie, alors expr2 doit ˆtre vraie ´galement.
e
e
Si expr1 est fausse, alors l’expression compl`te est vraie
e
context Personne
inv : if age >=18 then
majeur=vrai
else majeur=faux endif
La¨titia Matignon
e
context Personne
inv : mari´ implies majeur
e
SIMA - OCL - Object Constraint Language
2012
23 / 36
27. Types de base et op´rations
e
Types de base et op´rations associ´es
e
e
D´finir plusieurs contraintes pour un invariant, une pr´ ou postcondition :
e
e
and : et logique : l’invariant, pr´ ou postcondition est vrai si
e
toutes les expressions reli´es par le and sont vraies
e
or et xor
Types ´num´r´s
e
ee
Utilisation d’une valeur d’une ´num´ration
e
e
NomEnum::valeur
Ancienne notation : #valeur
context Personne
inv : if age <=12 then cat =Cat´gorie::enfant
e
else if age <=18 then cat =Cat´gorie::ado
e
else cat=Cat´gorie::adulte
e
endif endif
context Personne
inv: genre = Genre::femme
La¨titia Matignon
e
SIMA - OCL - Object Constraint Language
2012
24 / 36
28. Types de base et op´rations
e
Op´rations pr´d´finies sur les objets
e
e e
Types reli´s par une relation de sp´cialisation
e
e
Prise en compte des sp´cialisations entre classes du mod`le avec
e
e
op´rations OCL d´di´es ` la gestion des types :
e
e e a
oclIsKindOf(type) : vrai si l’objet est du type type ou un de ses
sous-types
oclIsTypeOf(type) : vrai si l’objet est du type type
oclAsType(type) : l’objet est cast´ en type type
e
Exemple : une classeB h´rite d’une classeA :
e
dans le contexte de classeB, self.oclIsKindOf(ClasseB) et
self.oclIsKindOf(ClasseA) sont vraies ;
dans le contexte de classeA, self.oclIsKindOf(ClasseB) est
fausse ;
dans le contexte Soci´t´, directeur.oclIsTypeOf(Personne) est
e e
vraie alors que self.oclIsTypeOf(Personne) est fausse.
La¨titia Matignon
e
SIMA - OCL - Object Constraint Language
2012
25 / 36
29. Types de base et op´rations
e
Types Collection
Plusieurs sous-types du type abstrait Collection
Set : ensemble non ordonn´ d’´l´ments uniques
e ee
OrderedSet : ensemble ordonn´ d’´l´ments uniques ({ordered})
e ee
Bag : collection non ordonn´e d’´l´ments identifiables
e
ee
Sequence : collection ordonn´e d’´l´ments identifiables.
e
ee
La¨titia Matignon
e
SIMA - OCL - Object Constraint Language
2012
26 / 36
30. Acc`s aux objets et navigation
e
Plan
1
Introduction
2
Typologie des contraintes
3
Conception par contrats pour op´rations
e
4
Types de base et op´rations
e
5
Acc`s aux objets et navigation
e
6
Collection
7
Conclusion
La¨titia Matignon
e
SIMA - OCL - Object Constraint Language
2012
27 / 36
31. Acc`s aux objets et navigation
e
Acc`s aux objets et navigation
e
Dans une contrainte OCL associ´e ` un objet, on peut
e a
Acc´der ` l’´tat interne de cet objet (ses attributs) : self.attribut
e
a e
Acc´der aux op´rations de cet objet : self.operation
e
e
Naviguer le long des liens : acc´der de mani`re transitive ` tous les objets ou
e
e
a
groupe d’objets (et leur ´tat) avec qui l’objet d´sign´ par le contexte est en
e
e
e
association
syntaxe : nom de la classe associ´e avec minuscule (si pas d’ambigu¨ e) OU nom
e
ıt´
du rˆle
o
ambiguit´ → multiples associations entre objet d´sign´ par le contexte et objet
e
e
e
associ´
e
→ association emprunt´e est r´flexive
e
e
context Soci´t´
e e
inv: self.personne.age >= 50 --ambigue
inv: self.directeur.age >= 50
La¨titia Matignon
e
SIMA - OCL - Object Constraint Language
2012
28 / 36
32. Acc`s aux objets et navigation
e
Acc`s aux objets et navigation
e
Type du r´sultat
e
Objet r´f´renc´ instance de la classe X et multiplicit´ de l’association du cˆt´ de cette
ee
e
e
oe
classe X est :
1 : le type du r´sultat est X ;
e
∗ ou O..n : le type du r´sultat est Set(X) ;
e
∗ ou O..n avec contrainte {ordered} : le type du r´sultat est OrderedSet(X) ;
e
si l’on emprunte plusieurs associations/propri´t´s : le type du r´sultat peut ˆtre
ee
e
e
Bag
Exemple : Dans le contexte de la classe Soci´t´ :
e e
directeur de type Personne ;
employ´s de type Set(Personne) ;
e
employ´s.compte de type Bag(Compte) ;
e
employ´s.dateDeNaissance de type Bag(Date).
e
context Personne
inv: self.compte.solde->sum() > 0 -- r´sultat de type collection
e
La¨titia Matignon
e
SIMA - OCL - Object Constraint Language
2012
29 / 36
33. Acc`s aux objets et navigation
e
Acc`s aux objets et navigation
e
Dans une contrainte OCL associ´e ` un objet, on peut
e a
Naviguer vers une classe association : nom de la classe association en minuscule
Naviguer ` partir d’une classe association : nom des rˆles (r´sultat est toujours
a
o
e
un objet unique)
context Soci´t´
e e
inv: self.emploi.salaireMensuel -- salaires de tous les employ´s
e
context Personne
inv: self.mariage[femme].date -- dates de mariage de toutes les femmes
--pr´ciser par quelle extremit´ on emprunte l’association avec nom du
e
e
role entre crochet
context Emploi
inv: self.employ´s.age >= 18 -- produit un singleton
e
La¨titia Matignon
e
SIMA - OCL - Object Constraint Language
2012
30 / 36
35. Collection
Op´rations sur les Collections
e
size() : retourne le nombre d’´l´ments de la collection
ee
count(obj) : retourne le nombre d’occurence d’un objet dans la collection
sum() : addition de tous les ´l´ments de la collection
ee
exists(uneExpression) : vaut vrai si et seulement si au moins un ´l´ment de la
ee
collection satisfait uneExpression.
isEmpty()/notEmpty() : retourne vrai si la collection est/n’est pas vide (tester
l’existence d’un lien dans une association dont la multiplicit´ inclut 0)
e
Notation : collection->operation()
context Soci´t´
e e
inv : self.employ´s->notEmpty() --une soci´t´ a au moins un employ´
e
e e
e
context Soci´t´
e e
inv : self.directeur->size()=1 --une soci´t´ poss`de exactement un
e e
e
directeur
context Soci´t´
e e
inv : self.employ´s->exists(age>50) --une soci´t´ doit poss´der au moins
e
e e
e
une personne de + de 50 ans
context Soci´t´
e e
inv : not(self.employ´s->exists(age<18)) --n’existe pas d’employ´s dont
e
e
l’age <18
La¨titia Matignon
e
SIMA - OCL - Object Constraint Language
2012
32 / 36
36. Collection
Op´rations sur les Collections
e
includes(obj)/excludes(obj) : vrai si la collection inclut/n’inclut pas l’objet obj
including(obj)/excluding(obj) : la collection r´f´renc´e doit ˆtre cette collection
ee
e
e
en incluant/excluant l’objet obj
includesAll(ens)/excludesAll(ens) : la collection contient tous/ne contient aucun
des ´l´ments de la collection ens
ee
AllInstances() : retourne toutes les instances de la classe r´f´renc´e
ee
e
forAll(elem :T|uneExpression) : vaut vrai si et seulement si uneExpression est
vraie pour tous les ´l´ments de la collection.
ee
Notation : collection->operation()
context Soci´t´
e e
inv : self.employes->includes(self.directeur) --le directeur est
´galement un employe
e
context Personne
inv: Personne.allInstances() -> forAll(p1, p2 |
p1 <> p2 implies p1.nom <> p2.nom)
La¨titia Matignon
e
SIMA - OCL - Object Constraint Language
2012
33 / 36
37. Collection
Op´rations sur les Collections
e
union : Retourne l’union de deux collections
intersection : Retourne l’intersection de deux collections
Exemple :
(col1 -> intersection(col2)) -> isEmpty() : Renvoie vrai si les
collections col1 et col2 n’ont pas d’´l´ment en commun
ee
col1 = col2 -> union(col3) : La collection col1 doit ˆtre l’union des
e
´l´ments de col2 et de col3
ee
G´n´rer une sous-collection en filtrant les ´l´ments de la collection self :
e e
ee
select : retourne les ´l´ments de la collection self dont les ´l´ments
ee
ee
respectent la contrainte sp´cifi´e
e e
reject : retourne tous les ´l´ments de la collection self except´ ceux qui
ee
e
satisfont la contrainte sp´cifi´e
e e
context Soci´t´
e e
inv: self.employ´s->select(age > 50)-> notEmpty()
e
context Personne
inv: compte -> select( c |c.solde > 1000)
inv: compte -> reject( c |c.solde > 1000)
La¨titia Matignon
e
SIMA - OCL - Object Constraint Language
2012
34 / 36
39. Conclusion
Conclusion
Conseils de mod´lisation
e
Faire simple : les contrats doivent am´liorer la qualit´ des
e
e
sp´cifications et non les rendre plus complexes
e
Combiner OCL avec un langage naturel : les contrats servent `
a
rendre les commentaires moins ambigus et non ` les remplacer
a
Outils
USE (Mark Richters) UML-based Specification Environment
http ://sourceforge.net/projects/useocl/
Octopus (Warmer & Kleppe) http ://octopus.sourceforge.net/
Dresden OCL http ://dresden-ocl.sourceforge.net/
La¨titia Matignon
e
SIMA - OCL - Object Constraint Language
2012
36 / 36