Press "Enter" to skip to content

Category: Java

Effective Java Madde 23: Sınıf Hiyerarşilerini İşaretli Sınıflara Tercih Edin

Nesnelerinin mantıksal olarak birbirlerine yakın şeyler ifade etmesi sebebiyle tek bir sınıf içerisinde tanımlanan, bir işaret (tag) alanı ile nesnenin tam olarak neyi temsil ettiğini gösteren sınıflara işaretli sınıf diyebiliriz. Aşağıda, her ikisi de birer geometrik şekil olması sebebiyle hem bir daireyi hem de dikdörtgeni ifade edebilmek için yazılmış bir…

Share
Leave a Comment

Effective Java Madde 22: Arayüzleri Sadece Tür Tanımlamak İçin Kullanın

Bir sınıf bir arayüzü uyguladığı zaman, arayüz bu sınıftan oluşturulan nesneler için bir ”tür” olarak kullanılabilir. Bu sayede sınıfı kullanan bir istemci, sınıfı bir arayüz referansı ile temsil ederek arayüzdeki işlevlere erişebilir. Böylece istemciler sınıfın yapabilecekleri konusunda fikir edinmiş olur. Arayüzleri bu amaç dışında kullanmak uygun değildir. Bu tarz uygun…

Share
Leave a Comment

Effective Java Madde 21: Arayüzleri İleriyi Düşünerek Tasarlayın

Java 8’den önce arayüzlere yeni bir metot eklemek daha önce bu arayüzü uygulamış sınıfları bozmak anlamına geliyordu. Arayüze eklenen yeni metot, onu önceden uygulayan sınıflarda tesadüfi durumlar haricinde olmayacağı için kod derleme anında hata veriyordu. Bu sorunu gidermek için Java 8’le birlikte dile varsayılan metotlar (default method) eklenmiştir, ancak bu…

Share
1 Comment

Effective Java Madde 20: Arayüzleri Soyut Sınıflara Tercih Edin

Java dilinde birden fazla gerçekleştirime (implementation) izin veren türleri tanımlamak için iki mekanizma bulunmaktadır: arayüzler ve soyut sınıflar (abstract class). Java 8 öncesinde arayüzlerde sadece metot imzalarını tanımlayabilirken, Java 8 ile eklenen varsayılan metotlar (default method) sayesinde, arayüzler içerisinde de soyut sınıflarda olduğu gibi somut metotlar yazabilir hale geldik. Ancak…

Share
Leave a Comment

Effective Java Madde 19: Kalıtımı ya Tasarım ve Dokümantasyon ile Destekleyin ya da Yasaklayın

Madde 18’de, kalıtılmak için tasarlanmamış ve belgelenmemiş (dokümantasyon) yabancı sınıfları kalıtmanın tehlikeli olduğunu söylemiştik. Peki ama bir sınıfın kalıtım için tasarlanması ve belgelenmesi ne anlama gelmektedir? Birincisi, sınıf içerisinde bulunan her bir metot için, geçersiz kılındığında ne gibi etkiler olacağı net olarak belgelenmelidir. Başka bir deyişle, sınıf geçersiz kılınabilen (override…

Share
Leave a Comment

Effective Java Madde 9: try-finally Yerine try-with-resources Tercih Edin

Java kütüphaneleri yazılımcının close metodunu çağırarak kapatması gereken birçok kaynak barındırır. Bunlara örnek olarak InputStream, OutputStream ve java.sql.Connection verilebilir. Bu kaynakları kapatmak (serbest bırakmak), istemciler tarafından sıklıkla unutulur ve bu durum ciddi performans sorunlarına yol açar. Bu kaynaklar her ne kadar finalizer (sonlandırıcı) kullanarak istemci tarafında yapılacak hatalara bir önlem…

Share
Leave a Comment

Effective Java Madde 5: Bağımlılıkları Kendiniz Yaratmak Yerine Dependency Injection Kullanın

Birçok sınıf işlevlerini yerine getirebilmek için çeşitli kaynaklara ihtiyaç duyar. Bu kaynaklar, başka bir deyişle ihtiyaç duyulan diğer sınıflar yazılımda bağımlılık (dependency) olarak adlandırılır. Örneğin, bir yazım denetleme uygulaması (spell checker) işlevlerini yerine getirebilmek için bir sözlüğe bağımlı olabilir. Bu tarz sınıfların statik yardımcı sınıf (utility class) olarak gerçekleştirildiğini zaman…

Share
Leave a Comment

Effective Java Madde 4: Nesne Yaratılmasını İstemediğiniz Sınıfları Private Yapıcı Metot İle Güçlendirin

Bazen sadece statik metotları ve değişkenleri bir arada tutmak için bir sınıf yazmak isteyebilirsiniz. Bu tür sınıflar, bazı geliştiriciler tarafından nesne bazlı düşünmekten kaçınmak için suistimal edildiklerinden ötürü kötü bir üne kavuşmuşlardır. Buna rağmen, geçerli kullanım alanları bulunmaktadır. İlkel türler veya diziler üzerinde işlem yapan, birbiriyle alakalı metotları gruplamak için…

Share
Leave a Comment

Effective Java Madde 3: Singleton Sınıfları Private Yapıcı Metot veya Enum Türüyle Güçlendirin

Singleton en basit anlamıyla sadece bir kez somutlaştırılabilen (instantiate) sınıf anlamına gelir. Diğer bir değişle, singleton sınıflardan sadece bir kez nesne oluşturulabilir. Bu nesneler ya fonksiyon gibi durum içermeyen nesneleri, (Madde 24) ya da doğası itibariyle eşsiz olan bileşenleri temsil ederler. Bir sınıfı singleton yapmak, onu kullanan istemcileri test etmeyi…

Share
1 Comment

Effective Java Madde 18: Kalıtım Yerine Komposizyonu Tercih Edin

Kalıtım kodların yeniden kullanımını sağlayabilen güçlü bir araçtır, ancak her zaman yapacağınız iş için en doğru araç olmayabilir. Yanlış kullanıldığında kırılgan yazılımlara yol açar. Kalıtımı, aynı paket içerisinde, ata sınıf ve çocuk sınıfın aynı programcının kontrolünde olduğu durumlarda kullanmak güvenlidir. Bunun yanında, özellikle kalıtılmak için tasarlanmış ve belgelenmiş sınıfları kalıtmak…

Share
1 Comment