Когда использовать композицию и когда использовать наследование - PullRequest
0 голосов
/ 30 мая 2019

Есть ли способ указать, когда использовать композицию и когда использовать наследование в вашем коде.

Пример: Допустим, у нас есть 4 класса с именем Computer, MotherBoard, Monitor, Keyboard.Я могу сделать computer наследованным от других трех классов, и я также могу объявить MotherBoard, Monitor, Keyboard в поле computer, таким образом, для второго случая с использованием композиции.Какой способ лучше?Какой способ предпочитают большинство разработчиков?

1 Ответ

2 голосов
/ 30 мая 2019

Я предпочитаю наследование в следующих случаях:

  • Оба класса находятся в одной логической области
  • Подкласс является правильным подтипом суперкласса
  • Реализация суперкласса необходима или уместна для подкласса
  • Улучшения, сделанные подклассом, в основном аддитивны.

В противном случае состав подходит.

Обратите внимание, что в этом случае компьютер состоит из компонентов, которые вы перечислили. В качестве ярлыка я иногда спрашиваю себя следующее:

  • Имеет ли Computer a Mouse? Если так, то используйте композицию. Обратите внимание, что на компьютере не может быть мыши.
  • Является ли MacBook a Computer? Если это так, то используйте наследование.

... но в целом какой способ предпочтительнее

В общем, решение должно основываться на ситуации:)

...