Das beste Lua Object Oriented-Tutorial im Jahr 2024. In diesem Tutorial können Sie Objektorientierte Funktionen,Lua Object Oriented,Lua Erbe,Funktionsüberschreibungen, lernen
OOP (Objektorientierte Programmierung, OOP) ist eine sehr beliebte Computer-Programmierung Architektur.
Die folgenden Programmiersprachen unterstützen die objektorientierte Programmierung:
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)
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
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)
Wir können einen Punkt verwenden, um die Klasse Attribut zuzugreifen (.):
print(r.length)
Wir können einen Doppelpunkt (:) Zugriffsklassen zuzuordnen:
r:printArea()
Die Speicherzuordnung, wenn das Objekt initialisiert wird.
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
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
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
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