3

私はUMLで遊んでいます

私の主なバックグラウンドはシステム管理者であり、プログラマーではありません。

クラス モデルをよりよく理解するために、xmdomain.cfg ファイルを UML の xen ハイパーバイザーにマッピングしようと試みました (man ページは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 つの値ですが、実際には 1 つの属性として要約するのが最適ですが、上記と同じ状況になります。

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) を許可しますが、ディスクと 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 に答える