Clase Círculo
Parte de la sección Programación Orientada a Objetos del Journey de Lua de Coddy. Lección 57 de 70.
Desafío
FácilSigamos construyendo nuestro Shape Manager agregando una clase Circle junto al Rectangle que creaste en la lección anterior.
Trabajarás con cuatro archivos para mantener tus formas organizadas:
Shape.lua: tu clase base Shape con:new(name)y:getName().Rectangle.lua: tu clase Rectangle del desafío anterior con:getArea().Circle.lua: crea una clase Circle que herede de Shape. El constructor debe aceptar unradius, llamar al constructor principal con el nombre"Circle"y almacenar el radio. Agrega un método:getArea()que calcule el área del círculo usando la fórmula πr². Usamath.pipara el valor de π.main.lua: requiere tus módulos Rectangle y Circle. Lee tres valores de la entrada: el ancho de un rectángulo, la altura de un rectángulo y el radio de un círculo. Crea una instancia de cada forma e imprime cuatro líneas: el nombre del rectángulo, el área del rectángulo, el nombre del círculo y el área del círculo.
Ahora ambas formas comparten la misma interfaz mediante la herencia: cada una tiene un método :getName() de Shape y su propia implementación de :getArea(). Esta interfaz común será útil en las próximas lecciones.
Entrada: Tres líneas: ancho (número), altura (número) y radio (número).
Salida: Cuatro líneas: nombre del rectángulo, área del rectángulo, nombre del círculo y área del círculo.
Pruébalo tú mismo
-- Requiere el módulo Rectangle
local Rectangle = require('Rectangle')
-- Requiere el módulo Circle
-- TODO: Requiere el módulo Circle aquí
-- Lee el ancho y la altura desde la entrada
local width = tonumber(io.read())
local height = tonumber(io.read())
-- TODO: Lee el radio desde la entrada
-- Crea una nueva instancia de Rectangle con las dimensiones dadas
local rect = Rectangle:new(width, height)
-- TODO: Crea una nueva instancia de Circle con el radio dado
-- Imprime el nombre y el área del rectángulo
print(rect:getName())
print(rect:getArea())
-- TODO: Imprime el nombre y el área del círculo
Todas las lecciones de Programación Orientada a Objetos
1El concepto de 'self'
Tablas con funciones'self' explícitoLa sintaxis de dos puntosPunto vs. dos puntosResumen - Punto en movimiento4Proyecto: Banco Digital
Configuración del proyectoMétodo de depósito7Polimorfismo y Sobrescritura
Sobrescritura de métodosLlamar a métodos del padreDuck TypingInterfaz comúnComprobación de tiposRepaso - Roles de empleados10Proyecto: Gestor de formas
Configuración del proyectoClase RectánguloClase CírculoMétodo de perímetroColección de formasÁrea totalFiltrar formas2Patrón de prototipo de clase
El concepto de prototipoVinculación con __indexEl constructor :new()Inicialización de atributosInstancias independientesResumen - Fábrica de coches5Sobrecarga de operadores en POO
Sumar objetosRestar objetosConcatenar objetosComparar objetos (<, >)Resumen - Matemáticas de la billetera8Encapsulamiento
Convenciones de nomenclaturaClosures para privacidadAcceso mediante ClosuresTablas de solo lecturaLógica de validaciónResumen - Bóveda segura11Patrones de diseño (Lite)
Funciones FactoryTabla SingletonPatrón IteradorObserver (Listener)Resumen - Logger Factory3Estado y Comportamiento de los Objetos
Variables de InstanciaMétodos GetterMétodos SetterPropiedades CalculadasFormateo de StringsComprobaciones de IgualdadResumen - Calificación del Estudiante6Fundamentos de la herencia
Configuración de la herenciaHerencia de métodosExtender el constructorAñadir métodos hijosCompartido vs. ÚnicoResumen: Jerarquía de formasPractica por tu cuenta: Compilador de Lua online