Latest web development tutorials

Lua Object Oriented

OOP (Object Oriented Programming, OOP) เป็นสถาปัตยกรรมการเขียนโปรแกรมคอมพิวเตอร์ที่นิยมมาก

ภาษาการเขียนโปรแกรมต่อไปนี้สนับสนุนการเขียนโปรแกรมเชิงวัตถุ:

  • C ++
  • ชวา
  • Objective-C
  • สมอลล์ทอล์ค
  • C #
  • ทับทิม

คุณลักษณะเชิงวัตถุ

  • 1) แพคเกจ: หมายถึงความสามารถของกิจการข้อมูล, หน้าที่และการตอบจะใส่ในคุณสมบัติของวัตถุที่แยกต่างหาก
  • 2) มรดก: วิธีการสืบทอดช่วยให้ไม่เปลี่ยนแปลงพื้นฐานของโปรแกรมเดิมในการขยายตัวของเช่นว่าฟังก์ชั่นเดิมสามารถเก็บรักษาไว้และลูกเล่นใหม่ ๆ นอกจากนี้ยังมีการขยายตัว ซึ่งจะช่วยลดการเข้ารหัสซ้ำเพื่อปรับปรุงประสิทธิภาพของการพัฒนาซอฟต์แวร์
  • 3) ความแตกต่าง: การดำเนินการเดียวกันที่ใช้กับวัตถุที่แตกต่างกันอาจมีการตีความที่แตกต่างกันส่งผลให้ในผลการดำเนินการที่แตกต่างกัน ในเวลาทำงานคุณสามารถชี้ไปที่ตัวชี้ชั้นฐานที่จะเรียกวิธีการเรียนที่ได้มา
  • 4) บทคัดย่อ: นามธรรม (Abstraction) คือการลดความซับซ้อนของความเป็นจริงที่ซับซ้อนของวิธีการที่มันสามารถหาประเภทที่เหมาะสมที่สุดที่ถูกกำหนดให้เป็นปัญหาที่เฉพาะเจาะจงและอาจจะอยู่ในการตีความระดับมรดกที่เหมาะสมที่สุด

Lua Object Oriented

เรารู้ว่าองค์ประกอบของคุณสมบัติของวัตถุและวิธีการ ลัวะเป็นส่วนใหญ่ตารางโครงสร้างพื้นฐานจำเป็นต้องใช้ตารางเพื่ออธิบายคุณสมบัติของวัตถุ

Lua ฟังก์ชั่นสามารถนำมาใช้สำหรับการแสดง ชั้นแล้วลัวะฟังก์ชันตาราง + สามารถจำลอง

ในฐานะที่เป็นมรดกที่สามารถจำลองโดย metetable (ไม่แนะนำเพื่อจำลองเพียงวัตถุที่พื้นฐานที่สุดพอที่มากที่สุดของเวลา)

ตาราง Lua ไม่เพียง แต่ในความรู้สึกที่เป็นวัตถุ เช่นเดียวกับวัตถุตารางยังมีสถานะ (ตัวแปรสมาชิก); ยังมีค่าของความเป็นอิสระของวัตถุจากธรรมชาติโดยเฉพาะอย่างยิ่งผู้ที่มีวัตถุสองของค่าที่แตกต่างกัน (ตาราง) เป็นตัวแทนของวัตถุทั้งสองแตกต่างกันวัตถุในช่วงเวลาที่แตกต่างกันอาจจะแตกต่างกัน ค่า แต่เขาได้เสมอวัตถุ; วัตถุที่มีลักษณะคล้ายกับตารางที่สร้างขึ้นโดยสิ่งที่วงจรชีวิตของพวกเขาในการที่ไม่มีความสัมพันธ์ที่ถูกสร้างขึ้น วัตถุที่มีฟังก์ชั่นสมาชิกของพวกเขายังมีตาราง:

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

คำนิยามนี้สร้างฟังก์ชั่นใหม่และบันทึกถอนภายในวัตถุบัญชีเราสามารถเรียกต่อไปนี้:

Account.withdraw(100.00)

ตัวอย่างง่ายๆ

ชั้นที่เรียบง่ายต่อไปนี้ประกอบด้วยสามคุณสมบัติ: พื้นที่, ความยาวและความกว้างวิธี printArea สำหรับผลการพิมพ์:

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

สร้างวัตถุ

วัตถุคือการสร้างบิตเช่นกระบวนการของการเรียนการจัดสรรหน่วยความจำ แต่ละชั้นจะมีหน่วยความจำของตัวเองและแบ่งปันข้อมูลร่วมกัน

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

คุณสมบัติการเข้า

เราสามารถใช้จุดการเข้าถึงแอตทริบิวต์ชั้น (.):

print(r.length)

ฟังก์ชั่นการเข้าถึงสมาชิก

เราสามารถใช้โคลอน (:) แอตทริบิวต์การเรียนการเข้าถึง:

r:printArea()

จัดสรรหน่วยความจำเมื่อวัตถุจะเริ่มต้นได้

ตัวอย่างที่สมบูรณ์

ด้านล่างเราจะแสดงให้เห็นถึงตัวอย่างที่สมบูรณ์ Lua เชิงวัตถุ:

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

โปรแกรมข้างต้นผลลัพธ์คือ:

面积为 	100

มรดก Lua

มรดกหมายถึงวัตถุโดยตรงโดยใช้คุณสมบัติและวิธีการของวัตถุอื่น คุณสมบัติและวิธีการที่สามารถใช้ในการขยายฐานชั้น

ต่อไปนี้จะแสดงให้เห็นถึงตัวอย่างมรดกง่าย:

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

ตัวอย่างต่อไปวัตถุรูปร่างสแควร์ได้รับมรดกชั้นเรียน:

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

ตัวอย่างที่สมบูรณ์

ตัวอย่างต่อไปนี้เราได้รับการถ่ายทอดวิธีการเรียนที่ง่ายต่อการขยายชั้นเรียนมาในชั้นเรียนมาเพื่อรักษาตัวแปรสมาชิกและวิธีการได้รับการถ่ายทอดการเรียน:

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

การดำเนินงานของโค้ดข้างต้นผลลัพธ์คือ:

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

ฟังก์ชั่นการแทนที่

Lua เราสามารถเขียนฟังก์ชั่นชั้นฐานกำหนดการใช้งานของคุณเองในชั้นเรียนมา:

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