Как правильно моделировать вложенные / вложенные классы в UML?



Я играл с UML



Мой основной опыт-это опыт системного администратора, а не программиста.

Чтобы лучше понять модели классов, я пытаюсь составить карту xmdomain.cfg файл гипервизора xen в UML (вы можете найти 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 значения, но на самом деле лучше суммировать их как один атрибут, но тогда вы получите ту же ситуацию, что и выше.



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


Я уверен, что есть "лучшие" способы сделать это, но это то, что кажется мне наиболее естественным.

Не мог бы кто-нибудь просветить меня и показать правильный способ сделать это.
344   2  

2 ответов:

Для shutdownOptions вы хотите сделать его перечислением, а не классом. Вам нужно объявить атрибут этого типа в классе для объектов, которые будут иметь один из этих параметров.

Несмотря на то, что классы допускают вложенные классификаторы (UML 2.3, 9.3.1), я согласен с Габриэлем, что Disk и VIF должны быть автономными классами в одном пакете, а ваш основной класс объявляет агрегации дисков и Vif. Вложенные классы интересны, когда вы хотите скрыть эти вложенные классы. классификатор из внешнего мира, что бывает редко.

текст Alt

Или в нотации 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 не поддерживает вложенные классы. Однако в некоторых случаях вы можете связать пакет с классами, которые вы хотите вложить, с классом, в который вы хотите вложиться.

Comments

    Ничего не найдено.