SORU
11 EYLÜL 2008, PERŞEMBE


Arayüz vs Temel sınıf

Ne zaman bir arayüz kullanmalı mıyım ve ne zaman bir temel sınıf kullanmalıyım?

Her zaman Eğer gerçekten yöntemlerden temel uygulamasını tanımlamak istemiyorum ama bir arabirim olmalıdır?

Köpek ve Kedi bir Dersim var. Neden PetBase yerine İPet uygulamak için isteyeyim? İSheds veya İBarks (İMakesNoise?) sahip arabirimleri anlayabiliyorum bu evcil hayvan olarak bir hayvan üzerinde yerleştirilmiş olabilir, ama genel bir Evcil hayvan için kullanılacak anlamıyorum.

CEVAP
11 EYLÜL 2008, PERŞEMBE


Bir Köpek ve bir Kedi örneği sınıfına alalım ve C kullanarak göstermek izin#:

Bir köpek ve bir kedi de hayvan, özellikle, dört ayaklı memeli (hayvan waaay çok geneldir). Bize soyut sınıf bir Memeli olduğunu, her ikisi için de kabul edelim:

public abstract class Mammal

Bu temel sınıf muhtemelen varsayılan yöntemleri gibi olacaktır:

  • Yem
  • Dostum

Tüm bunlar daha fazla veya daha az ya da türler arasında aynı uygulaması olmayan davranış. Bu tanımlamak için:

public class Dog : Mammal
public class Cat : Mammal

Şimdi genellikle bir hayvanat bahçesinde göreceğiz diğer memeliler vardır varsayalım:

public class Giraffe : Mammal
public class Rhinoceros : Mammal
public class Hippopotamus : Mammal

Bu hala işlevsellik özünde Feed() Mate() yine aynı olacaktır çünkü geçerli olacak.

Ancak, zürafa, gergedan ve su aygırları tam olarak dışarı evcil yapabileceğiniz hayvanlar değildir. Bir arabirim yararlı olacak

public interface IPettable
{
    IList<Trick> Tricks{get; set;}
    void Bathe();
    void Train(Trick t);
}

Yukarıdaki sözleşme için bir uygulama kedi ve köpek arasındaki aynı olacak değil; soyut bir sınıf miras uygulamaları vermenin kötü bir fikir olacaktır.

Kedi ve Köpek tanımları şimdi aşağıdaki gibi görünmelidir:

public class Dog : Mammal, IPettable
public class Cat : Mammal, IPettable

Teorik olarak daha yüksek bir temel sınıf onları geçersiz kılabilirsiniz, ama aslında bir arayüz kalıtım gerek kalmadan bir sınıfa gereken tek şey eklemek için izin verir.

Sonuç olarak, çünkü genellikle sadece miras bir soyut sınıf (en statik olarak yazılan OO dilleri... istisnalar vardır C ) ama olması mümkün uygulamak için birden çok arayüzü sağlar inşa nesneleri bir kesinliklegerektiği gibiolarak.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • segtlim

    segtlim

    21 EKİM 2008
  • Trevor Eckhart

    Trevor Eckha

    19 Aralık 2009
  • Vsauce

    Vsauce

    30 Temmuz 2007