Инкапсуляция не требуется ни на одном языке, но она полезна.
Инкапсуляция используется для минимизации количества потенциальных зависимостей с наибольшей вероятностью распространения изменений, а также помогает предотвратить несоответствия:
Простой пример: Предположим, мы создали класс Rectangle, который содержал четыре переменные - длину, ширину, площадь, периметр. Обратите внимание, что площадь и периметр получаются из длины и ширины (обычно я не делаю переменные для них), поэтому изменение длины приведет к изменению как площади, так и периметра.
Если вы не использовали правильное сокрытие информации (инкапсуляцию), тогда другая программа, использующая этот класс Rectangle, могла бы изменять длину без изменения области, и у вас был бы несовместимый Rectangle. Без инкапсуляции можно было бы создать прямоугольник длиной 1 и шириной 3 с площадью 32345.
Используя инкапсуляцию, мы можем создать функцию, которая, если бы программа хотела изменить длину прямоугольника, чтобы объект соответствующим образом обновил свою площадь и периметр, не будучи несовместимым.
Инкапсуляция исключает возможность несогласованности и переносит ответственность за сохранение согласованности на сам объект, а не на программу, использующую его.
Однако в то же время инкапсуляция иногда является плохой идеей , и планирование движения и столкновения (в игровом программировании) - это области, в которых это особенно вероятно.
проблема в том, что инкапсуляция является фантастической в местах, где она необходима, но она ужасна, когда применяется в местах, где она не нужна, например, когда есть глобальные свойства, которые должны поддерживаться группой инкапсуляции, так как ООП принудительная инкапсуляция, несмотря ни на что, вы застряли. Например, существует множество свойств объектов, которые не являются локальными, например, любой вид глобальной согласованности. Что обычно происходит в ООП, так это то, что каждый объект должен кодировать свое представление о состоянии глобальной согласованности и вносить свой вклад в поддержание правильных глобальных свойств. Это может быть весело, если вам действительно нужна инкапсуляция, чтобы позволить альтернативные реализации. Но если вам это не нужно, в конечном итоге вы пишете много очень сложного кода в нескольких местах, который в основном делает одно и то же. Все кажется инкапсулированным, но на самом деле полностью взаимозависимо.