UML でネスト/サブクラスを適切にモデル化するにはどうすればよいでしょうか?

StackOverflow https://stackoverflow.com/questions/988305

  •  13-09-2019
  •  | 
  •  

質問

UMLをいじってみました

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

クラス モデルをより深く理解するために、xmdomain.cfg ファイルと Xen ハイパーバイザーを UML でマッピングしようとしています (マニュアル ページは次の場所にあります)。 http://linux.die.net/man/5/xmdomain.cfg)

それで、それを解決した後、私はこのような基本的なスタートを切ります(これは属性のみであり、アクションではないことに注意してください)

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

次のような状況は本当に厄介です

「disk」と「vif」はどちらも domu 設定ファイル内で複数回出現する可能性があります。(「disk」は 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
    }
]

これを行うには「より良い」方法があると確信していますが、これが私にとって最も自然だと思われる方法です。

誰かが私を啓発し、これを行うための正しい方法を示してくれませんか。

役に立ちましたか?

解決

shutdownOptions の場合は、クラスではなく列挙型にします。これらのオプションのいずれかを持つオブジェクトのクラスで、そのタイプの属性を宣言する必要があります。

クラスではネストされた分類子 (UML 2.3、9.3.1) が許可されていますが、ディスクと 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.

他のヒント

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top