Académique Documents
Professionnel Documents
Culture Documents
CoursUML OCL
CoursUML OCL
Exemple 1:
Aucun employé ne peut avoir un âge inférieur à 18 ans
35
OCL Object Constraint Language
Il existe deux façons pour modéliser une contrainte
OCL :
Mettre la contrainte entre accolades ({}) dans une note.
L'élément pointé par la note est alors le contexte de la
contrainte ;
36
OCL Object Constraint Language
Préconditions et postconditions (pre, post)
Une pré-condition permet de spécifier une contrainte
prédicative qui doit être vérifiée avant l'appel d'une
opération
vraie au moment de l'appel de l'opération
pas obligatoire à mettre.
Une post-condition est une condition booléenne
devant être vraie au moment où l'appel de l'opération
retourne.
Exemple1:
context Personne::setAge(a :entier)
pre : (a <= 140) and (a >=0) and (a >= age)
post : age = a
-- on peut également écrire a=age
37
OCL Object Constraint Language
Exemple 2
context Compte :: débiter ( somme : int )
pre : somme > 0
post : solde = solde @ pre somme
Dans l'expression de la contrainte de
la post-condition, deux éléments
particuliers sont utilisables :
<nom_attribut> @ pre qui désigne
38
OCL Object Constraint Language
result désigne la valeur retournée par l'opération ;
Exemple 1:
context Personne::getAge()
post : result=age
Exemple 2
context Compte::getSolde() : Integer
post: result = solde
Le résultat retourné doit être le solde courant
On ne décrit pas comment l'opération est réalisée mais des
contraintes sur l'état avant et/ou après son exécution
39
OCL Object Constraint Language
Les conditionnelles
On utilise soit l'opérateur booléen , soit le then .
au compte.
- pas de rémunération en dessous d'un certain seuil :
context Compte
inv : solde < 100 implies remuneration = 0.001 * solde
40
OCL Object Constraint Language
Définition d'attributs et de méthodes
def est un type de contrainte qui permet de
déclarer et de définir la valeur d'attributs. On
écrit:
41
OCL Object Constraint Language
Initialisation (init)
Le type de contrainte init permet de préciser la
valeur initiale d'un attribut.
Exemple: le solde est initialisé à 0 pour tout
nouveau compte
context Compte
init : solde = 0
Compte
Solde
42
OCL Object Constraint Language
Le type de contrainte derive permet de préciser
comment la valeur de certains attributs change ; la
valeur de tels éléments est toujours déterminée en
fonctions d'autres éléments du diagramme
L'âge d'une personne est la différence entre la date
courante et la date de naissance de la personne :
context Personne::age
derive : Date::current() - date_de_naissance
l'élément dérivé doit toujours avoir la valeur imposée
par l'expression de la contrainte derive. Mais la
contrainte init ne s'applique qu'au moment de la
création d'une instance précisée par le contexte de la
contrainte.
43
OCL Object Constraint Language
context Homme
inv: sexe = Gender::male
context Femme
inv: sexe = #female
44
OCL Object Constraint Language
Types de base OCL :
Integer, Boolean (true, false) ; and, or, not, implies, if then else),
Real, String.
Collections OCL :
size():Integer, retourne le nombre d'éléments (la cardinalité) de
self.
isEmpty(), vrai si vide.
notEmpty(), vrai si non vide.
Exemple:
Une société possède exactement
un directeur :
context Société
inv : self.directeur->size()=1
Une société a au moins un employé :
context Société
inv : self.employé->notEmpty()
45
OCL Object Constraint Language
Collections OCL :
includes(objet:T):Boolean, vrai si contient l'objet T.
excludes(objet:T):Boolean, vrai si ne contient pas l'objet T.
count(objet:T):Integer, retourne le nombre d'occurrences de
Exemple
46
OCL Object Constraint Language
Relations ensemblistes entre collections
union: retourne l'union de deux collections
intersection: retourne l'intersection de deux
collections
Exemples:
(col1 -> intersection(col2)) -> isEmpty()
renvoie vrai si les collections col1 et col2 n'ont
pas d'élément en commun
col1 = col2 -> union(col3)
la collection col1 doit être l'union des éléments
de col2 et de col3
47
OCL Object Constraint Language
( ) : retourne le sous-ensemble de la
collection respectent la contrainte
spécifiée
Exemple:
48
OCL Object Constraint Language
49
OCL Object Constraint Language
: retourne vrai si au moins un
élément de respecte la contrainte spécifiée et
faux sinon
Exemple:
context Banque
inv: not( self.clients ->
exists (c | c.age < 18) )
Il n'existe pas de clients de la
banque
à 18 ans
50
OCL Object Constraint Language
: retourne vrai si tous les
éléments de spécifiée
Exemple:
context Banque
inv: self.clients ->
forAll(c | c.age < 18)
51
Exercice - OCL
addEmployee(Person)
52
Exercice
Dans une compagnie, un manager doit travailler et avoir
plus de 40 ans
Le nombre d'employés d'une compagnie est non nul
Une personne considérée comme au chômage ne doit
pas avoir des revenus supérieurs à 500
Une personne a un père et une mère
Tous les enfants d'une personne ont bien cette
personne comme parent et inversement
Pour être marié, il faut avoir plus de 18 ans
Un homme est marié avec une femme et une femme
avec un homme
Un employé qui est embauché n'appartenait pas déjà à
la compagnie
53