2009-06-12 4 views
3

私はUMLで遊んでいましたどのようにしてUMLでネスト/サブクラスを適切にモデル化できますか?

私の主な背景はプログラマーではなく、システム管理者のものです。

私が働いた後、だから、(あなたがhttp://linux.die.net/man/5/xmdomain.cfgでmanページを見つけることができます)UMLでのXenハイパーバイザーをxmdomain.cfgファイルをチェックする。

をしようとしてきたクラスモデルのより良い理解を得るためにそれアウトは私のことができ

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

は、次のような状況は、お尻の本当の痛みとなっている

「ディスク」と「VIF」(だけではなく、アクションのノートが、これは属性である)このような基本的なスタートを切ります両方ともdomu設定ファイルで複数回発生します。 (「ディスク」は無限回に無限の時間と「VIF」0に1を発生することがあります)基本的に、彼らはクラス自体に加えて

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では、クラスではなく列挙型にする必要があります。これらのオプションの1つを持つオブジェクトのクラスの属性を宣言する必要があります。

クラスではネストされたクラシファイア(UML 2.3,9.3.1)が許可されていますが、DiskとVIFはディスクと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

ディスクとVIFを通常のクラスとして作成して関連付けを作成できない理由を理解できませんでした。 私が知る限り、UMLはネストされたクラスをサポートしていません。しかし、場合によっては、入れ子にしたいクラスにパッケージを関連付けることができます。

関連する問題