Почему многие разработчики выступают против использования «защищенного» модификатора в ООП? - PullRequest
11 голосов
/ 03 сентября 2010

Мой коллега изучает Введение в объектно-ориентированное программирование , и его профессор задал вопрос для обсуждения:

Почему многие разработчикипротив использования «защищенного» модификатора на / в классах?

Когда вопрос был поднят во время обеда, мои коллеги и я не могли придумать причины, по которым кто-то мог бы быть против использования модификатора protected в классе.Оставив предпосылку вопроса в стороне (что предполагает, что многие разработчики на самом деле выступают против модификатора protected; не так ли?), Мы попытались выяснить, почему.

Лично я единственный раз, когда я 'Мы использовали модификатор доступа protected в классе, когда я написал код, который я мог бы дополнить в тестовой среде.Например, я мог бы написать базовый класс без отладочной информации, а затем создать новый класс для тестирования, унаследовав от базового класса и переписав его методы для добавления в выходной код отладки до / после вызова базового метода.Я полагаю, что я мог бы так же легко использовать дизайн, который включает интерфейсы и внедрение зависимостей для достижения той же цели, но мой единственный опыт работы с protected был для целей тестирования.В этом случае единственная причина, по которой следует избегать protected, заключается в том, что вы можете выполнить то же самое лучшим способом.

Почему разработчики могут выступать против использования модификатора protected в своем дизайне ООП?

ПРИМЕЧАНИЕ. Поскольку профессор задает общий вопрос ООП, не относящийся к какому-либо конкретному языку, я не уверен, что ответы могут быть взвешены по-разному из-за различных реализаций protected в C #, Java и т. Д..

Ответы [ 12 ]

0 голосов
/ 03 сентября 2010

Есть правило .. "Используйте Личное, если у вас нет веских причин не делать этого" Вы должны подумать, если кто-то собирается использовать ваши пакеты / классы и решить, что действительно нужно. Я никогда не использую защищенный, если я не собираюсь выпустить библиотеку кому-то еще, и только если это необходимо.

0 голосов
/ 03 сентября 2010

В java защищенный модификатор часто не имеет смысла.

Если вы разрабатываете приложение из одного пакета и не ожидаете, что оно будет расширено (это не библиотека), тогда это будетлучше использовать модификатор по умолчанию - пакет private.

Если вы разрабатываете приложение с несколькими пакетами, вам может понадобиться защищенный модификатор, чтобы beta.Son вызывал конструктор суперкласса alpha.Father (но в противномКонструктор alpha.Father недоступен).Я буду рассуждать без доказательств того, что разработчики предпочитают приложения с одним пакетом.

Если вы разрабатываете библиотеку, тогда модификатор защищен был бы полезен.Я буду рассуждать без доказательств того, что разработчики тратят больше времени на создание приложений, чем библиотек.

...