Перейти к содержанию
  • записи
    104
  • комментариев
    125
  • просмотров
    15 677

Lua ООП конспект


MasterGH

1 361 просмотр

Пригодится для создания больших плагинов в 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 Вася

 

 

Спасибо автору за исходники.

1 Комментарий


Рекомендуемые комментарии

Несколько интересных ресурсов по Lua

1. tutorialspoint (хорошие примеры по ООП)

2. cheatengine forum  примеры кода от пользователя TheyCallMeTim13. Отличый code style.

3. gammon Примеры.

4. Официальная документация

5. "Изучите X за Y минут Где X=Lua" (очень быстро и кратко о синтаксисе, метатаблицах, ООП)

Исходник пункта 5: learnlua-ru.lua

Ссылка на комментарий

Пожалуйста, войдите, чтобы комментировать

Вы сможете оставить комментарий после входа в



Войти
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.