Latest web development tutorials

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