Latest web development tutorials

Lua orientado a objetos

POO (Programación Orientada a Objetos, programación orientada a objetos) es una arquitectura de programación informática muy popular.

Los siguientes lenguajes de programación soportan la programación orientada a objetos:

  • C ++
  • Java
  • Objective-C
  • Smalltalk
  • C #
  • rubí

características orientadas a objetos

  • 1) Paquete: se refiere a la capacidad de una entidad a la información, la función y las respuestas se ponen en el inmueble objeto separado.
  • 2) Herencia: el método heredado no permite cambiar la base del programa original en su expansión, de forma que la función original se puede conservar, y las nuevas características también ha ampliado. Esto ayuda a reducir la codificación repetitiva, para mejorar la eficiencia del desarrollo de software.
  • 3) polimorfismo: la misma operación que se aplica a objetos diferentes pueden tener diferentes interpretaciones, lo que resulta en diferentes resultados de la ejecución. En tiempo de ejecución, puede apuntar a puntero de clase base para llamar a los métodos de clases derivadas.
  • 4) Resumen: Resumen (abstracción) es simplificar la compleja realidad de la forma, se puede encontrar la categoría más apropiada se define como un problema específico, y puede estar en la interpretación más adecuada herencia nivel.

Lua orientado a objetos

Sabemos que la composición de las propiedades y métodos del objeto. LUA es la tabla de estructura más básica, es necesario utilizar la tabla para describir las propiedades del objeto.

lua La función se puede utilizar para la representación. La clase entonces la función de LUA mesa + puede ser simulado.

En cuanto a la herencia puede ser simulado por metetable (no se recomienda para simular solamente los objetos más básicos lo suficientemente mayor parte del tiempo).

tablas Lua no sólo en un sentido, es un objeto. Como un objeto, la tabla también tiene estado (variables miembro); también con el valor del objeto independiente de la naturaleza, en particular los que tienen dos objetos de diferentes valores (tabla) representan dos objetos diferentes; un objeto en diferentes momentos puede ser diferente valores, pero siempre ha sido un objeto, el objeto es similar a una tabla creada por lo que su ciclo de vida, en la que no se crea ninguna relación. Los objetos tienen sus funciones miembro, tablas también tienen:

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

Esta definición crea una nueva función, y se guarda dentro de retirar objeto de cuenta, podemos llamar al siguiente:

Account.withdraw(100.00)

Un ejemplo sencillo

La siguiente clase simple contiene tres propiedades: área, longitud y anchura, método printArea los resultados de impresión:

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

crear objeto

El objetivo es crear una instancia de proceso bits de clase para asignar memoria. Cada clase tiene su propia memoria y compartir datos comunes.

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

Propiedades de acceso

Podemos utilizar un punto de acceso al atributo de clase (.):

print(r.length)

funciones miembro de acceso

Podemos utilizar los dos puntos (:) para atribuir clases de acceso:

r:printArea()

La asignación de memoria cuando se inicializa el objeto.

ejemplo completo

A continuación demostramos Lua ejemplo completo orientado a objetos:

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

El programa anterior, la salida es:

面积为 	100

herencia Lua

La herencia se refiere a un objeto utilizando directamente las propiedades y métodos de otro objeto. Propiedades y métodos se pueden utilizar para extender la clase base.

A continuación se muestra un simple ejemplos de herencia:

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

El siguiente ejemplo, objetos de forma cuadrada heredan las clases:

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

ejemplo completo

Los siguientes ejemplos nos heredaron un método de clase sencilla de extender la clase derivada, la clase derivada para retener las variables miembro y los métodos de las clases heredadas:

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

Aplicación del código anterior, la salida es:

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

anulaciones de función

Lua, podemos reescribir la función de la clase base, definir sus propias implementaciones en las clases derivadas:

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