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


บทความเกี่ยวกับ Interfaces

Interfaces ในภาษา C#

ในการเขียนโปรแกรมเชิงวัตถุ Interfaces เป็นคำที่ใช้กับการกำหนดประเภทของข้อมูลแบบ abstract โดยการกำหนดเมธอดที่ไม่มีโค้ดการทำงาน ในบทนี้ เราจะแนะนำให้คุณรู้จักกับ ...

Interfaces ในภาษา Java

ในบทนี้ คุณจะได้เรียนรู้เกียวกับ Interface ซึ่งเป็นสิ่งที่ใช้กำหนดเมธอดที่คลาสจะต้องมี และเราจะพูดถึงการสร้างและการนำไปใช้งานร่วมกับคลาสในภาษา Java Interface นั...

Interfaces ในภาษา PHP

ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับ Interfaces ในภาษา PHP ในการเขียนโปรแกรมเชิงวัตถุ (OOP) Interfaces คือประเภทข้อมูลแบบนามธรรม (Abstract type) ที่ไม่ได้มีการกำหน...