SORU
21 Aralık 2008, Pazar


Ne demek &; Ara" programı " mı?

Bu bir kaç kez gördüm ve tamamen bunun ne anlama geldiği konusunda net değilim. Ne zaman ve neden böyle bir şey yaptın?

Arayüzleri ne biliyorum, ama bu konuda net değilim aslında bana doğru kullanma konusunda eksik olduğumu düşünüyorum.

Sadece eğer yapmak isterseniz:?

IInterface classRef = new ObjectWhatever()

IInterface uygulayan herhangi bir sınıf kullanabilirsiniz? Ne zaman bunu yapmak zorunda mısın? Aklıma gelen tek şey eğer bir yöntem varsa ve nesne için bekliyoruz IInterface uygulamaya geçilecek ne emin değilseniz. Ben... Ayrıca, nasıl bir arabirimi uygulayan bir nesne götüren bir yöntem yazar mısınız? ne yapmak gerekir nasıl düşünemiyorum Mümkün mü?)

Özür dilerim ben tamamen noktası cevapsız.


Ek sorular:

  • yok Arayüz isabet bir performans kullanarak?
  • yani ne kadar?
  • nasıl kod iki parça tutmak zorunda kalmadan kurtulabilir misin?

CEVAP
21 Aralık 2008, Pazar


Harika cevaplar arabirimleri ve gevşek kaplin kod hakkında çok detaylı kontrol inversion her türlü içine almak, bu sorular için buraya ve benzeri vardır. Bir arabirim neden faydalı olduğunu anlamak için biraz aşağı kırmak için fırsat almak istiyorum o kadar baş döndürücü bazı tartışmalar var.

Ben ilk arabirimleri maruz başlarken, ben de onların geçerliliği konusunda kafası karıştı. Onlara neden ihtiyaç duyduğunu anlayamadım. Eğer Java veya C gibi bir dil kullanıyoruz, eğer#, biz zaten kalıtım ve arayüzler olarak görüyordumzayıfveraset ve düşünce şekli, "neden?" Bir bakıma haklı olduğum, aklıma gelen bir arabirim olarak bir çeşit zayıf form miras, ama bunun ötesinde sonunda anladım kendi kullanmak gibi bir dil yapısı, düşünce olarak demek sınıflandırılması ortak özellikleri ya da davranışları vardı sergilenen potansiyel çok ilgili olmayan sınıfların nesneleri.

Örneğin SİM bir oyun var ve şu sınıfları var ki:

 class HouseFly inherits Insect {
   void FlyAroundYourHead();
   void LandOnThings();
 }

 class Telemarketer inherits Person {
   void CallDuringDinner();
   void ContinueTalkingWhenYouSayNo();
 }

Açıkça, bu iki nesne doğrudan miras açısından hiçbir ortak yanımız yok. Ama, her ikisi de rahatsız edici olduklarını söyleyebiliriz.

Hadi bi oyun rastgele bir çeşit olması gerektiğini söylüyorlarşeyyemek yerken oyun oyuncu rahatsız ediyor. Bu HouseFly Telemarketer bir şey olabilir ama nasıl tek bir fonksiyon ile hem de izin veriyor musun? ... Ve nasıl her nesne farklı türü soruyorsun "rahatsız olanları" aynı şekilde?

Gerçekleştirmek için anahtar Telemarketer HouseFly Bir de hem modelleme açısından onlara bir şey olsa bile, gevşek yorumlanması yaygın bir davranış, paylaşmak. Hadi uygulayabilirsiniz hem bir arayüz olun:

 interface IPest {
    void BeAnnoying();
 }

 class HouseFly inherits Insect implements IPest {
   void FlyAroundYourHead();
   void LandOnThings();

   void BeAnnoying() {
     FlyAroundYourHead();
     LandOnThings();
   }
 }

 class Telemarketer inherits Person implements IPest {
   void CallDuringDinner();
   void ContinueTalkingWhenYouSayNo();

   void BeAnnoying() {
      CallDuringDinner();
      ContinueTalkingWhenYouSayNo();
   }
 }

Biz şimdi kendi şekilde rahatsız edici olabilir her iki sınıf var. Ve onlar sadece sözleşme basittir IPest -- sözleşme karşılamak gerek. aynı temel sınıf ve ortak doğal özelliklerini elde etmek gerekmez. Sadece 14**. Bu bağlamda, aşağıdaki model:

 class DiningRoom {

   DiningRoom(Person[] diningPeople, IPest[] pests) { ... }

   void ServeDinner() {
     when diningPeople are eating,

       foreach pest in pests
         pest.BeAnnoying();
   }
 }

Burada diners bir dizi kabul eden bir yemek odası var ve zararlıları bir dizi arayüzü unutmayın. Bu küçük dünyamızda, pests dizinin bir üyesi aslında Telemarketer bir nesne olabilir ya da HouseFly nesne anlamına gelir.

ServeDinner yöntemi akşam yemeği servis edilir denir ve yemek odasında halkımızın yiyeceğiz. Bizim küçük oyun, o bizim haşere işlerini yapmak, her haşere ** 20 arabirimi arada sinir bozucu olmaya aktarılır. Bu şekilde, kolayca hem Telemarketers HouseFlys olması can sıkıcı her biri kendi yollarını biz sadece elimizde olan bir şey DiningRoom nesneye bir haşere, yok gerçekten bakım ne olduğunu ve ellerinden hiçbir şey ortak ile diğer.

Bu çok yapmacık sözde kod örneği (bu sürüncemede çok daha uzun bekliyordum) basitçe ifade göstermek için böyle bir şey, eninde sonunda ışığı benden açısından zaman biz diye bir program. Ben örnek salaklık için şimdiden özür dilerim, ama sizin anlama yardımcı olur umarım. Ve, emin olmak için, diğer tasarım desenleri ve geliştirme yöntemleri burada gerçekten arayüzleri kullanımı bugün gam kapak aldık cevapları yayınlanmıştır.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Damian Winter

    Damian Winte

    27 ŞUBAT 2007
  • Le Cargo !

    Le Cargo !

    24 HAZİRAN 2007
  • Phandroid

    Phandroid

    26 Ocak 2009