Tutarlılık – Blog Yazma – Web Tasarımı Yapımı – Web Tasarımı YouTube Videosu Yapımı – Web Sitesi Tasarlama Fiyatları
Geçişlilik
Eşittir sözleşmesinin üçüncü şartı, eğer bir nesne bir saniyeye eşitse ve ikinci nesne bir üçüncüye eşitse, o zaman ilk nesne üçüncüye eşit olmalıdır der. Yine, bu şartı istemeden ihlal etmeyi hayal etmek zor değil. Üst sınıfına yeni bir yön ekleyen bir alt sınıf oluşturan bir programcının durumunu düşünün. Başka bir deyişle, alt sınıf, eşittir karşılaştırmalarını etkileyen bir bilgi parçası ekler. Basit bir değişmez iki boyutlu nokta sınıfıyla başlayalım.
Eşittir yöntemi nasıl görünmelidir? Tamamen dışarıda bırakırsanız, uygulama Point’ten devralınır ve eşittir karşılaştırmalarında renk bilgisi yok sayılır. Bu, eşittir sözleşmesini ihlal etmese de, açıkça kabul edilemez. Yalnızca argümanı aynı konum ve renge sahip başka bir renk noktasıysa true döndüren bir eşittir yöntemi yazdığınızı varsayalım.
Bu yöntemle ilgili sorun, bir noktayı bir renk noktasıyla karşılaştırırken farklı sonuçlar elde edebilmenizdir ve bunun tersi de geçerlidir. İlk karşılaştırma rengi yok sayarken, ikinci karşılaştırma argümanın türü yanlış olduğundan her zaman false döndürür. Bunu somut hale getirmek için bir nokta ve bir renk noktası oluşturalım.
Bu noktada, p1.equals(p2) ve p2.equals(p3) true döndürürken, p1.equals(p3) false döndürür, bu geçişliliğin açık bir ihlalidir. İlk iki karşılaştırma “renk körü” iken, üçüncüsü rengi hesaba katar.
Çözüm nedir? Bunun nesne yönelimli dillerde eşdeğerlik ilişkilerinin temel bir sorunu olduğu ortaya çıktı. Eşittir sözleşmesini korurken somutlaştırılabilir bir sınıfı genişletmenin ve bir özellik eklemenin hiçbir yolu yoktur. Ancak, iyi bir geçici çözüm var.
Madde 14’ün tavsiyesine uyun, “Bağışlamayı mirasa tercih edin.” ColorPoint’in Noktayı genişletmesi yerine, ColorPoint’e özel bir Nokta alanı ve noktayı bu renk noktasıyla aynı konumda döndüren bir genel görünüm yöntemi (Madde 4) verin.
Java platformu kitaplıklarında, somutlaştırılabilir bir sınıfı alt sınıflandıran ve bir görünüm ekleyen bazı sınıflar vardır. Örneğin, java.sql.Timestamp, bir nanosaniye alanı ekleyerek Java.util.Date alt sınıflarını oluşturur. Timestamp için equals uygulaması simetriyi ihlal eder ve Timestamp ve Date nesneleri aynı koleksiyonda kullanılıyorsa veya başka bir şekilde karıştırılıyorsa düzensiz davranışa neden olabilir.
Timestamp sınıfında, programcıyı tarihleri ve zaman damgalarını karıştırmaya karşı uyaran bir sorumluluk reddi vardır. Bunları karıştırmadığınız sürece başınız belaya girmeyecek olsa da, bunu yapmanıza hiçbir engel yoktur ve ortaya çıkan hataların ayıklanması zor olabilir. TimeStamp sınıfı bir anormalliktir ve taklit edilmemelidir.
theequals sözleşmesini ihlal etmeden soyut bir sınıfın alt sınıfına bir görünüm ekleyebileceğinizi unutmayın. Bu, Madde 20’deki “Birlikleri sınıf hiyerarşileriyle değiştirin” tavsiyesini izleyerek elde ettiğiniz sınıf hiyerarşileri için önemlidir.
Örneğin, hiçbir yönü olmayan soyut bir Shape sınıfınız, yarıçap alanı ekleyen bir Circle alt sınıfınız ve uzunluk ve genişlik alanları ekleyen bir Rectangle alt sınıfınız olabilir. Üst sınıfın bir örneğini oluşturmak imkansız olduğu sürece, az önce gösterilen türden problemler oluşmayacaktır.
Kullanım kolaylığı
Kamis kullanılabilirlik
Hatırlanabilirlik
Öğrenilebilirlik nedir
Tutarlılık
Eşittir sözleşmesinin dördüncü şartı, iki nesne eşitse, biri (veya her ikisi) değiştirilmedikçe, her zaman eşit kalmaları gerektiğini söyler. Bu, değişmez nesnelerin farklı zamanlarda farklı nesnelere eşit olabileceğini ve değişmez nesnelerin yapamayacağını hatırlatmak için gerçek bir gereklilik değildir.
Bir sınıf yazarken, onun değişmez olması gerekip gerekmediğini iyice düşünün (Madde 13). Olması gerektiği sonucuna varırsanız, eşittir yönteminizin, eşit nesnelerin eşit kalması ve eşit olmayan nesnelerin her zaman eşitsiz kalması kısıtlamasını uyguladığından emin olun.
“Boş olmama” – Bir adın yokluğunda “boş olmama” deme özgürlüğünü aldığım son koşul, tüm nesnelerin sıfıra eşit olmaması gerektiğini söylüyor. o.equals(null) çağrısına yanıt olarak yanlışlıkla true döndürmeyi hayal etmek zor olsa da, yanlışlıkla bir NullPointerException oluşturmayı hayal etmek zor değildir. Genel sözleşme buna izin vermiyor. Birçok sınıfın, null için açık bir testle buna karşı koruma sağlayan eşit yöntemleri vardır.
Bu test gerekli değildir. Eşitlik argümanını test etmek için, equals yönteminin erişimcilerinin çağrılabilmesi veya alanlarına erişilebilmesi için argümanı önce uygun bir türe dönüştürmesi gerekir. Dökümü yapmadan önce, yöntemin argümanının doğru türde olup olmadığını kontrol etmek için instanceof operatörünü kullanması gerekir.
Bu tür denetimi eksikse ve eşittir yöntemine yanlış türde bir bağımsız değişken iletildiyse, eşittir yöntemi, eşittir sözleşmesini ihlal eden bir ClassCastException oluşturur.
Ancak instanceof operatörü, ikinci işlenende hangi türün göründüğünden bağımsız olarak, ilk işleneni null ise false döndürecek şekilde belirtilir. Bu nedenle, null geçirilirse tür denetimi false döndürür, bu nedenle ayrı bir boş denetime ihtiyacınız yoktur.
Hepsini bir araya getirirsek, işte yüksek kaliteli eşittir yönteminin tarifi:
1. Argümanın bu nesneye bir başvuru olup olmadığını kontrol etmek için == operatörünü kullanın. Eğer öyleyse, true döndürün. Bu sadece bir performans optimizasyonudur, ancak karşılaştırma potansiyel olarak pahalıysa yapmaya değer bir optimizasyondur.
2. Bağımsız değişkenin doğru türde olup olmadığını kontrol etmek için instanceof operatörünü kullanın. Değilse, false döndürün. Tipik olarak, doğru tür, yöntemin gerçekleştiği sınıftır. Bazen, bu sınıf tarafından uygulanan bir arayüzdür. Sınıf, arabirimi uygulayan sınıflar arasında karşılaştırmalara izin vermek için eşittir sözleşmesini iyileştiren bir arabirim uygularsa bir arabirim kullanın. Set, List, Map ve Map.Entry koleksiyon arayüzleri bu özelliğe sahiptir.
3. Argümanı doğru türe yayın. Bu oyuncu kadrosunun öncesinde bir test örneği olduğundan, başarılı olması garanti edilir.
4. Sınıftaki her “anlamlı” alan için, argümanın o alanının bu nesnenin karşılık gelen alanıyla eşleşip eşleşmediğini kontrol edin. Tüm bu testler başarılı olursa, true değerini döndürün; aksi halde false döndürün.
Adım 2’deki tür bir arabirim ise, bağımsız değişkenin önemli alanlarına arabirim yöntemleri aracılığıyla erişmeniz gerekir; tür bir sınıfsa, erişilebilirliklerine bağlı olarak alanlara doğrudan erişebilirsiniz.
Web sitelerinizi, arama motorlarında en yukarı getirmek adına sizlere 3 adet paket öneriyoruz. Bu paketler sayesinde web siteleriniz aramalarda 1 yıl içerisinde en yukarıya tırmanacaktır.
1) Backlink Paketi 50 $ (Yıllık Ücret)
2) Hızlandırma Paketi 300 $ (Yıllık Ücret)
3) Kelime Yönlendirme Paketi 150 $ (Aylık Ücret)