แม้ว่ามันอาจเป็นวิธีปฏิบัติที่ไม่ดีฉันจะบอกว่ามีเวลาที่มันจะบรรลุวัตถุประสงค์
แม้ว่ามันอาจเป็นวิธีปฏิบัติที่ไม่ดีฉันจะบอกว่ามีเวลาที่มันจะบรรลุวัตถุประสงค์
คำตอบ:
/programming/995255/why-is-multiple-inheritance-not-allowed-in-java-or-cครอบคลุมคำถามนี้เป็นอย่างดี
สิ่งที่ฉันทำคือ: นักออกแบบอาจต้องการสร้างภาษาที่ส่งเสริมหลักการออกแบบที่ดี ตกลงดังนั้นจึงมีบางครั้งที่มรดกหลายอย่างสมบูรณ์แบบ นี่เป็นข้อยกเว้นแทนที่จะเป็นกฎและสามารถถูกทารุณกรรมได้ง่ายมาก ดังนั้นผู้ออกแบบจึงตัดสินใจที่จะทำไม่ได้
สำหรับกรณีที่ควรใช้อินเทอร์เฟซ งานเหล่านั้นแม้ว่าจะเงอะงะ แต่คุณจะไม่ต้องการสิ่งนั้นมากนัก
เพียงเพื่อแสดงให้เห็นว่าทำไมไม่สนับสนุนมรดกหลายรายการโดย C ++ แต่มีกำลังใจอย่างมากเนื่องจากคุณสามารถทำสิ่งต่างๆให้สำเร็จด้วยองค์ประกอบที่คุณทำกับ MI ได้อย่างไรก็ตามในรูปแบบที่สะอาดกว่า ซึ่งแตกต่างจาก C ++, C # ไม่ใช่ภาษา OOP ประเภท "ไฮบริด" นั่นคือไม่ได้พัฒนามาจากภาษาก่อนหน้า
หากคุณต้องการรับมรดกหลายรายการคุณสามารถใช้หลายอินเตอร์เฟสได้
Walter Bright เป็นทั้งผู้สร้าง D ซึ่งไม่รวม MI และเป็นคนเดียวที่เคยเขียนคอมไพเลอร์ C ++ ทั้งหมดด้วยตัวเอง ตามที่เขาพูดเหตุผลที่ D ขาด MI ก็คือมันยากเกินไปที่จะสร้างระบบของ MI ที่มีประสิทธิภาพพร้อมกันง่ายและมีประโยชน์ ฉันสงสัยว่า Java และ C # ใช้เหตุผลที่คล้ายกัน ภาษาเช่น Perl และ Python ไม่มีประสิทธิภาพเป็นเป้าหมายหลักดังนั้นพวกเขาจึงมีระบบที่เรียบง่ายและมีประโยชน์ แต่ยากที่จะใช้อย่างมีประสิทธิภาพ C ++ ดูเหมือนจะไม่ได้มีความเรียบง่ายเป็นเป้าหมายดังนั้นมันจึงสร้างระบบที่ซับซ้อนอย่างมากที่ไม่มีใครเข้าใจ
ฉันคิดว่าวอลเตอร์ถูกต้องกับเป้าหมาย หากมีภาษาใด ๆ ที่มีระบบ MI ที่ตรงกับเกณฑ์ทั้งสามนี้ด้วยดีโปรดแสดงความคิดเห็น
การสืบทอดหลายครั้งถ้าคุณใช้บ่อยครั้งจะทำให้สถานการณ์ซับซ้อนมาก ความซับซ้อนที่มากเกินไปกับผลประโยชน์เพียงเล็กน้อยคือสาเหตุที่ถูกตัดออกทั้ง Java และ C #
เนื่องจากผู้ออกแบบภาษาต้องการที่จะสร้าง C ++ ที่ดีกว่าไม่ใช่ภาษาที่ดีกว่าโดยทั่วไป (สามารถถกเถียงว่าพวกเขาประสบความสำเร็จแค่ไหน)
C ++ - การสืบทอดหลายสไตล์มีปัญหาบางอย่างดังนั้นผู้คนที่ได้รับจาก C ++ มักจะละเว้น (Java, C #, D) ภาษาอื่น ๆ , ไอเฟลและเสียงกระเพื่อมสามัญเพื่อชื่อสอง, ทำมันแตกต่างกันและดูเหมือนจะไม่มีปัญหาเดียวกัน