Я утверждаю, что суть инкапсуляции в разграничении доступа. Поясняя, что ключевые слова PUBLIC, PROTECTED и PRIVATE и есть ее основоположение.
Друг же утверждает, что:
Инкапсуляция - в первую очередь, объединение в объекте данных (переменных) и методов (функций) их обработки. Код функций скрыт от пользователя (Пользователь не знает как работает эта функция, он получает только результат).
p.s. Интересно ваше решение по спору. Именно, кто прав, а кто нет. Спасибо.
Инкапсуляцию можно нарушить сделав приватную переменную и тут же определить методы его изменения и чтения :):) то есть добавили кода, добавили «инкапсуляцию», а все как было так и осталось — можем менять переменную класса... оксюморон, термины добавились, а толку нет
Потому предлагаю посмотреть на инкапсуляцию через закон Деметры, и помните — геттер нарушаю инкапсуляцию также как и сеттеры
Из книг которые трактуют инкапсуляцию -
Трактовка №1
Инкапсуляция - это объединения данных и функций, которые управляют этими данными, в единый компонент.
Трактовка №2
Инкапсуляция - это механизм отдельного взятого языка, позволяющий ограничить доступ одних компонентов программы, к другим.
Инкапсуляция обеспечивает сокрытие, но не является сокрытием.
Если более просто -
Инкапсуляция — мы прячем сложность внутри, а наружу выставляем несколько простых интерфейсов (принцип телевизора — у нас есть пульт, а все «провода» скрыты в корпусе).
Понимать инкапсуляцию только как сокрытие не совсем правильно.
Сокрытия данных можно добиться например в Си. Который вообще не является языком с парадигмой ООП.
Так что связь функций и данных - это более правильное определение. Плюс от языка к языку, и от книге к книге определения отличаются. Создатель ООП (Алан Кей) вообще понимал ООП совсем не так, как оно реализовано в моей уютненькой Java, например. И ничего. :)