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ácilVamos a construir una calculadora de formas 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 luego la implementarás en diferentes clases de formas.
Organizarás tu código en cuatro archivos:
Calculable.php— Define una interfazCalculablecon una única firma de método:calculateArea(). Este contrato asegura que cualquier forma calculable pueda computar su área.Rectangle.php— Crea una claseRectangleque implementeCalculable. Incluye el archivo de la interfaz. La clase debe tener propiedades privadas$widthy$height, establecidas a través del constructor. ImplementacalculateArea()para devolver el área (ancho multiplicado por alto).Circle.php— Crea una claseCircleque también implementeCalculable. Incluye el archivo de la interfaz. La clase debe tener una propiedad privada$radius, establecida a través del constructor. ImplementacalculateArea()para devolver el área usando la fórmulapi() * radius * radius.main.php— Incluye ambos archivos de formas. Crea una función llamadadisplayAreaque acepte un parámetroCalculabley un nombre de forma (string). La función debe imprimir:"[name] area: [area]"donde el área esté redondeada a 2 decimales usandonumber_format().
Recibirás cuatro entradas: el ancho del rectángulo, el alto del rectángulo, el radio del círculo y un nombre de forma para el círculo. Crea un Rectangle con el ancho y el alto (convierte a floats), y un Circle con el radio (convierte a float). Llama a displayArea() dos veces — primero con el rectángulo usando "Rectangle" como nombre, luego con el círculo usando el nombre de forma proporcionado. Imprime cada resultado en su propia línea.
La función displayArea() funciona con cualquier forma que implemente Calculable — no necesita saber si está calculando el área de un rectángulo, un círculo o cualquier forma futura que pudieras añadir. ¡Esa es la belleza de programar hacia una interfaz!
Pruébalo tú mismo
<?php
// Incluir los archivos de las 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 el área esté redondeada a 2 decimales usando number_format()
// Leer 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 ancho (width) y el alto (height)
// TODO: Crear un Circle con el radio (radius)
// TODO: Llamar a displayArea() con el rectángulo usando "Rectangle" como nombre
// TODO: Llamar a displayArea() con el círculo 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 Strategy