SORU
5 NİSAN 2011, Salı


`Son` yöntemi Java: ne vaat ediyor?

Bir Java sınıfının bir yöntemi bu yöntem geçersiz olmayabilir işaretlemek için final, tanımlanabilir:

public class Thingy {
    public Thingy() { ... }
    public int operationA() {...}
    /** this method does @return That and is final. */
    public final int getThat() { ...}
}

Bu çok açık ve hiç kaza sonucu ağır basan, ya da belki performans-karşı korumak için bazı kullanım olabilir; ama benim sorum bu değil.

Benim sorum: bakış OOP bir noktadan o final sınıf tasarımcısı bir yöntem tanımlayarak anladımvaat ediyorbu yöntem hep anlatılan ya da dolaylı olarak çalışacaktır. Ama çoğu zaman bu yöntem ne yaptığını daha karmaşık bir teslim ise sınıf yazar etkisi dışında olabilirözellik.

Sözdizimsel kısıtlama benim için açıktır, ama OOP anlamda anlamı nedir? final doğru çoğu sınıf yazarlar tarafından bu anlamda kullanılır?

"Sözleşme yok final bir yöntem" söz mü? tür

CEVAP
5 NİSAN 2011, Salı


Nedenini zaten çoğu zaman bunu sen istedin (hepsi değilse) cevap tam olarak bu değildi. Ama ben seni anlamaya getirebilirsem deneyelim.

Sizin de belirttiğiniz gibi, final yöntem geçersiz (nesne kapsam için) veya gizli olabilir mi işaretlemek için bir Java yöntemi (statik için) kullanılır. Bu orijinal geliştirici başkaları tarafından değiştirilmeyecek emin olabiliyor, ve sunduğu tüm garanti işlevselliği oluşturmak için izin verir.

Bu yöntem halka açık olmayan alanları/yöntemleri işlevselliği gibi diğer özelleştirilebilir bileşenleri dayanır son yöntem hala özelleştirilebilir olabilir anlamına gelir. Bu gibi (polimorfizmi) kısmi özelleştirme için izin olsa iyi olur.

Neden özelleştirilebilir olmaktan önlemek için bir şey ister misin, diye sorabilirsiniz. Nedenleri vardır.

  1. Kapsüllenmiş veri erişim -- izin niteliklerini inşaat anda ayarlanmış olan sabit bir nesne arar ve asla değiştirilmemelidir. Ya da hesaplanan değer bu nitelikleri türetilmiştir. İyi bir örnek Java String sınıfı.

  2. Güvenilirlik ve Sözleşme -- nesneleri veya daha az karmaşık ilkel veri diğer nesneler tarafından bestelenmiş. İşlemleri bu bileşenler için geçerli değil, daha büyük nesne olarak kullanıldıĞında uygulanabilir hatta mantıklı olmalıdır. Son yöntemleri sağlamak için kullanılabilir. Sayaç sınıfı iyi bir örnektir.


public class Counter {

    private int counter = 0;

    public final int count() {
        return counter  ;
    }

    public final int reset() {
        return (counter = 0);
    }
}

Eğersayım yöntemi, son değil, bu tarz bir şey yapabiliriz:

Counter c = new Counter() {   
    public int count() {
        super.count();   
        return super.count();   
    } 
}

c.count(); // now count 2

Ya da şöyle bir şey:

Counter c = new Counter() {
  public int count() {
    int lastCount = 0;
    for (int i = super.count(); --i >= 0; ) {
      lastCount = super.count();
    }

    return lastCount;
  }
}

c.count(); // Now double count
  1. Performans -- Bazı uygulamaları ameliyat, yan etkisi olmayan, özellikle analiz iyileştirebilir.

Başımın üstünden.

Bu biraz yardımcı olur umarım.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • dcigs

    dcigs

    9 EYLÜL 2006
  • NicoleGrippo

    NicoleGrippo

    14 Kasım 2006
  • SRI International

    SRI Internat

    30 NİSAN 2008