# การใช้งาน Multiple Inheritance ใน OOP ของภาษา Kotlin แบบง่ายๆ
Object-Oriented Programming หรือ OOP เป็นหลักการเขียนโปรแกรมที่ช่วยให้นักพัฒนาสามารถจำลองสิ่งต่างๆ ในโลกจริงออกมาเป็นโค้ดโปรแกรมได้อย่างมีระเบียบและเข้าใจง่าย หนึ่งในคุณสมบัติของ OOP คือการรับคุณสมบัติหรือ behaviour มาจากหลายๆ คลาส ซึ่งเรียกว่า Multiple Inheritance วันนี้เราจะพูดถึงการใช้งาน Multiple Inheritance ในภาษา Kotlin ด้วยตัวอย่างโค้ดที่ช่วยให้คุณเข้าใจได้ง่ายขึ้น
ก่อนอื่นต้องขอบอกว่า Kotlin ไม่รองรับ Multiple Inheritance โดยตรงเหมือนกับภาษาอื่นๆ เช่น C++ แต่ Kotlin มีกลไกของการใช้ `interface` ที่สามารถทดแทนการใช้ Multiple Inheritance ได้
Interface ใน Kotlin ทำหน้าที่เหมือนสัญญาที่บอกว่าคลาสไหนก็ตามที่ implement interface นั้นๆ จะต้องมี method ที่กำหนดไว้ทั้งหมด และ method เหล่านั้นสามารถมีการระบุ body ของ method ไว้ล่วงหน้าได้ (เรียกว่า default method)
การใช้ multiple inheritance ใน Kotlin มักจะเป็นการใช้ในรูปแบบของการ implement หลายๆ interfaces ตัวอย่างต่อไปนี้จะแสดงให้เห็นถึงการใช้ multiple interfaces ใน Kotlin:
ตัวอย่าง คลาส Printer และ Scanner:
interface Printer {
fun print(document: String)
}
interface Scanner {
fun scan(document: String)
}
// MultifunctionDevice รับคุณสมบัติจากทั้ง Printer และ Scanner
class MultifunctionDevice : Printer, Scanner {
override fun print(document: String) {
println("Printing $document")
}
override fun scan(document: String) {
println("Scanning $document")
}
}
ในตัวอย่างนี้, `MultifunctionDevice` สามารถทำหน้าที่เป็นทั้ง Printer และ Scanner เราสร้าง multifunction device ได้โดยไม่จำเป็นต้องสืบทอดคุณสมบัติจากคลาสใดคลาสหนึ่ง
ตัวอย่างถัดไป, การซัพพอร์ตขั้นสูงขึ้นด้วย interface delegation:
interface Printer {
fun print(document: String)
}
class LaserPrinter : Printer {
override fun print(document: String) {
println("Laser Printer: Printing $document")
}
}
// SmartPrinter รับคุณสมบัติของ Printer ผ่าน LaserPrinter ด้วย Delegation
class SmartPrinter(printer: Printer) : Printer by printer
fun main() {
val printer = LaserPrinter()
val smartPrinter = SmartPrinter(printer)
smartPrinter.print("MyDocument.pdf") // Laser Printer: Printing MyDocument.pdf
}
ในตัวอย่างนี้ `SmartPrinter` ไม่จำเป็นต้องรู้วิธีการ print ไปยังอุปกรณ์ แต่สามารถมอบหมาย (delegate) ภารกิจนี้ไปยังอีกคลาสหนึ่งที่รู้วิธีการ print จริงๆ อย่าง `LaserPrinter`
ตัวอย่างสุดท้าย, เมื่อทำการ implement หลาย interfaces ที่มี function ชื่อเดียวกันแต่ต้องการปฏิบัติการที่แตกต่างกัน:
interface Printer {
fun show(): Unit {
println("I am a Printer")
}
}
interface Scanner {
fun show(): Unit {
println("I am a Scanner")
}
}
class Photocopier : Printer, Scanner {
override fun show() {
println("I am a Photocopier")
// Call to Printer's show
super.show()
// Call to Scanner's show
super.show()
}
}
fun main() {
val photocopy = Photocopier()
photocopy.show()
// Output:
// I am a Photocopier
// I am a Printer
// I am a Scanner
}
ในตัวอย่างนี้ `Photocopier` ต้อง override เมธอด `show()` และในเมธอดนั้นเราสามารถเรียกใช้ implementation จากทั้ง `Printer` และ `Scanner` ได้
การใช้ multiple inheritance ผ่าน interfaces ใน Kotlin มีประโยชน์มากในอุตสาหกรรมจริง เช่น ในการสร้างอุปกรณ์หรือ tools ที่ต้องการฟังก์ชันอเนกประสงค์ เหมือนตัวอย่าง multifunction device ที่ได้นำเสนอไปข้างต้นนี้เอง
ทั้งหมดนี้คือการใช้ multiple inheritance ในภาษา Kotlin แบบง่ายๆ ที่คุณสามารถจำลองการทำงานหลายอย่างในคลาสเดียวได้ ถ้าคุณกำลังมองหาการสร้างโครงสร้างการเรียนรู้ที่เข้มข้นและประสบการณ์จริงๆ ในการเขียนโปรแกรมด้วย OOP ทำไมไม่ลองพิจารณาศึกษาที่ EPT ซึ่งเรามีคอร์สปฏิบัติการเต็มรูปแบบครอบคลุมทุกแง่มุมของการพัฒนาซอฟต์แวร์ คุณจะได้พบกับประสบการณ์การเรียนที่หลากหลายและน่าตื่นเต้น พร้อมทั้งได้พัฒนาทักษะการเขียนโค้ดที่จะมีคุณค่าตลอดไป!
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
Tag ที่น่าสนใจ: kotlin oop object-oriented_programming multiple_inheritance interfaces implementation delegation programming code_example real-world_use_case
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM