บทที่ 5

บทที่5อินเตอร์เฟส (Interface)

   อินเตอร์เฟส (Interface) คือคีย์คำสั่งที่ใช้ระบุการถ่ายทอดคุณสมบัติ(Interface) หรือการเป็นไปได้หลายรูปแบบหรือการพ้องรูป (Polymorhism) ที่เกิดจากการคลาสย่อยเป็๋นคลาสของคลาสแม่หลายคลาส ซึ่งจะต้องระบุการเรียกใช้ให้ถูกต้องว่าเป็นของคลาสแม่ใดอินเตอร์เฟสมีการทำงานคล้ายกับ Abstract คลาสดังนี้
>> การสร้างอินเตอร์เฟสให้ใช้คีย์คำสั่ง interface แทนที่ class โดยใช้ร่วมกับคีย์คำสั่ง implements เพืื่อระบุคลาสแม่ที่ต้องการสืบทอดมา และสามารถ implements ได้มากกว่าหนึ่งอินเตอร์เฟส
>> คลาสที่ implements อินเตอร์เฟสจะต้องทำการ implements ทุกๆเมธอดที่มีอยู่ในอินเตอร์เฟสนั้น
>> อินเตอร์เฟสสามารถสร้างตัวแปรไว้ภายในได้ แต่มักจะอยู่ในรูปของตัวแปรแบบ Static Final
>> อืนเตอร์เฟสไม่สามารถสร้างออปเจกต์ (lnstantiate) จากอินเตอร์เฟสได้ แต่สามารถประกาศเป็นชนิดของตัวแปรได้
>> อินเตอร์เฟส จะไม่มีคอนสตรักเตอร์ (Constructor) ภายในตัวอินเตอร์เฟส

การสร้างและกำหนดอินเตอร์เฟส

   เราสามารถสร้างอินเตอร์เฟสได้จากอีคลิปส์ แต่ก่อนที่จะสร้างจะต้องพิจารณาหลักการก่อนเพื่อให้ตรงตามจุดประสงค์และแก้ปัญหาในบางกรณี โดยให้พิจารณาความสัมพันธ์ของคลาสที่เป็นอินเตอร์เฟสตามสัญลักษณ์



รูปที่ 5.1 แสดงสัญลักษณ์ความสัมพันธ์ของคลาส

   จากรูปที่ปรากฏข้างต้นเราจะพบว่า มีความกำกวมระหว่างเมธอดที่จะเรียกใช้งาน เนื่องจากคลาสแม่นั้นมีคลาสลูกสังกัดมากกว่าหนึ่งคลาส หากมีการเรียกใช้เมธอดในคลาสแม่จะทำให้ผลลัพธ์ไม่ถูกต้องตามความเป็นจริงเพราะ Bus และ Boat เป็นยานพาหนะเหมือนกันแต่ใช้งานต่างกัน จาวาจึงแก้ปัยหาโดยการบังคับให้ต้องทำการโอเวอร์ไรด์เมธอดที่มีตลาสแม่ทั้งหมด (สามารถ implements คลาสแม่ได้มากกว่าหนึ่ง) ในที่นี้คลาสแม่มีเพียงคลาสเดียวคลาสลูกจึงต้องมาสร้างเมธอดเหมือนกับคลาสแม่ แต่มีรายละเอียดแตกต่างกันตามหลักการโอเวอร์ไรด์ที่กล่าวมาในบทที่ 4 เราสามารถสร้างอินเตอร์เฟสได้ดังนี้

ตัวอย่างที่ 5.1


ตัวอย่างที่ 5.2


เมื่อสร้างคลาส Boat จะถูกบังคับให้สร้างเมธอดที่มีชื่อเดียวกับ Interface Transport ดังนี้

ตัวอย่างที่ 5.3


   ในบางครั้งเราต้องการใช้งานในลักษณะที่ต่างออกไปจากโครงสร้างความสัมพันธ์ของคลาสในความเป็นจริงแล้วออปเจกต์สามารถที่จะระบุความสัมพันธ์ได้มากกว่าหนึ่งคลาสแม่ แต่จะต้องการเรียกใช้ที่แตกต่างออกไปจากเดิม เพื่อเรียกใช้งานได้มากกว่าเดิม หรือมีความสามารถมากขึ้นโดยจาวาได้เตรียมวิธีการใช้งานให้แล้ว โดยเราสามารถทำการประกาศอินเตอร์เฟสเพื่อเรียกใช้คุณสมบัติ (attribute) ค่าคงที่ (method) ภายในอินเตอร์เฟสได้ดังตัวอย่างข้างต้น

ตัวอย่างที่ 5.4


ผลการรันโปรแกรมตัวอย่างที่ 5.4


   จากตัวอย่างเราไม่สามารถสร้างตัวแปรคลาสหรือออปเจกต์จากอินเตอร์เฟส ซึ่งถือเป็นคลาสแม่ของคลาส Bus ได้ แต่หากเราแปลงไปเป็นคลาสตามปกติตามหลักการพ้องรูป เราก็สามารถใช้เมธอดเพื่อโอเวอร์ไรด์ได้ทันที
>การอ้างถึงค่าตัวแปรอินเตอร์เฟส
>> อินเตอร์เฟสกับการสืบทอดคุณสมบัติ

หากมีการสืบทอดมากกว่าสองอินเตอร์เฟสดังโครงสร้างนี้ให้สังเกตว่าจะเกิดอะไรขึ้น


รูปที่ 5.2 ไดอะแกรมแสดงลักษณะของอินเตอร์เฟส

จากโครงสร้างที่ปรากฎจะพบว่า คลาสย่อยแต่ละตัวทำการ implements จากอินเตอร์เฟสสองตัว คือ TravelType และ Transport จาวาจะต้องบังคับให้โอเวอร์ไรด์เมธอดทั้งหมดที่ทำการ implements และหลังจากนั้นจึงจะสามารถทำการสร้างออปเจกต์ได้ในลักษณะเดียวกับที่กล่าวมาก่อนหน้านี้

ตัวอย่างที่ 5.5

ผลการรันโปรแกรมตัวอย่างที่ 5.5



ความคิดเห็น