Как правильно моделировать вложенные / вложенные классы в 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
}
]
Я уверен, что есть "лучшие" способы сделать это, но это то, что кажется мне наиболее естественным.
Не мог бы кто-нибудь просветить меня и показать правильный способ сделать это.
2 ответов:
Для shutdownOptions вы хотите сделать его перечислением, а не классом. Вам нужно объявить атрибут этого типа в классе для объектов, которые будут иметь один из этих параметров.
Несмотря на то, что классы допускают вложенные классификаторы (UML 2.3, 9.3.1), я согласен с Габриэлем, что Disk и 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.
Я не понимал, почему вы не можете иметь Disk и VIF как обычные классы и создавать ассоциации. Насколько мне известно, UML не поддерживает вложенные классы. Однако в некоторых случаях вы можете связать пакет с классами, которые вы хотите вложить, с классом, в который вы хотите вложиться.

Comments