1. Giriş

Bugünün dersini kapsüllemeye adamak istiyoruz . Genel anlamda ne olduğunu zaten biliyorsunuz.

kapsülleme

Kapsüllemenin faydaları nelerdir? Bunlardan epeyce var, ancak bence ana olanlar olan dört tanesini seçebilirim:


2. Geçerli dahili durum

Programlarda, genellikle bir nesne diğer birkaç sınıfla etkileşime girdiğinde durumlar ortaya çıkar. Nesneyle olan bu etkileşimler, nesnenin içindeki verileri bozarak nesnenin beklendiği gibi çalışmaya devam etmesini imkansız hale getirebilir.

Sonuç olarak, nesnenin dahili verilerindeki değişiklikleri takip etmesi veya daha iyisi değişiklikleri kendisinin yapması gerekir.

Bazı değişkenlerin diğer sınıflar tarafından değiştirilmesini istemiyorsak, o zaman onu özel ilan ederiz. Bunu bir kez yaptığımızda, ona yalnızca kendi sınıfının yöntemleri erişebilir. Değişkenlerin salt okunur olmasını istiyorsak public getterilgili değişkenler için bir a eklememiz gerekir.

Örneğin, koleksiyonumuzdaki öğelerin sayısını herkesin bilmesini istediğimizi ancak iznimiz olmadan koleksiyonu değiştirebilmelerini istemediğimizi varsayalım. private int countSonra bir değişken ve bir yöntem bildiririz public getCount().

Kapsüllemenin doğru kullanımı, hiçbir sınıfın sınıfımızın dahili verilerine doğrudan erişememesini sağlar , bu nedenle kontrolümüz dışındaki değişiklikleri önler. Bu değişiklikler, yalnızca değiştirilen değişkenlerle aynı sınıfın yöntemlerini çağırarak mümkündür.

Diğer programcıların sınıflarınızı her zaman sizin için (sınıfınız için) en güvenli şekilde değil, kendileri için en uygun şekilde kullanacağını varsaymak en iyisidir. Bu davranış hem hataların hem de onları engellemeye yönelik girişimlerin kaynağıdır.


3. Yöntem bağımsız değişkenlerini doğrulama

Bazen yöntemlerimize iletilen argümanları doğrulamamız gerekir. Örneğin, bir kişiyi temsil eden ve bir doğum tarihi belirlemenize izin veren bir sınıfımız olduğunu varsayalım. Programın mantığına ve sınıfımızın mantığına uygun olduğundan emin olmak için tüm girdi verilerini kontrol etmeliyiz. Örneğin, 13. ayda veya 30 Şubatta bir doğum tarihine izin vermemek vb.

Birisi neden doğum tarihi olarak 30 Şubat'ı gösterir? İlk olarak, bu, verileri girerken bir kullanıcı hatası olabilir. İkincisi, bir program saat gibi çalışmaya başlamadan önce içinde pek çok hata olabilir. Örneğin aşağıdaki durum mümkündür.

Bir programcı, doğum günleri yarından sonraki gün olan kişileri tanımlayan bir program yazar. Örneğin bugün 3 Mart diyelim. Program ayın içinde bulunulan gününe 2 sayısını ekliyor ve 5 Mart'ta doğan herkesi arıyor. Her şey doğru görünüyor.

Ancak 30 Mart geldiğinde program kimseyi bulamayacak çünkü takvimde 32 Mart yok. Yöntemlere iletilen verileri kontrol edersek bir programın çok daha az hatası olur.

ArrayListKodunu inceleyip analiz ettiğimiz zamanı hatırlıyor musunuz ? ve yöntemlerinin sıfırdan büyük veya sıfıra eşit ve dizinin uzunluğundan küçük olup olmadığını kontrol ettiğinigetsetindex gördük . Ayrıca, dizin dizinin sınırlarının dışına çıkarsa, bu yöntemler bir istisna atar. Bu, giriş doğrulamanın klasik bir örneğidir.


4. Kodu değiştirirken hataları en aza indirme

Büyük bir projede yer alırken süper faydalı bir sınıf yazdığımızı varsayalım. Herkes o kadar beğendi ki diğer programcılar kodlarının yüzlerce yerinde kullanmaya başladılar.

Ders o kadar faydalıydı ki, onu biraz iyileştirmeye karar verdiniz. Ancak sınıftan herhangi bir yöntemi kaldırırsanız, düzinelerce insanın kodunun derlenmesi durur. Her şeyi yeniden yazmak zorunda kalacaklar. Ve ne kadar çok değişiklik yaparsanız, o kadar çok hata yaratırsınız. Bir çok meclisi bozacaksınız ve sizden nefret edilecek.

Ancak private olarak bildirilen metotları değiştirdiğimizde, bu metotları çağırabilecek başka hiçbir sınıfın olmadığını biliyoruz. Bunları yeniden yazabilir, parametre sayısını ve türlerini değiştirebiliriz ve herhangi bir bağımlı harici kod çalışmaya devam eder. En azından derlenecek.


5. Nesnemizin dış nesnelerle nasıl etkileşime gireceğine biz karar veririz.

Nesnemiz ile gerçekleştirilebilecek bazı eylemleri kısıtlayabiliriz. Örneğin, bir nesnenin yalnızca bir kez başlatılmasını istediğimizi varsayalım. Projede birkaç yerde oluşturulsa bile. Ve bunu kapsülleme sayesinde yapabiliriz.

Kapsülleme 2

Kapsülleme, ek avantajlara dönüştürülebilen ek kısıtlamalar eklememizi sağlar . Örneğin, sınıf değişmez bir nesne olarak uygulanır . Sınıfın bir nesnesi, yaratıldığı andan öldüğü ana kadar değişmez. ( , , ...) sınıfının tüm yöntemleri , çağrıldıkları nesnede herhangi bir değişiklik yapmadan yeni bir dize döndürür.StringStringStringremovesubstring

Kapsülleme çok ilginç bir şey.