Resumen - Calculadora de Formas
Parte de la sección Programación Orientada a Objetos del Journey de PHP de Coddy. Lección 32 de 91.
Desafío
FácilConstruyamos una calculadora de figuras que demuestre el poder de las interface para crear código flexible y extensible. Crearás una interface que define un contrato para calcular áreas y después la implementarás en diferentes clases de figuras.
Organizarás tu código en cuatro files:
Calculable.php: Define una interfaceCalculablecon una única firma de method:calculateArea(). Este contrato garantiza que cualquier figura calculable pueda calcular su área.Rectangle.php: Create una claseRectangleque implementsCalculable. Include el file de la interface. La clase debe tener las properties privadas$widthy$height, establecidas mediante el constructor. ImplementacalculateArea()para Return el área (width multiplied por height).Circle.php: Create una claseCircleque también implementsCalculable. Include el file de la interface. La clase debe tener una property privada$radius, establecida mediante el constructor. ImplementacalculateArea()para Return el área usando la formulapi() * radius * radius.main.php: Include ambos files de figuras. Create una function llamadadisplayAreaque accepts un parameterCalculabley un nombre de figura (cadena). La function debe Print:"[name] area: [area]", donde el área se redondea a 2 places decimales usandonumber_format().
Recibirás cuatro inputs: el width del rectangle, el height del rectangle, el radius del circle y un nombre de figura para el circle. Create un Rectangle con el width y el height (convertidos a números de punto flotante), y un Circle con el radius (convertido a número de punto flotante). Call displayArea() dos veces: primero con el rectangle usando "Rectangle" como nombre, después con el circle usando el nombre de figura provided. Print cada resultado en su propia línea.
La function displayArea() works con cualquier figura que implements Calculable. No necesita saber si está calculando el área de un rectangle, un circle o cualquier figura futura que puedas añadir. ¡Esa es la belleza de programar usando una interface!
Pruébalo tú mismo
<?php
// Incluir los archivos de formas
require_once 'Rectangle.php';
require_once 'Circle.php';
// TODO: Crear una función llamada displayArea
// Debe aceptar un parámetro Calculable y un nombre de forma (string)
// Imprimir: "[name] area: [area]" donde area se redondea a 2 decimales usando number_format()
// Leer las entradas
$width = floatval(trim(fgets(STDIN)));
$height = floatval(trim(fgets(STDIN)));
$radius = floatval(trim(fgets(STDIN)));
$circleName = trim(fgets(STDIN));
// TODO: Crear un Rectangle con el width y el height
// TODO: Crear un Circle con el radius
// TODO: Llamar a displayArea() con el rectangle usando "Rectangle" como el nombre
// TODO: Llamar a displayArea() con el circle usando el nombre de forma proporcionado
?>Todas las lecciones de Programación Orientada a Objetos
1Fundamentos de OOP
Archivos externosIntroducción a OOPClases vs ObjetosLa palabra clave $thisMétodosPropiedadesConstructor (__construct)Destructor (__destruct)Resumen - Calculadora simple4Herencia
Herencia básicaLa palabra clave parent::Sobrescritura de métodosLa palabra clave finalClases abstractasResumen - Jerarquía de empleados7Encapsulamiento
Público, Protegido, PrivadoModificadores de acceso a fondoGetters y SettersOcultamiento de informaciónPromoción de constructor (8.0)Resumen - Sistema de registros de estudiantes10Conceptos avanzados de POO
Composición vs. HerenciaInyección de dependenciasClases anónimasEnums (PHP 8.1)Fibers (PHP 8.1)Clonación de objetos a fondoGeneradores e Iteradores13Patrones de diseño Parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón CompositePatrón Repository2Espacios de nombres y Autoloading
Introducción a los espacios de nombresLa palabra clave useEstándar de Autoloading PSR-4Autoloader de ComposerResumen - Proyecto organizado5Interfaces y Contratos
Introducción a las InterfacesImplementación de InterfacesImplementación de Múltiples InterfacesInterfaz vs Clase AbstractaType Hinting con InterfacesResumen - Calculadora de Formas8Métodos mágicos
Introducción a los métodos mágicos__toString y __debugInfo__get, __set, __isset, __unset__call y __callStatic__clone y clonación de objetos__serialize y __unserializeResumen - Colección personalizada3Propiedades de clase
Propiedades de instancia vs. estáticasConstantes en clasesMétodos y propiedades estáticosPropiedades privadas y protegidasPropiedades de solo lectura (PHP 8.1)Resumen - Gestor de cuenta bancaria6Polimorfismo
Sobrescritura de métodos revisadaPolimorfismo mediante interfacesType Hinting y tipos de uniónEnlace estático tardíoResumen - Procesador de pagos9Traits
Introducción a los TraitsUso de múltiples TraitsResolución de conflictos de TraitsMétodos abstractos en TraitsTraits frente a herencia12Patrones de diseño Parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón ObserverPatrón StrategyPractica por tu cuenta: Compilador de PHP online