Comdiv писал(а):
Нужна более конкретная задача, пока мне неясен смысл примера.
Совсем частную задачу можно вообще без ООП решить. Скорее всего еще и эффективнее. ООП дает профит на сложных эволиционирующих системах. В том числе там, где надо "ужа с ежом", отчего оберонщики обычно сразу крутят носом - дескать наговнокодили тут, в оберонподходе такого не бывает, следующий.
Ну ладно, вот более частный, но все равно достаточно общий пример. Зачастую возникает ситауция, когда один и тот же объект должен обладать набором свойств A, B, C, чтобы с ним могли работать компоненты ComponentA, ComponentB, ComponentC. При том, что свойства примерное из одной оперы, например IComparable vs IEquatable, линейным наследованием они выражаются плохо, т.е. A->B->C или A->C->B неочевидно. Поэтому на этапе разработки компонентов мы не хотим строить (хрупких) иерархий, а просто зафиксировать минимальный интерфейс необходимй для работы компонента. В процессе эволиции системы, если у нас все три кмпонента должны уметь обрабатывать один и тот же объект - задача тривиально решается в помощью множественного наследования.
Композиция заставит писать адаптеры + специализированный интерфейс ABC (если надо такой объект использовать в разных местах). Message bus - слишком гибко, неконтроллируемо и многословно. Предложи свой вариант.