SORU
2 Ocak 2009, Cuma


Neden C birden çok devralma önlemek gerekir ?

Birden çok devralma kullanmak için iyi bir kavram mı ya da başka şeyler yerine ne yapabilirim?

CEVAP
2 Ocak 2009, Cuma


Miras(MI kısaltılmış olarak) birden çok . ben^>kokuyorbu demektir ki ., ben^>genelliklekötü amaçlar için yapılan ve projeyi yürüten karşısında geri uçardı.

Özet

  1. Özellikleri, kalıtım yerine kompozisyon düşünün
  2. Korku Elmas, dikkatli olun
  3. Nesneler yerine çoklu arayüzleri miras düşünün
  4. Bazen, Birden çok Devralma doğru şey. Eğer bu doğruysa, o zaman kullanın.
  5. Kod yorumları içinde birden fazla kalıtsal mimarisi savunmak için hazırlıklı olun

1. Kompozisyon belki?

Bu miras için de geçerlidir, ve çoklu kalıtım için daha doğru.

Nesne gerçekten bir ihtiyaç mı? Bir Araba, ne de bir Tekerlek çalışmak için bir Motor devralır. Bir Araba Motoru ve dört Tekerleği vardır.

Eğer çoklu kalıtım bu sorunu gidermek için kompozisyon yerine kullanırsanız, o zaman yanlış bir şey yaptın.

2. Korku Elmas

Genellikle a sınıfı ve B ve C de A sınıfından miras alır Ve o zaman bir D, B ve C de miras gerekir karar neden diye sorma

Bu tür bir sorunun iki kez 8 sekiz yıldır karşılaştığım ve eğlenceli: çünkü

  1. Ne kadar büyük bir hata olduğunu en başından beri (her iki durumda da D değil kalıtsal hem B anc C), çünkü bu kötü mimari (aslında C değil yaşamış...)
  2. Ne kadar bakıcılarımız vardı ödeme için, çünkü C , üst sınıf Bir hediye oldu iki kez kendi torunu D sınıfı, ve böylece, güncelleme bir ana alan::alan anlamına da güncelleme iki kez (B::alan ve C::alan), ya da bir şey yanlış gider sessizce ve çökmesi, daha sonra (yeni bir işaretçi B::alan ve silin C::alan...)

C void anahtar sözcüğü sanal çift düzeni yukarıda açıklanan, ama yine de kullanarak, muhtemelen yanlış bir şey yapıyorsunuz

Nesne hiyerarşisi, bir Ağaç (bir düğümün BİR ebeveyni vardır), bir grafik olarak hiearchy tutmalı.

3. Arayüzleri

Ya da bir beton classe sıfır, sıfır ya da daha fazla arayüzleri ve çoklu kalıtım, Korku Elmas yukarıda açıklanan karşılaşma olmayacak çünkü genellikle Tamam. Aslında, bu şeyler Java ile yapılır.

C ve B devraldığı zaman ne demek istediğini genellikle, kullanıcıların bir Bir,/öyle olduğunu veya eğer a, B ise C olarak kullanabilirsiniz

C , bir arayüze sahiptir soyut bir sınıf

  1. tüm yöntem saf sanal (=0 ile ekli) ilan etti
  2. hiçbir üye değişkenler

Arayüzleri olarak kabul edilmez bir gerçek nesne ve sıfıra sıfır Birden çok devralma veya daha fazla "" (en azından eskisi kadar değil) . pis kokulu

4. Gerçekten Çoklu Kalıtım mı ihtiyacınız var?

Bazen, Evet.

Genellikle, C sınıfı ve B devralmasını ve A ve B iki alakasız nesneler (yani aynı hiyerarşi içinde değil, ortak bir şey, farklı kavramları, vb.).

Örneğin, bir sistemin Düğümleri ile X,Y,Z koordinatları, mümkün için çok geometrik hesaplamalar (belki bir nokta, parçanın geometrik nesneler) ve her Düğüm Otomatik bir Ajan, iletişim yeteneği ile diğer ajanlar.

Belki de zaten iki kitaplık, kendi AD (AD... AD kullanın Ama, değil mi? kullanmak için başka bir neden) her biri için erişim var "jeo" ve diğer"" . aı bir varlık

Kendi":: kendi Düğüm" türetmek de":: aı Ajan" ve "jeo::Nokta".

Bu kompozisyon kullanmalısınız eğer kendinize sormanız gereken andır. ":: Kendi Düğüm" gerçekten de bir":: aı Ajan" ve "jeo::Nokta", beste yapardı.

Sonra birden çok devralma, olması gerekir"::" diğer ajanlar ile iletişim 3 boyutlu uzayda kendi konumunu göre. Düğüm

. ben^>(Aı not::Ajan ve jeo::Nokta tamamen, tamamen, tamamen ALAKASIZ... Bu büyük ölçüde çoklu kalıtım tehlikesini azaltır)

5. Çoklu Kalıtım yapmalıyım?

Çoğu zaman, hayır. Mİ yoksa iş gibi görünüyor eğer doğru bir araç değildir.

Ama bazen, Evet. Ve o zaman, hiçbir şey daha iyi Mİ daha çalışır, ve Dehşet bir Elmas olmaz, ve nesne gerçekten de alt üst.

Ama yüzünden Mİ kötü kokulu, hazırlanan savunma mimarisinin kod yorumları (ve savunmak çok da iyi bir şey, çünkü eğer mümkün değil savunmak, o zaman sen yap).

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Shameless Maya

    Shameless Ma

    24 Mayıs 2012
  • TeeMayneTV

    TeeMayneTV

    27 Kasım 2010
  • thewinekone

    thewinekone

    17 Aralık 2005