Lua implementează paradigma Object-Oriented Programming (OOP) bazată pe prototipuri (similară cu JavaScript înainte de ES6). Nu există un cuvânt-cheie class; în schimb, o clasă este o tabelă care servește drept prototip și conține metodele, iar noile instanțe își deleagă căutarea membrilor către această tabelă prin __index.
Clasa ContBancar cu depunere, retragere și moștenire
-- 1. Definirea clasei părinte:
local ContBancar = {}
ContBancar.__index = ContBancar
-- Constructorul:
function ContBancar:new(titular, soldInitial)
local instanta = {
titular = titular or "Anonim",
sold = soldInitial or 0
}
setmetatable(instanta, self)
return instanta
end
-- Metode ale clasei (operatorul ':' injectează automat 'self'):
function ContBancar:depune(suma)
self.sold = self.sold + suma
print(string.format("[%s] Depunere: +%d lei. Sold curent: %d lei.", self.titular, suma, self.sold))
end
function ContBancar:retrage(suma)
if self.sold >= suma then
self.sold = self.sold - suma
print(string.format("[%s] Retragere: -%d lei. Sold rămas: %d lei.", self.titular, suma, self.sold))
return true
else
print(string.format("[%s] Fonduri insuficiente!", self.titular))
return false
end
end
-- 2. Utilizare practică:
local contAndrei = ContBancar:new("Andrei Popescu", 500)
contAndrei:depune(250)
contAndrei:retrage(100)