What's new

-Średni "Obiektowe" lua

Ghalla

Active User
Joined
Aug 24, 2010
Messages
88
Reaction score
12
Age
30
"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 = {}
Gdzie "Tablica" to nazwa dla nowej klasy. Nast?pnie nale?y ustali? jej index.Odbywa si? to poprzez
Code:
Tablica.__index = Tablica
To taka moja sta?a praktyka. Niekt?rzy te zachowania definiuj? dopiero wewn?trz funkcji tworz?cej. Ja jednak przyzwyczai?em
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
Jest to funkcja jak wida? o dw?ch argumentach, lecz ilo?? argument?w jest nieograniczona, czyli mo?e r?wnie dobrze mie? 100 argument?w.
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)
Na ko?cu zawsze zwracamy tablic? utworzon?. Tutaj te? s? r??ne metody, ja jednak, jak wcze?niej pisa?em, przyzwyczajony jestem do takiej.
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
Sp?jrzcie prosz? na to jak tworzymy funkcj?
Code:
function nazwa_klasy . nazwa_funkcji(argument)
Akurat moja funkcja jest bez argument?w, ale oto przyk?ad funkcji dla kt?rej chcemy zmieni? wcze?niej ustalone imi?
Code:
function Tablica.setFirstName(name)
	self.name1 = name
end
Pewnie zastanawiacie si? co oznacza magiczne s?owo "self". Jest to nic innego ni? po prostu odno?cik do naszej tablicy z danymi, dzi?ki
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
Na razie to wszystko. Je?eli chcecie, abym co? rozszerzy? prosz? pisa? w komentarzach.
Pozdrawiam,
Ghalla(Tairens)
 

Dubler

Lua Factory =)
Joined
Apr 8, 2009
Messages
1,874
Reaction score
112
Odp: "Obiektowe" lua

Bardzo przyst?pnie opisany poradnik. Z ch?ci? przeczyta? bym o zastosowaniu obiektowo?ci w praktyce bo to w sumie bardziej teoria na najbanalniejszych z banalnych przyk?adach.
 

Blackq

Advanced User
Joined
Oct 29, 2010
Messages
339
Reaction score
74
Age
31
Odp: "Obiektowe" lua

Z tego co mi wiadomo funkcje to nie ?adne programowanie obiektowe ; p
bo ?adnych obiekt?w tam nie wykorzystujemy. Obiektowe by?oby gdyby by?y classy.

Chod? nie wiem jak to jest w lua .
 

Ghalla

Active User
Joined
Aug 24, 2010
Messages
88
Reaction score
12
Age
30
Odp: "Obiektowe" lua

Hmm, czyli rozumiem, ?e nie zrozumia?e? ani s?owa :)
Je?li ju? stworzysz sobie co? takiego to mo?esz robi? stworzy? obiekt na zasadzie dzia?ania.
Code:
local Obiekt = Tablica:new("Ghalla", "Aaaaa")
if(Obiekt.getFirstName() == "Ghalla")
print("Tak to Ghalla!")
end
 
Top