Latest web development tutorials

Lua Orientada a Objetos

OOP (Programação Orientada a Objetos, OOP) é ​​uma arquitetura de programação de computador muito popular.

Os seguintes linguagens de programação suportam programação orientada a objetos:

  • C ++
  • Java
  • Objective-C
  • Smalltalk
  • C #
  • rubi

recursos orientados a objetos

  • 1) Pacote: refere-se à capacidade de uma entidade à informação, função e respostas são colocados em um propriedades de objetos separados.
  • 2) Herança: o método herdado não permite modificar a base do programa original na sua expansão, de tal modo que a função original pode ser preservada, e as novas características também foram expandidas. Isto ajuda a reduzir codificadora repetitiva, para melhorar a eficiência de desenvolvimento de software.
  • 3) polimorfismo: a mesma operação aplicada a diferentes objetos podem ter diferentes interpretações, o que resulta em diferentes resultados de execução. Em tempo de execução, você pode apontar para pointer da classe base para chamar métodos de classe derivadas.
  • 4) Resumo: Abstract (Abstração) é simplificar a complexa realidade do caminho, ele pode encontrar a categoria mais adequada é definida como uma questão específica, e pode ser na interpretação mais adequada herança nível.

Lua Orientada a Objetos

Sabe-se que a composição das propriedades do objecto e métodos. LUA é a tabela mais básico estrutura, a necessidade de usar a tabela para descrever as propriedades do objecto.

lua A função pode ser usada para a representação. A classe, em seguida, a LUA função de tabela + pode ser simulado.

Quanto à herança pode ser simulado por metetable (não recomendado para simular apenas os objetos mais básicos o suficiente na maioria das vezes).

tabelas Lua não só em certo sentido, é um objeto. Como um objeto, a tabela também tem estado (variáveis ​​membro) e também com o valor do objeto independente da natureza, em particular aqueles com dois objetos de valores diferentes (tabela) representam dois objetos diferentes; um objeto em momentos diferentes podem ser diferentes valores, mas ele sempre foi um objeto, o objeto é semelhante a uma tabela criada pelo que o seu ciclo de vida, em que nenhum relacionamento é criado. Os objetos têm suas funções de membro, as tabelas também têm:

Account = {balance = 0}
function Account.withdraw (v)
    Account.balance = Account.balance - v
end

Esta definição cria uma nova função, e salvo retirada no prazo de objeto Account, podemos chamar o seguinte:

Account.withdraw(100.00)

Um exemplo simples

A seguinte classe simples contém três propriedades: área, comprimento e largura, método printArea para resultados de impressão:

-- 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

Criar objeto

O objetivo é criar um pouco instância de processo de classe para alocar memória. Cada classe tem sua própria memória e compartilhar dados comuns.

r = Rectangle:new(nil,10,20)

Propriedades de acesso

Podemos usar um ponto para acessar o atributo de classe (.):

print(r.length)

funções de membro de acesso

Podemos usar dois pontos (:) para atribuir classes de acesso:

r:printArea()

alocação de memória quando o objeto é inicializado.

exemplo completo

Abaixo demonstramos Lua exemplo completo orientado a objeto:

-- 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()

O programa acima, a saída é:

面积为 	100

herança Lua

Herança refere-se a um objeto usando diretamente as propriedades e métodos de outro objeto. Propriedades e métodos podem ser usados ​​para estender a classe base.

A seguir demonstra alguns exemplos de herança simples:

 -- 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

O próximo exemplo, objetos de forma quadrada herdar as classes:

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

exemplo completo

Os exemplos a seguir herdamos um método de classe simples de estender a classe derivada, a classe derivada para reter as variáveis ​​de membro e métodos de classes herdadas:

 -- 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()

Implementação do código acima, a saída é:

面积为 	100
正方形面积为 	100
矩形面积为 	200

substituições de função

Lua, podemos reescrever a função de classe base, definir suas próprias implementações em classes derivadas:

-- 派生类方法 printArea
function Square:printArea ()
  print("正方形面积 ",self.area)
end