Другие языки программирования и технологии

Зачем нужна инкапсуляция?

инкапсуляция - не цель и не причина, инкапсуляция - следствие.
суть в том, что система разбивается на ряд взаимодействующих объектов, каждый из которых отвечает за что-то одно.
допустим, вам нужно положить плитку в ванной. вы можете закупить материалы, нанять отряд чурок и носиться за ними, указывая каждому из них что ему делать в данный момент. а можете распределить ответственности и свалить на неделю - они сами закупят материалы и проконтролируют работу друг друга. в первом случае, получим армейский способ: все делали то, что им приказано, но в итоге сделали херню и виноватых нет. во втором случае получаем муравейник, легко находим виноватого и имеем возможность оперировать более абстрактными понятиями (в то время, как чурки кладут плитку, вы можете организовать замену окон - теперь от "ремонта в ванной" абстрагируемся до "ремонта" вообще) .
вот инкапсуляция - это тогда, когда объект полностью несёт ответственность за своё состояние и заставляет это состояние "работать". оно есть не только в объектной декомпозиции, но и в функциональной (система делится не на объекты и пакеты, а на связанные подсистемы и процессы в них) , и вообще по жизни это хороший подход: мне пох, как и из чего моя приготовит мне ужин - главное, что она сделает его вкусным; лучше я в это время поработаю - так мы достигнем большего.
АК
Алексей Климашин
9 617
Лучший ответ
Зачем - ясно из ее определения. В ООП без нее никуда. Позволяет рассматривать каждый модуль, объект или класс, как "черный ящик" с "торчащими наружу" только методами (управляющими функциями) . Это позволяет использующему модуль человеку не особо задумываться что там внутри.
Павел Басов
Павел Басов
11 177
Ответ прост, мы - люди. А человеку свойственно ошибаться. Никто не застрахован от ошибок. Применяя инкапсуляцию, мы, как бы, возводим крепость, которая защищает данные, принадлежащие объекту, от возможных ошибок, которые могут возникнуть при прямом доступе к этим данным. Кроме того, применение этого принципа очень часто помогает локализовать возможные ошибки в коде программы. А это намного упрощает процесс поиска и исправления этих ошибок.

Можно сказать, что инкапсуляция подразумевает под собой скрытие данных (data hiding), что позволяет защитить эти данные.

Cуть инкапсуляции можно определить следующим образом:

Переменные состояния объекта скрыты от внешнего мира. Изменение состояния объекта (его переменных) возможно ТОЛЬКО с помощью его методов (операций).