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)
endCreació 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: 30Herè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)
endCreació 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àticaExercicis Pràctics
Exercici 1: Crear una Classe Cotxe
- Defineix una classe
Cotxeamb propietatsmarcaimodel. - Afegeix un mètode
mostrarInformacioque imprimeixi la marca i el model del cotxe. - Crea un objecte de la classe
Cotxei 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: CorollaExercici 2: Crear una Subclasse CotxeElèctric
- Defineix una subclasse
CotxeElèctricque hereti deCotxe. - Afegeix una propietat
autonomia. - Modifica el mètode
mostrarInformacioper incloure la informació de l'autonomia. - Crea un objecte de la subclasse
CotxeElèctrici 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 kmResum
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
