В lua как я понял нет нормального ООП. Только его подобие. Сейчас стало интересно как его конкретно можно использовать. И как организовать всё. Может кто-нибудь показать хорошие примеры или поведать о всяких приколах реализации?
В луа есть все 3 парадигмы ООП, но, зачастую, используется только наследование и инкапсуляция ( я, например, использую ее неявно, просто добавляя два андерскора к названию филда )
Что насчет того, как это использовать - тут ты уже должен понять сугубо сам, но дам пример:
Использовать ООП нужно тогда, когда у тебя огромная куча говна из одинаковых переменных.
Допустим у тя есть какой то player, в котором есть какое-то айди, хпшка, броня, стамина и т.д. и т.п. Но, если мы будем брать именно игру в мультиплеере, то игроков же несколько, и будет немного неразумно хранить это все в одной большой таблице players. Проще сделать так:
local player = { } do
player.new = function( self, id, health, armor, stamina )
local player = { }
player.id = id
player.health = health
player.armor = armor
player.stamina = stamind
return setmetatable( player, {
__index = self
} )
end
player.get_id = function( self )
return self.id
end
--И типа того, продолжаешь так же
setmetatable( player, {
__call = player.new
} )
end
И теперь, условно, когда создается новый игрок, ты можешь не пушить таблицу со всеми филдами в другую таблицу и не ебаться с кучей вложенных циклов.
Но есть моментик, что player - это объект, у него должны быть свойства, характерные нативному объекту в каком-то движке, условно какой то там class_name.
И этот момент ты можешь унаследовать, создав класс entity по такому же шаблону и вместо
return setmetatable( player, {
__index = self
} )
сделать
return setmetatable( player, {
__index = entity
} )
и тогда ты можешь обращаться к player как к нативному объкту. Как то так.
Я упростил все, что только можно, но опять же, понять концепцию ООП тебе придется только тогда, когда она тебе действительно понадобится. Любишь жрать говно и писать говнокод - не лезь в ооп, сидите в процедурке