Clase Círculo
Parte de la sección Object Oriented Programming del Journey de Lua de Coddy — lección 57 de 70.
Desafío
FácilContinuemos construyendo nuestro Gestor de Formas 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 padre 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 tanto tus módulos Rectangle como 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.
Ambas formas ahora comparten la misma interfaz a través de 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, área del círculo.
Pruébalo tú mismo
-- Requerir el módulo Rectangle
local Rectangle = require('Rectangle')
-- Requerir el módulo Circle
-- TODO: Requerir el módulo Circle aquí
-- Leer el ancho y el alto de la entrada
local width = tonumber(io.read())
local height = tonumber(io.read())
-- TODO: Leer el radio de la entrada
-- Crear una nueva instancia de Rectangle con las dimensiones dadas
local rect = Rectangle:new(width, height)
-- TODO: Crear una nueva instancia de Circle con el radio dado
-- Imprimir el nombre y el área del rectángulo
print(rect:getName())
print(rect:getArea())
-- TODO: Imprimir el nombre y el área del círculo
Todas las lecciones de Object Oriented Programming
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ángulo2Patró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 formas