Tutorial Lua Object Oriented Terbaik Pada tahun 2024, Dalam tutorial ini Anda dapat mempelajari fitur berorientasi objek,Lua Object Oriented,warisan Lua,fungsi menimpa,
OOP (Object Oriented Programming, OOP) adalah arsitektur pemrograman komputer yang sangat populer.
Bahasa pemrograman berikut mendukung pemrograman berorientasi obyek:
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)
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
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)
Kita bisa menggunakan dot untuk mengakses atribut class (.):
print(r.length)
Kita dapat menggunakan titik dua (:) untuk atribut kelas akses:
r:printArea()
alokasi memori ketika objek diinisialisasi.
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 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-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
Lua, kita dapat menulis ulang fungsi kelas dasar, menentukan implementasi Anda sendiri di kelas turunan:
-- 派生类方法 printArea function Square:printArea () print("正方形面积 ",self.area) end