Récapitulatif - Calculateur de Formes
Fait partie de la section Programmation Orientée Objet du Journey PHP de Coddy. Leçon 32 sur 91.
Défi
FacileConstruisons un calculateur de formes qui démontre la puissance des interfaces pour créer du code flexible et extensible. Vous allez créer une interface qui définit un contrat pour calculer des aires, puis l’implémenter dans différentes classes de formes.
Vous organiserez votre code dans quatre files :
Calculable.php: Définissez une interfaceCalculableavec une seule signature demethod:calculateArea(). Ce contrat garantit que toute forme calculable peut calculer son aire.Rectangle.php: Createz uneRectangleclassquiimplementsCalculable. Incluez le fichier de l’interface. Laclassdoit avoir les$widthet$heightpropertiesprivate, définies par leconstructor. ImplémentezcalculateArea()pourreturnl’aire (la largeurmultipliedpar la hauteur).Circle.php: Createz uneCircleclassquiimplementségalementCalculable. Incluez le fichier de l’interface. Laclassdoit avoir une$radiuspropertyprivate, définie par leconstructor. ImplémentezcalculateArea()pourreturnl’aire en utilisant laformulapi() * radius * radius.main.php: Incluez les deux fichiers de formes. Createz unefunctionappeléedisplayAreaquiacceptsunCalculableparameteret un nom de forme (chaîne). Lafunctiondoit Print :"[name] area: [area]", où l’aire est arrondie à 2placesdécimales à l’aide denumber_format().
Vous recevrez quatre entrées : la largeur du rectangle, la hauteur du rectangle, le rayon du cercle et un nom de forme pour le cercle. Createz un Rectangle avec la largeur et la hauteur (convertissez-les en nombres décimaux), ainsi qu’un Circle avec le rayon (convertissez-le en nombre décimal). Appelez displayArea() deux fois : d’abord avec le rectangle en utilisant "Rectangle" comme nom, puis avec le cercle en utilisant le nom de forme fourni. Print chaque résultat sur sa propre ligne.
La function displayArea() fonctionne avec toute forme qui implements Calculable. Elle n’a pas besoin de savoir si elle calcule l’aire d’un rectangle, d’un cercle ou de toute forme future que vous pourriez ajouter. C’est là toute la beauté de la programmation avec une interface !
Essayez vous-même
<?php
// Inclure les fichiers de formes
require_once 'Rectangle.php';
require_once 'Circle.php';
// TODO: Créer une fonction appelée displayArea
// Elle doit accepter un paramètre Calculable et un nom de forme (string)
// Afficher : "[name] area: [area]" où area est arrondi à 2 décimales en utilisant number_format()
// Lire les entrées
$width = floatval(trim(fgets(STDIN)));
$height = floatval(trim(fgets(STDIN)));
$radius = floatval(trim(fgets(STDIN)));
$circleName = trim(fgets(STDIN));
// TODO: Créer un Rectangle avec le width et le height
// TODO: Créer un Circle avec le radius
// TODO: Appeler displayArea() avec le rectangle en utilisant "Rectangle" comme nom
// TODO: Appeler displayArea() avec le circle en utilisant le nom de forme fourni
?>Toutes les leçons de Programmation Orientée Objet
1Les bases de la POO
Fichiers externesIntroduction à la POOClasses vs ObjetsLe mot-clé $thisMéthodesPropriétésConstructeur (__construct)Destructeur (__destruct)Récapitulatif - Calculatrice simple4Héritage
Héritage de baseLe mot-clé parent::Redéfinition de méthodeLe mot-clé finalClasses abstraitesRécapitulatif - Hiérarchie des employés7Encapsulation
Public, Protégé, PrivéModificateurs d'accès en détailGetters et SettersMasquage d'informationPromotion de constructeur (8.0)Récapitulatif - Système de gestion d'étudiants10Concepts avancés de la POO
Composition vs HéritageInjection de dépendancesClasses anonymesÉnumérations (PHP 8.1)Fibers (PHP 8.1)Clonage d'objets : analyse approfondieGénérateurs et Itérateurs13Patrons de conception Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode ModèlePatron ÉtatPatron CompositePatron Repository2Espaces de noms et Autoloading
Introduction aux espaces de nomsLe mot-clé useStandard d'Autoloading PSR-4L'Autoloader ComposerRécapitulatif - Projet organisé5Interfaces et Contrats
Introduction aux InterfacesImplémentation d'InterfacesImplémentation d'Interfaces MultiplesInterface vs Classe AbstraiteType Hinting avec les InterfacesRécapitulatif - Calculateur de Formes8Méthodes magiques
Introduction aux méthodes magiques__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Clonage d'objets__serialize & __unserializeRécapitulatif - Collection personnalisée3Propriétés de classe
Propriétés d'instance vs Propriétés statiquesConstantes dans les classesMéthodes et propriétés statiquesPropriétés privées et protégéesPropriétés readonly (PHP 8.1)Récapitulatif - Gestionnaire de compte bancaire6Polymorphisme
Retour sur la redéfinition de méthodePolymorphisme via les interfacesType Hinting et Types d'unionLiaison statique tardiveRécapitulatif - Processeur de paiement9Traits
Introduction aux TraitsUtilisation de plusieurs TraitsRésolution des conflits de TraitsMéthodes abstraites dans les TraitsTraits vs Héritage12Patrons de conception Partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FabriquePatron ObservateurPatron StratégieEntraînez-vous par vous-même : Compilateur PHP en ligne