~WR~
Новичок
В последнее время посещают мысли о вреде использования private функций и переменных.
Все знают, что private функции не видны в классах-потомках. И это вроде как призвано скрыть какие-то внутренние процессы в родителе, о которых знать не нужно. Для наследников этих функций не существует.
Ок, здорово. Представим себе, что эту фичу применили на практике.
Вася написал некий абстрактный класс, в котором объявил приватный метод getSize.
Петя написал свой класс, который унаследовал от абстрактного. Он вообще не смотрел в код Васи и сделал свой метод getSize, который делает что-то другое.
И так происходило еще несколько раз, пока уровней наследования не стало, скажем, пять.
А с третьего уровня какой-нибудь разработчик объявил свой getSize, но уже protected. И дальше они стали наследоваться уже с вызовами parent.
А потом прихожу я, и мне говорят: "Там какой-то getSize отвалился! Поправь ошибку, пожалуйста."
И нужно ломать мозг и разбираться в том, что методы с одинаковым названием на разных уровнях наследования могут быть вообще никак не связаны.
Разве это нормально?
-------------------------------
Еще приходилось слышать такой вариант, что все методы лучше объявлять private. А если потом тебе нужно что-то перегрузить, то ты просто меняешь на protected и радуешься.
Ок, представим, что в примере выше появился Коля, который тоже унаследовал свой класс от абстрактного. Но ему вдруг понадобилось перегрузить оригинальный getSize. Он ставит protected, его код отлично работает. Но тут отваливается код Пети. Потому что он не рассчитывал на то, что у него вдруг вылезет оригинальный getSize, о котором он и не знал никогда.
По мне, так полная хрень.
-------------------------------
Разве не лучше всё и всегда объявлять как protected?
В этом случае мы гарантируем, что функции и переменные будут нести одну и ту же смысловую нагрузку в рамках всей цепочки наследования. Мы уверены в том, что в будущем сможем перегрузить любой существующий метод, даже если сегодня в этом нет необходимости.
Это просто делает код более понятным и гибким в реальных задачах. Особенно если над ним работает несколько человек.
Такие вот мысли. What do u think?
Все знают, что private функции не видны в классах-потомках. И это вроде как призвано скрыть какие-то внутренние процессы в родителе, о которых знать не нужно. Для наследников этих функций не существует.
Ок, здорово. Представим себе, что эту фичу применили на практике.
Вася написал некий абстрактный класс, в котором объявил приватный метод getSize.
Петя написал свой класс, который унаследовал от абстрактного. Он вообще не смотрел в код Васи и сделал свой метод getSize, который делает что-то другое.
И так происходило еще несколько раз, пока уровней наследования не стало, скажем, пять.
А с третьего уровня какой-нибудь разработчик объявил свой getSize, но уже protected. И дальше они стали наследоваться уже с вызовами parent.
А потом прихожу я, и мне говорят: "Там какой-то getSize отвалился! Поправь ошибку, пожалуйста."
И нужно ломать мозг и разбираться в том, что методы с одинаковым названием на разных уровнях наследования могут быть вообще никак не связаны.
Разве это нормально?
-------------------------------
Еще приходилось слышать такой вариант, что все методы лучше объявлять private. А если потом тебе нужно что-то перегрузить, то ты просто меняешь на protected и радуешься.
Ок, представим, что в примере выше появился Коля, который тоже унаследовал свой класс от абстрактного. Но ему вдруг понадобилось перегрузить оригинальный getSize. Он ставит protected, его код отлично работает. Но тут отваливается код Пети. Потому что он не рассчитывал на то, что у него вдруг вылезет оригинальный getSize, о котором он и не знал никогда.
По мне, так полная хрень.
-------------------------------
Разве не лучше всё и всегда объявлять как protected?
В этом случае мы гарантируем, что функции и переменные будут нести одну и ту же смысловую нагрузку в рамках всей цепочки наследования. Мы уверены в том, что в будущем сможем перегрузить любой существующий метод, даже если сегодня в этом нет необходимости.
Это просто делает код более понятным и гибким в реальных задачах. Особенно если над ним работает несколько человек.
Такие вот мысли. What do u think?