Java

Инкапсуляция в ООП.

Такой вопрос. В интернете написано, что инкапсуляция - сокрытие. Считается ли использование public static при объявлении переменной инкапсуляцией? Или только private, protected?
:D (начинается долгая сказка о том, что инкапсуляция — не просто лишь сокрытие)
МП
Макс Поддубных
6 058
Лучший ответ
Игорь Ростовский Можно тогда вопрос? Это же оно?)

Инкапсуляция в смысле сокрытия - это сокрытие внутреннего поведения класса от его пользователя, а не сокрытие каких-то полей. Ничего общего с модификаторами доступа это понятие не имеет.
Kamil Raimbayev
Kamil Raimbayev
89 473
сокрытие реализации - это запрет на доступ к внутренним переменным. чтобы внешний код не смог изменить состояние объекта. например так выглядит внутренняя переменная

private final List topics = new ArrayList<>();

а так выглядит к ней доступ

public List getTopics() {
return Collections.unmodifiableList(topics);
}
Алмат Шушаев
Алмат Шушаев
62 765
Игорь Ростовский и это.. инкапсуляция? Или же нет, если отталкивать от ответа выше?
Инкапсуляция.
Инкапсуляция представляет собой механизм программирования, объединяющий код и данные, которыми он манипулирует. Он предотвращает несанкционированный доступ к данным извне и их некорректное использование. В объектно-ориентированных языках программирования код и данные организуются в некое подобие “черного ящика”. В результате такого объединения кода и данных создается объект. Иными словами, объект — это компонент, поддерживающий инкапсуляцию.

Данные и код внутри объекта могут быть закрытыми (private) или открытыми (public). Закрытый код или данные доступны только элементам, содержащимся в том же самом объекте. Поэтому обратиться к такому коду или данным вне пределов объекта невозможно. Если код или данные являются открытыми, то к ним можно обращаться из любой части программы (несмотря на то, что они находятся внутри объекта). Как правило, открытые элементы объекта используются для создания управляемого интерфейса к его закрытым элементам.

Основной языковой конструкцией, поддерживающей инкапсуляцию в Java, является класс. Классы будут подробнее рассматриваться далее в этой книге, но о них нужно сказать несколько слов уже теперь. Класс определяет тип объекта. В нем определяются как данные, так и код, выполняющий определенные действия над этими данными. В Java определение или так называемая спецификация класса служит для построения объектов. Объекты представляют собой экземпляры классов. Следовательно, класс — это ряд “чертежей”, по которым строится объект.

Код и данные в составе класса называются членами класса. Данные, определенные в составе класса, принято называть переменными-членами или переменными экземпляра, а код, выполняющий действия над этими данными, — методами-членами, или просто методами. Метод — это термин, которым в Java принято обозначать подпрограмму. Если вы знакомы с языками C/C++, то, вероятно, знаете, что в этих языках для той же самой цели служит термин функция.