избегать нового класса каждый раз, когда вы хотите ввести новую функциональность?

0

В огромном сложном приложении интересно, приемлемо ли вводить класс просто для реализации простой новой функциональности.

Например, класс C и D наследует от A (среди многих других классов, которые также наследуются от A).

Если мы хотим представить новые общие функции для C и D, мы можем:

1) ввести новый класс B (и реализовать в этом классе общую функциональность) между родительским классом A и двумя дочерними классами C и D, чтобы B наследовал от A, а C и D наследовал от B

2) добавьте функциональность в родительский класс A и добавьте флаг для использования этой функции только тогда, когда ребенок является типом B или C (и убедитесь, что таким образом мы не сломаем что-либо для остальных классов, которые наследуют от A )

(в delphi я думал, что этот флаг является опубликованным свойством, доступным в инспекторе объектов, что позволяет легко включать или исключать функциональность каждого из дочерних классов)

Неправильно ли следовать второму подходу, чтобы избежать сумасшедшего многоуровневого сложного наследования?

  • 0
    если это c ++, вы можете использовать множественное наследование, в этом случае C и D продолжают наследовать от A, но они также наследуют от B, но в этом случае B не должен наследовать от A, для меня это выглядит довольно аккуратно.
  • 1
    Не злоупотребляйте наследованием. Спросите у себя , если B на самом деле является , и A C и D на самом деле являются B .
Показать ещё 6 комментариев
Теги:
inheritance

1 ответ

3
Лучший ответ
  • Если вам нужна новая функциональность, лучше создать для этой цели новый класс. После этого становится легче изменить функциональность.
  • Как вы сказали, "другие классы также наследуются от класса А"; это может быть так, что этим классам не нужны функциональные возможности, которые вы добавляете в класс A. Таким образом, лучше создать отдельный класс.
  • Хотя во 2-м подходе вы создаете флаг, чтобы решить, использовать ли его функциональность или нет, я рассматриваю его как накладные расходы и может вызвать сложность.

Создание отдельного класса для отдельной функциональности всегда помогает. Вы можете легко разрабатывать, поддерживать, обновлять/модифицировать код; что красота объектно-ориентированного программирования. Итак, я бы предпочел вариант 1.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню