Пример, размещенный в вопросе, моделирует employer
как оба класса company
и government
. Однако, хотя это может выглядеть правильно, проблема в том, что часто множественное наследование как концепция моделирования не используется должным образом. Множественное наследование должно группировать вещи, а не создавать подклассы «типы», где каждый тип является определением чего-то еще. Другими словами, мы не хотим представлять экземпляры данных. Это распространенная ошибка.
Вместо множественного наследования мы должны назначать роли, которые позволяют нам моделировать любой тип домена. Роль определяет поведение и аспект объекта в контексте отношения, и мы можем назначить объекту несколько ролей (обратите внимание, что роли наследуются, когда типы являются подклассом другого).
Например, a government
может использовать person
, а company
может использовать person
. Затем можно предложить создать класс, который наследует как government
, так и company
, который может использовать person
, и в итоге получить класс employer
, который наследует оба (как показано в примере выше).
Однако это злоупотребление наследством. В этом случае мы должны создать роль employer
, которая относится к отношению employment
и контекстуализирует, как company
или government
участвует в этом отношении (играя роль employer
).
company sub entity,
plays employer;
government sub entity,
plays employer;
employment sub relation,
relates employer;