2009-06-12 9 views
3

Ich habe mit UML gespieltWie können Sie Nested/Sub-Klassen in UML ordnungsgemäß modellieren?

Meine primäre Hintergrund ist die eines Systemadministrators, nicht als Programmierer.

Um ein besseres Verständnis der Klasse Modelle zu bekommen ich kartieren zu tun habe versucht, die xmdomain.cfg den Xen-Hypervisor in UML-Datei (können Sie die man-Seite bei http://linux.die.net/man/5/xmdomain.cfg finden)

So nach der Arbeit it out ich bekomme eine grundlegende Start wie folgt (beachten sie, diese Attribute nur, keine Aktionen)

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

folgende Situation eine echte Nervensäge

„Platte“ und „vif“ kann gewesen Beide treten mehrmals in einer domu-Konfigurationsdatei auf. („Disk“ kann 1 bis unendlich oft auftreten und „vif“ 0 bis unendlich mal) im Wesentlichen sind sie Klassen selbst

disk:[ 
    - backendDevice 
    - frontendDevice 
    - deviceAccessMode 
] 

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

Darüber hinaus „Domain-Shutdown-Optionen“ sind wirklich drei Werte, aber es ist eigentlich am besten summorized als einzelnes Attribut, aber dann erhalten Sie die gleiche Situation wie oben.

shutdownOptions{ 
    - onShutdown 
    - onReboot 
    - onCrash 
} 

Also danach, Sie am Ende mit etwas, das wirklich nicht wie gültige UML für mich scheint.

xenDomU:[ 
    kernelImage 
    initialRamdisk 
    allocatedMemory 
    rootDevice 
    nicAmount 
    disk:[ 
     backendDevice 
     frontendDevice 
     deviceAccessMode 
    ] 
    domuName 
    virtualNetworkInterface:[ 
     networkBridgeDevice 
     interfaceIP 
     macAddress 
     interfaceName 
    ] 
    shutdownOptions{ 
     onShutdown 
     onReboot 
     onCrash 
    } 
] 

Ich bin sicher, dass es „besser“ Wege, dies zu tun, aber das ist, was mir wie die natürlichste scheint.

Könnte jemand bitte mich aufklären und den richtigen Weg zeigen, dies zu tun.

Antwort

1

Für die shutdownOptions möchten Sie es zu einer Aufzählung statt einer Klasse machen. Sie müssen ein Attribut dieses Typs in der Klasse für Objekte deklarieren, die über eine dieser Optionen verfügen.

Obwohl Klassen geschachtelte Klassifizierer zulassen (UML 2.3, 9.3.1), stimme ich Gabriel zu, dass Disk und VIF eigenständige Klassen im selben Paket sein sollten, wobei Ihre Hauptklasse Aggregationen von Festplatten und VIFs deklariert. Geschachtelte Klassen sind interessant, wenn Sie diesen verschachtelten Klassifikator von der Außenwelt aus verbergen möchten, was selten der Fall ist.

alt text

Oder im TextUML Notation (die das Diagramm oben generiert):

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

Ich habe nicht verstanden, warum Sie nicht haben können Disk und VIF als reguläre Klassen und Verknüpfungen erstellen. Soweit ich weiß, unterstützt UML keine geschachtelten Klassen. In einigen Fällen können Sie jedoch Pakete mit Klassen verknüpfen, die mit der zu verschachtelnden Klasse verschachtelt werden sollen.

Verwandte Themen