urbanisation-si

urbanisation-si

Modélisation de système : UML n'est rien sans OCL !

modelisation-systeme-tutoriel-OCL-UML-2.png

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 ?

context Societe inv: self.nombreEmploye>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 :

context Typename::operationName(param1 : Type1, ... ): ReturnType
pre : param1 > ...
post: result = ...

Exemple :

context Person::income(d : Date) : Integer
post: result = 5000

Dernier exemple pour la route, écrivons une opération qui renvoie la liste des employés mariés :

context Societe::getEmployesMaries():Set
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 :  

 

//urbanisation-si.wix.com/blog

//urbanisme-si.wix.com/blog

//urbanisation-si.wix.com/urbanisation-si

//urbanisation-si.over-blog.com/

//rhonamaxwel.over-blog.com/

//urbanisation-des-si.blogspot.fr/

//bonnes-pratiques-si.eklablog.com/

//urbanisation-si.eklablog.com/



20/08/2015
0 Poster un commentaire

A découvrir aussi


Inscrivez-vous au blog

Soyez prévenu par email des prochaines mises à jour

Rejoignez les 99 autres membres