POO : séparation des préoccupations

2 classes et une méthode statique, tout ce qu’il faut pour réviser les bases de la POO.

→ Challenge Methodology: Puissance des sortilèges
Coder dans la sandbox You must be logged in to access the sandbox.

Voici une proposition de diagramme UML à suivre pour résoudre le challenge HARRY_POTTER_2 : (certains éléments du diagramme font référence à PHP mais cette conception vaut pour tous les langages)

L’objet Spell

  • Un sort (spell) est représenté par son nome (name), initialisé par le constructeur.
  • Une méthode publique getScore, qui fera appel au SpellScorer, permet de retourner le score du sort

L’objet SpellScorer

  • Les différents éléments de la notation sont renseignés dans des constantes
  • Une méthode statique retourne le score d’un sort. Une instance de Spell est attendue en paramètre.

L’objet SpellScorer permet de séparer la logique de calcul du score de l’objet Spell lui même. C’est ce qu’on appelle la Séparation des Préoccupations (Separation of Concerns, SoC), elle a plusieurs avantages :

  • Responsabilités claires : chaque objet a une responsabilité unique, ce qui rend le code plus compréhensible et facile à maintenir. Ici, l’objet Spell se concentre sur la représentation du sort, tandis que l’objet SpellScorer gère la logique de calcul du score.
  • Testabilité : il plus facile de tester de « petites » unités de code. En séparant le calcul du score dans sa propre classe, tu peux tester cette logique de manière indépendante, sans avoir besoin de créer des instances de Spell.
  • Evolutions : L’architecture est plus flexible et peut évoluer plus facilement. Par exemple, si un nouveau système de notation devait être introduit, tu pourrais créer une nouvelle classe qui implémente cette nouvelle logique, sans avoir besoin de modifier la classe Spell. Tu pourrais même envisager d’implémenter un système où différentes stratégies de scoring pourraient être choisies dynamiquement à l’exécution…

Aller + loin

  • Tu peux créer une autre classe, par exemple Wizard, qui collectera tous les sorts et sera chargé de retourner la somme des scores des sorts (la réponse attendue du challenge)

A toi de coder !

N’oublie pas, le but de ce contenu est de proposer une conception permettant de résoudre le challenge avec un code objet et donc de progresser sur cette pratique. Ce n’est pas une réponse absolue et unique 😉


Qui a codé ce superbe contenu ?