SORU
22 EKİM 2008, ÇARŞAMBA


Çoklu kalıtım ile tam olarak sorun nedir?

Çoklu kalıtım C Bir sonraki sürümü içine dahil edilip edilmeyeceğini insanlar hep soruyor görebiliyorum# veya Java. Bu yetenek için şanslı olan C millet, bu biri bir ip vermek gibi eninde sonunda kendilerini asmaları için olduğunu söylüyorlar.

Birden çok devralma nesi var? Herhangi bir somut örnekler var mı?

CEVAP
22 EKİM 2008, ÇARŞAMBA


En belirgin sorun, işlevi geçersiz kılma.

Hadi bir yöntem tanımlamak hem de iki sınıf A ve B, "deyin. bir şey yapıyorsun Her iki A ve B devralan üçüncü bir C sınıfı, tanımlamak, ama şimdi "" yöntem. bir şey yapıyorsun geçersiz kılma yok

Derleyici tohum ne zaman bu kod...

C c = new C();
c.doSomething();

...hangi uygulama yöntemi kullanmalıyım? Herhangi bir daha fazla açıklama olmadan, derleyici belirsizlik çözmek imkansız.

Ağır basan yanı sıra, çoklu kalıtım ile başka bir büyük sorun bellekte fiziksel nesnelerin düzeni.

C ve Java ve C gibi diller# nesne. her tür için adrese dayalı sabit bir düzeni oluşturmak Şöyle bir şey:

class A:
    at offset 0 ... "abc" ... 4 byte int field
    at offset 4 ... "xyz" ... 8 byte double field
    at offset 12 ... "speak" ... 4 byte function pointer

class B:
    at offset 0 ... "foo" ... 2 byte short field
    at offset 2 ... 2 bytes of alignment padding
    at offset 4 ... "bar" ... 4 byte array pointer
    at offset 8 ... "baz" ... 4 byte function pointer

Derleyici makine kodu (veya bayt) oluşturduğunda, bu sayısal uzaklıklar her yöntem ya da alana erişmek için kullanır.

Çoklu kalıtım çok zor bir hale getirir.

Eğer C sınıfı A ve B devralır, derleyici BA sırada AB içinde veri düzenlemesi için karar vermek için vardır.

Ama şimdi B bir nesne üzerinde yöntemleri aradığını düşünün. Gerçekten sadece bir B? Ya aslında C bir nesne polymorphically, B arayüzü ile çağrıldığını? Nesne gerçek kimliğine bağlı olarak, fiziksel düzeni farklı olacak, ve at çağırmak için fonksiyonun ofset bilmek imkansız-site arama.

Sistem bu tür başa çıkmanın tek yolu sabit-düzen yaklaşımı, her nesne kendi düzeni için sorgulanmasını sağlayan hendeköncefonksiyonları çağırmak için çalışıyor ya da kendi alanlarına erişim.

Yani...uzun lafın kısası...derleyici yazarları çoklu kalıtım desteği için tam bir karın ağrısı. Bu yüzden ne zaman biri gibi Guido van Rossum python tasarımlar, ya da ne zaman Anders Hejlsberg tasarımları c#, destekleyen çoklu miras yapacak derleyici uygulamaları önemli ölçüde daha karmaşık ve muhtemelen onlar düşünmüyor parası değer maliyeti.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Paulo Bautista

    Paulo Bautis

    21 Aralık 2008
  • psidot

    psidot

    2 Kasım 2006
  • Tahir Jahi

    Tahir Jahi

    6 Mart 2006