Lua Object Oriented
OOP (Objektorientierte Programmierung, OOP) ist eine sehr beliebte Computer-Programmierung Architektur.
Die folgenden Programmiersprachen unterstützen die objektorientierte Programmierung:
- C ++
- Java
- Objective-C
- Smalltalk
- C #
- Rubin
Objektorientierte Funktionen
- 1) Paket: bezieht sich auf die Fähigkeit eines Unternehmens zu Informationen, die Funktion und die Antworten werden in einem separaten Objekteigenschaften setzen.
- 2) Vererbung: die geerbte Methode, um die Basis des ursprünglichen Programms erlaubt es nicht auf seine Expansion zu ändern, so dass die ursprüngliche Funktion erhalten werden kann, und die neuen Funktionen erweitert auch wurde. Dies hilft Wiederholungscodierung zu reduzieren, die Effizienz der Softwareentwicklung zu verbessern.
- 3) Polymorphismus: die gleiche Operation auf verschiedene Objekte angewendet werden, unterschiedliche Interpretationen haben, was zu unterschiedlichen Ausführungsergebnisse. Zur Laufzeit können Sie auf Basisklasse Zeiger Punkt abgeleiteten Klasse Methoden aufrufen.
- 4) Abstract: Zusammenfassung (Abstraktion) ist die komplexe Realität der Art und Weise zu vereinfachen, kann es finden die am besten geeignete Kategorie als ein spezifisches Problem definiert ist, und kann in der am besten geeigneten Ebene Vererbung Interpretation sein.
Lua Object Oriented
Wir wissen, dass die Zusammensetzung der Objekteigenschaften und Methoden. LUA ist die grundlegende Strukturtabelle, müssen die Tabelle zu verwenden, um die Eigenschaften des Objekts zu beschreiben.
lua Die Funktion kann für die Darstellung verwendet werden. Die Klasse kann die LUA Tisch + Funktion simuliert werden.
Wie für die Erbschaft kann durch metetable simuliert werden (nicht nur die grundlegendsten Objekte genug die meiste Zeit zu simulieren empfohlen).
Lua Tabellen nicht nur in einem Sinn, ist ein Objekt. Wie ein Objekt, haben die Tabelle auch Zustand (Membervariablen), auch mit dem Wert des Objekts unabhängig von der Natur, insbesondere solche mit zwei Objekten unterschiedlicher Werte (Tabelle) repräsentieren zwei unterschiedliche Objekte, ein Objekt zu verschiedenen Zeiten unterschiedlich sein können Werte, aber er hat immer ein Ziel gewesen, das Objekt zu einer Tabelle ähnlich dem, was ihren Lebenszyklus geschaffen, in dem keine Beziehung erstellt wird. Objekte haben ihre Mitgliederfunktionen, Tabellen haben auch:
Account = {balance = 0} function Account.withdraw (v) Account.balance = Account.balance - v end
Diese Definition erzeugt eine neue Funktion, und ziehen Sie im Konto-Objekt gespeichert haben, können wir folgende nennen:
Account.withdraw(100.00)
Ein einfaches Beispiel
Die folgende einfache Klasse enthält drei Eigenschaften: Fläche, Länge und Breite, print Methode für Druckergebnisse:
-- 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
Objekt erstellen
Das Ziel ist es, eine Prozessinstanz wenig Klasse zu erstellen Speicher zuzuweisen. Jede Klasse hat einen eigenen Speicher und teilen gemeinsame Daten.
r = Rectangle:new(nil,10,20)
Access Properties
Wir können einen Punkt verwenden, um die Klasse Attribut zuzugreifen (.):
print(r.length)
Zugang Elementfunktionen
Wir können einen Doppelpunkt (:) Zugriffsklassen zuzuordnen:
r:printArea()
Die Speicherzuordnung, wenn das Objekt initialisiert wird.
Komplettes Beispiel
Im Folgenden zeigen Lua objektorientierte komplettes Beispiel:
-- 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()
Das obige Programm, das Ausgabe ist:
面积为 100
Lua Erbe
Vererbung bezieht sich auf ein Objekt direkt die Eigenschaften und Methoden eines anderen Objekts. Die Eigenschaften und Methoden können verwendet werden, um die Basisklasse zu erweitern.
Im Folgenden zeigt ein einfaches Erbe Beispiele:
-- 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
Die nächste Instanz, quadratische Form Objekte erben die Klassen:
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
Komplettes Beispiel
Die folgenden Beispiele geerbt wir eine einfache Klasse Methode der abgeleiteten Klasse zu erweitern, die abgeleitete Klasse die Elementvariablen und Methoden geerbten Klassen zu behalten:
-- 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()
Die Umsetzung des obigen Codes ist die Ausgabe:
面积为 100 正方形面积为 100 矩形面积为 200
Funktionsüberschreibungen
Lua, können wir die Funktion der Basisklasse neu zu schreiben, eigene Implementierungen in abgeleiteten Klassen definieren:
-- 派生类方法 printArea function Square:printArea () print("正方形面积 ",self.area) end