|
Тяпничное глубокое наследование
|
|||
---|---|---|---|
#18+
Привет котаны-бротаны! Как вы думаете, существует ли разумное ограничение на глубину уровней наследования? В данном конкретном примере я имею в виду следующее. (трех-уровневая глубина) Код: plaintext 1. 2. 3. 4. 5.
Разумно-ли делать 10 или 20 уровней? Какой глубины наследование в ваших проектах? Как это помогает сопровождению кода? Чуть позже я попробую привести статистику реальных проектов ентерпрайза чтобы вывести хотя-бы понимание какие цифры бывают в deep inheritance ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2021, 22:33 |
|
Тяпничное глубокое наследование
|
|||
---|---|---|---|
#18+
mayton Как вы думаете, существует ли разумное ограничение на глубину уровней наследования? На практике же... Ну вот например такая хорошо известная вещь как Qt и стандартный класс "простой список на экране": QObject QWidget QFrame QAbstractScrollArea QAbstractItemView QListView QListWidget То есть семь уровней внутри библиотеки. Если мы еще сделаем свою надстройку - будет уже восемь уровней. С другой стороны, уровней может вообще быть ноль - берем любой не ОО язык и наслаждаемся. Но если тебе удобно сделать потомка от класса - то какая разница сколько там у него предков? Это пусть компилятор думает, он железный, ему все равно. Главное чтобы тебе было удобно использовать MySuperInheretedClass. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2021, 06:09 |
|
Тяпничное глубокое наследование
|
|||
---|---|---|---|
#18+
Курс психологии сообщает нам что человек обычно одновременно мыслит 7 сущностей. 7 классов. 7 переменных. Если иерархия классов также "мыслима нами" одновременно - то мы должны искать естественные ограничения. Понятное дело что ентерпрайз приложения могут вообще не иметь никаких "берегов" и иерархию можно тянуть до бесконечности. Но я ищу практический подход. Например в списке аргументов к процедурам и функциям мы не делаем слишком много сущностей. Нам - сложно видеть глазами и сложно обозревать весь объем входных данных. Мы - сознательно вводим Context, или некий объект-аргумент или передаем мапу свойств. Ну вобщем стараемся объединить мелкое в более крупное. Вопрос возник у меня в контексте изучения библиотек которые имели слишком длинные цепи наследования. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2021, 21:55 |
|
Тяпничное глубокое наследование
|
|||
---|---|---|---|
#18+
mayton Курс психологии сообщает нам что человек обычно одновременно мыслит 7 сущностей. 7 классов. 7 переменных. Если иерархия классов также "мыслима нами" одновременно Даже когда мы создаем эту самую библиотеку - мы не думаем о всей цепочке, только о том классе который мы сейчас делаем, о паре-тройке его братьев и думаем имеет ли смысл поднять разрабатываемый в данную секунду метод на уровень повыше чтобы в братских классах его можно было использовать без повторного определения. mayton Например в списке аргументов к процедурам и функциям мы не делаем слишком много сущностей. Нам - сложно видеть глазами и сложно обозревать весь объем входных данных. Мы - сознательно вводим Context, или некий объект-аргумент или передаем мапу свойств. Во первых, контекст существует всегда. Всегда есть общие настройки приложения, всегда есть "режим работы" какого-либо протокола. То что мы иногда сводим это все в класс с именем Context это всего-лишь удобство чтобы собрать глобальные переменные в одно место. А объект-аргумент это, опять таки, не ради сокращения количества аргументов, а чтобы не забывать что вот эта пара-тройка-десяток аргументов всегда идут в группе при обработке данной функцией. mayton Вопрос возник у меня в контексте изучения библиотек которые имели слишком длинные цепи наследования. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2021, 01:21 |
|
Тяпничное глубокое наследование
|
|||
---|---|---|---|
#18+
White Owl Опять - ни в коем случае. Во первых, контекст существует всегда. Всегда есть общие настройки приложения, всегда есть "режим работы" какого-либо протокола. То что мы иногда сводим это все в класс с именем Context это всего-лишь удобство чтобы собрать глобальные переменные в одно место. А объект-аргумент это, опять таки, не ради сокращения количества аргументов, а чтобы не забывать что вот эта пара-тройка-десяток аргументов всегда идут в группе при обработке данной функцией. Я-бы еще расширил определение. Ведь контекст является частью шаблона "Strategy". Но там у него смысл - более в функционале нежели в носимых аргументах. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2021, 13:54 |
|
Тяпничное глубокое наследование
|
|||
---|---|---|---|
#18+
White Owl mayton Вопрос возник у меня в контексте изучения библиотек которые имели слишком длинные цепи наследования. Я тут и согласен и нет. Изучая исходники (кажется) Apache Hadoop я наблюдал довольно странные (немотивированные) длинные цепочки наследования. Возможно они обусловлени историей. Возможно просто дизайном. Но если ходить дебаггером по коду то ... ну совсем никак не-никакая разница. Конечно эту цепочку нельзя схлопнуть (таков дизайн да) но можно как в метриках Холстеда например ввести некое оптимальное число уровней при котором у читающего код еще не будет ехать крыша. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2021, 13:58 |
|
Тяпничное глубокое наследование
|
|||
---|---|---|---|
#18+
mayton Но если ходить дебаггером по коду то ... ну совсем никак не-никакая разница. Опять таки вспоминаем не-ОО языки и осознаем что большое количество вызовов функций бывает и там, так что сложность прохода дебаггером от количества наследования не зависит (как и от наличия или отсутствия ОО вообще). ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2021, 14:43 |
|
Тяпничное глубокое наследование
|
|||
---|---|---|---|
#18+
White Owl ...(как и от наличия или отсутствия ОО вообще). в отсутствии ОО можно ткнуть носом в код и сказать - есть свои равиоли будешь сам, нам не подсовывай упакованные в макароны дырочки от бублика. А в ОО - оно священно-необходимое таинство. Но по сути и там и там - вопрос состоит сначала в том, как не поступиться принципами, и уже затем в том, как заставить красивые принципы работать. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2021, 14:51 |
|
Тяпничное глубокое наследование
|
|||
---|---|---|---|
#18+
mayton Как вы думаете, существует ли разумное ограничение на глубину уровней наследования? Скорее нет, чем да. Ну то есть понятно, что, например, 1000 уровней - это перебор, но в зависимости от задачи, выбранной архитектуры и т. п. оптимальным может быть очень разное количество уровней, и чисто математически наверняка можно доказать теорему, что если в некоторой ситуации оптимальное значение глубины N, то существует ситуация, где она N+1. Думаю, правильный вопрос - насколько уместен данный конкретный уровень/класс, оправдывает ли он своё обособленное существование. А вот так, мол, у вас в проекте 10.000 классов вложенностью до 10, у нас урезают финансирование, так что сократите до 5'000 классов вложенностью до 5 - это глупость. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2021, 22:38 |
|
Тяпничное глубокое наследование
|
|||
---|---|---|---|
#18+
любое чиселко, само по себе - глупость и бессмысленность. Но, как-то же они умудряются работать. Даже самые нелепые, вроде трудодней, человеко-лет или человеко-строк и прочие цикломатические сложности вместе количеством ошибок на 1000 строк. Глубина наследования - пишут, что с ней Чидамбер и Кемерер баловались как с метрикой. А какими глазами на нее смотрели и через какой плюс складывали - не знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2021, 12:05 |
|
Тяпничное глубокое наследование
|
|||
---|---|---|---|
#18+
Что-то там Никлаус Вирт бухтел про 1000 строк на модуль. Как максмимальный осязаемый размер. Также Вирт посвятил часть своей жизни новому паскалю в котором он просто выкинул как можно больше ключевых слов языка и очень этим гордился. Мартин Фаулер я помню говорил дескыть функция должна иметь размер в 1-7 строки а лучше еще меньше. Точные цифры я не помню но это тоже метрики. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2021, 16:41 |
|
Тяпничное глубокое наследование
|
|||
---|---|---|---|
#18+
Сорри за оффтоп, не удержался mayton ...бухтел про 1000 строк на модуль... Из которых 900 строк это get'ры, set'ры.... ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2021, 16:57 |
|
|
start [/forum/topic.php?fid=16&fpage=3&tid=1339665]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
74ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
others: | 261ms |
total: | 424ms |
0 / 0 |