Есть ли способ сказать, когда использовать композицию и когда использовать наследование в вашем коде.
Пример: допустим, у нас есть 4 класса с именами Computer, MotherBoard, Monitor, Keyboard. Я могу заставить computer наследоваться от трех других классов, а также объявить MotherBoard, Monitor, Keyboard в поле computer, то есть во втором случае использовать композицию. Какой способ лучше? Какой путь предпочитает большинство разработчиков?
Компьютер состоит (состоит из) других компонентов, так что, надеюсь, очевидно, что композиция здесь является подходящим выбором.
@AndyTurner Я, вероятно, привел неправильный пример, но в целом какой путь предпочтительнее?
@ A.Rizgar Плотник предпочитает винты или соединения? Оба являются действительными инструментами, это зависит от ситуации.
Этот вопрос мощь будет закрыт, поскольку он слишком широкий, но ваш вопрос сильно зависит от конкретной ситуации. Вот достойная запись о композиции и наследовании. thinkworks.com/insights/blog/…
Знакомы ли вы с описаниями это и имеет?
@chrylis Да, я знаю эти термины.
@hooknc Отличная статья, она ответила на мой вопрос!
Клавиатура это компьютер? Нет! У компьютера есть клавиатура. Вот ваш ответ.
Это слишком широкий и расплывчатый вопрос для SO. Вы погуглили, прежде чем спрашивать - вы бы нашли несколько миллионов просмотров и статей.
@AbhijitSarkar да, я погуглил, но я хотел обсудить это с людьми и узнать их мнение.




Я предпочитаю наследование в случаях следующий:
В остальном состав соответствующий.
Обратите внимание, что в данном случае компьютер является составленный из перечисленных вами компонентов. В качестве ярлыка я иногда спрашиваю себя следующее:
ComputerимеютMouse? Если да, то используйте композицию. Обратите внимание, что на компьютере не может быть мыши.MacBook а Computer? Если да, то используйте наследование.... but in general which way is preferred
В общем, решение должно приниматься по ситуации :)
Нет никакого установленного правила, это выбор дизайна. В вашем примере наследование не имеет смысла; клавиатура это не компьютер.