Используя наследование просто для совместного использования общей функциональности

Я недавно встретился с ситуацией в некотором коде, я работаю над этим, не имеет смысла мне. Ряд классов наследовался базовому классу просто для совместного использования некоторых методов в базовом классе. Нет никакого переопределения метода, просто вызывающие методы дочерних классов от родительского класса.

Мне кажется, что это было бы лучше смоделировано при наличии дочерних классов, ссылаются на родительский класс вместо того, чтобы наследоваться ему, который я думаю, уменьшил бы ненужную сложность. Действительно ли это разумно, или я пропускаю некоторое преимущество использования наследования как это?

7
задан newdayrising 11 March 2010 в 02:40
поделиться

4 ответа

Если методы родительского класса представлены исключительно как «служебные программы», то да, я согласен.

Вопрос (по крайней мере для меня) будет заключаться в том, можно ли в будущем изменить родительский класс для получения выгоды. Имеется в виду, каковы текущие отношения логически? Если между дочерним и родительским элементом стоит знак «есть», оставьте его. Если родительский элемент представляет собой просто набор методов, выполните рефакторинг до служебного класса или используйте делегирование.

3
ответ дан 7 December 2019 в 03:14
поделиться

Могу предположить, что наблюдаемое наследование - всего лишь результат рефакторинга.

0
ответ дан 7 December 2019 в 03:14
поделиться

Наследование можно использовать (и злоупотреблять!) Разными способами. Вот три большие категории.

Концептуальная иерархия:

концептуально связанные классы могут быть организованы в специализацию иерархию:

  • люди, сотрудники, менеджеры
  • геометрические объекты. ..

Полиморфизм:

Объекты различных, но связанных классов могут одинаково обрабатываться клиентами

  • массивом геометрических объектов

Программное обеспечение повторное использование:

Связанные классы могут совместно использовать интерфейсы, структуры данных или поведение.

  • геометрические объекты ...

Для полного изучения различных форм наследования прочтите О понятии наследования .

Случай, о котором вы упомянули, - это повторное использование программного обеспечения . Нет отношения is-a , самое большее отношение has-a . Основная цель состоит в том, чтобы повторно использовать один и тот же код.

Как вы предлагаете, это можно реорганизовать с помощью делегирования или даже в служебный класс, если методы по сути статичны.

3
ответ дан 7 December 2019 в 03:14
поделиться

Вы правы. К сожалению, наследование часто используется, когда оно на самом деле не нужно.

Если нет связи между дочерним и родительским классами, наследование не должно использоваться.

3
ответ дан 7 December 2019 в 03:14
поделиться