Поскольку человек, задающий вопрос, может на самом деле извлечь из него какую-то ценность, вот мое мнение:
Если ваше программное обеспечение каким-то образом взаимодействует с объектами реального мира, не пытайтесь смоделировать наборклассов, которые представляют ядро вашего приложения в соответствии с реальным миром.Скорее, позвольте требованиям программного обеспечения относительно того, как будут выглядеть ваши объекты.
Например, это система управления заказами ?В этом случае может быть более уместно, что некоторые заказываемые товары имеют другие заказываемые товары, непосредственно связанные с ним.Для лодки вы можете заказать определенные детали, двигатели и т. Д. То есть, возможно, более важно выразить взаимосвязь между заказываемыми предметами, а не предоставлять их в виде конкретных типов.
Например, это инструмент для рисования новых лодок, самолетов, винтов и т. д.?Тогда более актуальным базовым классом может быть форма.Это больше о расчете мощности двигателя или КПД винта ?Тогда вам может понадобиться некоторое понятие о математических телах, и необходимо определить дополнительные физические отношения и характеристики между различными объектами.
Наконец, как правило, вы можете думать о наследовании как о несколько переоцененной концепции в том смысле, что онаэто первая вещь, о которой начинают думать, касаясь ОО.Преобладающей концепцией повторного использования в природе является композиция - в конечном итоге все природные вещи состоят из небольших предметов с очень четкими интерфейсами.В идеале вы попытаетесь скомпоновать ваше ОО-приложение аналогичным образом.