I am trying to create a UML class diagram and corresponding class definition (in, for example, C# or Java) where I have a generic hierarchy of relationships and one or more specialized classes that are based on that general relationship but constrain it.
For example, say I have the following general UML relationships (pretend it looks like UML):
Router
<> 1
|
| *
Card
<> 1
|
| *
Port
(Read as: Router contains 1 or more cards and each card contains one or more ports)
I then want to extend that and define a specialized class, for example CiscoRouter.
Router <|---CiscoRouter
Furthermore, let’s say a CiscoRouter can only have have 1..10 cards. Is there a way to define this restriction in the model?
I could do something like the following:
Router <|---CiscoRouter
<> 1 <> 1
| |
| * |
Card ____________|
<> 1 10
|
| *
Port
However, this would technically create two separate collections of Card objects, right? Any suggestions on how to best define this?
Actual designs will probably be more complicated as we will need classes like Cisco7200Router, LinkSysRouter, etc. As well as custom Cards, Ports, etc. For example:
Router <|---CiscoRouter
<> 1 <> 1
| |
| * | 10
Card <|------CiscoCard
<> 1 <> 1
| |
| * | 4
Port <|------CiscoPort
To add another complication, let’s say that the Router has a property called Weight. However, in the CiscoRouter, we want to actually define that property to be a certain value, say 4 Lbs (e.g. our model somehow states that a CiscoRouter weighs 4 Lbs, has 10 cards, and each card has 4 ports). How do I define this?
I know I can do a lot of this in code using abstract classes, methods, etc; but I want to know if there is any clean way to define as much of this as possible in the model or metadata so that I can generate some design documentation from it without executing anything.
Thanks in advance,
Dan
I would say, that generally best way to express constraints on UML models when the semantics are not easily modeled by UML model elements is to use OCL constraints.