Lua объектно-ориентированного
ООП (объектно-ориентированное программирование, ООП) является очень популярной архитектурой компьютерного программирования.
Следующие языки программирования поддерживают объектно-ориентированное программирование:
- C ++
- Ява
- Objective-C
- Smalltalk
- C #
- рубин
Объектно-ориентированные возможности
- 1) Пакет: относится к способности субъекта к информации, функции и ответы помещаются в отдельные свойства объекта.
- 2) Наследование: унаследованный метод позволяет не изменять основу оригинальной программы о ее расширении, таким образом, что исходная функция может быть сохранена, и новые функции также были расширены. Это помогает уменьшить повторяющихся кодирования, с целью повышения эффективности разработки программного обеспечения.
- 3) полиморфизм: та же операция применяется к разным объектам могут иметь различные интерпретации, что приводит к различным результатам выполнения. Во время выполнения, вы можете указать на указатель базового класса для вызова методов класса производных.
- 4) Аннотация: Аннотация (абстракция) является упрощение сложной реальности на пути, он может найти наиболее подходящую категорию определяется как конкретный вопрос, и может быть в наиболее подходящей интерпретации наследования уровня.
Lua объектно-ориентированного
Мы знаем, что состав свойств и методов объекта. LUA является самой основной структуры таблицы, нужно использовать таблицу для описания свойств объекта.
Lua функция может быть использована для представления. Класс, то таблица + функция LUA может быть смоделировано.
Что касается наследования можно имитировать metetable (не рекомендуется моделировать только самые основные объекты достаточно большую часть времени).
Таблицы Lua не только в некотором смысле, является объектом. Как и объект, таблица также имеют состояние (переменные-члены), также со значением объекта не зависит от природы, в частности, с двумя объектами различных значений (таблица) представляют собой два различных объекта, объект, в разное время, могут быть разными значения, но он всегда был объектом, объект подобен таблице, созданной чем их жизненного цикла, в котором не создается никакой связи. Объекты имеют свои функции-члены, таблицы также имеют:
Account = {balance = 0} function Account.withdraw (v) Account.balance = Account.balance - v end
Это определение создает новую функцию, и сохраняется в объекте вывести счета, мы можем назвать следующие:
Account.withdraw(100.00)
Простой пример
Следующий простой класс содержит три свойства: площадь, длину и ширину, метод printArea для печати результатов:
-- Meta class Rectangle = {area = 0, length = 0, breadth = 0} -- 派生类的方法 new function Rectangle:new (o,length,breadth) o = o or {} setmetatable(o, self) self.__index = self self.length = length or 0 self.breadth = breadth or 0 self.area = length*breadth; return o end -- 派生类的方法 printArea function Rectangle:printArea () print("矩形面积为 ",self.area) end
Создание объекта
Цель состоит в том, чтобы создать экземпляр процесса немного класса для выделения памяти. Каждый класс имеет свою собственную память и общие данные.
r = Rectangle:new(nil,10,20)
Свойства доступа
Мы можем использовать точку доступа к атрибуту класса (.):
print(r.length)
Функции-члены доступа
Мы можем использовать двоеточие (:) приписывать классы доступа:
r:printArea()
Распределение памяти при инициализации объекта.
Полный пример
Ниже мы покажем Lua объектно-ориентированный полный пример:
-- Meta class Shape = {area = 0} -- 基础类方法 new function Shape:new (o,side) o = o or {} setmetatable(o, self) self.__index = self side = side or 0 self.area = side*side; return o end -- 基础类方法 printArea function Shape:printArea () print("面积为 ",self.area) end -- 创建对象 myshape = Shape:new(nil,10) myshape:printArea()
Вышеприведенная программа, выход:
面积为 100
наследование Lua
Наследование относится к объекту непосредственно с использованием свойств и методов другого объекта. Свойства и способы могут быть использованы для расширения базового класса.
Ниже показано простые примеры наследования:
-- Meta class Shape = {area = 0} -- 基础类方法 new function Shape:new (o,side) o = o or {} setmetatable(o, self) self.__index = self side = side or 0 self.area = side*side; return o end -- 基础类方法 printArea function Shape:printArea () print("面积为 ",self.area) end
Следующий экземпляр, квадратные объекты Shape наследуют классы:
Square = Shape:new() -- Derived class method new function Square:new (o,side) o = o or Shape:new(o,side) setmetatable(o, self) self.__index = self return o end
Полный пример
Следующие примеры, которые мы унаследовали простой метод класса, чтобы расширить производный класс, производный класс, чтобы сохранить переменные и методы, унаследованные классы:
-- Meta class Shape = {area = 0} -- 基础类方法 new function Shape:new (o,side) o = o or {} setmetatable(o, self) self.__index = self side = side or 0 self.area = side*side; return o end -- 基础类方法 printArea function Shape:printArea () print("面积为 ",self.area) end -- 创建对象 myshape = Shape:new(nil,10) myshape:printArea() Square = Shape:new() -- 派生类方法 new function Square:new (o,side) o = o or Shape:new(o,side) setmetatable(o, self) self.__index = self return o end -- 派生类方法 printArea function Square:printArea () print("正方形面积为 ",self.area) end -- 创建对象 mysquare = Square:new(nil,10) mysquare:printArea() Rectangle = Shape:new() -- 派生类方法 new function Rectangle:new (o,length,breadth) o = o or Shape:new(o) setmetatable(o, self) self.__index = self self.area = length * breadth return o end -- 派生类方法 printArea function Rectangle:printArea () print("矩形面积为 ",self.area) end -- 创建对象 myrectangle = Rectangle:new(nil,10,20) myrectangle:printArea()
Реализация указанного выше кода, выход:
面积为 100 正方形面积为 100 矩形面积为 200
Функция переопределения
Lua, мы можем переписать функцию базового класса, определить свои собственные реализации в производных классах:
-- 派生类方法 printArea function Square:printArea () print("正方形面积 ",self.area) end