SORU
14 Aralık 2010, Salı


Ruby java arayüzü karşılığı nedir?

Java yaptığımız gibi Ruby arabirimler ve Ruby modülleri veya dersleri yöntemleri arabirimi tarafından tanımlanan uygulamak için zorlar.

Bir şekilde devralma kullanmak aynı ulaşmak için method_missing ama orada daha uygun başka bir yaklaşım mevcut mu ?

CEVAP
14 Aralık 2010, Salı


Ruby vardırArayüzleritıpkı herhangi bir başka dil.

Bu kavramı conflate için dikkatli olmak zorunda olduğunu unutmayınArayüzüJava bir anahtar olan interface kavramı ile bir birim sorumlulukları soyut bir şartname , garanti ve protokoller, C# ve programlama dilleri VB.NET . Ruby, eski her zaman kullanıyoruz, ama ikincisi yok.

Çok önemli iki ayırt etmek mümkün değildir. Önemli olan şeyArayüzü, interface. interface çok yararlı bir şey söyler. Hiçbir şey daha iyi gösterirmarker arabirimleriJava, tüm üyelerin arabirimleri: java.io.Serializable java.lang.Cloneable; bu iki interfaces . bir bak ^em>çokfarklı şeyler, ama onlar vartam olarak aynıimza.

Bu yüzden, farklı anlamlara interfaces, Eğer ikisi de aynı imza vartam olarakinterface bile garanti mi?

Başka bir örnek:

package java.util;

interface List<E> implements Collection<E>, Iterable<E> {
    void add(int index, E element)
        throws UnsupportedOperationException, ClassCastException,
            NullPointerException, IllegalArgumentException,
            IndexOutOfBoundsException;
}

Bu nedirArayüzüjava.util.List<E>.add?

  • toplama uzunluğu azalma yok
  • toplama önce bulunan bütün eşyalar hala orada olup olmadığını
  • element koleksiyonunda

Ve bu aslında interface gösterir? Yok! Add yöntemi bile gerektiğini bildiren interface başka bir şey yokturekleyinhepsi de olabilir sadeceKaldırkoleksiyonundan bir unsur.

Bu interface Bu son derece geçerli bir uygulama

class MyCollection<E> implements java.util.List<E> {
    void add(int index, E element)
        throws UnsupportedOperationException, ClassCastException,
            NullPointerException, IllegalArgumentException,
            IndexOutOfBoundsException {
        remove(element);
    }
}

Başka bir örnek: 40 ** aslında bu olduğunu söylüyor, biliyorsun, birayarlayın? Hiçbir yerde! Daha doğrusu belgelerinde. İngilizce.

Java interfaces, hem de hemen hemen tüm durumlarda .NET, hepsi builgilibilgi aslında tip değil dokümanlar. Eğer bu tür ilginç bir şey neyse söyle eğer, onları neden olmasın? Neden sadece belgelere sadık değil mi? Ve Ruby'nin yaptığı şey tam olarak bu.

Olduğunu unutmayındiğerhangi dildeArayüzüaslında anlamlı bir şekilde tarif edilebilir. Ancak, bu diller genellikle bu açıklar inşa demeArayüzü"interface" type diyorlar. Bir bağımlı olarak yazılan programlama dili, örneğin, ifade özellikleri bir sort işlevi, bir koleksiyon aynı uzunlukta orijinal, her element hangisi orijinal olduğunu da sıralanmış toplama ve bu büyük unsur ortaya çıkmadan önce daha küçük bir eleman.

Yani, Kısacası: Ruby 23* *bir Java için bir eşdeğeri yok.yokancak, bir Java için bir eşdeğer varArayüzütam olarak Java aynı şey , ve belgeler.

Java gibi, aynı zamandaKabul Testleribelirtmek için kullanılabilirArayüzleride.

Ruby, özellikleArayüzübir nesnenin ne göre belirleniryapınclass ne, ya da karıştırır., << bir yöntem olan herhangi bir nesne eklenebilir. Bu çok yararlı bir birim testleri, nereye sen-ebilmek basitçe geçişte bir Array String yerine daha karmaşık Logger olsa Array Logger paylaşıyoruz açık interface dışında aslında her ikisi de var bir yöntemi denir <<.

Başka bir örnek, aynı uygulayan StringIOArayüzüIO ve böylece büyük bir kısmı gibiArayüzüObject ayrıca herhangi bir ortak ata paylaşmadan File ama.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Kanaal van Dj0fifty

    Kanaal van D

    28 EKİM 2011
  • DONFANTASTICKYPESS

    DONFANTASTIC

    1 Temmuz 2007
  • Google Россия

    Google Ро

    9 Temmuz 2007