Latest web development tutorials

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