Защищенные поля Java по сравнению с общедоступными методами считывания

Что является лучшей практикой и почему: доступ к переменным базового класса через защищенное поле или общедоступный метод считывания на частном поле.

(Метод считывания будет общедоступен невнимательный),

59
задан 17 February 2010 в 12:58

1 ответ

Я хотел бы подарить Вам некоторые аргументы, защищающие "защищенные" поля в Java: "Можно одобрить участников базового класса доступа, использующих защищенные поля по общедоступным средствам доступа в ситуации, где необходимо избежать проверки значения". Однако, если дело обстоит не так, то частные поля с общедоступными средствами доступа должны использоваться к комплименту hermetization.

принцип методов считывания и методов set должен предоставить проверку значениям, введенным и произведенным участнику класса. Однако на языках ООП, мы управляем на объектах не классами. Базовый класс и специализированный класс представляют отдельный объект, именно поэтому он прекрасно подходит для доступа к определенным участникам класса по защищенному полю.

Рассматривают следующий абстрактный пример с автомобилем: - у Вас есть Автомобиль базового класса и производный класс Porshe. - Автомобиль класс может иметь поле как механизм , какое значение не установлено в Автомобильном конструкторе (возможно, тип механизма известен только после объектной инициализации) - Вы создаете объект класса Porshe , который содержит некоторую логику, используемую для вычисления механизм тип с помощью некоторых внешних данных.

В этом примере, ожидается, что механизм поле имеет общедоступный метод считывания, таким образом, автомобильные пользователи знают, какой механизм автомобиль имеет. Однако нет никакого общедоступного метода set, поскольку мы ожидаем, что водители не умерят с механизмом! Именно поэтому это прекрасно подходит для создания механизм защищенное поле, таким образом, класс Porshe может установить свое значение в некоторое время в будущем.

Да, некоторые люди, вероятно, скажут, "что затем использование защитило метод set!". И я повторюсь: на языках ООП мы работаем с объектами не классы. Единственный принцип ответственности - да, но как объект не как класс. Если Вы говорите: "в какой-то момент, если мы используем защищенные поля более чем 3 или 5 уровней наследования, это может быть неприятно для понимания то, что происходит с полем, если каждый класс выполняет некоторую операцию с ним". И затем я отвечаю: Это - другой антишаблон - Ваш объект является, вероятно, слишком большим в этой точке и пустотах Единственный принцип Ответственности.

1
ответ дан 1 November 2019 в 12:23

Другие вопросы по тегам:

Похожие вопросы: