Sunteți pe pagina 1din 19

Langage de contraintes objet : OCL

Encadré par: Préparé par :

Pr : Abdessamad el boushaki Ismail boudzgzaouin


Ali bouragaa
islam el alani
plan

1
• Qu’est ce que OCL

2
• Pourquoi OCL ?

3
• Typologie des contraintes

4
• Types de base et opérations

5
• Accès aux objets, navigation
• collection
6

• conclusion
7
Contraintes
 Relation entre éléments de modélisation : propriété qui doit être vraie
 Notation : − − − − − − − − {contrainte}
 3 types de contraintes :
 Contraintes prédéfinies : disjoint, overlapping,...
 Contraintes exprimées en langue naturelle (commentaires)
 Contraintes exprimées avec OCL (Object Constraint Language)
 Stéréotypes : <<précondition>>, <<postcondition>>
• OCL - Langage de contraintes objet
1

 Langage de description de contraintes d’UML

 Langage formel (mais simple a utiliser), non ambigu, grammaire précise

 OCL peut s'appliquer sur la plupart des diagrammes d'UML et permet de spécifier
des contraintes sur l'état d'un objet ou d'un ensemble d'objets
 Standardisé par l’OMG : spécification v2.0 http://www.omg.org/spec/OCL/
Application bancaire
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

Quelles spécifications ne sont exprimées ?


Application bancaire
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

Quelles spécifications ne sont exprimées ?


Diagramme d’objets cohérent avec le diagramme de classes et la spécification .
Diagramme d’objets cohérent avec le diagramme de classes mais qui 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
3
• Typologie des contraintes

Notion Contexte(context) :

context Compte

inv :
 solde > 0
context Compte :: débiter(somme : int)

pre : somme > 0

post : solde = solde@pre - somme

context Compte

inv : banque.clients -> includes (propriétaire)

syntaxe

context <élément>

<élément> peut être une classe, une opération.. . Pour faire référence à un élément op ,d'un
classeur C ou d'un paquetage…, il faut utiliser les :: comme séparateur (comme C::op).

exemple

• Le contexte est la classe Compte :


Context Compte
• Le contexte est l'opération getSolde() de la classe Compte :
Context Compte::getSolde()
Invariants(inv)

syntaxe

inv : <expression_logique>

exemple

Le solde d'un compte doit toujours être positif.


context Compte
inv : solde > 0
Age est compris entre 0 et 140 ans
context Personne
inv : (age <= 140) and (age >=0)
Préconditions et postconditions (pré,post)

Une précondition (respectivement une postcondition) permet de spécifier une contrainte


prédicative qui doit être vérifiée avant (respectivement après) l'appel d'une opération.

• l'attribut result qui désigne la valeur retournée par l'opération ;


• <nom_attribut>@pre qui désigne la valeur de l'attribut <nom_attribut> avant l'appel de l'opération.

syntaxe

Précondition : pre : <expression_logique>

postcondition : post : <expression_logique>

exemple

context Compte::débiter(somme : Real)
pre : somme > 0
post : solde = solde@pre - somme
4
• Types de base et opérations

Types de base et exemples d'opérations associées :

• and (et logique) : l’invariant, pré ou postcondition est vrai si toutes les
expressions reliées par le and sont vraies
• or
5
• Accès aux objets, navigation

Accéder à l'état interne de cet objet

Accéder aux opérations de cet objet

Naviguer dans le diagramme

Nommage des éléments :

 Attributs ou paramètres d'une opération : utilise leur nom directement


 Objet(s) en association : utilise le nom de la classe associée (en minuscule) ou le nom du rôle
d'association du coté de cette classe

 Si cardinalité de 1 pour une association : référence un objet


 Si cardinalité > 1 pour une association : référence une collection d'objets
Exemples dans le contexte de la classe Compte :
Objet de la classe Banque (référence via le nom
de la classe) associé au compte

Propriétaire : objet de la classe Personne (référence


via le nom de rôle d'association) associée au compte

Banque.clients : ensemble des clients de la banque


associée au compte (référence par transitivité)

banque.clients.age : ensemble des âges de tous


les clients de la banque associée au compte

Attribut référencé directement


6
• Collections dans OCL
 Ensembles : Set(T)
 pas de répétition, pas d ’ordre
 Set { 1, 5, 10, 3 }
 Très utilisés dans UML : extension d’une classe, extension ou extrémité d’une
association.

 OrderedSet :
 Idem mais ensemble ordonné
 OrderedSet { 1, 3, 4, 5 }

 listes : Sequence(T)
 Répétitions possibles, les éléments sont ordonnés
 Sequence { 1, 5, 5, 10, 3, 1 }
 Peu utilisés dans UML : le résultat d ’une association avec la contrainte {ordered}

 sacs : Bag(T)
 Répétitions possibles, pas d ’ordre
 Bag { 1, 5, 5, 10, 3, 1 }
 Sont le résultat de navigations en OCL
Opérations générales sur les collections
Syntaxe d'utilisation

Collection ->primitive

Exemples

 union  includes(obj)
 intersection  excludes(obj)
 size(coll)  including(obj)
 isEmpty()  excluding(obj)
 notEmpty()  includesAll(coll)
 excludesAll(coll)
Exemples d’opérations sur les éléments
d'une collection

proprietaire ­-> notEmpty()


il y a au moins un objet Personne associé à un compte

proprietaire ­-> size() = 1


le nombre d'objets Personne associés à un compte est de
1

banque.clients -­> size() >= 1


une banque a au moins un client

banque.clients -­> includes(proprietaire)


l'ensemble des clients de la banque associée au compte
contient le propriétaire du compte

banque.clients.compte ­-> includes(self)


le compte appartient à un des clients de sa banque
7
• Conclusion

Le langage des contraints d’objet doivent améliorer la qualité des


spécifications et non les rendre plus complexes.

Combiner OCL avec un langage naturel : les contraints servent a rendre les
commentaires moins ambigus et non à les remplacer.

S-ar putea să vă placă și