Ponieważ nie wiedzą nic lepszego.
Oryginalni autorzy prawdopodobnie trzymają się niezrozumienia zasad SOLID, które powstały w zagmatwanym i skomplikowanym świecie C ++.
Mam nadzieję, że zauważysz, że światy ruby, python i perl nie mają problemów, które tutaj twierdzą, że są przyczyną uszczelnienia. Zauważ, że jest to pisanie prostopadłe do dynamicznego. Modyfikatory dostępu są łatwe do pracy w większości (wszystkich?) Językach. Pola C ++ można zmulować rzutując na inny typ (C ++ jest bardziej słaby). Java i C # mogą używać odbicia. Modyfikatory dostępu sprawiają, że wszystko jest na tyle trudne, że nie możesz tego zrobić, chyba że NAPRAWDĘ chcesz.
Pieczętowanie klas i oznaczanie dowolnych członków jawnie narusza zasadę, że proste rzeczy powinny być proste, a trudne rzeczy powinny być możliwe. Nagle rzeczy, które powinny być proste, nie są.
Zachęcam do spróbowania zrozumieć punkt widzenia oryginalnych autorów. Wiele z nich pochodzi z akademickiej idei kapsułkowania, która nigdy nie pokazała absolutnego sukcesu w prawdziwym świecie. Nigdy nie widziałem frameworka ani biblioteki, w której gdzieś programista nie chciałby, aby działał nieco inaczej i nie miał dobrego powodu, aby go zmieniać. Istnieją dwie możliwości, które mogły nękać pierwotnych twórców oprogramowania, którzy przypieczętowali i uczynili członków prywatnymi.
- Arogancja - naprawdę wierzyli, że są otwarci na rozszerzenie i zamknięci na modyfikacje
- Zadowolenie - wiedzieli, że mogą istnieć inne przypadki użycia, ale postanowili nie pisać dla tych przypadków użycia
Wydaje mi się, że w korporacyjnym frameworku nr 2 prawdopodobnie tak jest. Te frameworki C ++, Java i .NET muszą zostać „wykonane” i muszą przestrzegać określonych wytycznych. Wytyczne te zwykle oznaczają zapieczętowane typy, chyba że typ został wyraźnie zaprojektowany jako część hierarchii typów i członków prywatnych dla wielu rzeczy, które mogą być przydatne dla innych osób .. ale ponieważ nie odnoszą się bezpośrednio do tej klasy, nie są narażone . Wyodrębnienie nowego typu byłoby zbyt kosztowne do obsługi, dokumentowania itp.
Cała idea modyfikatorów dostępu polega na tym, że programiści powinni być chronieni przed sobą. „Programowanie C jest złe, ponieważ pozwala strzelać sobie w stopę”. Jako programista nie zgadzam się z tą filozofią.
Zdecydowanie wolę podejście manglingujące nazwy pytona. W razie potrzeby możesz łatwo (znacznie łatwiej niż refleksja) wymienić szeregowców. Świetny opis na ten temat jest dostępny tutaj: http://bytebaker.com/2009/03/31/python-properties-vs-java-access-modifiers/
Prywatny modyfikator Ruby jest właściwie bardziej chroniony w C # i nie ma prywatnego jako modyfikatora C #. Protected jest trochę inny. Świetne wyjaśnienie tutaj: http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/
Pamiętaj, że Twój język statyczny nie musi być zgodny ze starymi stylami programu do pisania kodów w tamtej przeszłości.