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