Birkaç kişiyle sinire çarptığı göründüğünden cevabımı yeniden yazacağım.
sınıf özellik / yöntem görünürlüğünün güvenlik veya kaynak açıklığı ile ilgisi yoktur.
Görünürlüğün var olmasının nedeni, nesnelerin 4 spesifik soruna kırılgan olmasıdır:
- eşzamanlılık
Modülünüzü kapsüllenmemiş olarak oluşturursanız, kullanıcılarınız modül durumunu doğrudan değiştirmeye alışacaktır. Bu, tek iş parçacıklı bir ortamda iyi çalışır, ancak bir kez iş parçacığı eklemeyi düşündüğünüzde; devleti özel yapmak zorunda kalacaksınız ve diğer iş parçacıkları için yarışmak yerine kaynakları bekleten alıcılar ve ayarlayıcılarla birlikte kilitleri / monitörleri kullanmak zorunda kalacaksınız. Bu, özel değişkenlere geleneksel bir şekilde erişilemediği için kullanıcı programlarınızın artık çalışmadığı anlamına gelir. Bu, birçok yeniden yazmaya ihtiyacınız olduğu anlamına gelebilir.
Gerçek şu ki, tek bir iş parçacığı çalışma zamanını düşünerek kodlamak çok daha kolay ve özel anahtar kelime, senkronize edilen anahtar kelimeyi veya birkaç kilidi eklemenize izin veriyor ve başlangıçta kapsülleme yaparsanız kullanıcılarınızın kodu kırılmayacak .
- Kullanıcıların kendilerini ayağa vurmasını engellemeye yardımcı olun / arayüzün kullanımını düzene sokun. Özünde, nesnenin değişmezlerini kontrol etmenize yardımcı olur.
Her nesnenin tutarlı bir durumda olması için gerçek olması gereken bir sürü şey vardır. Ne yazık ki, bu şeyler müşterinin görünür alanında yaşar, çünkü her nesneyi kendi sürecine taşımak ve mesajlarla konuşmak pahalıdır. Bu, kullanıcının tam görünürlüğe sahip olması durumunda bir nesnenin tüm programı çökmesinin çok kolay olduğu anlamına gelir.
Bu kaçınılmazdır, ancak yalnızca kullanıcının programı çok daha sağlam hale getiren dikkatlice hazırlanmış bir arabirim aracılığıyla nesnenin durumuyla etkileşime girmesine izin vererek yanlışlıkla çökmeleri önleyen bir arabirim kapatması yaparak, bir nesneyi hizmetlerinin üzerinde bir arabirim kapatması yaparak yanlışlıkla bir nesneyi tutarsız hale getirebilirsiniz. . Bu, kullanıcının değişmezleri kasıtlı olarak bozmayacağı anlamına gelmez, ancak eğer yaparsa, çöken istemcileri, tek yapmaları gereken programı yeniden başlatmaktır (korumak istediğiniz veriler istemci tarafında saklanmamalıdır) ).
Modüllerinizin kullanılabilirliğini artırabileceğiniz bir diğer güzel örnek, yapıcıyı özel yapmaktır; çünkü kurucu bir istisna atarsa, programı öldürecektir. Bunu çözmek için tembel bir yaklaşım, yapıcı bir try / catch bloğunda olmadığı sürece inşa edemeyeceğiniz bir derleme zamanı hatası atmasını sağlamaktır. Yapıcıyı özel hale getirerek ve genel bir statik oluşturma yöntemi ekleyerek, oluşturma yöntemini oluşturmazsa null döndürme yöntemini döndürebilir veya programı daha kullanıcı dostu hale getirmek için hatayı işlemek üzere bir geri arama işlevi alabilirsiniz.
- Kapsam kirliliği
Birçok sınıfın çok fazla durumu ve yöntemi vardır ve bunlar arasında gezinmeye çalışırken bunalmak kolaydır; Bu yöntemlerin çoğu yardımcı fonksiyonlar, durum gibi görsel gürültüdür. değişkenleri ve yöntemleri özel yapmak, kapsam kirliliğini azaltmaya ve kullanıcının aradığı hizmetleri bulmasını kolaylaştırmaya yardımcı olur.
Özünde, sınıfın dışında değil, sınıf içinde yardımcı işlevlere sahip olmanızı sağlar; görünürlük kontrolü olmadan, kullanıcının asla kullanmaması gereken bir grup hizmetle dikkatini dağıtmadan, yöntemleri bir grup yardımcı yöntem haline getirerek (yine de kapsamınızı kirletecek, ancak kullanıcıyı değil).
- bağımlılıklara bağlı olmak
İyi hazırlanmış bir arayüz, işini yapmaya bağlı olduğu dahili veritabanlarını / pencerelerini / görüntülemesini gizleyebilir ve başka bir veritabanına / başka bir pencereleme sistemine / başka bir görüntüleme kütüphanesine geçmek isterseniz, arayüzü aynı ve kullanıcılar arasında tutabilirsiniz. farketmez.
Öte yandan, bunu yapmazsanız, bağımlılıklarınızı değiştirmeyi imkansız hale getirmek için kolayca düşebilirsiniz, çünkü bunlar açığa çıkar ve kod buna dayanır. Yeterince büyük bir sistemle, taşıma maliyeti karşılanamaz hale gelirken, bir kapsülleme, iyi davranan müşteri kullanıcılarını bağımlılıkları değiştirmek için gelecekteki kararlardan koruyabilir.