Lua ООП конспект
-
Пригодится для создания больших плагинов в Cheat Engine. Более ~500 строк
Наследование
ClassX = {} function ClassX:New(_argument1, _argument2) local obj = {} obj.argument1 = _argument1 obj.argument2 = _argument2 -- Через "self" function obj:GetValue1() return obj.argument1 end function obj:GetValue2() return obj.argument2 end setmetatable(obj, self) obj.__index = ClassX return obj end someObject = ClassX:New("A", "B") print(someObject.GetValue1()) print(someObject.GetValue2()) Woman = {} --наследуемся setmetatable(Woman ,{__index = ClassX}) --проверяем masha = Woman:New("Марья","Ивановна") print(masha:GetValue1()) --->результат: Марья
Инкапсуляция
Person = {} function Person:new(name) --приватное свойство local private = {} private.age = 18 local obj = {} --публичное свойство obj.name = name or "Вася" -- "Вася" - это значение по умолчанию function obj:getAge() return private.age end setmetatable(obj,self) self.__index = self return obj end vasya = Person:new() print(vasya.name) --> результат: Вася print(vasya.age) --> результат: nil print(vasya:getAge()) --> результат: 18
Полиморфизм
Person = {} function Person:New(name) local private = {} private.age = 18 local obj = {} obj.name = name or "Вася" -- Защищенный от переорпеделения function obj:GetName() return "Person protected "..self.name end -- Переопределяемый function Person:GetName2() return "Person "..self.name end setmetatable(obj, self) self.__index = self return obj end --создадим класс, унаследованный от Person Woman = {} setmetatable(Woman,{__index = Person}) function Woman:GetName() return "Woman protected "..self.name end function Woman:GetName2() return "Woman "..self.name end --проверим masha = Woman:New() print(masha:GetName()) --> Person protected Вася print(masha:GetName2()) --> Woman Вася