OCL : Jeu de Plateau

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  Jeu de Plateau

Soit le diagramme de classes d’un jeu de plateau. Dans ce jeu, des joueurs doivent explorer un donjon et affronter des monstres pour découvrir des trésors et trouver la sortie.
 
Voici quelques explications sur le jeu :

  • Chaque instance de Joueur représente un pion sur le plateau du donjon.
  • Un donjon est constitué d’instances de Case.
  • A chaque tour, les joueurs placent de nouvelles cases dans le donjon pour agrandir le plateau (méthode Donjon::placerCase).
  • Il existe quatre types de cases : Entrée, Sortie, Trésor et Monstre.
  • Les joueurs commencent sur la case de type Entrée.
  • A chaque tour, les joueurs peuvent se déplacer vers une case adjacente à la leur (méthode Joueur::déplacer).
  • Le premier joueur  placé sur la case Sortie gagne la partie.

Jeu plateau pandacodeur

Exprimer les contraintes suivantes en OCL :

  1. Deux instances de la classe Donjon ne peuvent avoir le même identifiant id.
  2. Deux joueurs dans un même donjon ne peuvent partager la même couleur.
  3. On ne peut pas appeler la méthode commencer() si le donjon est déjà commencé.
  4. Le nombre de cases voisines à une case est compris entre 0 et 4.
  5. La méthode Donjon::placerCase(case, voisine) permet de placer une nouvelle case dans le donjon. Le paramètre case représente la nouvelle case à placer. Le paramètre voisine représente la case déjà posée à côté de laquelle on souhaite poser la nouvelle case. Avant l'exécution de la méthode Donjon::placerCase(case, voisine), case et voisine ne peuvent pas être la même instance. voisine doit se trouver dans les cases du donjon, mais case ne doit pas déjà s'y trouver.
  6. Lorsqu'on veut appeler la méthode Donjon::placerCase(case, voisine), voisine ne peut avoir plus de 3 voisines.
  7. Après l'appel de la méthode Donjon::placerCase(case, voisine), case doit se trouver dans les cases du donjon, et le nombre de cases dans le donjon doit avoir été incrémenté par rapport à avant l'appel.
  8. Lorsqu'on veut appeler la méthode Joueur::deplacer(case), la case vers laquelle on veut déplacer le joueur doit être voisine de la case actuelle du joueur.

CORRECTION : OCL

1. Deux instances de la classe Donjon ne peuvent avoir le même identifiant id
 
context Donjon

inv: allInstances()−>forAll(d1, d2 | d1 <> d2 implies d1.id <> d2.id)
 
2. Deux joueurs dans un même donjon ne peuvent partager la même couleur
 
context Donjon

inv: joueurs−>forAll(j1, j2 | j1 <> j2 implies j1.couleur <> j2.couleur)
 
3. On ne peut pas appeler la méthode commencer() si le donjon est déjà commencé
 
context Donjon::commencer()

pre: not commence
 
4. Après l’appel de la méthode commencer(), tous les joueurs se trouvent sur la case entrée
 
context Donjon::commencer()

post: joueurs−>forAll(case = entree)
 
5. La méthode Donjon::placerCase(case, voisine) permet de placer une nouvelle case dans le donjon. Le paramètre case représente la nouvelle case à placer. Le paramètre voisine représente la case déjà posée à coté de laquelle on souhaite poser la nouvelle case. Lorsque l’on appelle la méthode Donjon::placerCase(case, voisine), case et voisine ne peuvent pas être la même instance, voisine doit se trouver dans les cases du donjon mais case ne doit pas déjà s’y trouver
 
context Donjon::placerCase(case: Case, voisine: Case)

pre: case <> voisine and cases−>includes(voisine) and cases−>excludes(case)
 
6. Lorsque l’on appelle la méthode Donjon::placerCase(case, voisine), voisine ne peut avoir plus de 3 voisines
 
context Donjon::placerCase(case: Case, voisine: Case)

pre: voisine . voisins−>size() < 4  
 
7. Après l’appel de la méthode Donjon::placerCase(case, voisine), case doit se trouver dans les cases du donjon et le nombre de cases dans le donjon doit avoir été incrémenté par rapport à avant l’appel. 

context Donjon::placerCase(case: Case, voisine: Case)

post: cases−>includes(case) and cases−>size() = cases@pre−>size() + 1
 
8. Lorsqu’on veut appeller la méthode Joueur::deplacer(case), la case vers laquelle on veut déplacer le joueur doit être voisine de la case actuelle du joueur
 
context Joueur::deplacer(case: Case)

pre: self .case. voisins−>includes(case)
 

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