Interfaces
Interfaces คือการอธิบายการกระทำที่ออบเจ็คสามารถทำได้ ยกตัวอย่างเช่น เมื่อคุณเปิด TV คุณจะต้องกดปุ่มเปิดเพื่อที่จะเปิดมัน เราทราบว่า TV จำเป็นต้องมีปุ่มเพื่อที่จะเปิด แต่เราไม่ได้สนใจว่าขั้นตอนการทำงานของมันจะเป็นอย่างไร
Interfaces ในการเขียนโปรแกรมเชิงวัตถุ
ในการเขียนโปรแกรม Interfaces นั้นใช้ในการบังคับให้ออบเจ็คมีการทำงานบางอย่าง โดย Interfaces จะกำหนดรูปแบบของฟังก์ชันที่คลาสจะต้องมี โดยที่ไม่ต้องมีในส่วนการทำงาน ยกตัวอย่างเช่น รถยนต์มีการสตาร์ทและดับเครื่องยนต์ ซึ่งอาจจะมีเครื่องยนต์ชนิดอื่นที่มีการสตาร์ทและหยุดเครื่องยนต์เช่นเดียวกัน ดังนั้นการสตาร์ทและหยุดเครื่องยนต์คือกลุ่มของฟังก์ชันการทำงาน ซึ่งเป็นแนวคิดของ Interfaces
การสร้าง Interfaces
การสร้าง Interfaces ในภาษา Visual Basic นั้นสามารถใช้สำหรับการกำหนดเมธอด ฟังก์ชัน อีเวนต์ และ property ต่อไปมาดูตัวอย่างการประกาศ Interfaces ที่จะเอาไปใช้ในการสร้างคล่าเกี่ยวกับรถยนต์
Interface IVehicle
Sub EngineStart()
Sub EngineStop()
Sub Drive()
Function GetCurrentSpeed() As Integer
End Interface
ในตัวอย่างเราได้สร้าง Interfaces ชื่อว่า IVehicle
ภายใน Interfaces จะมีการประกาศแค่ส่วนกำหนดของฟังก์ชันซึ่งจะไม่มีส่วนการทำงาน หลังจากนั้นเราจะสร้างคลาสที่จะ implement interface นี้ และกำหนดการทำงานของฟังก์ชันที่ได้กำหนดไว้ใน Interfaces
Interface IVehicle
Sub EngineStart()
Sub EngineStop()
Sub Drive()
Function GetCurrentSpeed() As Integer
End Interface
Class Car
Implements IVehicle
Sub EngineStart() Implements IVehicle.EngineStart
Console.WriteLine("Car engine started")
End Sub
Sub EngineStop() Implements IVehicle.EngineStop
Console.WriteLine("Car engine stopped")
End Sub
Sub Drive() Implements IVehicle.Drive
Console.WriteLine("Car is driving")
End Sub
Function GetCurrentSpeed() As Integer Implements IVehicle.GetCurrentSpeed
Return 18
End Function
End Class
Module Module1
Sub Main()
Dim car As Car = New Car()
car.EngineStart()
car.Drive()
Console.WriteLine("With speed at " & car.GetCurrentSpeed() & " mph")
car.EngineStop()
End Sub
End Module
ในตัวอย่างเราได้สร้างคลาส Car
ซึ่ง implement interfaces IVehicle
นั่นหมายความว่าคลาสนี้จะต้องมีฟังก์ชันทั้ง4 ที่ interfaces IVehicle
ได้กำหนดไว้แล้ว
Sub EngineStart() Implements IVehicle.EngineStart
Console.WriteLine("Car engine started")
End Sub
นี่เป็นการ implement เมธอด EngineStart()
ในส่วนนี้เมธอดจะถูกกำหนดการทำงาน และในการสร้างคลาสคุณจะต้องทำการ implement ทุกอย่างที่ได้กำหนดไว้ใน interfaces ในตัวอย่างเรามี 3 เมธอด และ 1 ฟังก์ชันซึ่งเราได้ทำการ implement ทั้งหมด
ต่อมาในโมดูลหลักของเราเป็นการนำคลาสมาสร้างออบเจ็คและเรียกใช้งานเมธอดตามปกติ
Car engine started
Car is driving
With speed at 18 mph
Car engine stopped
และนี่เป็นผลลัพธ์ของโปรแกรม
อย่างที่เราได้บอกไปว่า Interfaces เป็นการกำหนดการทำงานให้กับออบเจ็ค โดยวัตถประสงค์ของมันก็คือการนำเอาไป implement คลาสได้หลายๆ คลาสที่จะมีฟังก์ชันการทำงานที่เหมือนกัน แต่วิธีการทำงานนั้นจะแตกต่างกันออกไปสำหรับแต่ละคลาส
Class Truck
Implements IVehicle
Sub EngineStart() Implements IVehicle.EngineStart
Console.WriteLine("Truck engine started")
End Sub
Sub EngineStop() Implements IVehicle.EngineStop
Console.WriteLine("Truck engine stopped")
End Sub
Sub Drive() Implements IVehicle.Drive
Console.WriteLine("Truck is driving")
End Sub
Function GetCurrentSpeed() As Integer Implements IVehicle.GetCurrentSpeed
Return 20
End Function
End Class
Class Boat
Implements IVehicle
Sub EngineStart() Implements IVehicle.EngineStart
Console.WriteLine("Boat engine started")
End Sub
Sub EngineStop() Implements IVehicle.EngineStop
Console.WriteLine("Boat engine stopped")
End Sub
Sub Drive() Implements IVehicle.Drive
Console.WriteLine("Boat is driving")
End Sub
Function GetCurrentSpeed() As Integer Implements IVehicle.GetCurrentSpeed
Return 13
End Function
End Class
ในตัวอย่างได้บนเราได้สร้างคลาส Truck
และ Boat
ซึ่งต่างก็ implement จาก interface IVehicle
นั่นหมายความว่าออบเจ็คเหล่านี้มีการทำงานบางส่วนที่เหมือนกัน นั่นก็คือ การสตาร์ทและหยุดเครื่องยนต์ การขับ และรับความเร็วปัจจุบัน แต่ภายในเมธอดของแต่ละคลาสนั้นการทำงานจะไม่เหมือนกัน ซึ่งขึ้นกับคลาสนั้นๆ
ดังนั้น Interfaces จึงใช้สำหรับกำหนดว่าคลาสนี้ควรจะมีเมธอด ฟังก์ชัน อีเวนต์หรือ property อะไร
Implementing multiple interfaces
Interfaces ใช้สำหรับกำหนดว่าคลาสนั้นจะต้องมีการทำงานอะไรบ้าง ในความเป็นจริงออบเจ็คต่างๆ นั้นจะประกอบด้วยการทำงานเป็นจำนวนมาก เช่น การทำงานที่สามารถเปิดปิดเครื่องได้ จะอยู่ใน interfaces ของการเปิดปิด การทำงานในการปรับลดเสียงจะอยู่ในอีก interfaces เป็นต้น
ดังนั้นในตัวอย่างต่อไปจะเป็นการที่คลาสสามารถ implement interfaces ได้มากกว่า 1 interfaces
Interface IVolume
Sub VolumeUp()
Sub VolumeDOwn()
End Interface
Interface ITurn
Sub TurnOn()
Sub TurnOff()
End Interface
Class Television
Implements IVolume, ITurn
Public Sub TurnOff() Implements ITurn.TurnOff
...
End Sub
Public Sub TurnOn() Implements ITurn.TurnOn
...
End Sub
Public Sub VolumeDOwn() Implements IVolume.VolumeDOwn
...
End Sub
Public Sub VolumeUp() Implements IVolume.VolumeUp
...
End Sub
End Class
ในตัวอย่างเราได้สร้างสอง Interfaces โดย interface IVolume
นั้นเป็นการกำหนดเมธอดเกี่ยวกับการปรับระดับเสียง และ interface ITurn
เป็นการกำหนดเมธอดเกี่ยวกับการควบคุมการเปิดปิด
หลังจากนั้นเราสร้างคลาส Television
ซึ่ง implement interfaces ทั้งสอง สำหรับหลาย interfaces นั้นจะใช้เครื่องหมาย comma (,) นั่นหมายความว่าคลาสนี้จะต้องทำการ implement ทุกเมธอดทั้งใน interface IVolume
และ interface ITurn
ในบทนี้คุณได้เรียนรู้เกี่ยวกับ Interfaces ในภาษา Visual Basic ทั้งการสร้าง Interfaces และการนำไป implement โดยคลาสด้วยหนึ่งหรือหลาย interfaces