Latest web development tutorials

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