Потому что они не знают ничего лучше.
Авторы оригинала, вероятно, цепляются за неправильное понимание принципов SOLID, которые возникли в запутанном и сложном мире C ++.
Надеюсь, вы заметите, что в мире ruby, python и perl нет проблем, которые, как утверждают ответы здесь, являются причиной запечатывания. Обратите внимание, что это ортогонально к динамической типизации. Модификаторы доступа просты в работе на большинстве (всех?) Языках. Поля C ++ можно изменить, приведя к другому типу (C ++ более слабый). Java и C # могут использовать отражение. Модификаторы доступа делают вещи достаточно сложными, чтобы помешать вам делать это, если вы действительно этого не хотите.
Запечатывание классов и пометка любых членов закрытыми явно нарушает принцип, что простые вещи должны быть простыми, а сложные - возможными. Вдруг вещи, которые должны быть простыми, не так.
Я бы посоветовал вам попытаться понять точку зрения авторов оригинала. Во многом это из академической идеи инкапсуляции, которая никогда не демонстрировала абсолютного успеха в реальном мире. Я никогда не видел фреймворк или библиотеку, где какой-нибудь разработчик где-то не хотел, чтобы он работал немного по-другому, и у него не было веской причины для его изменения. Есть две возможности, которые могли помешать разработчикам оригинального программного обеспечения, которые закрыли и сделали членов закрытыми.
- Высокомерие - они действительно верили, что они открыты для расширения и закрыты для модификации
- Самодовольство - они знали, что могут быть другие варианты использования, но решили не писать для этих вариантов использования
Я думаю, что в корпоративной структуре # 2, вероятно, так. Эти платформы C ++, Java и .NET должны быть «сделаны», и они должны следовать определенным правилам. Эти рекомендации обычно означают запечатанные типы, если тип не был явно разработан как часть иерархии типов и закрытых членов для многих вещей, которые могут быть полезны для использования другими ... но поскольку они не имеют прямого отношения к этому классу, они не раскрываются , Извлечение нового типа было бы слишком дорого для поддержки, документирования и т. Д.
Вся идея модификаторов доступа заключается в том, что программисты должны быть защищены от самих себя. «Программирование на C - это плохо, потому что оно позволяет вам выстрелить себе в ногу». Это не философия, с которой я согласен как программист.
Я очень предпочитаю подход искажения имени питона. Вы можете легко (намного легче, чем размышление) заменить рядовых, если вам нужно. Отличная рецензия доступна здесь: http://bytebaker.com/2009/03/31/python-properties-vs-java-access-modifiers/
Приватный модификатор Руби на самом деле больше похож на защищенный в C # и не имеет частного как модификатор C #. Защищенный это немного другое. Здесь есть отличное объяснение: http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/
Помните, что ваш статический язык не должен соответствовать устаревшим стилям кода, написанного в прошлом.