2009-06-12 88 views
3

我一直在玩UML如何正確建模UML中的嵌套/子類?

我的主要背景是一個系統管理員,而不是程序員。

爲了更好地理解類的模型,我一直在努力做映射出xmdomain.cfg文件中UML的Xen管理程序的(你可以找到在http://linux.die.net/man/5/xmdomain.cfg手冊頁)

工作後,所以出來我得到一個基本的開始是這樣的(注意,這是一個屬性而已,沒有行動)

xenDomU:[ 
    - kernelImage 
    - initialRamdisk 
    - allocatedMemory 
    - rootDevice 
    - nicAmount 
    - domuName 
] 

下面的情況一直在屁股真正的痛苦

「磁盤」和「VIF」能都在一個domu配置文件中出現多次。 (「磁盤」可能會出現1到無限的時間和「VIF」 0到無限次)基本上他們是類本身

disk:[ 
    - backendDevice 
    - frontendDevice 
    - deviceAccessMode 
] 

virtualNetworkInterface:[ 
    - networkBridgeDevice 
    - interfaceIP 
    - macAddress 
    - interfaceName 
] 

此外,「域關機選項」真的是3個值,但它是作爲一個真正的最佳summorized單一屬性,但是你會得到與上面相同的情況。

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 
    } 
] 

我確定有更好的方法來做到這一點,但這對我來說似乎是最自然的。

有人請賜教,並顯示正確的方式來做到這一點。

回答

1

對於shutdownOptions,您希望使其成爲枚舉而不是類。您需要在類中爲那些將具有其中一個選項的對象聲明該類型的屬性。儘管類允許嵌套的分類器(UML 2.3,9.3.1),但我同意Gabriel的說法,即Disk和VIF應該是獨立的類在同一個包中,並且主類聲明瞭Disks和VIF的聚合。當你想從外部世界隱藏嵌套的分類器時,嵌套類很有意思,這種情況很少見。

alt text

或在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. 
2

我不明白你爲什麼不能將Disk和VIF作爲常規類來創建關聯。 據我所知,UML不支持嵌套類。但是,在某些情況下,您可以將包與想要嵌套的類關聯起來,並將其與要嵌套的類相關聯。