Latest web development tutorials

Lua Object Oriented

OOP (Object Oriented Programming, OOP) è molto popolare architettura programmazione di computer.

I seguenti linguaggi di programmazione supportano la programmazione orientata agli oggetti:

  • C ++
  • Giava
  • Objective-C
  • Smalltalk
  • C #
  • rubino

caratteristiche object-oriented

  • 1) Pacchetto: si riferisce alla capacità di un ente a informazioni, la funzione e le risposte vengono messi in una proprietà degli oggetti separati.
  • 2) Inheritance: il metodo ereditato consente di non modificare la base del programma originale su sua espansione, in modo tale che la funzione originale può essere conservato, e le nuove funzionalità stato ampliato. Questo aiuta a ridurre la codifica ripetitivo, per migliorare l'efficienza dello sviluppo software.
  • 3) il polimorfismo: la stessa operazione applicata a oggetti diversi possono avere diverse interpretazioni, causando diversi risultati di esecuzione. In fase di esecuzione, si può puntare a puntatore alla classe base per chiamare i metodi della classe derivata.
  • 4) Abstract: astratta (astrazione) è quello di semplificare la complessa realtà del modo, si può trovare la categoria più appropriata è definita come un problema specifico, e può essere l'interpretazione più appropriata livello di eredità.

Lua Object Oriented

Sappiamo che la composizione delle proprietà e metodi dell'oggetto. LUA è la tabella struttura più semplice, è necessario utilizzare la tabella per descrivere le proprietà dell'oggetto.

lua La funzione può essere utilizzata per la rappresentazione. La classe allora la funzione LUA tavolo + può essere simulato.

Per quanto riguarda l'eredità può essere simulato da metetable (sconsigliato per simulare solo gli oggetti più elementari abbastanza maggior parte del tempo).

tavoli Lua non solo in un certo senso, è un oggetto. Come un oggetto, la tabella ha anche stato (variabili utente), anche con il valore dell'oggetto indipendenti della natura, in particolare quelli con due oggetti di valori differenti (tabella) rappresentano due oggetti differenti, un oggetto in tempi diversi può essere differente valori, ma lui è sempre stato un oggetto, l'oggetto è simile a una tabella creata da quale sia il loro ciclo di vita, in cui si crea alcuna relazione. Gli oggetti hanno le loro funzioni membro, le tabelle hanno anche:

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

Questa definizione crea una nuova funzione, e salvato ritirare entro oggetto account, si può chiamare il seguente:

Account.withdraw(100.00)

Un semplice esempio

La semplice classe seguente contiene tre proprietà: zona, lungo e in largo, il metodo printArea per risultati di stampa:

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

Crea oggetto

L'obiettivo è quello di creare un po 'di classe di un'istanza di processo per allocare la memoria. Ogni classe ha la propria memoria e condividere dati comuni.

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

Proprietà di accesso

Siamo in grado di utilizzare un punto per accedere al attributo di classe (.):

print(r.length)

funzioni membro Accesso

Siamo in grado di utilizzare i due punti (:) attribuire classi di accesso:

r:printArea()

L'allocazione di memoria quando l'oggetto viene inizializzato.

esempio completo

Qui di seguito abbiamo dimostrato Lua orientato agli oggetti esempio completo:

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

Il programma precedente, l'uscita è:

面积为 	100

Lua eredità

L'ereditarietà si riferisce ad un oggetto utilizzando direttamente le proprietà ei metodi di un altro oggetto. Proprietà e metodi possono essere utilizzati per estendere la classe base.

Di seguito viene illustrato un semplice esempio di successione:

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

Il prossimo esempio, gli oggetti forma quadrata ereditano le classi:

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

esempio completo

Gli esempi che seguono abbiamo ereditato un metodo di classe semplice per estendere la classe derivata, la classe derivata per mantenere le variabili e metodi di classi ereditate:

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

L'attuazione del codice di cui sopra, l'output è:

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

override di funzione

Lua, possiamo riscrivere la funzione della classe base, definire le proprie implementazioni nelle classi derivate:

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