Çoklu miras

Olarak işlem , birden çok devralma bir bir nesne-yönelimli programlama mekanizması bir ettiği sınıf olabilir devralır birden fazla süper gelen davranış ve işlevsellik. Bir sınıfın yalnızca bir üst sınıftan miras alabildiği basit kalıtıma karşıdır .

C ++ , Eiffel veya Python gibi bazı programlama dilleri tarafından desteklenir . Ada , C # , Fortran , Java , Objective-C , Ruby , Swift veya Visual Basic gibi birçok başka dilin geliştiricileri problem oluşturabilmek için doğrudan önermemeyi tercih ettiler.

Yarar

Birden çok kalıtım, birkaç sınıfın davranışlarını birleştirmek için kullanılır.

C ++ dilinin mucidi B. Stroustrup'a göre bu mekanizma isteğe bağlıdır çünkü çözdüğü problemler başka yollarla çözülebilir.

Problemler

Çoklu miras bazen derleme hataları üretir.

Karşılaşılan temel sorun, aynı bildirim için belirli bir sınıfın üst sınıfları tarafından farklı uygulamaların varlığıdır. Bu problem aynı zamanda elmas problemi olarak da bilinir .

Diğer bir sorun, çoklu miras sınıflarının derlenmesidir. Aslında, bir polimorfik yöntem çağrıldığında, yürütülecek iyi uygulamanın sonucunu çıkarmak gerekir. Yöntem basit bir kalıtımın sonucuysa, o zaman yalnızca bir olası uygulaması vardır ve bu nedenle uygulamayı bulmak zor olmayacaktır. Yöntem, çoklu kalıtımın sonucuysa, birden çok olası uygulamaya sahiptir. Bu nedenle, eşzamanlı uygulamalardan birini seçmeliyiz [bu bir sorun mu?] .

Birden çok kalıtıma sahip bir sınıfın derlenmesi, bir sınıfı basit kalıtımla derlemekten daha az verimli olmayabilir .

Çözümler

Önceliklendirme

Eiffel ve Python , bir çatışma durumunda polimorfizm durumlarında hangi yöntemin alınacağını kalıtım beyanı sırasında belirten yöntemlere öncelik vermeyi önermektedir.

Sanal yöntemler

Bir sanal yöntem , ya da bir “polimorfık yöntem” terimi sınıfının alt içinde yeniden tanımlanması mümkün olması amaçlanmıştır bir yöntemdir.

Birkaç nesne yönelimli dilde bulunur.

Arayüzler

Bir arayüz tamamen soyut sınıf olduğunu, bu beyanı sunmaktadır olan işlevleri onların tanımını önlerken.

Özellikle Java , Delphi , C # ve Visual Basic'te bulunurlar . Bu dillerde, bir sınıf yalnızca bir üst sınıfı miras alabilir ve birden çok süper arabirim uygulayabilir.

Mixins

Bir mixin , yalnızca bir süper sınıftır. Başka bir deyişle, bir mixin, yalnızca kalıtım için kullanılan bir sınıftır.

Özellikleri

Bir özellik , birden fazla kalıtım çakışmasını imkansız kılan bir karışımdır.

Özellikle Scala ve PHP'de bulunur .

Notlar ve referanslar

  1. bkz. "Sınıf mirasına gerçekten ihtiyacımız var mı?" içinde http://www.stroustrup.com/bs_faq2.html

Ayrıca görün