POO : Value Objects

5 classes à coder, dont 2 Value Object, qui sont des classes servant à stocker des informations de manière structurée.

→ Challenge Methodology: L’explorateur de l’espace #2
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 EXPLORER_2 :

Value Object ?

Il contient 2 « Values Objects » (appelés aussi « Data Object »), leur rôle principal est de contenir et représenter des données. Au lieu de stocker les informations dans un tableau ou au travers de plusieurs variables, on crée une classe qui regroupera les valeurs. Un Value Object est donc souvent composé d’attributs pour stocker les données et de méthodes pour accéder (getters) et, si nécessaire, modifier (setters) ces données.

Les objets FieldScore et Field sont ici des Value Object. Selon le langage utilisé, des getteurs peuvent être mis en place.

L’objet Explorer

  • Il contient un tableau de planètes
  • Il contient un PlanetScorer
  • Pour bien séparer la logique, on n’aura pas de constructeur mais 2 méthodes d’initialisation distinctes :
    • setPlanets permet de définir les planètes
    • setScores permet d’initialiser les scores dans le PlanetScorer
  • Une méthode calculPlanetsScore pour calculer le score de chaque planète
  • La méthode searchBestPlanet retourne la réponse au challenge

L’objet Planet

  • Il contient un code
  • Il contient un tableau de terrains (Field)
  • Il contient un score, qu’on peut initialiser à zéro

L’objet PlanetScorer

  • Il contient un tableau de FieldScore, correspondant à la notation des terrains, initialisé par le constructeur
  • Une méthode getScoreByField qui parcourera chaque FieldScore pour trouver une possible correspondance
  • Une méthode getPlanetScore qui retournera le score de la planète, selon tous ses terrains. On passe une instance de Planet en paramètre directement et on peut donc accéder aux Field de Planet.

Le programme principal

Si on code en PHP, voici à quoi pourrait ressembler le programme principal :

$explorer = new Explorer;

$explorer->setPlanets($planetes); // Je définis mes planètes
$explorer->setScores($scores); // Je définis mes scores de notation
$explorer->calculPlanetsScore(); // Je calcul les scores

$reponse = $explorer->searchBestPlanet();

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 ?