La Programación Orientada a Objetos (POO) es un paradigma de programación que utiliza "objetos" para modelar datos y comportamientos. Lua, aunque no es un lenguaje orientado a objetos por naturaleza, proporciona mecanismos flexibles para implementar este paradigma. En este módulo, aprenderemos cómo utilizar tablas y metatablas para crear clases y objetos en Lua.
Conceptos Clave
- Tablas: En Lua, las tablas son estructuras de datos flexibles que pueden utilizarse para representar objetos.
- Metatablas: Permiten modificar el comportamiento de las tablas, facilitando la implementación de características de POO como la herencia.
- Métodos: Funciones que operan sobre objetos.
- Constructores: Funciones que crean e inicializan nuevos objetos.
Creación de Clases y Objetos
Definición de una Clase
En Lua, una clase puede ser representada por una tabla. A continuación, se muestra cómo definir una clase Persona:
-- Definición de la clase Persona
Persona = {}
Persona.__index = Persona
-- Constructor
function Persona:new(nombre, edad)
local self = setmetatable({}, Persona)
self.nombre = nombre
self.edad = edad
return self
end
-- Método para mostrar información
function Persona:mostrarInfo()
print("Nombre: " .. self.nombre .. ", Edad: " .. self.edad)
endCreación de Objetos
Para crear un objeto de la clase Persona, utilizamos el constructor new:
-- Creación de un objeto de la clase Persona
local persona1 = Persona:new("Juan", 30)
persona1:mostrarInfo() -- Salida: Nombre: Juan, Edad: 30Herencia
La herencia en Lua se puede implementar utilizando metatablas. A continuación, se muestra cómo crear una clase Estudiante que hereda de Persona:
-- Definición de la clase Estudiante que hereda de Persona
Estudiante = setmetatable({}, {__index = Persona})
Estudiante.__index = Estudiante
-- Constructor
function Estudiante:new(nombre, edad, carrera)
local self = Persona.new(self, nombre, edad)
self.carrera = carrera
return self
end
-- Método para mostrar información del estudiante
function Estudiante:mostrarInfo()
Persona.mostrarInfo(self)
print("Carrera: " .. self.carrera)
endCreación de Objetos de la Clase Derivada
-- Creación de un objeto de la clase Estudiante
local estudiante1 = Estudiante:new("Ana", 22, "Ingeniería")
estudiante1:mostrarInfo()
-- Salida:
-- Nombre: Ana, Edad: 22
-- Carrera: IngenieríaEjercicios Prácticos
Ejercicio 1: Definir una Clase Coche
- Define una clase
Cochecon los atributosmarcaymodelo. - Implementa un método
mostrarInfoque imprima la marca y el modelo del coche.
-- Solución
Coche = {}
Coche.__index = Coche
function Coche:new(marca, modelo)
local self = setmetatable({}, Coche)
self.marca = marca
self.modelo = modelo
return self
end
function Coche:mostrarInfo()
print("Marca: " .. self.marca .. ", Modelo: " .. self.modelo)
end
-- Creación de un objeto de la clase Coche
local coche1 = Coche:new("Toyota", "Corolla")
coche1:mostrarInfo() -- Salida: Marca: Toyota, Modelo: CorollaEjercicio 2: Herencia en la Clase Coche
- Define una clase
CocheDeportivoque herede deCoche. - Añade un atributo
velocidadMaximay un métodomostrarInfoque también imprima la velocidad máxima.
-- Solución
CocheDeportivo = setmetatable({}, {__index = Coche})
CocheDeportivo.__index = CocheDeportivo
function CocheDeportivo:new(marca, modelo, velocidadMaxima)
local self = Coche.new(self, marca, modelo)
self.velocidadMaxima = velocidadMaxima
return self
end
function CocheDeportivo:mostrarInfo()
Coche.mostrarInfo(self)
print("Velocidad Máxima: " .. self.velocidadMaxima .. " km/h")
end
-- Creación de un objeto de la clase CocheDeportivo
local cocheDeportivo1 = CocheDeportivo:new("Ferrari", "488", 330)
cocheDeportivo1:mostrarInfo()
-- Salida:
-- Marca: Ferrari, Modelo: 488
-- Velocidad Máxima: 330 km/hResumen
En esta sección, hemos aprendido cómo implementar la Programación Orientada a Objetos en Lua utilizando tablas y metatablas. Hemos cubierto la creación de clases, objetos, métodos y la implementación de herencia. Estos conceptos son fundamentales para estructurar y organizar el código de manera eficiente y modular.
En el siguiente módulo, exploraremos técnicas de depuración en Lua para identificar y solucionar errores en nuestros programas.
Curso de Programación en Lua
Módulo 1: Introducción a Lua
Módulo 2: Conceptos Básicos
Módulo 3: Conceptos Intermedios
Módulo 4: Conceptos Avanzados
- Corutinas
- Programación Orientada a Objetos en Lua
- Técnicas de Depuración
- Optimización del Rendimiento
- Uso de la API C de Lua
Módulo 5: Aplicaciones Prácticas
- Construcción de un Juego Simple
- Scripting en Motores de Juegos
- Automatización de Tareas con Lua
- Integración de Lua con Otros Lenguajes
