Kötü uygulamalar olsa bile, amacını yerine getirmesi için zaman olduğunu söyleyebilirim.
Kötü uygulamalar olsa bile, amacını yerine getirmesi için zaman olduğunu söyleyebilirim.
Yanıtlar:
/programming/995255/why-is-multiple-inheritance-not-allowed-in-java-or-c bu soruyu güzel bir şekilde ele alıyor.
Benim düşüncem şu: Tasarımcılar muhtemelen iyi tasarım ilkelerini tanıtan bir dil yapmak istiyorlardı. Pekala, birden fazla mirasın mükemmel olduğu zamanlar var. Bunlar kuraldan ziyade istisnadır ve çok kolayca istismar edilebilir. Böylece tasarımcılar bunu yapmayı imkansız hale getirmeye karar verdiler.
İyi olacağı durumlarda, arayüzler kullanmanız gerekir. Bunlar beceriksiz de olsa çalışır; ama bu kadar onlara ihtiyacınız olmayacak.
Sadece neden olmadığını göstermek için, birden fazla kalıtım C ++ tarafından desteklenir, ancak MI ile yapacağınız kompozisyonun çoğunu ancak daha temiz bir şekilde gerçekleştirebileceğiniz için kesinlikle cesaretiniz kırılır. C ++ 'dan farklı olarak, C # "hibrit" tip OOP dili değildir, yani önceki bir dilden evrimleşmemiştir.
Gerçekten birden fazla mirasa ihtiyacınız varsa, birden fazla arabirim uygulayabilirsiniz.
Walter Bright hem MI'yı içermeyen D'nin yaratıcısı hem de tek başına bir C ++ derleyicisinin tamamını yazan tek kişidir. Ona göre, D'nin MI'dan yoksun olmasının nedeni, aynı anda etkili, basit ve kullanışlı bir MI sistemi oluşturmanın çok zor olmasıdır. Java ve C # benzer akıl yürütme şüpheli. Perl ve Python gibi diller birincil hedef olarak verimliliğe sahip değildir, bu nedenle basit ve kullanışlı, ancak verimli bir şekilde uygulanması zor bir sisteme sahiptirler. C ++ bir amaç olarak sadeliğe sahip görünmüyor, bu yüzden neredeyse hiç kimsenin anlamadığı çok karmaşık bir sistem yarattı.
Bence Walter tam hedefte. Bu kriterlerin üçünü de iyi karşılayan bir MI sistemine sahip herhangi bir dil varsa, lütfen bir yorum bırakın.
Birden fazla miras, çok kullanırsanız, çok karmaşık durumlara neden olur. Çok az karmaşıklıkla çok karmaşıklık, hem Java hem de C # için neden reddedildiğidir.
Çünkü dil tasarımcıları genel olarak daha iyi bir dil değil, daha iyi bir C ++ üretmek istiyorlardı. (Ne kadar başarılı oldukları tartışılabilir.)
C ++ tarzı çoklu kalıtımın bazı sorunları vardır ve bu nedenle C ++ 'dan türeyen insanlar genellikle atladı (Java, C #, D). Diğer diller, Eiffel ve Common Lisp iki ismi, farklı yapıyor ve aynı sorunları yok gibi görünüyor.