Çünkü daha iyisini bilmiyorlar.
Orijinal yazarlar, muhtemelen karışık ve karmaşık bir C ++ dünyasında ortaya çıkan bir SOLID ilkesinin yanlış anlaşılmasına bağlı kalıyorlar.
Yakut, piton ve perl dünyalarının buradaki cevapların sızdırmazlık nedeni olduğunu iddia ettiği sorunlara sahip olmadığını fark edersiniz. Dinamik yazarak ortogonal olduğuna dikkat edin. Erişim düzenleyicilerin çoğu (tümü?) Dilde çalışması kolaydır. C ++ alanları başka bir türe atılarak doldurulabilir (C ++ daha zayıf). Java ve C #, yansıma kullanabilir. Erişim düzenleyicileri, GERÇEKTEN istemediğiniz sürece yapmanıza engel olacak şeyleri yeterince zorlaştırır.
Sınıfların kapatılması ve üyelerin özel olarak işaretlenmesi, basit şeylerin basit olması ve zor şeylerin mümkün olması ilkesini açıkça ihlal eder. Birdenbire basit olması gereken şeyler değil.
Özgün yazarların bakış açısını anlamaya çalışmanızı tavsiye ederim. Bunların çoğu, gerçek dünyada asla mutlak bir başarı gösteremeyen akademik bir kapsülleme fikrindendir. Bir yerdeki bazı geliştiricilerin biraz daha farklı çalışmasını istemediği ve değiştirmek için iyi nedenleri olmadığı bir çerçeve veya kütüphane görmedim. Üyeleri mühürleyen ve üyelere özel kılan orijinal yazılım geliştiricileri rahatsız eden iki olasılık vardır.
- Kibir - gerçekten uzatma için açık ve değişiklik için kapalı olduklarına inandılar
- Şikayet - başka kullanım vakaları olabileceğini biliyorlardı, ancak bu kullanım durumları için yazmamaya karar verdiler
Kurumsal çerçevede wold düşünüyorum, # 2 muhtemelen durum böyledir. Bu C ++, Java ve .NET çerçeveleri "yapılmalı" ve belli kurallara uymalıdırlar. Bu kurallar, özellikle, başkalarının kullanması için yararlı olabilecek pek çok şey için bir tür hiyerarşisinin ve özel üyelerin bir parçası olarak açıkça tasarlanmadığı sürece, genellikle mühürlü tipler anlamına gelir. . Yeni bir türün çıkarılması, desteklenmesi, belgelenmesi vb. İçin çok pahalı olacaktır.
Erişim değiştiricilerin arkasındaki bütün fikir, programcıların kendisinden korunmaları gerektiğidir. "C programlama kötüdür çünkü kendini ayağından vurmana izin verir." Programcı olarak aynı fikirde olduğum bir felsefe değil.
Python'un isim yönetimi yaklaşımını tercih ederim. İhtiyacınız olduğunda kolayca (yansımadan çok daha kolay) gizleri değiştirebilirsiniz. Burada harika bir yazı var: http://bytebaker.com/2009/03/31/python-properties-vs-java-access-modifiers/
Ruby'nin özel değiştiricisi aslında C # 'da korunan gibidir ve özel bir C # değiştiricisi değildir. Korumalı biraz farklı. Burada harika bir açıklama var: http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/
Unutmayın, statik dilin geçmişte kod yazdığınız eski stillere uyması gerekmiyor.