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