كيف يمكنك النموذج بشكل صحيح فئات متداخلة / فرعية في UML؟
-
13-09-2019 - |
سؤال
لقد كنت ألعب مع UML
خلفيتي الأساسية هي سيوسادمين، وليس كمبرمج.
من أجل الحصول على فهم أفضل لنماذج الطبقة، أحاول القيام به خريطة XMDOMAIN.cfg ملف Xen Hypervisor في UML (يمكنك العثور على صفحة الرجل في http://linux.die.net/man/5/xmdomain.cfg.)
لذلك بعد العمل، أحصل على بداية أساسية مثل هذا (ملاحظة، هذه سمات فقط، وليس الإجراءات)
xenDomU:[
- kernelImage
- initialRamdisk
- allocatedMemory
- rootDevice
- nicAmount
- domuName
]
كان الوضع التالي ألم حقيقي في الحمار
يمكن أن تحدث كلاهما "القرص" و "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
}
]
أنا متأكد من وجود طرق "أفضل" للقيام بذلك، ولكن هذا هو ما يبدو أكثر طبيعية بالنسبة لي.
يمكن للشخص يرجى تنوير لي وإظهار الطريقة الصحيحة للقيام بذلك.
المحلول
بالنسبة لإيقاف التشغيل، تريد أن تجعلها تعداد، بدلا من الفصل. تحتاج إلى إعلان سمة من هذا النوع في الفصل للحصول على كائنات سيكون لها واحدة من تلك الخيارات.
على الرغم من أن الفئات تسمح للصفوف المصنفة المتداخلة (UML 2.3 و 9.3.1)، فإنني أتفق مع Gabriel هذا القرص ويجب أن يكون VIF فئات مستقلة في نفس الحزمة، حيث أعلن الفصل الرئيسي التجمعات من مجموعات الأقراص و VIFS. الفصول المتداخلة مثيرة للاهتمام عندما تريد إخفاء المصنف المتداخل من العالم الخارجي، والذي نادرا ما يكون الحال.
أو في تدوين 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.
نصائح أخرى
لم أفهم لماذا لم يكن لديك قرص و VIF كصفات منتظمة وإنشاء جمعيات. بقدر ما أعرف، لا يدعم UML فصول متداخلة. ومع ذلك، في بعض الحالات، يمكنك ربط الحزمة مع الفصول التي تريد أن تتغير بها مع الفصل الذي تريد عشه.