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 un code flexible et extensible. Vous allez créer une interface qui définit un contrat pour le calcul des aires, puis l'implémenter dans différentes classes de formes.
Vous organiserez votre code sur quatre fichiers :
Calculable.php— Définissez une interfaceCalculableavec une signature de méthode unique :calculateArea(). Ce contrat garantit que toute forme calculable peut calculer son aire.Rectangle.php— Créez une classeRectanglequi implémenteCalculable. Incluez le fichier de l'interface. La classe doit avoir des propriétés privées$widthet$height, définies via le constructeur. ImplémentezcalculateArea()pour retourner l'aire (largeur multipliée par la hauteur).Circle.php— Créez une classeCirclequi implémente égalementCalculable. Incluez le fichier de l'interface. La classe doit avoir une propriété privée$radius, définie via le constructeur. ImplémentezcalculateArea()pour retourner l'aire en utilisant la formulepi() * radius * radius.main.php— Incluez les deux fichiers de formes. Créez une fonction nomméedisplayAreaqui accepte un paramètreCalculableet un nom de forme (chaîne de caractères). La fonction doit afficher :"[name] area: [area]"où l'aire est arrondie à 2 décimales en utilisantnumber_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. Créez un Rectangle avec la largeur et la hauteur (converties en flottants), et un Circle avec le rayon (converti en flottant). 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. Affichez chaque résultat sur sa propre ligne.
La fonction displayArea() fonctionne avec n'importe quelle forme qui implémente Calculable — elle n'a pas besoin de savoir si elle calcule l'aire d'un rectangle, d'un cercle ou de toute autre forme future que vous pourriez ajouter. C'est toute la beauté de la programmation orientée 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 (chaîne de caractères)
// Afficher : "[name] area: [area]" où l'aire est arrondie à 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 la largeur et la hauteur
// TODO: Créer un Circle avec le rayon
// TODO: Appeler displayArea() avec le rectangle en utilisant "Rectangle" comme nom
// TODO: Appeler displayArea() avec le cercle 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égie