Modélisation de système : UML n'est rien sans OCL !
L'Object Constraint Language (OCL) est un langage normalisé par l'OMG (Object Management Group) qui permet d'ajouter des containtes aux objets d'un modèle UML (Unified Modeling Language) en évitant les ambiguités du langage naturel.
C'est un langage de pure spécification sans effets de bord.
Quand une expression OCL est évaluée, elle retourne une valeur sans rien changer dans le modèle.
L'état du système n'est jamais modifié à cause de l'évaluation d'une expression OCL même si l'expression est utilisée pour spécifier le changement d'état dans une post condition.
OCL n'est pas un langage de programmation. Il est impossible d'invoquer des process ou d'activer des opérations qui ne seraient pas des requêtes.
OCL n'est pas directement exécutable. Nous verrons qu'avec le plugin OCL d'Eclipse et son framework EMF (Eclipse Modeling Framework), il est possible de lancer la validation d'un modèle comportant des contraintes OCL. Le framework permet du reste d'intégrer des contraintes OCL dans du code Java manipulant le modèle.
OCL est typé.
OCL peut être utilisé :
- Comme un langage de requêtes
- Pour spécifier des invariants
- Pour décrire des pré et post conditions
- Pour décrire des conditions
- Pour spécifier des messages et des actions
- Pour spécifier des contraintes sur des opérations
- Pour spéciifer les règles de déduction sur les attributs (attributs dérivés ou déduits)
Le mot clé self (même sémantique que le this du C++, Java ou C#) fait référence à une instance du contexte.
Le mot clé context : permet de définir le contexte (classe, attribut, opération).
Une expression OCL est un « invariant », si elle est vraie pour toutes les instances du type auquel elle est associée.
Exemple : comment spécifier en UML que les sociétés de notre modèle doivent avoir un nombre d'employés strictement supérieur à 50 ?
Dans le contexte Societe :
- le nombre d'employés doit toujours être > à 50,
- self est une instance de Societe
- inv: est une étiquette déclarant la contrainte comme un invariant.
Les pré et post condition d'une opération :
pre : param1 > ...
post: result = ...
Exemple :
post: result = 5000
Dernier exemple pour la route, écrivons une opération qui renvoie la liste des employés mariés :
pre: self.employes.notEmpty()
body: self.employes->select(e | e.estMarie=true)
Dans un prochain article nous verrons des concepts avancés d'OCL qui sont très utiles pour les transformations de modèles.
"Fais preuve de gentillesse envers tous ceux que tu rencontres, leur combat est peut-être plus dur que le tien."
Platon
Voir aussi :
http://urbanisation-si.wix.com/blog
http://urbanisme-si.wix.com/blog
http://urbanisation-si.wix.com/urbanisation-si
http://urbanisation-si.over-blog.com/
http://rhonamaxwel.over-blog.com/
http://urbanisation-des-si.blogspot.fr/
A découvrir aussi
- Modélisation de système : Soyez maniaque, croisez et recroisez vos modèles UML pour être certain qu'ils soient valides (5)
- Modélisation de système : Soyez maniaque, croisez et recroisez vos modèles UML pour être certain qu'ils soient valides (9)
- Modélisation de système : Soyez maniaque, croisez et recroisez vos modèles UML pour être certain qu'ils soient valides (12)
Inscrivez-vous au site
Soyez prévenu par email des prochaines mises à jour
Rejoignez les 769 autres membres