OOP

Interface – OOP

Interface คืออะไร

เรามาดูนิยามคำศัพท์คำนี้กันดูก่อน จาก Wikipedia

In object-oriented programming, a protocol or interface is a common means for unrelated objects to communicate with each other. These are definitions of methods and values which the objects agree upon in order to co-operate.

แปลได้ว่า Protocol หรือ Interface ก็คือ วัตถุที่ไม่เกี่ยวข้องกัน มาติดต่อประสานกัน โดยการทำพันธะสัญญากันว่าจะใช้ method/ค่า อะไรในการทำงานร่วมกัน

พูดง่ายๆก็คือ การทำงานร่วมกัน โดยกำหนดเป็น Method กลางขึ้นมาซํกอันหนึ่ง

ขั้นตอนการออกแบบและใช้งาน interface

สมมติเรามีทีมโปรแกรมเมอร์ นาย ก, นาย ข, นาย ค ทำงานเขียนโปรแกรมด้วยกันอยู่ โดยสามคนกำลังเขียนคลาส นายทหาร นายตำรวจ และคลาสประชาชน แยกกันคนละคลาส

ทีนี้เราต้องการให้ทุกคลาส ที่เพื่อนๆ เขียนอยู่มีความสามารถบอกเวลาได้ โดยไม่สนใจว่าแต่ละคลาสจะมีวิธิีการบอกเวลาอย่างไร หรือเค้าจะไปดูเวลามาจากไหน

คลาสนายทหารอาจจะไปยืมนาฬิกาเพื่อนมาบอกเวลา หรือคลาสตำรวจอาจจะไปถามจากนักธุรกิจ หรือคลาสประชาชนอาจจะไม่บอกอะไรเพราะพูดอะไรไม่ได้ อย่างนี้เป็นต้น คือเรียกว่า ขอให้ทุกคลาสมี Method บอกเวลา แต่จะไปทำอย่างไรมาเราไม่สนใจ

เราก็ออกแบบเป็น Interface ชื่อ TellTimeAble โดยมี method TellTime() อยู่ โดยที่ไม่ต้องเขียน code ทำงานอะไรทั้งสิ้น ประกาศไว้เฉยๆ หลังจากนั้น เราก็ไปบอกเพื่อนๆ โปรแกรมเมอร์ในทีม ว่า ให้เอา interface TellTimeAble ของเราไป implement ไว้ใน class ของแต่ละคนด้วย

เพราะเวลาเราเรียกใช้ เราจะส่งค่าคลาสของแต่ละคนเข้าไปใน Method AllManPleaseTellTime ของเราดังนี้

Method AllManPleaseTellTime (TellTimeAble man){

Print(man.TellTime()) // ตรงนี้จะทำลูปวนไป

}

ถ้าเพื่อนของเราไม่เอา Interface TellTimeAble ไปประกาศและ implement ไว้ในคลาสของแต่ละคน มันจะส่ง object ที่เป็นคลาสของเขาเข้ามาที่ฟังชั่นเราไม่ได้

หลังจากนั้น เพื่อนของเราก็ไปปรับปรุงคลาสของแต่ละคน หลังจากที่เพื่อนๆทำเสร็จ ก็สามารถใช้ method tellTime() ของเพื่อนๆ ได้

เพราะงั้นจะเห็นว่า Method TellTime() ก็คือ method กลางที่ทุกคนจะต้องไปเขียน code การทำงานไว้นั่นเอง

ส่วนเราก็เรียกใช้อย่างสบายใจ

นี่ก็คือประโยชน์ของ Interface ครับ

เมื่อไรจะใช้ Interface

เมื่อเราต้องการให้ชื่อ method ของเรา  ไปปรากฎใน class ต่างๆ โดยที่เราไม่สนใจว่า ในแต่ละ class จะให้ method ทำงานอย่างไร แต่เราจะเรียกใช้ method จากชื่อที่เราระบุ

จากตัวอย่าง เราแค่ต้องการจะถามเวลา จาก method TellTime() แต่เราไม่สนใจว่าจะไปดูเวลามาจากไหน หรือนาฬิกายืมใครมา… เพราะคลาสประชาชนมักพูดอะไรไม่ค่อยได้อยู่แล้ว

 

 

อ้างอิง

https://en.wikipedia.org/wiki/Protocol_(object-oriented_programming)

https://docs.oracle.com/javase/tutorial/collections/index.html

You may also like