Подход к конструированию ПО, подобный конструированию из кубиков, требует возможности объединения нескольких абстракций в одну. Это достигается благодаря множественному наследованию.
В самых простых и наиболее общих случаях множественного наследования два родителя представляют независимые абстракции.
Множественное наследование часто необходимо как для моделирования систем, так и для повседневной разработки ПО, в частности, создания повторно используемых библиотек.
Конфликты имен при множественном наследовании должны устраняться переименованием.
Переименование позволяет ввести в классе контекстно-адаптированную терминологию.
Компоненты следует отделять от их имен. Один и тот же компонент в разных классах может быть известен под разными именами. Класс определяет отображение имен в компоненты.
Дублируемое наследование - мощная техника - возникает как результат множественного наследования, при котором один класс становится потомком другого несколькими способами.
При дублируемом наследовании компонент общего предка становится одним компонентом, если он наследуется под одним именем, и несколькими независимыми компонентами в противном случае.
Конкурирующие версии общего предка при динамическом связывании должна устраняться предложением select.
Механизм репликации при дублируемом наследовании не должен дублировать компоненты, включающие родовые параметры.
В ОО-среде семантическая перегрузка, поддерживаемая динамическим связыванием, более полезна, чем синтаксическая перегрузка.