OCL : Les Civils

OCL (Object Constraint Language) est un langage formel utilisé pour définir et spécifier des contraintes sur les modèles de données orientés objet. Il fournit des expressions de contraintes pour spécifier des conditions qui doivent être satisfaites par les instances d'une classe, ainsi que des opérations et des fonctions pour effectuer des calculs sur les objets. OCL est utilisé dans l'ingénierie logicielle pour valider et vérifier la conformité des modèles de données avec les exigences fonctionnelles et non fonctionnelles.

EXERCICE  OCL Les Civils

Exprimez en OCL les contraintes suivantes :Screenshot 2023 03 07 at 04 32 26 pandacodeur pdf

Donnez une contrainte OCL qui spécifie :
1- Dans une société, le directeur est un employé, n’est pas un chômeur et doit avoir plus de 40 ans. De plus, une société possède exactement un directeur et au moins un employé.
2- Précisez le revenu d’une personne et si elle est au chômage, elle ne doit pas avoir de revenus.
3- Une personne possède au plus 2 parents (référencés).
4- Si une personne possède deux parents, l’un est une femme et l’autre un homme.
5- Tous les enfants d’une personne ont bien cette personne comme parent et inversement.
6- Pour être marié, il faut avoir une femme ou un mari.
7- Pour être marié, il faut avoir plus de 18 ans. Un homme est marié avec exactement une femme et une femme avec exactement un homme.
8- Concernant la méthode débiter de la classe Compte, la somme à débiter doit être positive pour que l’appel de l’opération soit valide et, après l’exécution de l’opération, l’attribut solde doit avoir pour valeur la différence de sa valeur avant l’appel et de la somme passée en paramètre.
9- Toute société doit posséder, parmi ses employés, au moins une personne de plus de 50 ans
10- Imposer qu’il n’existe pas deux instances de la classe Personne pour lesquelles l’attribut nom a la même valeur, c’est à dire que deux personnes différentes ont un nom différent.

 

CORRECTION : OCL

  1. Dans une société, le directeur est un employé, n’est pas un chômeur et doit avoir plus de 40 ans. De plus, une société possède exactement un directeur et au moins un employé.

context Société inv:

   self.directeur->size() = 1 and

   not(self.directeur.chômeur) and

   self.directeur.age > 40 and

   self.employé->includes(self.directeur)

  1. Une personne considérée comme au chômage ne doit pas avoir des revenus supérieurs à 10000 DA.

 

context Personne inv:

   let revenus: Real = self.poste.salaire->sum() in

   if chômeur then

      revenus < 10000

   else

      revenus >= 10000

   endif

  1. Une personne possède au plus 2 parents (référencés).

 

context Personne inv:

   parent->size() <= 2

  1. Si une personne possède deux parents, l’un est une femme et l’autre un homme.

 

context Personne inv:

   parent->size() = 2 implies

      (parent->exists(genre = Genre::homme) and

      parent->exists(genre = Genre::femme))

  1. Tous les enfants d’une personne ont bien cette personne comme parent et inversement.

 

context Personne inv:

   enfant->notEmpty() implies

      enfant->forAll(p: Personne | p.parents->includes(self))

 

ou

  

context Personne inv:

   parent->notEmpty() implies

      parent->forAll(p: Personne | p.enfant->includes(self))

  1. Pour être marié, il faut avoir une femme ou un mari.

 

context Personne::marié derive:

   self.femme->notEmpty() or self.mari->notEmpty()

  1. Pour être marié, il faut avoir plus de 18 ans. Un homme est marié avec exactement une femme et une femme avec exactement un homme.

 

context Personne inv:

   self.marié implies

      self.genre = Genre::homme implies (self.femme->size() = 1 and

      self.femme.genre = Genre::femme) and self.genre = Genre::femme implies

      (self.mari->size() = 1 and self.mari.genre = Genre::homme) and self.age >= 18

  1. Concernant la méthode débiter de la classe Compte, la somme à débiter doit être positive pour que l’appel de l’opération soit valide et, après l’exécution de l’opération, l’attribut solde doit avoir pour valeur la différence de sa valeur avant l’appel et de la somme passée en paramètre.

 

context Compte::débiter(somme: Real)

pre: somme > 0

post: solde = solde@pre - somme

  1. Toute société doit posséder, parmi ses employés, au moins une personne de plus de 50 ans.

 

context Société inv: self.employé->select(age > 50)->notEmpty()

ou

context Société inv: self.employé->select(individu | individu.age > 50)->notEmpty()  

ou

context Société inv: self.employé->select(individu : Personne | individu.age > 50)->notEmpty()

  1. Imposer qu’il n’existe pas deux instances de la classe Personne pour lesquelles l’attribut nom a la même valeur, c’est-à-dire que deux personnes différentes ont un nom différent.

 

context Personne inv: Personne.allInstances()->forAll(p1, p2 | p1 <> p2 implies p1.nom <> p2.nom)

Si vous avez trouvé les exercices corrigés en OCL de Mr JoëlYk intéressants et utiles, pourquoi ne pas les partager avec d'autres personnes qui pourraient également en bénéficier ? Partagez ce lien sur les réseaux sociaux ou envoyez-le à vos amis et collègues. Vous pourriez aider quelqu'un à améliorer ses compétences en programmation ou à trouver des solutions à des problèmes complexes. N'oubliez pas que la connaissance doit être partagée pour grandir. Merci pour votre soutien et votre partage !

Contact WhatsApp : +237 658395978 | Réaliser Par Joël_Yk

  • Aucune note. Soyez le premier à attribuer une note !

Ajouter un commentaire

Anti-spam