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