9.91 การโอเวอร์โหลด
การโอเวอร์โหลดการโอเวอร์โหลด ได้กล่าวถึงในตอนการรับทอดไว้ก่อนแล้ว คือ มีลักษณะคล้ายคลึงกับโอเวอร์ไรด์ โดยลักษณะที่เหมือนกัน ได้แก่ ชื่อของเมท็อด ต้องมีชื่อเหมือนกัน ส่วนในด้านที่แตกต่างกัน คือ โอเวอร์โหลดจะต้องมีอาร์กิวเมนต์ที่มีจำนวนไม่เท่ากัน ส่วน โอเวอร์ไรด์จะต้องมีจำนวนอาร์กิวเมนต์เท่ากันและรูปแบบเดียวกัน โอเวอร์โหลดอาจจะอยู่ในคลาสเดียวกันหรือไม่ก็ได้ แต่โอเวอร์ไรด์จะต้องมีคลาสที่สืบทอดกันมาจากคลาสแม่สู่คลาสลูก ให้พิจาณาตัวอย่างจากคำสั่งในภาพที่ 9.21
ภาพที่ 9.21 ตัวอย่างการโอเวอร์โหลด
จากภาพที่ 9.21 เป็นตัวอย่างการโอเวอร์โหลดคอนสตรักเตอร์
ซึ่งได้ยกตัวอย่างไว้แล้วในตอนการรับทอด แต่ยังไม่ได้ให้รายละเอียด การโอเวอร์โหลดสามารถทำได้กับเมท็อดใด
ๆ ก็ได้ ไม่จำเป็นต้องเป็นคอนสตรักเตอร์ การใช้งานนิยมนำมาใช้กับคอนสตรักเตอร์เป็นส่วนใหญ่
เพราะว่าเมื่อสร้างอ็อบเจกต์จะต้องมีการเรียกใช้คอนสตรักเตอร์อย่างอัตโนมัติทุกครั้ง
การสร้างเมท็อดโอเวอร์โหลดในภาษาจาวาจะต้องสร้างเมท็อดขึ้นมาใหม่
ที่มีชื่อเดียวกัน แต่มีจำนวนอาร์กิวเมนต์ไม่เท่ากัน ซึ่งในภาษาไพธอนมีเงื่อนไขแตกต่างจากภาษาจาวา
คือ ผู้ใช้ไม่จำเป็นต้องสร้างเมท็อดขึ้นมาซ้ำ เพียงแต่นำเอาชนิดข้อมูลแบบทูเพิลมาใช้
เขียนเงื่อนไขสอบถามจำนวนอาร์กิวเมนต์
แล้วจึงกำหนดให้อาร์กิวเมนต์แต่ละค่าไปประมวลผลอย่างไรก็ได้ภายในเมท็อดนั้น ๆ ด้วยตนเอง
ซึ่งทำให้สะดวกมากยิ่งขึ้น จากตัวอย่างคำสั่ง สามารถอธิบายได้ดังตารางที่ 9.2
คำสั่ง | คำอธิบายหรือการทำงาน |
def __init__(self, *args): | เป็นคอนสตรักเตอร์ที่รองรับอาร์กิวเมนต์ได้หลายค่า |
if(len(args)==0): | สร้างเงื่อนไขถ้าไม่มีอาร์กิวเมนต์เข้ามา |
self.balance = 0.0 | กำหนดให้ balance = 0.0 |
elif(len(args)==1): | สร้างเงื่อนไขถ้ามี 1 อาร์กิวเมนต์ |
self.balance=args[0] | กำหนดให้อาร์กิวเมนต์เก็บในตัวแปร balance |
self.interest_rate=default_interest_rate | นำตัวแปร default_interest_rate มาเก็บในตัวแปร interest_rate |
else: | ถ้าเงื่อนไขเป็นเท็จ |
self.balance=args[0] | ให้อาร์กิวเมนต์แรกเก็บในตัวแปร balance |
self.interest_rate=args[1] | ให้อาร์กิวเมนต์ลำดับที่สองเก็บในตัวแปร interest_rate |
จากคำสั่งตัวอย่างที่กล่าวมา
สามารถสร้างอ็อบเจกต์ได้ 3 วิธีด้วยกัน ได้แก่
1. ไม่ใส่อาร์กิวเมนต์ใด ๆ เลย เช่น Taweerat = InterestAccount()
2. ใส่อาร์กิวเมนต์ 1 ค่า เช่น Taweerat = InterestAccount(50000)
3. ใส่อาร์กิวเมนต์ 2 ค่า เช่น Taweerat = InterestAccount(50000,12)
1. ไม่ใส่อาร์กิวเมนต์ใด ๆ เลย เช่น Taweerat = InterestAccount()
2. ใส่อาร์กิวเมนต์ 1 ค่า เช่น Taweerat = InterestAccount(50000)
3. ใส่อาร์กิวเมนต์ 2 ค่า เช่น Taweerat = InterestAccount(50000,12)
การปฏิบัติการโอเวอร์โหลด
นอกจากการโอเวอร์โหลดตามหลักการ
การเขียนโปรแกรมเชิงวัตถุแล้ว ภาษาไพธอนยังมีเมท็อดต่าง
ๆ ที่ยอมให้โปรแกรมเมอร์ ทำการโอเวอร์ไรด์เมท็อดที่ได้สร้างไว้ให้ใช้
ซึ่งมีฟังก์ชันอยู่มากมาย เช่น
__init__(self
[,args…]), __del__(self), __str__(self), __add__(self), __sub__(self), __mul__(self), __div__(self) เป็นต้น
ต่อไปนี้เป็นตัวอย่างการประยุกต์ใช้การปฏิบัติการโอเวอร์โหลดไปใช้กับการบวก
ค่าทางเวคเตอร์
ภาพที่ 9.22 แสดงคำสั่งการปฏิบัติการโอเวอร์โหลด
จากภาพที่ 9.22
เป็นคำสั่งการปฏิบัติการโอเวอร์โหลด โดยมีการสร้างคลาส ชื่อ Vector และมีคอนสตรักเตอร์ที่รับอาร์กิวเมนต์ได้ 2 ค่า คือ a
และ b และมีเมท็อด __str__(self) ทำหน้าที่แปลงเลขจำนวนให้เป็นตัวแปรประเภทสายอักขระ
เมท็อดสุดท้าย คือ __add__(self) ทำหน้าที่บวกค่าระหว่างค่า 2 ค่า มีอ็อบเจกต์ 2 อ็อบเจกต์ ได้แก่ v1 และ v2 เมื่อมีคำสั่ง
print v1 + v2 โปรแกรมนำเอาอ็อบเจกต์ทั้งสองมารวมกัน สามารถนำไปประยุกต์กับการคูณ
หาร บวก และลบ ได้ผลลัพธ์ของโปรแกรม ดังภาพที่ 9.23
ภาพที่ 9.23 แสดงผลลัพธ์ของโปรแกรม
ไม่มีความคิดเห็น:
แสดงความคิดเห็น