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 >…