🦖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.")
end

6.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