Страницы

Поиск по вопросам

вторник, 10 декабря 2019 г.

Смысл private полей и методов

#ооп


Здравствуйте.
Объясните, пожалуйста, смысловое назначение закрытых полей и методов в классах.
Как рассуждаю я: смысл ООП, помимо прочего, в возможности расширять классы. Соответственно,
когда я описываю класс, то, помня также о необходимости инкапсулировать внутренние
механизмы, использую модификатор protected. В таком случаи, у класса-наследника будет
полностью работающий функционал предка, который можно модифицировать/расширять.
А если я использую private, то я не хочу, чтобы даже наследники имели доступ к некоторым
полям и/или методам. Раз наследник сможет получить только предка-инвалида (если еще,
к тому же, закрыть какое-нибудь поле, но сделать защищенным метод, который это поле
использует), то, быть может, проще объявить класс final, чтобы никто не мог класс наследовать?
Сейчас же я встречаю большое количество классов, в которых большая часть функционала
- закрыта. Какой в этом смысл?
Прошу прощения за некую сумбурность мыслей.    


Ответы

Ответ 1



Поясню на примере смысл приватных методов. Берем машину - ну скажем для определенности Audi. Смотрим на нее с точки зрения ООП. И так что мы видим: public методы: завести, включить передачу, нажать на газ/тормоз и проч. protected методы: управление магнитолой, приборами и проч. которые общие для всех моделей Audi. Правда, как и полагается в старших моделях Audi производитель может и реально делает Override некоторых методов родительского класса. private методы: настройка системы распределения зажигания, тюнинг клапанов и проч. проч. хитрые способы, куда обычному юзеры с шаловливыми ручками лезть не стоит. P.S. Конечно, всегда находятся особенно хитро*опые товарищи, которые начинают лезть в приватные методы с целью, скажем чип-тюнинга машины. Для Java аналогом таких способов является доступ к закрытым методам с помощью рефлексии.

Ответ 2



final - когда тебе не надо изменять значение. private final - когда тебе не надо изменять значение и не надо что бы его о нем знал кто-то другой private - когда надо изменять значение, но только в текущем классе Предположим в классе-родителе ты создал переменную "а", она публичная и используется в каком-то методе. Потом ты создал дочерний класс и вызываешь этот метод, предположим вывод чисел от 0 до 10, причем перед этим ты вызвал переменную "а" и присвоил эй другое значение, будет уже ошибка, над которой надо будет разбираться, особенно если родительский класс писал не ты.

Ответ 3



Смысл private методов и переменных, например, в том, чтобы разработчик наследуемых классов не лез в родительские реализации базового функционала.

Ответ 4



Для приватной области (private) присущи такие вещи как: Сокрытия методов родительского класса Сокрытие реализации класса(начинки), чтоб программисты в этот алгоритм не вникали (работает правильно и хорошо зачем трогать) Все выше написанное относится к такому понятию ООП как инкапсуляция. Класс должен предоставлять только интерфейс работы с ним. а это и есть публичная область (public) Если производному классу от него нужен доступ к "начинки класса" применяется спецификатор protected

Ответ 5



Смысл в том, что родительский класс, кроме возможности расширения, может содержать свой собственный автомат, реализация которого для обеспечения целостности закрыта private. Если это не закрытый автомат, родитель не имеет своих собственных, сепаратных состояний, которые необходимо инкапсулировать, то особого смысла в private действительно нет. Нужно это практически или нет в каждом конкретном случае вопрос отдельный. Но ради универсальности такая возможность поддерживается.

Комментариев нет:

Отправить комментарий