La programació orientada a objectes (OOP) és un paradigma de programació que utilitza "objectes" per representar dades i mètodes. Lua no té suport natiu per a OOP com altres llenguatges com Java o Python, però proporciona mecanismes flexibles que permeten implementar OOP de manera eficient.
Conceptes Clau
- Objectes: Entitats que encapsulen dades i comportaments.
- Classes: Plantilles per crear objectes.
- Metataules: Taules especials que defineixen el comportament de les taules.
- Metamètodes: Funcions especials dins de les metataules que defineixen com es comporten les operacions en les taules.
Creació d'Objectes i Classes
Definició d'una Classe
En Lua, una classe es pot definir utilitzant taules i metataules. Aquí tens un exemple bàsic d'una classe Persona
:
-- Definició de la classe Persona Persona = {} Persona.__index = Persona -- Constructor function Persona:new(nom, edat) local self = setmetatable({}, Persona) self.nom = nom self.edat = edat return self end -- Mètode per mostrar informació function Persona:mostrarInformacio() print("Nom: " .. self.nom .. ", Edat: " .. self.edat) end
Creació d'Objectes
Per crear un objecte de la classe Persona
, utilitzem el constructor new
:
-- Creació d'un objecte Persona local persona1 = Persona:new("Joan", 30) persona1:mostrarInformacio() -- Sortida: Nom: Joan, Edat: 30
Herència
L'herència permet que una classe (subclasse) hereti propietats i mètodes d'una altra classe (superclasse).
Definició d'una Subclasse
Aquí tens un exemple d'una subclasse Estudiant
que hereta de Persona
:
-- Definició de la classe Estudiant Estudiant = setmetatable({}, {__index = Persona}) Estudiant.__index = Estudiant -- Constructor function Estudiant:new(nom, edat, curs) local self = Persona.new(self, nom, edat) setmetatable(self, Estudiant) self.curs = curs return self end -- Mètode per mostrar informació function Estudiant:mostrarInformacio() Persona.mostrarInformacio(self) print("Curs: " .. self.curs) end
Creació d'Objectes de la Subclasse
-- Creació d'un objecte Estudiant local estudiant1 = Estudiant:new("Anna", 22, "Informàtica") estudiant1:mostrarInformacio() -- Sortida: -- Nom: Anna, Edat: 22 -- Curs: Informàtica
Exercicis Pràctics
Exercici 1: Crear una Classe Cotxe
- Defineix una classe
Cotxe
amb propietatsmarca
imodel
. - Afegeix un mètode
mostrarInformacio
que imprimeixi la marca i el model del cotxe. - Crea un objecte de la classe
Cotxe
i crida el mètodemostrarInformacio
.
Solució
-- Definició de la classe Cotxe Cotxe = {} Cotxe.__index = Cotxe -- Constructor function Cotxe:new(marca, model) local self = setmetatable({}, Cotxe) self.marca = marca self.model = model return self end -- Mètode per mostrar informació function Cotxe:mostrarInformacio() print("Marca: " .. self.marca .. ", Model: " .. self.model) end -- Creació d'un objecte Cotxe local cotxe1 = Cotxe:new("Toyota", "Corolla") cotxe1:mostrarInformacio() -- Sortida: Marca: Toyota, Model: Corolla
Exercici 2: Crear una Subclasse CotxeElèctric
- Defineix una subclasse
CotxeElèctric
que hereti deCotxe
. - Afegeix una propietat
autonomia
. - Modifica el mètode
mostrarInformacio
per incloure la informació de l'autonomia. - Crea un objecte de la subclasse
CotxeElèctric
i crida el mètodemostrarInformacio
.
Solució
-- Definició de la classe CotxeElèctric CotxeElèctric = setmetatable({}, {__index = Cotxe}) CotxeElèctric.__index = CotxeElèctric -- Constructor function CotxeElèctric:new(marca, model, autonomia) local self = Cotxe.new(self, marca, model) setmetatable(self, CotxeElèctric) self.autonomia = autonomia return self end -- Mètode per mostrar informació function CotxeElèctric:mostrarInformacio() Cotxe.mostrarInformacio(self) print("Autonomia: " .. self.autonomia .. " km") end -- Creació d'un objecte CotxeElèctric local cotxeElèctric1 = CotxeElèctric:new("Tesla", "Model S", 600) cotxeElèctric1:mostrarInformacio() -- Sortida: -- Marca: Tesla, Model: Model S -- Autonomia: 600 km
Resum
En aquesta secció, hem après com implementar la programació orientada a objectes en Lua utilitzant taules i metataules. Hem vist com definir classes, crear objectes, implementar herència i afegir mètodes. A més, hem practicat aquests conceptes amb exercicis pràctics. Amb aquests coneixements, estàs preparat per aplicar OOP en els teus projectes Lua i crear codi més organitzat i reutilitzable.
Curs de Programació en Lua
Mòdul 1: Introducció a Lua
Mòdul 2: Conceptes Bàsics
Mòdul 3: Conceptes Intermedis
Mòdul 4: Conceptes Avançats
- Coroutines
- Programació Orientada a Objectes en Lua
- Tècniques de Depuració
- Optimització del Rendiment
- Ús de l'API C de Lua
Mòdul 5: Aplicacions Pràctiques
- Construcció d'un Joc Simple
- Scripting en Motors de Joc
- Automatització de Tasques amb Lua
- Integració de Lua amb Altres Llenguatges