Как ограничить множественность и другие свойства в специализированных классах, используя UML или определения классов - PullRequest
1 голос
/ 11 ноября 2010

Я пытаюсь создать диаграмму классов 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

1 Ответ

1 голос
/ 12 ноября 2010

Я бы сказал, что в общем случае лучший способ выражения ограничений на модели UML, когда семантика не легко моделируется элементами модели UML, - это использование ограничений OCL.

...