POO : Typage avec des classes

3 classes à construire.

→ Challenge Methodology: STARSHIP #1 : Défense orbitale
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 SURVIVAL_1 : (certains éléments du diagramme font référence à PHP mais cette conception vaut pour tous les langages)

Plan proposé

Le challenge STARSHIP_1 demande de calculer la somme de la puissance nécessaire pour détruire une liste de vaisseaux ennemis, en appliquant 3 règles de calcul selon la résistance de chaque vaisseau.

On va clairement séparer les responsabilités de chaque classe, structurer les données correctement, et s’appuyer sur le typage pour lier l’ensemble.

Etape 1 : modéliser les vaisseaux ennemis

Les vaisseaux ennemis seront modélisés avec la classe Ship. Cette classe n’opère aucun calcul, elle se contente de « porter » la valeur de resistance, au travers d’une propriété public readonly.

Etape 2 : structurer l’arme de notre vaisseau dans une classe dédiée

Les mécaniques principales du challenge seront rangées dans la classe SpaceShipWeapon. C’est cette classe qui sera chargée de calculer la puissance à appliquer pour se défendre contre les vaisseaux ennemis.

On créera ici 3 constantes qui représentent les seuils de changement de méthode de calcul (100, 1000, 10000). Les constantes permettent d’améliorer la lisibilité du code.

Chaque « niveau » disposera de sa propre méthode, de façon à bien isoler le code.

Etape 3 : orchestrer l’action avec la classe SpaceShip

C’est cette classe qui sera chargée de faire le lien entre les Ship et la SpaceShipWeapon.

C’est également cette classe qui sera chargée du calcul total de la puissance nécessaire, au travers de la propriété power.

Dans le constructeur de SpaceShip, il sera opportun d’instancier SpaceShipWeapon.

Programme principal

Dans le programme principal, il faudra procéder selon ces étapes :

  • Transformer le tableau de résistance $ships en un tableau de Ship.
  • Instancier le SpaceShip
  • Parcourir tous les Ship avec le SpaceShip
  • Retourner le résultat à l’aide de la méthode getPower()

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 ?

Keep learning

Other content to discover