Тому що вони не знають нічого кращого.
Оригінальні автори, ймовірно, чіпляються за нерозуміння принципів SOLID, що виникли в заплутаному та складному світі C ++.
Сподіваюсь, ви помітите, що у світах рубіну, пітона та перла не виникають проблеми, які, як стверджують відповіді, є причиною запечатування. Зауважимо, що його ортогональне для динамічного набору тексту. Модифікаторами доступу легко працювати на більшості (усіх?) Мов. Полі C ++ можна вилучити, перейшовши на інший тип (C ++ слабкіший). Java та C # можуть використовувати відображення. Модифікатори доступу роблять речі досить важкими, щоб не допустити цього, якщо ви дійсно цього не хочете.
Опечатування класів та позначення будь-яких членів приватними членами явно порушує принцип, що прості речі повинні бути простими, а важкі речі повинні бути можливими. Раптом речі, які повинні бути простими, - це не так.
Я б закликав вас спробувати зрозуміти точку зору оригінальних авторів. Значна частина цього походить від академічної ідеї капсулювання, яка ніколи не демонструвала абсолютного успіху в реальному світі. Я ніколи не бачив фреймворка чи бібліотеки, де десь розробник не хотів би, щоб це працювало трохи інакше і не мав вагомих причин змінити його. Є дві можливості, які, можливо, пошкодили оригінальних розробників програмного забезпечення, які запечатали та зробили приватні учасники.
- Зарозумілість - вони дійсно вірили, що вони відкриті для розширення та закриті для модифікації
- Компенсація - вони знали, що можуть бути й інші випадки використання, але вирішили не писати для цих випадків використання
Я думаю, що у корпоративній базі, напевно, так і є. Ці рамки C ++, Java та .NET повинні бути "зроблені", і вони повинні дотримуватися певних вказівок. Ці вказівки зазвичай означають герметичні типи, за винятком випадків, коли тип був чітко розроблений як частина ієрархії типів та приватних членів для багатьох речей, які можуть бути корисні для інших користувачів .. але оскільки вони безпосередньо не відносяться до цього класу, вони не піддаються . Вилучення нового типу буде занадто дорогим для підтримки, документування тощо ...
Вся ідея модифікаторів доступу полягає в тому, що програмісти повинні бути захищені від себе. "Програмування на С погано, тому що дозволяє стріляти в ногу". З філософією я не згоден як програміст.
Я дуже вважаю за краще керувати підходом до імені пітона. Ви можете легко (набагато простіше, ніж роздуми) замінити приватних, якщо вам потрібно. Відмінна реєстрація на ньому доступна тут: http://bytebaker.com/2009/03/31/python-properties-vs-java-access-modifiers/
Приватний модифікатор Ruby насправді більше схожий на захищений в C # і не має приватного модифікатора як C #. Захищений трохи інакше. Тут є чудове пояснення: http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/
Пам'ятайте, що ваша статична мова не повинна відповідати старовинним стилям коду, написаного в цій мовній минувшині.