"สวัสดี Amigo! วันนี้ฉันอยากจะบอกคุณถึงสาเหตุที่อินเทอร์เฟซมีอยู่ คุณมักจะได้ยินว่าคลาส วัตถุ หรือเอนทิตีบางอย่างสนับสนุนอินเทอร์เฟซเฉพาะ การสนับสนุนอินเทอร์เฟซหมายความว่าอย่างไร"

มีอินเทอร์เฟซเพื่อรองรับพฤติกรรมเฉพาะ - 1

ในความหมายที่กว้างขึ้น อินเทอร์เฟซใดๆ เป็นกลไกสำหรับบางสิ่งในการโต้ตอบกับสิ่งอื่น ตัวอย่างเช่น รีโมททีวีเป็นอินเทอร์เฟซระยะไกล สุนัขเข้าใจและปฏิบัติตามคำสั่ง ซึ่งหมายความว่าสุนัขนั้นรองรับอินเทอร์เฟซเสียง (ควบคุม) โดยสรุปแล้ว เราสามารถพูดได้ว่าอินเทอร์เฟซเป็นวิธีมาตรฐานสำหรับสองสิ่งในการโต้ตอบ โดยที่ทั้งสองฝ่ายรู้ถึงมาตรฐาน เมื่อมีคนบอกให้สุนัข "นั่ง" คำสั่งของเขาหรือเธอเป็นส่วนหนึ่งของ «ส่วนต่อประสานเสียงของสุนัข» และถ้าสุนัขเชื่อฟังคำสั่ง เราก็จะบอกว่าสุนัขนั้นสนับสนุนส่วนต่อประสาน

ดังนั้นในการเขียนโปรแกรม เมธอดคือการกระทำที่ดำเนินการกับวัตถุกับข้อมูล และถ้าคลาสใช้เมธอดบางอย่าง มันก็ «รองรับการดำเนินการ» ของคำสั่งบางอย่าง เราได้อะไรจากการรวมเมธอดเข้ากับอินเทอร์เฟซ

1)แต่ละอินเตอร์เฟสเหมือนกับคลาสมีชื่อเฉพาะ ทั้งสองฝ่ายสามารถแน่ใจได้ 100% ว่าอีกฝ่ายสนับสนุนอินเทอร์เฟซเดียวกับที่พวกเขารู้จักและไม่ใช่อินเทอร์เฟซที่คล้ายกัน

2)แต่ละอินเทอร์เฟซกำหนดข้อ จำกัด บางประการเกี่ยวกับคลาสที่จะรองรับ คลาส (ผู้พัฒนา) ตัดสินใจว่าจะทำอะไรเมื่อเรียกใช้เมธอดที่สืบทอดมาจากอินเทอร์เฟซ แต่ผลลัพธ์ควรอยู่ในขอบเขตของความคาดหวังที่สมเหตุสมผล หากเราสั่งสุนัขให้ "นั่ง" แล้วมันก็กลิ้งไปมาอยู่กับที่เป็นเวลา 5 นาทีแล้วนั่ง แสดงว่ามันสนับสนุนอินเทอร์เฟซ แต่ถ้ามันจับขาคุณ เราก็แทบจะพูดไม่ได้ว่ามันรองรับอินเตอร์เฟส การดำเนินการตามคำสั่งไม่ได้ผลลัพธ์ที่คาดหวัง

สมมติว่าคุณและเพื่อนของคุณกำลังเขียนเกมคอมพิวเตอร์ และคุณได้รับมอบหมายให้เขียนโปรแกรมพฤติกรรมของตัวละครหนึ่งตัว เพื่อนร่วมงานคนหนึ่งของคุณเขียนโค้ดเพื่อแสดงอักขระทั้งหมดบนหน้าจอแล้ว เพื่อนร่วมงานคนที่สองซึ่งรับผิดชอบในการบันทึกเกมลงดิสก์ได้เขียนโค้ดเพื่อบันทึกอ็อบเจกต์เกมทั้งหมดลงในไฟล์ แต่ละคนเขียนโค้ดจำนวนมากและสร้างอินเทอร์เฟซสำหรับการโต้ตอบกับโค้ดนั้น ตัวอย่างเช่น อาจมีลักษณะดังนี้:

รหัสจาวา คำอธิบาย
interface Saveable
{
 void saveToMap(Map<String, Object> map);
 void loadFromMap(Map<String, Object> map);
}
— ส่วนต่อประสานสำหรับจัดเก็บ / โหลดวัตถุจากแผนที่
interface Drawable
{
 void draw(Screen screen);
}
— อินเทอร์เฟซสำหรับการวาดวัตถุภายในวัตถุหน้าจอที่ผ่าน
class PacMan implements Saveable, Drawable
{}
— คลาสของคุณซึ่งรองรับสองอินเทอร์เฟซ

กล่าวอีกนัยหนึ่ง เพื่อสนับสนุนอินเทอร์เฟซ (กลุ่มของอินเทอร์เฟซ) คลาสของคุณต้อง:

1)สืบทอดพวกเขา

2)ใช้วิธีการที่ประกาศไว้ในนั้น

3)วิธีการต้องทำตามที่ตั้งใจจะทำ

จากนั้นโค้ดที่เหลือของโปรแกรมซึ่งไม่รู้อะไรเลยเกี่ยวกับคลาสของคุณและออบเจกต์ของคลาส จะสามารถทำงานร่วมกับคลาสของคุณได้

“ทำไมรหัสถึงไม่รู้อะไรเกี่ยวกับชั้นเรียนของฉันเลย”

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

"ไกลออกไป! ฉันไม่รู้ว่ามันเป็นไปได้"

"โปรเจกต์ใหญ่ๆ ทำงานแบบนี้ คนเลิกเขียนตั้งแต่เริ่มต้นไปนานแล้ว"

ผู้คนไม่ได้คิดค้นคณิตศาสตร์และตัวอักษรใหม่ทุกครั้ง พวกเขาศึกษาทุกสิ่งที่ประดิษฐ์ขึ้นก่อนหน้าพวกเขา