Repaso - 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 interfaces para crear código flexible y extensible. Crearás una interfaz 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 archivos:
Calculable.php: Define una interfazCalculablecon una única firma de método:calculateArea(). Este contrato garantiza que cualquier figura cuyo área se pueda calcular pueda calcular su área.Rectangle.php: Crea una claseRectangleque implementeCalculable. Incluye el archivo de la interfaz. La clase debe tener las propiedades privadas$widthy$height, establecidas mediante el constructor. ImplementacalculateArea()para devolver el área (el ancho multiplicado por la altura).Circle.php: Crea una claseCircleque también implementeCalculable. Incluye el archivo de la interfaz. La clase debe tener una propiedad privada$radius, establecida mediante el constructor. ImplementacalculateArea()para devolver el área usando la fórmulapi() * radius * radius.main.php: Incluye ambos archivos de figuras. Crea una función llamadadisplayAreaque acepte un parámetroCalculabley un nombre de figura (cadena). La función debe imprimir:"[name] area: [area]", donde el área se redondea a 2 decimales usandonumber_format().
Recibirás cuatro entradas: el ancho del rectángulo, la altura del rectángulo, el radio del círculo y un nombre de figura para el círculo. Crea un Rectangle con el ancho y la altura (conviértelos a valores de tipo float) y un Circle con el radio (conviértelo a float). Llama a displayArea() dos veces: primero con el rectángulo usando "Rectangle" como nombre y después con el círculo usando el nombre de figura proporcionado. Imprime cada resultado en su propia línea.
La función displayArea() funciona con cualquier figura que implemente Calculable. No necesita saber si está calculando el área de un rectángulo, un círculo o cualquier figura futura que puedas añadir. ¡Esa es la belleza de programar con una interfaz!
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 la POO
Archivos externosIntroducción a la POOClases frente a objetosLa palabra clave $thisMétodosPropiedadesConstructor (__construct)Destructor (__destruct)Repaso: calculadora simple4Herencia
Herencia básicaLa palabra clave parent::Sobrescritura de métodosLa palabra clave finalClases abstractasRepaso - Jerarquía de empleados7Encapsulación
Público, protegido, privadoModificadores de acceso en profundidadGetters y settersOcultación de la informaciónPromoción del constructor (8.0)Repaso: sistema de registros de estudiantes10Conceptos avanzados de OOP
Composición vs. herenciaInyección de dependenciasClases anónimasEnums (PHP 8.1)Fibras (PHP 8.1)Análisis profundo de la clonación de objetosGeneradores e iteradores13Patrones de diseño Parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón CompositePatrón Repository2Namespaces y carga automática
Introducción a los NamespacesLa palabra clave useEstándar de carga automática PSR-4Autoloader de ComposerRepaso: proyecto organizado5Interfaces y contratos
Introducción a las interfacesImplementación de interfacesImplementación de múltiples interfacesInterfaces vs. clase abstractaTipado con interfacesRepaso - 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 __unserializeRepaso: 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)Repaso: gestor de cuentas bancarias6Polimorfismo
Repaso de la sobrescritura de métodosPolimorfismo mediante interfacesAnotaciones de tipo y tipos uniónEnlace estático tardíoRepaso: procesador de pagos9Traits
Introducción a los TraitsUso de múltiples TraitsResolución de conflictos entre TraitsMétodos abstractos en TraitsTraits frente a la 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