Önbelleğe Alma – Blog Yazma – Web Tasarımı Yapımı – Web Tasarımı YouTube Videosu Yapımı – Web Sitesi Tasarlama Fiyatları
Önbelleğe Alma
Öğenin başındaki değişmez sınıflar için kurallar listesi, hiçbir yöntemin nesneyi değiştiremeyeceğini ve tüm alanların nihai olması gerektiğini söylüyor. Aslında bu kurallar gereğinden biraz daha güçlüdür ve performansı artırmak için esnetilebilir. Gerçekte, hiçbir yöntem nesnenin durumunda dışarıdan görünür bir değişiklik üretemez.
Bununla birlikte, birçok değişmez sınıf, pahalı hesaplamaların sonuçlarını ilk kez gerekli olduklarında önbelleğe aldıkları bir veya daha fazla nihai olmayan gereksiz alana sahiptir. Gelecekte aynı hesaplama gerekliyse, önbelleğe alınan değer döndürülerek yeniden hesaplama maliyetinden tasarruf edilir. Bu hile tam olarak işe yarar çünkü nesne değişmezdir; değişmezliği, hesaplamanın tekrar yapılması durumunda aynı sonucu vereceğini garanti eder.
Örneğin, PhoneNumber (Madde 8) için hashCode yöntemi, karma kodunu ilk kez çağrıldığında hesaplar ve yeniden gerekmesi durumunda önbelleğe alır. Tembel başlatmanın klasik bir örneği olan bu teknik, String sınıfı tarafından da kullanılmaktadır. Karma değerinin bir veya iki kez yeniden hesaplanması sorun olmayacağından senkronizasyon gerekmez. Değişmez bir nesnenin önbelleğe alınmış, tembelce başlatılmış bir işlevini döndürmek için genel deyimdir.
Serileştirilebilirlikle ilgili bir uyarı eklenmelidir. Değişmez sınıfınızın Serileştirilebilir uygulamasını seçmeyi seçerseniz ve değişken nesnelere başvuran bir veya daha fazla alan içeriyorsa, varsayılan serileştirilmiş form kabul edilebilir olsa bile açık bir readObject veya readResolve yöntemi sağlamanız gerekir. Varsayılan readObject yöntemi, bir saldırganın, aksi takdirde değişmez sınıfınızın değişken bir örneğini oluşturmasına izin verir.
Özetlemek gerekirse, her get yöntemi için bir set yöntemi yazma dürtüsüne direnin. Değiştirilebilir hale getirmek için çok iyi bir neden olmadıkça, sınıflar değişmez olmalıdır. Değişmez sınıflar birçok avantaj sağlar ve tek dezavantajı, belirli koşullar altında performans sorunları potansiyelidir.
PhoneNumber ve Complex gibi küçük değerli nesneleri her zaman değişmez yapmalısınız. (Java platformu kitaplıklarında java.util.Date ve java.awt.Point gibi değişmez olması gereken ancak olmayan birkaç sınıf vardır.) String ve BigInteger gibi daha büyük değerli nesneler yapmayı ciddi olarak düşünmelisiniz.
Yalnızca tatmin edici bir performans elde etmenin gerekli olduğunu onayladıktan sonra, değişmez sınıfınız için genel olarak değişebilir bir eşlik eden sınıf sağlamalısınız.
Thread ve TimerTask gibi “süreç sınıfları” da dahil olmak üzere değişmezliğin pratik olmadığı bazı sınıflar vardır. Bir sınıf değişmez yapılamazsa, yine de değişkenliğini mümkün olduğunca sınırlandırmalısınız. Bir nesnenin içinde bulunabileceği durumların sayısını azaltmak, nesne hakkında akıl yürütmeyi kolaylaştırır ve hata olasılığını azaltır.
Bu nedenle yapıcılar, tüm değişmezleri oluşturulmuş tam olarak başlatılmış nesneler oluşturmalı ve kısmen oluşturulmuş örnekleri diğer yöntemlere geçirmemelidir. Bunu yapmak için çok iyi bir neden olmadıkça, yapıcıdan ayrı bir genel başlatma yöntemi sağlamamalısınız.
Benzer şekilde, bir nesnenin farklı bir başlangıç durumunda oluşturulmuş gibi yeniden kullanılmasını sağlayan bir “yeniden başlatma” yöntemi sağlamamalısınız. Yeniden başlatma yöntemi, artan karmaşıklık pahasına genellikle çok az performans faydası sağlar.
TimerTask sınıfı bu ilkeleri örneklendirir. Değişkendir, ancak durum alanı kasıtlı olarak küçük tutulur. Bir örnek oluşturursunuz, yürütme için planlarsınız ve isteğe bağlı olarak iptal edersiniz. Bir zamanlayıcı görevi tamamlanana kadar çalıştırıldığında veya iptal edildiğinde, onu yeniden planlayamazsınız.
Bu maddeye Complex sınıfı ile ilgili son bir not eklenmelidir. Bu örnek yalnızca değişmezliği göstermek içindir. Bu bir endüstriyel güç karmaşık sayı uygulaması değildir. Doğru yuvarlanmamış ve karmaşık NaN’ler ve sonsuzluklar için zayıf semantik sağlayan karmaşık çarpma ve bölme için standart formülleri kullanır.
Geçici depolama alanı önbellek tanımının karşılığı
Caching
Cacheleme Nedir
Distributed Cache Nedir
Redis Nedir
Memorycache Nedir
Memory cache
Ram Nedir
Kalıtım yerine kompozisyonu tercih edin
Kalıtım, kodun yeniden kullanımını sağlamanın güçlü bir yoludur, ancak iş için her zaman en iyi araç değildir. Uygunsuz kullanıldığında, kırılgan yazılımlara yol açar. Alt sınıf ve üst sınıf uygulamasının aynı programcıların kontrolü altında olduğu bir paket içinde kalıtımı kullanmak güvenlidir. Ayrıca, genişletme için özel olarak tasarlanmış ve belgelenmiş sınıfları genişletirken kalıtım kullanmak güvenlidir.
Bununla birlikte, paket sınırları boyunca sıradan somut sınıflardan miras almak tehlikelidir. Bir hatırlatma olarak, bu kitap “miras” kelimesini uygulama mirası (bir sınıf diğerini genişlettiğinde) anlamında kullanır. Bu maddede tartışılan problemler arayüz kalıtımı için geçerli değildir (bir sınıf bir arayüzü uyguladığında veya bir arayüzün diğerini genişlettiği durumlarda).
Yöntem çağırmanın aksine, kalıtım kapsüllemeyi bozar. Başka bir deyişle, bir alt sınıf, uygun işlevi için üst sınıfının uygulama ayrıntılarına bağlıdır. Üst sınıfın uygulaması, sürümden sürüme değişebilir ve değişirse, koduna dokunulmamış olsa bile alt sınıf bozulabilir.
Sonuç olarak, bir alt sınıf, üst sınıfın yazarları tarafından özellikle genişletilme amacıyla tasarlanıp belgelenmedikçe, üst sınıfıyla birlikte gelişmelidir. Bunu somutlaştırmak için, HashSet kullanan bir programımız olduğunu varsayalım.
Programımızın performansını ayarlamak için, oluşturulduğundan beri kaç tane eleman eklendiğini HashSet’e sorgulamamız gerekiyor (bir eleman kaldırıldığında azalan mevcut boyutuyla karıştırılmaması için).
Bu işlevi sağlamak için, denenen öğe eklemelerinin sayısını tutan ve bu sayı için bir erişimciyi dışa aktaran bir HashSet varyantı yazarız. HashSet sınıfı, öğe ekleyebilen iki yöntem içerir, add ve addAll, bu nedenle bu yöntemlerin her ikisini de geçersiz kılarız.
Bu noktada getAddCount yönteminin üç döndürmesini beklerdik, ancak altı döndürür. Ne yanlış gitti? Dahili olarak, HashSet’in addAll yöntemi, ekleme yönteminin üzerine uygulanır, ancak HashSet oldukça makul bir şekilde bu uygulama ayrıntısını belgelemez.
InstrumentedHashSet’teki addAll yöntemi, addCount’a üç tane ekledi ve ardından super.addAll kullanarak HashSet’in addAll uygulamasını çağırdı. Bu da, InstrumentedHashSet’te geçersiz kılınan add yöntemini her öğe için bir kez çağırdı. Bu üç çağrının her biri, toplam altılık bir artış için addCount öğesine bir tane daha eklendi: addAll yöntemiyle eklenen her öğe çift sayılır.
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)