powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Тяпничное глубокое наследование
13 сообщений из 13, страница 1 из 1
Тяпничное глубокое наследование
    #40069037
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет котаны-бротаны!

Как вы думаете, существует ли разумное ограничение на глубину уровней наследования?

В данном конкретном примере я имею в виду следующее.
(трех-уровневая глубина)
Код: plaintext
1.
2.
3.
4.
5.
class A : public B {};

class B : public C {};

class C : public D {};



Разумно-ли делать 10 или 20 уровней?

Какой глубины наследование в ваших проектах? Как это помогает сопровождению кода?

Чуть позже я попробую привести статистику реальных проектов ентерпрайза чтобы вывести хотя-бы
понимание какие цифры бывают в deep inheritance
...
Рейтинг: 0 / 0
Тяпничное глубокое наследование
    #40069057
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Как вы думаете, существует ли разумное ограничение на глубину уровней наследования?
Нет. Несколько уровней в стандартной библиотеке, несколько уровней поверх в личной библиотеке, потом еще и для конкретного приложения может понадобиться... В общем, искусственно ограничивать это неразумно.

На практике же... Ну вот например такая хорошо известная вещь как Qt и стандартный класс "простой список на экране":
QObject
QWidget
QFrame
QAbstractScrollArea
QAbstractItemView
QListView
QListWidget
То есть семь уровней внутри библиотеки. Если мы еще сделаем свою надстройку - будет уже восемь уровней.

С другой стороны, уровней может вообще быть ноль - берем любой не ОО язык и наслаждаемся.

Но если тебе удобно сделать потомка от класса - то какая разница сколько там у него предков? Это пусть компилятор думает, он железный, ему все равно. Главное чтобы тебе было удобно использовать MySuperInheretedClass.
...
Рейтинг: 0 / 0
Тяпничное глубокое наследование
    #40069112
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Курс психологии сообщает нам что человек обычно одновременно мыслит 7 сущностей. 7 классов. 7 переменных.
Если иерархия классов также "мыслима нами" одновременно - то мы должны искать естественные ограничения.

Понятное дело что ентерпрайз приложения могут вообще не иметь никаких "берегов" и иерархию можно тянуть
до бесконечности. Но я ищу практический подход. Например в списке аргументов к процедурам и функциям
мы не делаем слишком много сущностей. Нам - сложно видеть глазами и сложно обозревать весь объем
входных данных. Мы - сознательно вводим Context, или некий объект-аргумент или передаем мапу свойств.
Ну вобщем стараемся объединить мелкое в более крупное.

Вопрос возник у меня в контексте изучения библиотек которые имели слишком длинные цепи наследования.
...
Рейтинг: 0 / 0
Тяпничное глубокое наследование
    #40069120
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Курс психологии сообщает нам что человек обычно одновременно мыслит 7 сущностей. 7 классов. 7 переменных.
Если иерархия классов также "мыслима нами" одновременно
Ни в коем случае! Мы не мыслим иерархией классов. Максимум двумя уровнями одновременно и то, только когда выбираем какой из предоставленных конечных классов использовать. Не нужно больше.
Даже когда мы создаем эту самую библиотеку - мы не думаем о всей цепочке, только о том классе который мы сейчас делаем, о паре-тройке его братьев и думаем имеет ли смысл поднять разрабатываемый в данную секунду метод на уровень повыше чтобы в братских классах его можно было использовать без повторного определения.

mayton
Например в списке аргументов к процедурам и функциям мы не делаем слишком много сущностей. Нам - сложно видеть глазами и сложно обозревать весь объем входных данных. Мы - сознательно вводим Context, или некий объект-аргумент или передаем мапу свойств.
Опять - ни в коем случае.
Во первых, контекст существует всегда. Всегда есть общие настройки приложения, всегда есть "режим работы" какого-либо протокола. То что мы иногда сводим это все в класс с именем Context это всего-лишь удобство чтобы собрать глобальные переменные в одно место.
А объект-аргумент это, опять таки, не ради сокращения количества аргументов, а чтобы не забывать что вот эта пара-тройка-десяток аргументов всегда идут в группе при обработке данной функцией.

mayton
Вопрос возник у меня в контексте изучения библиотек которые имели слишком длинные цепи наследования.
Ну длинная там цепь и что? Ты же не работаешь разом со всей цепочкой. Ты работаешь с конкретным классом в каждый момент времени, а то что он имеет кучу предков и/или кучу уже существующих потомков - да какая тебе разница? Методы и переменные предка тебе предоставлены и могут быть использованы без оглядки на то сколько там уровней до того самого предка.
...
Рейтинг: 0 / 0
Тяпничное глубокое наследование
    #40069341
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
Опять - ни в коем случае.
Во первых, контекст существует всегда. Всегда есть общие настройки приложения, всегда есть "режим работы" какого-либо протокола. То что мы иногда сводим это все в класс с именем Context это всего-лишь удобство чтобы собрать глобальные переменные в одно место.
А объект-аргумент это, опять таки, не ради сокращения количества аргументов, а чтобы не забывать что вот эта пара-тройка-десяток аргументов всегда идут в группе при обработке данной функцией.

