كيف يمكنك النموذج بشكل صحيح فئات متداخلة / فرعية في UML؟

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

  •  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. الفصول المتداخلة مثيرة للاهتمام عندما تريد إخفاء المصنف المتداخل من العالم الخارجي، والذي نادرا ما يكون الحال.

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.

نصائح أخرى

لم أفهم لماذا لم يكن لديك قرص و VIF كصفات منتظمة وإنشاء جمعيات. بقدر ما أعرف، لا يدعم UML فصول متداخلة. ومع ذلك، في بعض الحالات، يمكنك ربط الحزمة مع الفصول التي تريد أن تتغير بها مع الفصل الذي تريد عشه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top