🦖POO
LUA no tiene soporte nativo para la Programación Orientada a Objetos (POO), pero ofrece suficiente flexibilidad para implementarla utilizando tablas y metatables. En este tema, veremos cómo simular clases, objetos, herencia y otros conceptos clave de la POO en LUA.
6.1. Simulación de Clases y Objetos 🏛️
En LUA, se puede simular una clase usando una tabla. Los métodos de la clase se definen como funciones dentro de la tabla.
6.1.1. Creación de una clase
Para crear una clase, definimos una tabla y un constructor que inicialice sus propiedades.
-- Definimos la clase "Persona"
Persona = {}
Persona.__index = Persona
-- Constructor
function Persona:new(nombre, edad)
local obj = {
nombre = nombre or "Sin nombre",
edad = edad or 0
}
setmetatable(obj, Persona)
return obj
end
-- Método para mostrar información
function Persona:presentarse()
print("Hola, soy " .. self.nombre .. " y tengo " .. self.edad .. " años.")
end6.1.2. Creación de objetos
Usamos el constructor de la clase para crear instancias (objetos) de la clase.
6.1.3. Añadir métodos adicionales
Podemos agregar más métodos a la clase para ampliar su funcionalidad.
6.2. Herencia y Polimorfismo 🧬
La herencia en LUA se puede simular haciendo que una tabla "clase hija" tenga como metatable la "clase padre". Esto permite que la clase hija herede métodos y propiedades de la clase padre.
6.2.1. Creación de una subclase
Creamos una subclase Estudiante que herede de Persona.
6.2.2. Uso de la subclase
Creamos un objeto de la subclase y usamos sus métodos.
6.2.3. Sobrescribir métodos
La subclase puede sobrescribir métodos de la clase padre para ofrecer un comportamiento especializado.
6.3. Encapsulamiento y Visibilidad de Miembros 🔒
En LUA, no existe un mecanismo nativo para definir la visibilidad de los miembros (públicos, privados, protegidos). Sin embargo, se pueden simular usando convenciones y closures.
6.3.1. Propiedades privadas con closures
Podemos simular propiedades privadas utilizando closures y funciones locales.
6.3.2. Métodos privados
También podemos definir métodos privados utilizando funciones locales dentro del constructor.
6.4. Uso de Metatables en la Programación Orientada a Objetos 🧩
Las metatables son un aspecto avanzado en LUA que se pueden usar para modificar el comportamiento de las tablas, permitiendo una implementación más flexible de la POO.
6.4.1. Sobrecarga de operadores
Podemos usar metatables para sobrecargar operadores, como sumar dos objetos.
6.4.2. Métodos metamágicos útiles
Además de __add, LUA soporta otros métodos metamágicos para implementar diferentes comportamientos personalizados en las clases.
__tostring: Define cómo se muestra un objeto cuando se convierte en una cadena.
__call: Permite que un objeto se comporte como una función.
Este bloque de código contiene todo el contenido del Tema 6 sobre la Programación Orientada a Objetos en LUA, en un formato que puedes copiar y pegar fácilmente. ¡Espero que te sea útil para avanzar en tu comprensión de LUA y la POO! 😊
Última actualización