سؤال

عادة ما أشعر بالارتباك مع UML وهذا الموقف لا يختلف. دعنا نقول أن لدي واجهة Ianimal ، فئة الطعام والقط:

interface IAnimal {
    void Feed(Food food);
}

class Cat : IAnimal {
    void Feed(Food food) {
        //code
    }
}

لدي 3 أسئلة حول رسم مخطط UML لهذه العناصر الثلاثة:

  • أفترض أنني يجب أن أستخدم الارتباط بين Ianimal و Food أو Cat والطعام. هل يجب أن يكون هناك سهم على جانب واحد من خط الجمعية ، إذا كانت الإجابة بنعم ، ثم على أي جانب ولماذا هناك؟

  • إذا كتبت تغذية كطريقة Ianimal على الرسم البياني ، هل يجب أن أكتب طريقة تغذية داخل Class Cat أو هل أكتب فقط أساليب CAT إضافية؟

  • الأهم: هل يجب أن تكون الجمعية بين Ianimal و Food ، Cat and Food ، أو كليهما؟

هل كانت مفيدة؟

المحلول

يحدد UML عددًا من صلة الأنواع.

العلاقات لها عدد من الرموز المختلفة:

  • علاقات الارتباط لها تدوين أساسي للمسار الصلب
  • علاقات التبعية لها تدوين أساسي لسهم متقطع
  • علاقات التعميم لها تدوين أساسي للمسار الصلب مع رأس سهم ثلاثي
  • علاقات الإدراك لها تدوين أساسي لسهم متقطع مع رأس سهم ثلاثي (مزيج من التبعية والتعميم)

تصوير

+---------------------------+
|       <<interface>>       |
|           IAnimal         |
+---------------------------+                        +--------+
| + Feed(food: Food) : void |- - - - <<use>> - - - ->|  Food  |
+---------------------------+                        +--------+
              ^
             /_\
              |

              |

              |
        +-----------+
        |    Cat    |
        +-----------+

هذا هو:

  • العلاقة بين IAnimal و Food هو الاستخدام صلة. يظهر هذا كاعتماد على الصورة النمطية «استخدام»
  • العلاقة بين IAnimal و Cat هو ادراك صلة.

يتم استخدام علاقات الارتباط للإشارة روابط بين اثنين أو أكثر من المصنفات. هذا يعني أن واحدة على الأقل من الفصول لديها ينسب من النوع الآخر (أو مجموعة). في الواقع ، تحتوي السمات والانتقال على نفس المعلومات ويمكن تبادلها.

لذلك ، IMHO ، لا ينبغي أن تكون العلاقات التي تصفها على غرار جمعيات.

نصائح أخرى

على افتراض وجود رسم تخطيطي للطبقة ، يجب أن يكون لديك ارتباط "استخدام" بين Ianimal و Food و A "ارتباط" Cat و Ianimal و Dog و Ianimal:

    IAnimal ----> Food
     ^   ^
    //   \\
   //     \\
 Cat      Dog

ما مدى إرضاءك حول هذا النوع من الأشياء يعتمد إلى حد كبير على ما تستخدمه UML في المقام الأول.

إذا كان لديك نوع من المترجم الذي يضعه UML-to-Code ، فأنت بحاجة إلى أن تكون صعب الإرضاء (ولكن يبدو أنك أكثر راحة مع التعليمات البرمجية من الصناديق والخطوط-فلماذا تستخدم مثل هذه الأداة؟)

إذا كنت ببساطة تستخدم UML للتواصل مع أشخاص آخرين ، فيمكنك أن تكون أقل إرضاءًا إلى حد ما.

يشدد كريج لارمان "تطبيق UML والأنماط" على هذه النقطة ، من خلال تضمين الرسوم البيانية التي تبدو كما لو كانت قد تم رسمها على السبورة البيضاء. الخط الصلب الذي يقول معيار UML يجب أن يكون على ما يرام في هذا النوع من الرسم البياني. لذلك مع رؤوس الأسهم وهلم جرا.

من الواضح لي أن الخط يجب أن ينتقل IAnimal إلى Food.

ما إذا كان رأس السهم يضيف الوضوح (للقراء البشر) مسألة اختيار ، ولكنه يشير إلى وجود علاقة أحادية الاتجاه:

من هذه القطعة التمهيدية:

"في جمعية أحادية الاتجاه ، ترتبط فئتان ، لكن فئة واحدة فقط تعرف أن العلاقة موجودة".

أود أن أزعم أن Ianimal سيكون لديه طعام ، لأنه استقلابه ، ولكن إذا كنت تريد حقًا الإشارة تسليط خصائص حذف.

هناك مدرستان للتفكير مع UML ، وفقًا لمارتن فاولر. هناك "Sketchers" ، الذين يستخدمون التدوين على الألواح البيضاء وقطع الورق الفردية لتوصيل ما يكفي من أفكارهم إلى زملائهم المطورين.

ثم هناك أولئك الذين ينظرون إلى UML كرسومات هندسية ، حيث يجب التقاط كل التفاصيل الأخيرة للتصميم.

أنا بحزم في المخيم السابق. بصفتي مهندسًا سابقًا ، يمكنني أن أخبرك من التجربة الشخصية أن UML لا تملك قوة الرسومات الهندسية الحقيقية لالتقاط تصميم برامج بالكامل.

إذا كنت تؤمن بالأخير ، فيرجى القيام بتصميم كامل لسطح المكتب أو واجهة المستخدم على الويب باستخدام UML ونشره هنا.

1) لا ينبغي كتابة الجمعيات بين الواجهة Ianimal ونوع الطعام. تُستخدم الجمعيات فقط لتوصيل الأنواع مع الشركات داخل الفصول. على سبيل المثال

class Animal
{
   Food foodEaten;
}

class Food
{
 //Implementation code
}

ثم يجب عليك كتابة جمعية تشير إلى العلاقة بين هذين النوعين.

ما يجب أن ترسمه بدلاً من ذلك هو التبعية التي تشير إلى أن الواجهة Ianimal تعتمد على نوع الطعام. يتم رسم التبعية نفس الارتباط في الصورة أعلاه ، فقط قم بتغيير الخط المستقيم إلى خط منقط.

2) لا ، لا تكتب هذه الأساليب ولا تكتب التبعية. اترك كل الرموز فقط على الواجهة Ianimal

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