Latest web development tutorials

Lua Orienté Objet

POO (Programmation Orientée Objet, POO) est une architecture de programmation informatique très populaire.

Les langages de programmation suivants prennent en charge la programmation orientée objet:

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

caractéristiques orientées objet

  • 1) Emballage: se réfère à la capacité d'une entité à l'information, la fonction et les réponses sont mises en propriétés d'un objet séparé.
  • 2) Héritage: la méthode héritée permet de ne pas modifier la base du programme original sur son expansion, de telle sorte que la fonction d'origine peut être préservée, et les nouvelles fonctionnalités également été élargi. Cela aide à réduire le codage répétitif, d'améliorer l'efficacité du développement de logiciels.
  • 3) polymorphisme: la même opération appliquée à des objets différents peuvent avoir des interprétations différentes, ce qui entraîne des résultats différents d'exécution. Au moment de l'exécution, vous pouvez pointer vers le pointeur de classe de base pour appeler des méthodes de classe dérivée.
  • 4) Résumé: Abstract (Abstraction) est de simplifier la réalité complexe de la manière, il peut trouver la catégorie la plus appropriée est définie comme un problème spécifique, et peut-être dans l'interprétation de l'héritage au niveau le plus approprié.

Lua Orienté Objet

Nous savons que la composition des propriétés et méthodes objet. LUA est table de la structure la plus fondamentale, ont besoin d'utiliser le tableau pour décrire les propriétés de l'objet.

lua La fonction peut être utilisée pour la représentation. La classe alors la fonction LUA table + peut être simulé.

En ce qui concerne l'héritage peut être simulé par metetable (non recommandé pour simuler uniquement les objets les plus élémentaires assez la plupart du temps).

tables Lua non seulement dans un sens, est un objet. Comme un objet, la table ont également état (variables membres), et aussi avec la valeur de l'objet indépendant de la nature, en particulier ceux avec deux objets de valeurs différentes (tableau) représentent deux objets différents; un objet à différents moments peut être différent les valeurs, mais il a toujours été un objet, l'objet est similaire à une table créée par ce que leur cycle de vie, dans lequel aucune relation est créée. Les objets ont leurs fonctions de membres, des tables ont aussi:

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

Cette définition crée une nouvelle fonction, et enregistré retirer dans l'objet de compte, nous pouvons appeler ce qui suit:

Account.withdraw(100.00)

Un exemple simple

La classe simple suivante contient trois propriétés: la zone, la longueur et la largeur, la méthode printArea pour des résultats d'impression:

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

Créer un objet

Le but est de créer un peu d'instance de processus de classe à allouer de la mémoire. Chaque classe a sa propre mémoire et de partager des données communes.

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

Propriétés d'accès

Nous pouvons utiliser un point pour accéder à l'attribut de classe (.):

print(r.length)

fonctions membres d'accès

Nous pouvons utiliser deux points (:) pour attribuer des classes d'accès:

r:printArea()

L'allocation de mémoire lorsque l'objet est initialisé.

exemple complet

Ci-dessous, nous démontrons Lua exemple complet orienté objet:

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

Le programme ci-dessus, le résultat est:

面积为 	100

Lua héritage

L'héritage se réfère à un objet en utilisant directement les propriétés et méthodes d'un autre objet. Les propriétés et méthodes peuvent être utilisées pour étendre la classe de base.

Ce qui suit montre un simple exemple d'héritage:

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

Le prochain exemple, les objets de forme carrée héritent des 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

exemple complet

Les exemples suivants nous ont hérité d'une méthode de classe simple d'étendre la classe dérivée, la classe dérivée de retenir les variables membres et méthodes classes héritées:

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

Mise en œuvre du code ci-dessus, la sortie est:

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

remplacements de fonction

Lua, nous pouvons réécrire la fonction de la classe de base, définir vos propres implémentations dans les classes dérivées:

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