"Obiektowe" Lua
Witam serdecznie,
W tym artykule chcia?bym przedstawi? zagadnienie programowania obiektowego w lua.Na samym wst?pie nale?y zaznaczy?, ?e nie do ko?ca jest to obietkowo??, ale jego dobra imitacja.
Tutaj nie spotkamy s?owa kluczowego jakim jest s?owo "class", ale spotykamy si? z terminem metatablic.
Nie b?d? tutaj opisywa? co to jest programowanie obiektowe, czy jak dzia?a j?zyk lua. Nie od tego jest ten poradnik.
Chcia?bym si? skupi? tutaj na samym tworzenia wzorc?w obiektowych, kt?re b?d? dla wygody nazywa? klasami.
I.Wst?p
Z mojej praktyki ka?d? tworzon? klas? rozpoczynam od wyra?enia:
Code:
Tablica = {}
Code:
Tablica.__index = Tablica
si? do takiego modelu i takim tutaj b?d? si? pos?ugiwa?.
II.Funkcja tworz?ca - pseudo konstruktor
W odr??nieniu od j?zyk?w taki jak C++ czy Java o konstrukcje obiektu i wype?nienie danych musimy zadba? w pe?ni sami, nie istnieje
konstruktor automatyczny. Jest to po prostu zwyk?a funkcja, kt?ra jednak na ko?cu zwr?ci nam metatablic?, dzi?ki kt?rej mo?emy
pos?ugiwa? si? zmienn? jak obiektem. Oto przyk?ad
Code:
function Tablica:new(imie1, imie2)
local t = {}
t.name1 = name1
t.name2 = name2
--Inne instrukcje
setmetatable(t, Tablica)
return t
end
To zale?y tylko i wy??cznie od nas. Wewn?trz tworzymy now? tablic?, do niej zapisujemy wszelkie dane. Przez zwrotem warto?ci wyst?puje
bardzo wa?na funkcja, czyli ustalenie metatablicy
Code:
setmetatable(nazwa_lokalnie_utworzonej_tablicy, nazwa_tablicy_dla_ktorej_ustatlilismy_index)
III Funkcje sk?adowe, s?owa kluczowe
Chcemy wykorzysta? wcze?niej zapisane imi?. Dzi?ki przeprowadzonym wcze?niej instrukcjom mo?liwe jest to poprzez funckje sk?adowe
Code:
function Tablica.getFirstName()
return self.name1
end
Code:
function nazwa_klasy . nazwa_funkcji(argument)
Code:
function Tablica.setFirstName(name)
self.name1 = name
end
kt?rej mamy zapisane informacje.
IV. Destrukcja obiekt?w
W lua na szcz??cie nie jeste?my zmuszeni do destrukcji obiekt?w. Je?eli bardzo chcemy czy?ci? dane, to mo?na to wykona? dzi?ki funckji sk?adowej.
Code:
function Tablica.delete()
self.name1 = nil
self.name2 = nil
end
Pozdrawiam,
Ghalla(Tairens)