Я-бы еще расширил определение. Ведь контекст является частью шаблона "Strategy". Но там у него смысл - более
в функционале нежели в носимых аргументах.
...
Рейтинг: 0 / 0
Тяпничное глубокое наследование
    #40069342
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl

mayton
Вопрос возник у меня в контексте изучения библиотек которые имели слишком длинные цепи наследования.
Ну длинная там цепь и что? Ты же не работаешь разом со всей цепочкой. Ты работаешь с конкретным классом в каждый момент времени, а то что он имеет кучу предков и/или кучу уже существующих потомков - да какая тебе разница? Методы и переменные предка тебе предоставлены и могут быть использованы без оглядки на то сколько там уровней до того самого предка.

Я тут и согласен и нет. Изучая исходники (кажется) Apache Hadoop я наблюдал довольно странные (немотивированные) длинные
цепочки наследования. Возможно они обусловлени историей. Возможно просто дизайном. Но если ходить дебаггером
по коду то ... ну совсем никак не-никакая разница. Конечно эту цепочку нельзя схлопнуть (таков дизайн да) но можно
как в метриках Холстеда например ввести некое оптимальное число уровней при котором у читающего код еще не будет
ехать крыша.
...
Рейтинг: 0 / 0
Тяпничное глубокое наследование
    #40069353
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Но если ходить дебаггером по коду то ... ну совсем никак не-никакая разница.
А это, пожалуй, действительно серьезный аргумент... Но!
Опять таки вспоминаем не-ОО языки и осознаем что большое количество вызовов функций бывает и там, так что сложность прохода дебаггером от количества наследования не зависит (как и от наличия или отсутствия ОО вообще).
...
Рейтинг: 0 / 0
Тяпничное глубокое наследование
    #40069357
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
...(как и от наличия или отсутствия ОО вообще).

в отсутствии ОО можно ткнуть носом в код и сказать - есть свои равиоли будешь сам, нам не подсовывай упакованные в макароны дырочки от бублика.
А в ОО - оно священно-необходимое таинство.

Но по сути и там и там - вопрос состоит сначала в том, как не поступиться принципами,
и уже затем в том, как заставить красивые принципы работать.
...
Рейтинг: 0 / 0
Тяпничное глубокое наследование
    #40069480
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Как вы думаете, существует ли разумное ограничение на глубину уровней наследования?

Скорее нет, чем да. Ну то есть понятно, что, например, 1000 уровней - это перебор, но в зависимости от задачи, выбранной архитектуры и т. п. оптимальным может быть очень разное количество уровней, и чисто математически наверняка можно доказать теорему, что если в некоторой ситуации оптимальное значение глубины N, то существует ситуация, где она N+1.

Думаю, правильный вопрос - насколько уместен данный конкретный уровень/класс, оправдывает ли он своё обособленное существование. А вот так, мол, у вас в проекте 10.000 классов вложенностью до 10, у нас урезают финансирование, так что сократите до 5'000 классов вложенностью до 5 - это глупость.
...
Рейтинг: 0 / 0
Тяпничное глубокое наследование
    #40069576
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
любое чиселко, само по себе - глупость и бессмысленность.

Но, как-то же они умудряются работать. Даже самые нелепые, вроде трудодней, человеко-лет или человеко-строк
и прочие цикломатические сложности вместе количеством ошибок на 1000 строк.

Глубина наследования - пишут, что с ней Чидамбер и Кемерер баловались как с метрикой.
А какими глазами на нее смотрели и через какой плюс складывали - не знаю.
...
Рейтинг: 0 / 0
Тяпничное глубокое наследование
    #40069698
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то там Никлаус Вирт бухтел про 1000 строк на модуль. Как максмимальный осязаемый размер.
Также Вирт посвятил часть своей жизни новому паскалю в котором он просто выкинул как можно
больше ключевых слов языка и очень этим гордился.

Мартин Фаулер я помню говорил дескыть функция должна иметь размер в 1-7 строки а лучше еще меньше.
Точные цифры я не помню но это тоже метрики.
...
Рейтинг: 0 / 0
Тяпничное глубокое наследование
    #40069708
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри за оффтоп, не удержался
mayton
...бухтел про 1000 строк на модуль...

Из которых 900 строк это get'ры, set'ры.... )))
...
Рейтинг: 0 / 0
Тяпничное глубокое наследование
    #40070104
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
глубины 1 должно хватать
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Тяпничное глубокое наследование
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]