Я пытаюсь создать диаграмму классов UML и соответствующее определение класса (например, в C # или Java), где у меня есть общая иерархия отношений и один или несколько специализированных классов, которые основаны на этих общих отношениях, но ограничивают их .
Например, скажем, у меня есть следующие общие отношения UML (представьте, что это похоже на UML):
Router
<> 1
|
| *
Card
<> 1
|
| *
Port
(Читайте как: Маршрутизатор содержит 1 или более карт, и каждая карта содержит один или несколько портов)
Затем я хочу расширить его и определить специализированный класс, например CiscoRouter.
Router <|---CiscoRouter
Кроме того, скажем, CiscoRouter может иметь только карты 1..10. Есть ли способ определить это ограничение в модели?
Я мог бы сделать что-то вроде следующего:
Router <|---CiscoRouter
<> 1 <> 1
| |
| * |
Card ____________|
<> 1 10
|
| *
Port
Однако, технически это создаст две отдельные коллекции объектов Card, верно? Любые предложения о том, как лучше всего определить это?
Реальные проекты, вероятно, будут более сложными, поскольку нам потребуются классы, такие как Cisco7200Router, LinkSysRouter и т. Д., А также пользовательские карты, порты и т. Д. Например:
Router <|---CiscoRouter
<> 1 <> 1
| |
| * | 10
Card <|------CiscoCard
<> 1 <> 1
| |
| * | 4
Port <|------CiscoPort
Чтобы добавить еще одну сложность, допустим, что у маршрутизатора есть свойство Weight. Однако в CiscoRouter мы хотим на самом деле определить это свойство как определенное значение, скажем, 4 фунта (например, наша модель как-то утверждает, что CiscoRouter весит 4 фунта, имеет 10 карт, и каждая карта имеет 4 порта). Как мне это определить?
Я знаю, что могу многое из этого сделать в коде, используя абстрактные классы, методы и т. Д .; но я хочу знать, есть ли какой-нибудь чистый способ определить как можно больше этого в модели или метаданных, чтобы я мог сгенерировать из него некоторую проектную документацию, не выполняя ничего.
Заранее спасибо,
Dan