Complément Chapitre2

Ce laboratoire propose une série d'exercices pratiques sur l'expression de contraintes en OCL (Object Constraint Language) et la modélisation méta-modèle UML simplifiée. Il permet d'apprendre à formaliser des règles métier et des relations dans un modèle UML, ainsi qu'à concevoir des méta-modèles adaptés à des contextes spécifiques.

D'après le document Complément Chapitre2

Cet article a été rédigé automatiquement à partir du document source, puis vérifié avant publication.

Document source

Complément Chapitre2

Programming, OCL, UML · PDF · 8 pages · 2014

Afficher l'aperçu du document

Consulter le document original →

Ce laboratoire propose une série d'exercices pratiques sur l'expression de contraintes en OCL (Object Constraint Language) et la modélisation méta-modèle UML simplifiée. Il permet d'apprendre à formaliser des règles métier et des relations dans un modèle UML, ainsi qu'à concevoir des méta-modèles adaptés à des contextes spécifiques. Pour réaliser ce TP, il est nécessaire de connaître les bases de la modélisation UML, la syntaxe et la sémantique de l'OCL, ainsi que les concepts fondamentaux des méta-modèles.

Objectifs

  • Exprimer des contraintes métier en OCL dans un contexte UML.
  • Comprendre la différence entre contraintes locales et globales.
  • Modéliser des structures complexes à l'aide de méta-modèles UML simplifiés.
  • Définir des profils UML pour étendre les modèles standards.

Prérequis et installation

  • Connaissance des diagrammes de classes UML.
  • Notions de base sur le langage OCL.
  • Environnement de modélisation UML avec support OCL (non précisé dans le TP).
  • Compréhension des concepts de méta-modélisation et de profils UML.

Exercice 1 : Ajout d'attribut et contraintes sur la classe Personne

Dans cet exercice, vous devez ajouter un attribut mère de type Personne dans la classe Personne. Ensuite, vous écrivez une contrainte OCL qui interdit qu'une personne soit sa propre mère et impose que l'âge de la mère soit supérieur à celui de la personne.

Cette étape permet de pratiquer l'expression de contraintes d'intégrité référentielle et de comparaison d'attributs dans OCL.

La contrainte correcte est :

context Personne inv:
self.mere <> self and self.mere.age > self.age

Un résultat correct est une contrainte qui empêche toute instance de Personne d'avoir elle-même comme mère et garantit que l'âge de la mère est strictement supérieur à celui de la personne.

Exercice 2 : Contraintes sur la majorité et le mariage

Vous devez exprimer que toute personne mariée est majeure. Puis, proposer une version compacte d'une contrainte exprimant que la propriété majeur est vraie si et seulement si l'âge est supérieur ou égal à 18.

La contrainte pour la majorité liée au mariage est :

context Personne inv:
marié implies majeur

La version compacte de la contrainte sur la majorité est :

context Personne inv:
majeur = age >= 18

Cette étape enseigne la simplification d'expressions conditionnelles en OCL.

Exercice 3 : Comparaison de deux contraintes OCL

Il s'agit d'analyser si deux contraintes sont équivalentes :

  • Contexte C1 inv: c2->forAll(c:C2| c.c3->notEmpty() implies c.attr2 = c.c3.attr3)
  • Contexte C2 inv: C2.allInstances()->forAll(c:C2| c.c3->notEmpty() implies c.attr2 = c.c3.attr3)

La réponse est non. La première contrainte s'applique uniquement aux instances de C2 et C3 liées à une instance de C1, tandis que la deuxième s'applique à toutes les instances de C2, qu'elles soient liées ou non à une instance de C1.

Cette distinction est importante pour comprendre la portée et le contexte d'application des contraintes OCL.

Exercice 4 : Expression de contraintes métier diverses

Quatre contraintes doivent être exprimées en OCL :

  1. Dans une compagnie, un manager doit travailler, avoir plus de 40 ans, et la compagnie doit avoir au moins un employé.
  2. Une personne au chômage ne doit pas avoir de salaire, et une personne qui travaille doit avoir un revenu d'au moins 500 DT par mois.
  3. Dans le contexte de la classe Job, l'âge de l'employé doit être supérieur à 21 ans.
  4. Tous les enfants d'une personne ont cette personne comme parent, et inversement.

Les contraintes correspondantes sont :

1. context Company
inv: self.manager.isUnemployed = false and self.manager.age > 40 and self.employee->notEmpty()

2. context Person
inv: let money : Real = self.Job.salary->sum() in
if isUnemployed then money = 0 else money >= 500 endif

ou bien

context Person inv:
if isUnemployed = true then self.Job->isEmpty() else self.Job.salary->sum() >= 500

3. context Job inv:
self.employee.age > 21

4. context Person inv:
children->notEmpty() implies children->forAll(p : Person | p.parents->includes(self))

context Person inv:
parents->forAll(p : Person | p.children->includes(self))

Ces contraintes illustrent la modélisation de règles métier complexes et la navigation bidirectionnelle dans les associations.

Exercice 5 : Méta-modélisation simplifiée de diagrammes UML

Ce groupe d'exercices propose de créer des méta-modèles simplifiés pour :

  • Un diagramme de classes contenant des packages, classes, attributs, avec héritage et visibilité.
  • Une librairie gérant livres, membres et emprunts, avec contraintes sur le nombre de copies et d'emprunts.
  • Des maisons composées de pièces, murs, portes et fenêtres, avec contraintes sur leur composition et actions associées.
  • Des diagrammes formés de carrés reliés par des flèches, avec interdiction que la source et la destination soient identiques.
  • Un profil UML pour modéliser ces diagrammes, avec des propriétés supplémentaires comme la longueur des côtés des carrés, leur couleur, et le style des flèches.

Ces exercices demandent de formaliser les entités, leurs attributs, leurs relations, et les contraintes d'intégrité dans un méta-modèle UML.

Résultats attendus

  • Attribut mère ajouté dans la classe Personne avec la contrainte OCL correcte.
  • Contraintes OCL exprimées clairement, sans ambiguïté, et respectant les règles métier données.
  • Compréhension démontrée de la portée des contraintes selon leur contexte.
  • Méta-modèles UML simplifiés représentant fidèlement les descriptions données, avec les relations et contraintes adéquates.
  • Profils UML définis avec les propriétés et stéréotypes demandés.

Erreurs courantes

  • Confondre la portée des contraintes : appliquer une contrainte locale à un contexte global ou inversement.
  • Oublier de vérifier que la mère d'une personne n'est pas la personne elle-même.
  • Ne pas respecter les types dans les expressions OCL, notamment pour les comparaisons d'âge ou les sommes de salaires.
  • Dans la méta-modélisation, omettre les relations d'héritage ou les contraintes sur la composition (par exemple, un mur ne peut pas avoir à la fois une porte et une fenêtre).
  • Ne pas définir correctement les propriétés des profils UML, comme la couleur ou le style des flèches.

Partager

Commentaires

Aucun commentaire pour le moment. Posez la première question.

Les commentaires sont relus avant publication. Votre e-mail n'est jamais affiché.

← Toutes les révisions