Fnac

OCL: Object Constraint Language

Le langage de contraintes d’UML
Eric Cariou
19/11/2003

LIFL

1

Le langage de contraintes OCL

Plan
1. 2. 3. 4. Pourquoi OCL ? Introduction par l’exemple Les principaux concepts d’OCL Exemple d’application sur un autre modèle Utilisation en pratique d’OCL lors d’un développement logiciel

LIFL

2

Le langage de contraintes OCL

Exempled’application
Application banquaire : Des comptes banquaires Des clients Des banques Spécification : Un compte doit avoir un solde toujours positif Un client peut posséder plusieurs comptes Un client peut être client de plusieurs banques Un client d’une banque possède au moins un compte dans cette banque Une banque gère plusieurs comptes Une banque possède plusieurs clients
LIFL 3 Le langage decontraintes OCL

Diagramme de classe
Banque

*
clients

*

1

Personne int age
propriétaire 1

*
Compte int solde

*

créditer(int) débiter(int) int getSolde()

LIFL

4

Le langage de contraintes OCL

Manque de précision
Le diagramme de classe ne permet pas d’exprimer tout ce qui est défini dans la spécification informelle Exemple : Le solde d’un compte doit toujoursêtre positif ? ajout d’une contrainte sur cet attribut Le diagramme de classe permet-il de détailler toutes les contraintes sur les relations entre les classes ?

LIFL

5

Le langage de contraintes OCL

Diagramme d’instances
Banque
Banque:B1

*
clients

*

Compte:Co1 Personne:P1

1

Personne int age
propriétaire 1

*
Compte int solde

Banque:B2

*
{ solde > 0 }Personne:P2

Compte:Co2

créditer(int) débiter(int) int getSolde()

Diagramme d’instances valide vis-à-vis du diagramme de classe et de la spécification attendue
LIFL 6 Le langage de contraintes OCL

Diagramme d’instances
Banque

*
clients

Banque:B1

*
Personne:P1

1

Personne int age
propriétaire 1

Compte:Co1

*
Compte int solde

Banque:B2

Compte:Co2 créditer(int)Personne:P2 { solde > 0 } débiter(int) int getSolde() Diagramme d’instances valide vis-à-vis du diagramme de classe mais ne respecte pas la spécification attendue :

*

Une personne a un compte dans une banque où elle n’est pas cliente Une personne est cliente d’une banque mais sans y avoir de compte
LIFL 7 Le langage de contraintes OCL

Diagrammes UML insuffisants
Pour spécifier complètementune application : Diagrammes UML seuls sont généralement insuffisants Nécessité de rajouter des contraintes Comment exprimer ces contraintes ? Langue naturelle mais manque de précision, compréhension pouvant être ambigüe Langage formel avec sémantique précise : par exemple OCL OCL : Object Constraint Language Langage de contraintes orienté-objet Langage formel (mais simple à utiliser) avec unesyntaxe, une grammaire, une sémantique (manipulable par un outil) S’applique sur les diagrammes UML
LIFL 8 Le langage de contraintes OCL

Plan
1. 2. 3. 4. Pourquoi OCL ? Introduction par l’exemple Les principaux concepts d’OCL Exemple d’application sur un autre modèle Utilisation en pratique d’OCL lors d’un développement logiciel

LIFL

9

Le langage de contraintes OCL

Le langage OCLOCL fait partie de la norme UML 1.3 (et sup.) de l’OMG (Object Management Group) OCL en version 2.0 : spécification à part de la norme UML 2.0, en cours de normalisation par l’OMG OCL permet principalement d’exprimer deux types de contraintes sur l’état d’un objet ou d’un ensemble d’objets : Des invariants qui doivent être respectés en permanence Des pré et post-conditions pour une opération :Précondition : doit être vérifiée avant l’exécution Postcondition : doit être vérifiée après l’exécution Attention : une expression OCL décrit une contrainte à respecter et pas le « code » d’une méthode
LIFL 10 Le langage de contraintes OCL

Usage d’OCL sur l’application banquaire
Banque

context Compte

*
clients

inv: solde > 0

*
context Compte : débiter(somme : int) pre: somme >…