SlideShare une entreprise Scribd logo
1  sur  39
Télécharger pour lire hors ligne
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
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
Introduction

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

3 / 36
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
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
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
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
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
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
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
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
Introduction

Exemple de mod`le
e

La¨titia Matignon
e

SIMA - OCL - Object Constraint Language

2012

11 / 36
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Collection

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

31 / 36
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
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
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
Conclusion

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

35 / 36
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

Contenu connexe

Tendances

UML Part 3- diagramme de séquences mansouri
UML Part 3- diagramme de séquences mansouriUML Part 3- diagramme de séquences mansouri
UML Part 3- diagramme de séquences mansouriMansouri Khalifa
 
eServices-Tp1: Web Services
eServices-Tp1: Web ServiceseServices-Tp1: Web Services
eServices-Tp1: Web ServicesLilia Sfaxi
 
Android-Tp1: éléments graphiques de base et intents
Android-Tp1: éléments graphiques de base et intentsAndroid-Tp1: éléments graphiques de base et intents
Android-Tp1: éléments graphiques de base et intentsLilia Sfaxi
 
Chp2 - Diagramme des Cas d'Utilisation
Chp2 - Diagramme des Cas d'UtilisationChp2 - Diagramme des Cas d'Utilisation
Chp2 - Diagramme des Cas d'UtilisationLilia Sfaxi
 
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...ENSET, Université Hassan II Casablanca
 
Implémentation de l’algorithme du Simplexe En Java
Implémentation de l’algorithme du Simplexe En JavaImplémentation de l’algorithme du Simplexe En Java
Implémentation de l’algorithme du Simplexe En JavaRached Krim
 
algo et complexité .pptx
algo et complexité  .pptxalgo et complexité  .pptx
algo et complexité .pptxtarekjedidi
 
T1 corrections-qcm
T1 corrections-qcmT1 corrections-qcm
T1 corrections-qcminfcom
 
Developing Java Web Applications
Developing Java Web ApplicationsDeveloping Java Web Applications
Developing Java Web Applicationshchen1
 
UML Part2- diagramme des uses cases_mansouri
UML Part2- diagramme des uses cases_mansouriUML Part2- diagramme des uses cases_mansouri
UML Part2- diagramme des uses cases_mansouriMansouri Khalifa
 
02 - [ASP.NET Core] ASP.NET Core MVC
02 - [ASP.NET Core] ASP.NET Core MVC 02 - [ASP.NET Core] ASP.NET Core MVC
02 - [ASP.NET Core] ASP.NET Core MVC Cellenza
 
Formation C# - Cours 1 - Introduction, premiers pas, concepts
Formation C# - Cours 1 - Introduction, premiers pas, conceptsFormation C# - Cours 1 - Introduction, premiers pas, concepts
Formation C# - Cours 1 - Introduction, premiers pas, conceptskemenaran
 
Développement Web - Module 1 - Introduction
Développement Web - Module 1 - IntroductionDéveloppement Web - Module 1 - Introduction
Développement Web - Module 1 - IntroductionMohammed Amine Mostefai
 
Tp3 - Application SOA avec BPEL
Tp3 - Application SOA avec BPELTp3 - Application SOA avec BPEL
Tp3 - Application SOA avec BPELLilia Sfaxi
 
Les web services
Les web servicesLes web services
Les web servicesdihiaselma
 

Tendances (20)

UML Part 3- diagramme de séquences mansouri
UML Part 3- diagramme de séquences mansouriUML Part 3- diagramme de séquences mansouri
UML Part 3- diagramme de séquences mansouri
 
eServices-Tp1: Web Services
eServices-Tp1: Web ServiceseServices-Tp1: Web Services
eServices-Tp1: Web Services
 
Android-Tp1: éléments graphiques de base et intents
Android-Tp1: éléments graphiques de base et intentsAndroid-Tp1: éléments graphiques de base et intents
Android-Tp1: éléments graphiques de base et intents
 
Chp2 - Diagramme des Cas d'Utilisation
Chp2 - Diagramme des Cas d'UtilisationChp2 - Diagramme des Cas d'Utilisation
Chp2 - Diagramme des Cas d'Utilisation
 
Soa & services web
Soa & services webSoa & services web
Soa & services web
 
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
 
Implémentation de l’algorithme du Simplexe En Java
Implémentation de l’algorithme du Simplexe En JavaImplémentation de l’algorithme du Simplexe En Java
Implémentation de l’algorithme du Simplexe En Java
 
Méthodes Agiles - La Méthode XP
Méthodes Agiles - La Méthode XPMéthodes Agiles - La Méthode XP
Méthodes Agiles - La Méthode XP
 
Implementation Model
Implementation ModelImplementation Model
Implementation Model
 
algo et complexité .pptx
algo et complexité  .pptxalgo et complexité  .pptx
algo et complexité .pptx
 
Uml
UmlUml
Uml
 
T1 corrections-qcm
T1 corrections-qcmT1 corrections-qcm
T1 corrections-qcm
 
Developing Java Web Applications
Developing Java Web ApplicationsDeveloping Java Web Applications
Developing Java Web Applications
 
UML Part2- diagramme des uses cases_mansouri
UML Part2- diagramme des uses cases_mansouriUML Part2- diagramme des uses cases_mansouri
UML Part2- diagramme des uses cases_mansouri
 
02 - [ASP.NET Core] ASP.NET Core MVC
02 - [ASP.NET Core] ASP.NET Core MVC 02 - [ASP.NET Core] ASP.NET Core MVC
02 - [ASP.NET Core] ASP.NET Core MVC
 
Formation C# - Cours 1 - Introduction, premiers pas, concepts
Formation C# - Cours 1 - Introduction, premiers pas, conceptsFormation C# - Cours 1 - Introduction, premiers pas, concepts
Formation C# - Cours 1 - Introduction, premiers pas, concepts
 
Tp java ee.pptx
Tp java ee.pptxTp java ee.pptx
Tp java ee.pptx
 
Développement Web - Module 1 - Introduction
Développement Web - Module 1 - IntroductionDéveloppement Web - Module 1 - Introduction
Développement Web - Module 1 - Introduction
 
Tp3 - Application SOA avec BPEL
Tp3 - Application SOA avec BPELTp3 - Application SOA avec BPEL
Tp3 - Application SOA avec BPEL
 
Les web services
Les web servicesLes web services
Les web services
 

En vedette

BEEM magnetic microscopy - Data Storage
BEEM magnetic microscopy - Data StorageBEEM magnetic microscopy - Data Storage
BEEM magnetic microscopy - Data Storageniazi2012
 
Enrich Your Models With OCL
Enrich Your Models With OCLEnrich Your Models With OCL
Enrich Your Models With OCLEdward Willink
 
Spintronic - GaMnAsP - Data Storage
Spintronic - GaMnAsP - Data StorageSpintronic - GaMnAsP - Data Storage
Spintronic - GaMnAsP - Data Storageniazi2012
 
Nanostructuration de Surface - Organic Lasers
Nanostructuration de Surface -  Organic LasersNanostructuration de Surface -  Organic Lasers
Nanostructuration de Surface - Organic Lasersniazi2012
 
Comparaison de outils mda
Comparaison de outils mdaComparaison de outils mda
Comparaison de outils mdaShili Mohamed
 
Soutenanceshili mohamed
Soutenanceshili mohamedSoutenanceshili mohamed
Soutenanceshili mohamedShili Mohamed
 
Présentation carteapuce
Présentation carteapucePrésentation carteapuce
Présentation carteapuceShili Mohamed
 
patron de conception
patron de conception patron de conception
patron de conception Shili Mohamed
 
You need to extend your models? EMF Facet vs. EMF Profiles
You need to extend your models? EMF Facet vs. EMF ProfilesYou need to extend your models? EMF Facet vs. EMF Profiles
You need to extend your models? EMF Facet vs. EMF ProfilesPhilip Langer
 
erocci - a scalable model-driven API framework, OW2con'16, Paris.
erocci - a scalable model-driven API framework, OW2con'16, Paris. erocci - a scalable model-driven API framework, OW2con'16, Paris.
erocci - a scalable model-driven API framework, OW2con'16, Paris. OCCIware
 
Embedded OCL Integration and Debugging
Embedded OCL Integration and DebuggingEmbedded OCL Integration and Debugging
Embedded OCL Integration and DebuggingEdward Willink
 
SysML adoption in France
SysML adoption in FranceSysML adoption in France
SysML adoption in FrancePascal Roques
 
Modeling the OCL Standard Library
Modeling the OCL Standard LibraryModeling the OCL Standard Library
Modeling the OCL Standard LibraryEdward Willink
 

En vedette (20)

BEEM magnetic microscopy - Data Storage
BEEM magnetic microscopy - Data StorageBEEM magnetic microscopy - Data Storage
BEEM magnetic microscopy - Data Storage
 
OCL in EMF
OCL in EMFOCL in EMF
OCL in EMF
 
Ocl exercises 1
Ocl exercises 1Ocl exercises 1
Ocl exercises 1
 
Enrich Your Models With OCL
Enrich Your Models With OCLEnrich Your Models With OCL
Enrich Your Models With OCL
 
OCL tutorial
OCL tutorial OCL tutorial
OCL tutorial
 
conception
conceptionconception
conception
 
Spintronic - GaMnAsP - Data Storage
Spintronic - GaMnAsP - Data StorageSpintronic - GaMnAsP - Data Storage
Spintronic - GaMnAsP - Data Storage
 
Nanostructuration de Surface - Organic Lasers
Nanostructuration de Surface -  Organic LasersNanostructuration de Surface -  Organic Lasers
Nanostructuration de Surface - Organic Lasers
 
JPA est middleware
JPA est middleware JPA est middleware
JPA est middleware
 
Comparaison de outils mda
Comparaison de outils mdaComparaison de outils mda
Comparaison de outils mda
 
Soutenanceshili mohamed
Soutenanceshili mohamedSoutenanceshili mohamed
Soutenanceshili mohamed
 
cycle de vie
cycle de vie cycle de vie
cycle de vie
 
Présentation carteapuce
Présentation carteapucePrésentation carteapuce
Présentation carteapuce
 
patron de conception
patron de conception patron de conception
patron de conception
 
You need to extend your models? EMF Facet vs. EMF Profiles
You need to extend your models? EMF Facet vs. EMF ProfilesYou need to extend your models? EMF Facet vs. EMF Profiles
You need to extend your models? EMF Facet vs. EMF Profiles
 
erocci - a scalable model-driven API framework, OW2con'16, Paris.
erocci - a scalable model-driven API framework, OW2con'16, Paris. erocci - a scalable model-driven API framework, OW2con'16, Paris.
erocci - a scalable model-driven API framework, OW2con'16, Paris.
 
Embedded OCL Integration and Debugging
Embedded OCL Integration and DebuggingEmbedded OCL Integration and Debugging
Embedded OCL Integration and Debugging
 
SysML adoption in France
SysML adoption in FranceSysML adoption in France
SysML adoption in France
 
Java vs .Net
Java vs .NetJava vs .Net
Java vs .Net
 
Modeling the OCL Standard Library
Modeling the OCL Standard LibraryModeling the OCL Standard Library
Modeling the OCL Standard Library
 

Cours ocl

  • 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
  • 3. Introduction 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 3 / 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
  • 12. Introduction Exemple de mod`le e La¨titia Matignon e SIMA - OCL - Object Constraint Language 2012 11 / 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
  • 34. Collection 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 31 / 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
  • 38. Conclusion 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 35 / 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