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