Подтвердить что ты не робот

Почему защищенные переменные не разрешены по умолчанию в Checkstyle?

В eclipse я получаю много предупреждений:

Переменная "myVariable" должна быть частной и иметь методы доступа.

Я думаю, что получаю их, потому что я не устанавливал protectedAllowed вручную в true в eclipse. Но почему он по умолчанию установлен на false? Не следует ли использовать защищенные атрибуты?

4b9b3361

Ответ 1

Теоретически защищенные атрибуты (переменные) являются анти-шаблонами в объектно-ориентированных языках. Если только подклассы должны получить доступ к атрибутам члена своего суперкласса, определите сами атрибуты как частные и создайте защищенные методы доступа (getter и setter). Этот подход использует концепцию "скрытия информации". Существует альтернативное решение: определить защищенные неизменные (конечные) атрибуты участника.

Дальнейшие чтения:

Ответ 2

Я предполагаю, что все частное - это анти-шаблон. Часто классы используются в связке и в целом представляют собой инкапсулированный объект, помещенный в отдельный пакет. Им не нужно что-то скрывать друг от друга, но это правило заставляет скрываться без уважительной причины, увеличивая беспорядок и эффективно делая стиль (как я его понимаю) хуже. Между тем, мы часто видим, что каждый класс в пакете является общедоступным. Я думаю, это намного хуже, но checkstyle не проверяет это.

Инкапсуляция существует не только на уровне класса, так и на упаковке, системе и т.д. И я думаю, что эти уровни еще важнее.

Ответ 3

Разрешение доступа к пакету упрощает программирование внутри пакета и уменьшает код шаблона. Часто время доступа требуется только внутри пакета. Частный доступ заставляет вас создавать множество практически бесполезных методов доступа. Это фактически приводит к сокращению инкапсуляции и скрытию информации, потому что класс должен раскрывать внутреннее приложение данных/структуры, а не просто пакет с помощью общедоступных методов доступа. Видимость пакета по умолчанию также упрощает тестирование, потому что классы тестов живут в одном и том же пакете (в тестовом каталоге/дереве).