Définition
2
une condition ou une restriction sémantique exprimée sous forme d’instruction dans un langage textuel.
Une contrainte:
Peut être attachée à n’importe quel élément de modèle ou liste d’éléments de modèle. Désigne une restriction qui doit être appliquée par une implémentation correcte du système.
?
Sari Meriem Contraintes UML 1ére Année Master GL
Les Contraintes
3
Une contrainte peut être un corps écrit dans un langage de contrainte qui peut être:
Naturel.
Dédié, comme OCL.
Issu d’un langage de programmation.
Sari Meriem Contraintes UML 1ére Année Master GL
Les Contraintes
4
Nous avons déjà vu comment exprimer certaines formes de contraintes avec UML :
Contraintes structurelles : les attributs dans les classes, les différents types de relations entre classes, la cardinalité, etc.
Contraintes de type : typage des propriétés, etc.
Contraintes diverses : les contraintes de visibilité, les méthodes et classes abstraites, etc.
Sari Meriem Contraintes UML 1ére Année Master GL
Représentation d’une Contrainte
5
Une contrainte est représenté sous la forme d’une chaîne de texte placée entre accolades ({}).
Une contrainte peut possédé un nom.
Le nom est présenté sous forme d’une chaîne suivie d’un double point (:).
Le tout précédant le texte de la contrainte.
Sari Meriem Contraintes UML 1ére Année Master GL
Contraintes et contraintes prédéfinies
6
UML permet d’associer une contrainte à un, ou plusieurs, élément(s) de modèle de différentes façons :
Sari Meriem Contraintes UML 1ére Année Master GL
Types de Contraintes
7
Invariant de Classe: une contrainte qui doit être satisfaite par toutes les instances de la classe.
Pré-condition d’une opération: une contrainte qui doit toujours être vrai avant l’exécution de l’opération.
Post-condition d’une opération: une contrainte qui doit toujours être vrai après l’exécution de l’opération.
Sari Meriem Contraintes UML 1ére Année Master GL
OCL
8
un langage formel textuel d’expression de contraintes bien adapté aux diagrammes d’UML.
Acronyme de: Object Constraint Language.
Existe depuis la version 1.1 d’UML.
Peut s’appliquer sur la plupart des diagrammes d’UML et en particulier au diagramme de classes.
Simple à utiliser et non ambigüe.
?
Sari Meriem Diagrammes de Classes 1ére Année Master GL
Intérêt du OCL
9
C’est un langage formel volontairement simple d’accès.
Peut être interprété par des outils.
Représente un juste milieu entre le langage naturel et un langage très technique (langage mathématique, informatique, …).
Il permet ainsi de limiter les ambiguïtés, tout en restant accessible.
Une expression OCL décrit une contrainte à respecter et ne décrit absolument pas l’implémentation d’une méthode.
Sari Meriem Contraintes UML 1ére Année Master GL
Typologie des contraintes OCL
10
1. Contexte (context).
2. Invariants (inv).
3. Préconditions et postconditions (pre, post).
4. Résultat d’une méthode (body).
5. Définition d’attributs et de méthodes (def et let…in).
6. Initialisation (init) et évolution des attributs (derive).
Sari Meriem Contraintes UML 1ére Année Master GL
Contexte (context)
11
Une contrainte est toujours associée à un élément de modèle.
C’est cet élément qui constitue le contexte de la contrainte.
Syntaxe: context <élément>
<élément> peut être une classe: Exemple: context Compte
<élément> peut être une opération: Exemple: context Compte::getSolde()
Sari Meriem Contraintes UML 1ére Année Master GL
Invariants (inv)
12
Un invariant exprime une contrainte prédicative sur un objet qui doit être respectée en permanence.
Syntaxe: inv : <expression_logique>
Exemple: Le solde d’un compte doit toujours être positif.
context Compteinv : solde > 0
Sari Meriem Contraintes UML 1ére Année Master GL
Préconditions & postconditions (pre, post)
13
Une précondition permet de spécifier une contrainte prédicative qui doit être vérifiée avant l’appel d’une opération.
Une postcondition permet de spécifier une contrainte prédicative qui doit être vérifiée après l’appel d’une opération.
Syntaxe: Précondition : pre : <expression_logique> Postcondition : post : <expression_logique>
Exemple:context Compte::getSolde() : Real pre : somme > 0post : result = solde
Sari Meriem Contraintes UML 1ére Année Master GL
Résultat d’une méthode (body)
14
Permet de définir directement le résultat d’une opération.
Syntaxe: body : <requête>
Exemple: le résultat de l’appel de l’opération getSolde doit être égal à l’attribut solde.
context Compte::getSolde() : Realbody : solde
Sari Meriem Contraintes UML 1ére Année Master GL
Définition d’attributs et de méthodes (def et let…in)
15
let permet de déclarer et de définir la valeur (i.e. initialiser) d’un attribut qui pourra être utilisé dans l’expression qui suit le in.
def permet également de déclarer et de définir la valeur retournée par une opération interne à la contrainte.
Syntaxe: let <déclaration> = <requête> in <expression> def : <déclaration> = <requête>
Sari Meriem Contraintes UML 1ére Année Master GL
Initialisation et évolution des attributs (init, derive)
16
init permet de préciser la valeur initiale d’un attribut.
derive précise comment la valeur de ce type d’élément évolue.
Syntaxe: init : <requête> derive : <requête>
Exemple:
context Personne::marié : Booleaninit : false
context Personne::age : Integerderive : date_de_naissance - Date::current()
Sari Meriem Contraintes UML 1ére Année Master GL
Types et opérations utilisables dans OCL
17
I. Types et opérateurs prédéfinisII. Types du modèle UMLIII. Collections
1. Ensemble (Set)2. Ensemble ordonné (OrderedSet) 3. Sac (Bag)4. Séquence (Sequence) :
Sari Meriem Contraintes UML 1ére Année Master GL
Types du modèle UML
19
Une contrainte OCL peut référencer une valeur de type énuméré.
Syntaxe: <nom_type_enuméré>::valeur
Exemple: la classe Personne possède un attribut genre de type Genre. On peut donc écrire la contrainte :
context Personneinv : genre = Genre::femme
Sari Meriem Contraintes UML 1ére Année Master GL
Collections
20
Il existe plusieurs sous-types du type abstrait Collection :
Ensemble (Set): collection non ordonnée d’éléments uniques.
Ensemble ordonné (OrderedSet): collection ordonnée d’éléments uniques.
Sac (Bag) :collection non ordonnée d’éléments identifiables (pouvant comporter des doublons).
Séquence (Sequence): collection ordonnée d’éléments identifiables.
Sari Meriem Contraintes UML 1ére Année Master GL
Accès aux attributs et aux opérations (self)
21
L’objet désigné par le contexte est également accessible par l’expression self.
Syntaxe: self.<propriété>
Exemple: dans le contexte de la classe Compte, on peut utiliser les expressions suivantes :
solde self.solde getSolde() self.getSolde() débiter(1000) self.débiter(1000)
Sari Meriem Contraintes UML 1ére Année Master GL
Opération sur les classes
22
Toutes les opérations que nous avons décrites jusqu’ici s’appliquaient sur des instances de classe.
OCL dispose d’une opération prédéfinie sur les classes, les interfaces et les énumérations qui retourne l’ensemble de toutes les instances.
Exemple:
Personne.allInstances()
Sari Meriem Contraintes UML 1ére Année Master GL
Opérations sur les collections
23
OCL a un grand nombre d'opérations prédéfinies sur les collections.
Syntaxe: collection->operation
collection->collect(elem | expr) Retourne la collection des valeurs obtenues par application de expr aux éléments de collection. collection->select(elem | expression) Retourne le sous ensemble des éléments pour lesquels expression est vrai. collection->reject(elem | expression) Retourne le sous ensemble des éléments sauf lesquels que pour eux l’expression est vrai. collection->forAll(elem | expr) Retourne vrai si expr est vrai pour tous les éléments de collection.
Sari Meriem Contraintes UML 1ére Année Master GL
Opérations sur les collections
24
collection->exists(elem | expr) Retourne vrai si il existe au moins un élément de collection pour lequel expr est vrai.
Autre opérations:
isEmpty: vrai si self est vide. notEmpty: vrai si self n’est pas vide. size(): retourne le nombre d’éléments (la cardinalité) de self. count(elem):retourne le nombre d’occurrences de objet dans self. includes(elem): vrai si elem dans collection excludes(elem): vrai si self ne contient pas l’objet objet. sum(): etourne la somme des éléments de self.
Sari Meriem Contraintes UML 1ére Année Master GL
Héritage de contraintes
25
Partout où une instance d'une classe est attendue, une instance d'une sous classe peut lui être substituée.
C’est le concepte de Liskov’s Substitution Principle (LSP).
Sari Meriem Contraintes UML 1ére Année Master GL
Consequences de LSP
26
Pour les invariants:
Un invariant est toujours hérité par ses sous classes. Les sousclasses peuvent renforcer l'invariant.
Les preconditions et postconditions:
Une precondition peut être weakened (contravariance). Une postcondition peut être strengthened (covariance).
Sari Meriem Contraintes UML 1ére Année Master GL
Exemple
28
Dans une société, le directeur est un employé, n’est pas un chômeur et doit avoir plus de 40 ans. De plus, une société possède exactement un directeur et au moins un employé.
context Société inv : self.directeur->size()=1 and not(self.directeur.chômeur) and self.directeur.age > 40 and self.employé->includes(self.directeur)
Une personne possède deux parents, l’un est une femme et l’autre un homme.
context Personne inv : parent->size()=2 implies ( parent->exists(genre=Genre::homme) and parent->exists(genre=Genre::femme) )
Sari Meriem Contraintes UML 1ére Année Master GL
Top Related