Lua Object Oriented
OOP (Object Oriented Programming, OOP) adalah arsitektur pemrograman komputer yang sangat populer.
Bahasa pemrograman berikut mendukung pemrograman berorientasi obyek:
- C ++
- Jawa
- Objective-C
- Smalltalk
- C #
- rubi
fitur berorientasi objek
- 1) Paket: mengacu pada kemampuan suatu entitas untuk informasi, fungsi dan tanggapan yang dimasukkan ke dalam properti obyek yang terpisah.
- 2) Warisan: metode mewarisi memungkinkan tidak mengubah dasar dari program asli pada ekspansi, sehingga fungsi asli dapat dipertahankan, dan fitur-fitur baru juga telah diperluas. Hal ini membantu untuk mengurangi coding berulang, untuk meningkatkan efisiensi pengembangan perangkat lunak.
- 3) polimorfisme: operasi yang sama diterapkan untuk objek yang berbeda mungkin memiliki interpretasi yang berbeda, sehingga hasil eksekusi yang berbeda. Pada waktu berjalan, Anda dapat menunjukkan kelas dasar pointer untuk memanggil metode kelas turunan.
- 4) Abstrak: Abstrak (Abstraksi) adalah untuk menyederhanakan realitas yang kompleks dari jalan, itu dapat menemukan kategori yang paling sesuai didefinisikan sebagai isu tertentu, dan mungkin dalam interpretasi warisan tingkat yang paling tepat.
Lua Object Oriented
Kita tahu bahwa komposisi properti obyek dan metode. LUA adalah tabel struktur paling dasar, perlu menggunakan meja untuk menggambarkan sifat dari objek.
lua Fungsi ini dapat digunakan untuk representasi. kelas maka LUA fungsi meja + dapat disimulasikan.
Adapun warisan dapat disimulasikan oleh metetable (tidak disarankan untuk mensimulasikan hanya objek yang paling dasar yang cukup sebagian besar waktu).
Lua tabel tidak hanya dalam arti, adalah obyek. Seperti objek, meja juga memiliki negara (variabel anggota), juga dengan nilai independen objek alam, khususnya mereka dengan dua objek dari nilai yang berbeda (tabel) merupakan dua objek yang berbeda, sebuah benda pada waktu yang berbeda mungkin berbeda nilai-nilai, tapi dia selalu menjadi objek; objek ini mirip dengan meja yang dibuat oleh apa yang siklus hidup mereka, di mana tidak ada hubungan dibuat. Benda memiliki fungsi anggota mereka, tabel juga memiliki:
Account = {balance = 0} function Account.withdraw (v) Account.balance = Account.balance - v end
Definisi ini menciptakan fungsi baru, dan disimpan menarik dalam objek Account, kita dapat memanggil seperti berikut:
Account.withdraw(100.00)
Contoh sederhana
Kelas sederhana berikut berisi tiga sifat: daerah, panjang dan lebarnya, metode printArea untuk hasil cetak:
-- 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
Buat Object
Tujuannya adalah untuk membuat proses instance sedikit kelas untuk mengalokasikan memori. Setiap kelas memiliki memori sendiri dan berbagi data umum.
r = Rectangle:new(nil,10,20)
Properti akses
Kita bisa menggunakan dot untuk mengakses atribut class (.):
print(r.length)
fungsi anggota akses
Kita dapat menggunakan titik dua (:) untuk atribut kelas akses:
r:printArea()
alokasi memori ketika objek diinisialisasi.
contoh lengkap
Di bawah ini kami menunjukkan berorientasi objek Lua contoh lengkap:
-- 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()
Program di atas, output adalah:
面积为 100
warisan Lua
Warisan mengacu pada suatu objek secara langsung dengan menggunakan properti dan metode dari objek lain. Properti dan metode dapat digunakan untuk memperpanjang kelas dasar.
Berikut ini menunjukkan contoh warisan sederhana:
-- 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
Contoh berikutnya, objek Shape Square, mewarisi kelas:
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
contoh lengkap
Contoh-contoh berikut kita mewarisi metode kelas sederhana untuk memperpanjang kelas turunan, kelas turunan untuk mempertahankan variabel anggota dan metode mewarisi kelas:
-- 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()
Pelaksanaan kode di atas, output adalah:
面积为 100 正方形面积为 100 矩形面积为 200
fungsi menimpa
Lua, kita dapat menulis ulang fungsi kelas dasar, menentukan implementasi Anda sendiri di kelas turunan:
-- 派生类方法 printArea function Square:printArea () print("正方形面积 ",self.area) end