Как выбрать между Композицией и Обобщением при проектировании объектов и их отношений? - PullRequest
1 голос
/ 02 марта 2009

Я подумал найти ответ от сообщества stackoverflow о том, как принять решение о компоновке или обобщении при разработке классов.

Ответы [ 3 ]

2 голосов
/ 02 марта 2009

Вы используете композицию, когда у вас есть класс, у которого есть набор других объектов в любом количестве. Используйте обобщение, когда у вас есть класс, который имеет общие свойства с набором объектов, но может также иметь другие различные свойства или поведение.

Например, у автомобиля есть такие компоненты, как двигатель, колеса и т. Д. Это составные отношения. Но Автомобиль - это обобщение Автомобиля, потому что у вас могут быть другие типы Автомобилей с различными свойствами, например, Грузовик. Автомобиль и Грузовик являются производными классами транспортных средств.

2 голосов
/ 02 марта 2009

Спросите себя, относятся ли отношения между двумя классами к типу "is-a" или "has-a"

1 голос
/ 28 апреля 2009

Если мы говорим о публичном наследовании (IS_A), ключом является понимание принципа подстановки Лискова и его значения в отношении наследования. В частности, это означает, что отношение IS-A является зависимым от контекста, который часто упускается из виду при публичном наследовании.

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

Если мы говорим о наследовании реализации (так называемое частное наследование в C ++), вы должны предпочесть композицию, а не наследование как механизм повторного использования.

...