( สำหรับจุดประสงค์ของคำถามนี้เมื่อฉันพูดว่า 'ส่วนต่อประสาน' ฉันหมายถึงโครงสร้างของภาษาinterface
และไม่ใช่ 'ส่วนต่อประสาน' ในแง่อื่น ๆ ของคำเช่นวิธีสาธารณะที่ชั้นเรียนเสนอโลกภายนอกเพื่อสื่อสารกับและ จัดการมัน. )
การมีเพศสัมพันธ์แบบหลวมสามารถทำได้โดยการมีวัตถุขึ้นอยู่กับสิ่งที่เป็นนามธรรมแทนประเภทคอนกรีต
วิธีนี้ช่วยให้การแต่งงานกันแบบหลวม ๆ ด้วยเหตุผลหลักสองประการ: 1-นามธรรมมีแนวโน้มที่จะเปลี่ยนแปลงน้อยกว่าประเภทคอนกรีตซึ่งหมายความว่ารหัสที่ขึ้นต่อกันมีโอกาสน้อยที่จะแตก คอนกรีตที่แตกต่างกัน2ประเภทสามารถใช้งานได้ที่รันไทม์เพราะมันเหมาะสมกับสิ่งที่เป็นนามธรรม คอนกรีตชนิดใหม่สามารถเพิ่มได้ในภายหลังโดยไม่จำเป็นต้องแก้ไขรหัสที่มีอยู่เดิม
ตัวอย่างเช่นพิจารณาชั้นCar
และสอง subclasses และVolvo
Mazda
หากรหัสของคุณขึ้นอยู่กับ a Car
มันสามารถใช้ a Volvo
หรือ a Mazda
ในระหว่างรันไทม์ ในภายหลังในคลาสย่อยเพิ่มเติมสามารถเพิ่มได้โดยไม่จำเป็นต้องเปลี่ยนรหัสที่ต้องพึ่งพา
นอกจากนี้Car
- ซึ่งเป็นนามธรรม - มีโอกาสน้อยที่จะมีการเปลี่ยนแปลงกว่าหรือVolvo
Mazda
โดยทั่วไปรถยนต์มักจะเหมือนกันมาระยะหนึ่งแล้ว แต่ Volvos และ Mazdas มีแนวโน้มที่จะเปลี่ยนไป I abstractions มีความเสถียรมากกว่าแบบคอนกรีต
ทั้งหมดนี้เพื่อแสดงให้เห็นว่าฉันเข้าใจว่าข้อต่อหลวมคืออะไรและจะบรรลุผลได้อย่างไรโดยขึ้นอยู่กับนามธรรมและไม่ใช่ข้อสรุป (ถ้าฉันเขียนบางอย่างไม่ถูกต้องโปรดพูดอย่างนั้น)
สิ่งที่ฉันไม่เข้าใจคือ:
Abstractions สามารถเป็น superclasses หรืออินเทอร์เฟซ
ถ้าเป็นเช่นนั้นเหตุใดอินเทอร์เฟซที่ได้รับการยกย่องโดยเฉพาะสำหรับความสามารถในการยอมให้มีเพศสัมพันธ์แบบหลวม? ฉันไม่เห็นความแตกต่างจากการใช้ซูเปอร์คลาส
ความแตกต่างเพียงอย่างเดียวที่ฉันเห็นคือ: 1 การเชื่อมต่อไม่ได้ถูก จำกัด ด้วยการถ่ายทอดทางพันธุกรรมเพียงอย่างเดียว แต่นั่นไม่ได้เกี่ยวข้องอะไรมากกับหัวข้อการมีเพศสัมพันธ์แบบหลวม ๆ 2- อินเทอร์เฟซเป็น 'นามธรรม' มากขึ้นเนื่องจากไม่มีตรรกะการใช้งานเลย แต่ถึงกระนั้นฉันไม่เห็นว่าทำไมที่สร้างความแตกต่างใหญ่
โปรดอธิบายให้ฉันฟังหน่อยว่าเพราะเหตุใดอินเทอร์เฟซจึงถือว่ายอดเยี่ยมในการยอมให้คลัปต่อหลวมในขณะที่ซูเปอร์คลาสธรรมดาไม่ได้
interfaces are essential for single-inheritance languages like Java and C# because that's the only way in which you can aggregate different behaviors into a single class
(ซึ่งทำให้ฉันเปรียบเทียบกับ C ++ ซึ่งอินเตอร์เฟสเป็นเพียงคลาสที่มีฟังก์ชันเสมือนจริงเท่านั้น)