3

我一直在玩 UML

我的主要背景是系统管理员,而不是程序员。

为了更好地理解类模型,我一直在尝试将 xmdomain.cfg 文件映射到 UML 中的 xen 管理程序(您可以在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
    }
]

我确信有“更好”的方法可以做到这一点,但这对我来说似乎是最自然的。

有人可以启发我并展示正确的方法来做到这一点。

4

2 回答 2

2

我不明白为什么不能将 Disk 和 VIF 作为常规类并创建关联。据我所知,UML 不支持嵌套类。但是,在某些情况下,您可以将包与要嵌套的类与要嵌套的类相关联。

于 2010-01-14T12:09:34.257 回答
1

对于 shutdownOptions,您希望将其设为枚举,而不是类。您需要在类中为具有这些选项之一的对象声明该类型的属性。

尽管类确实允许嵌套分类器(UML 2.3、9.3.1),但我同意 Gabriel 的观点,即磁盘和 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.
于 2010-12-27T19:24:38.157 回答