我一直在玩UML
我的主要背景是系统管理员,而不是程序员。
为了更好地理解类模型,我一直试图将xmdomain.cfg文件映射到UML中的xen hypervisor(你可以在http://linux.die.net/man/5/xmdomain.cfg找到手册页)
所以在解决之后我会得到一个像这样的基本开始(注意,这只是属性,而不是动作)
xenDomU:[
- kernelImage
- initialRamdisk
- allocatedMemory
- rootDevice
- nicAmount
- domuName
]
以下情况一直是屁股的真正痛苦
“disk”和“vif”都可以在domu配置文件中多次出现。 (“磁盘”可以发生1到无限次,“vif”0发生到无限次)基本上它们本身就是类
disk:[
- backendDevice
- frontendDevice
- deviceAccessMode
]
virtualNetworkInterface:[
- networkBridgeDevice
- interfaceIP
- macAddress
- interfaceName
]
此外,“域关闭选项”实际上是3个值,但它实际上最好将其作为单个属性进行汇总,但随后您将获得与上述相同的情况。
shutdownOptions{
- onShutdown
- onReboot
- onCrash
}
所以在那之后,你最终得到的东西对我来说似乎不是有效的UML。
xenDomU:[
kernelImage
initialRamdisk
allocatedMemory
rootDevice
nicAmount
disk:[
backendDevice
frontendDevice
deviceAccessMode
]
domuName
virtualNetworkInterface:[
networkBridgeDevice
interfaceIP
macAddress
interfaceName
]
shutdownOptions{
onShutdown
onReboot
onCrash
}
]
我确信有更好的方法可以做到这一点,但这对我来说似乎是最自然的。
有人可以请教导我并指出正确的方法。
答案 0 :(得分:2)
我不明白为什么你不能将Disk和VIF作为常规类并创建关联。 据我所知,UML不支持嵌套类。但是,在某些情况下,您可以将包与要嵌套的类与要嵌套的类相关联。
答案 1 :(得分:1)
对于shutdownOptions,您希望将其设为枚举,而不是类。您需要在类中为具有其中一个选项的对象声明该类型的属性。
尽管类允许嵌套分类器(UML 2.3,9.3.1),但我同意Gabriel的观点,即Disk和VIF应该是同一个包中的独立类,主类声明了磁盘和VIF的聚合。当您想要从外部世界隐藏嵌套分类器时,嵌套类很有趣,这种情况很少见。
或者在TextUML表示法中(生成上图):
package xen;
class XenDomU
attribute domuName : String;
attribute kernelImage : any;
attribute initialRamdisk : any;
attribute allocatedMemory : any;
attribute rootDevice : any;
attribute nicAmount : any;
attribute shutdownMode : ShutdownOptions;
composition disks : Disk[*];
composition interfaces : VirtualNetworkInterface[*];
end;
class Disk
attribute backendDevice : any;
attribute frontendDevice : any;
attribute deviceAccessMode : any;
end;
class VirtualNetworkInterface
attribute networkBridgeDevice : any;
attribute interfaceIP : any;
attribute macAddress : any;
attribute interfaceName : any;
end;
enumeration ShutdownOptions
onShutdown,
onReboot,
onCrash
end;
end.