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