Neredeyse bunların hepsi kapsüllemenin temel bir yanlış anlaşılmasını ve nasıl uygulandığını göstermektedir.
Kapsülleme işlemini kırdığınız ilk yanıt yanlıştır. Uygulamanızın arttırma / azaltma veya ekleme / çıkarma yerine buzdolabındaki peynir değerini ayarlaması gerekebilir. Ayrıca, ne diyor olursanız olun, özniteliklere erişme ve / veya değiştirme gereksiniminiz varsa, bunları sağlayarak kapsüllemeyi kırmazsınız, anlambilim değildir. Son olarak, kapsülleme gerçekten "gizleme" ile ilgili değildir, sınıfın dışında olması ya da manipüle edilmesi gerekmeyen durum ve değerlere erişimi kontrol etmek ve buna gerek duyulanlara vermek ve dahili olarak sunulan görevi yerine getirmekle ilgilidir.
Bir alıcı veya ayarlayıcı, bir değer almak veya ayarlamak için meşru bir ihtiyaç olduğunda kapsüllemeyi kesmez. Bu yüzden yöntemler herkese açık hale getirilebilir.
Kapsülleme, verileri ve bu verileri doğrudan tek bir mantıksal yerde, sınıfta değiştirmeye yönelik yöntemlerle ilgilidir.
Bu özel durumda, uygulamada peynir değerinin değiştirilmesine açıkça ihtiyaç vardır. Bunun nasıl yapıldığına bakılmaksızın, yöntemler sınıfta kapsüllendiği sürece get / set veya add / remove ile nesne yönelimli stili izliyorsunuz.
Açıklığa kavuşturmak için, yöntem adı veya mantıksal yürütme ne olursa olsun erişim sağlayarak kapsüllemenin nasıl bozulduğuna bir örnek vereceğim.
Diyelim ki buzdolabınızın "kullanım ömrü" var, buzdolabı artık çalışmaya başlamadan önce sadece birtakım keneler (tartışma uğruna buzdolabı tamir edilemez). Mantıksal olarak, bir kullanıcının (veya uygulamanızın geri kalanının) bu değeri değiştirmesi mümkün değildir. Özel olmalı. Yalnızca "isWorking" olarak bilinen farklı bir genel özellik söylenerek görülebilir. Ömrü sona erdiğinde, dahili buzdolabı setleri yanlış olarak çalışır.
Geri sayım ömrünün yürütülmesi ve isWorking anahtarının çevrilmesi tamamen buzdolabının içindedir, dışarıdaki hiçbir şey işlemi etkileyemez / yapamaz. isÇalışma yalnızca görünür olmalıdır, bu nedenle bir alıcı kapsüllemeyi bozmaz. Ancak, ömür boyu sürecin öğeleri için erişimcilerin eklenmesi kapsüllemenizi bozacaktır.
Çoğu şey gibi, kapsüllemenin tanımı da gerçek değildir, görecelidir. X'i sınıf dışında görebilmeniz gerekir mi? Y'yi değiştirebilmeniz gerekir mi? Bu sınıfta nesneniz için geçerli olan her şey mi yoksa işlevsellik birden fazla sınıfa mı yayılmış?
putCheese
buzdolabına peynir ekler vetakeCheese
kaldırır - bunlar nesne alanı alıcıları ve ayarlayıcıları ((düşük düzey) bilgisayar programlama soyutlamaları) yerine (daha yüksek seviye) etki alanı odaklı soyutlamalardır.