CodeGym /مدونة جافا /Random-AR /مخطط فئة UML
John Squirrels
مستوى
San Francisco

مخطط فئة UML

نشرت في المجموعة

مقدمة

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

ما هو UML؟

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

وفقا لويكيبيديا،

"UML هي لغة نمذجة ذات أغراض عامة وتنموية في مجال هندسة البرمجيات تهدف إلى توفير طريقة قياسية لتصور تصميم النظام."
الشيء الأكثر إثارة للاهتمام، والذي لا يمكن أن يخمنه الجميع، هو أن لغة UML لها مواصفات. وهناك أيضًا مواصفات UML 2. يتوفر المزيد من المعلومات حول المواصفات على موقع ويب Object Management Group . في الواقع، تقوم هذه المجموعة بتطوير مواصفات UML. ومن المثير للاهتمام أيضًا أن UML لا يقتصر على وصف بنية الفئات. هناك أنواع عديدة من مخططات UML. تحتوي ويكيبيديا على وصف موجز لأنواع مختلفة من مخططات UML: مخططات UML . بالعودة إلى الرسوم البيانية لفئات UML، تجدر الإشارة إلى كتاب "Head First Design Patterns" ، الذي يستخدم مخططات UML لتوضيح أنماط التصميم. خلاصة القول هي أن UML مستخدم حقًا. واتضح أن معرفتها وفهم كيفية استخدامها مفيدان للغاية.

طلب

دعونا نكتشف أنه يمكننا العمل مع UML في IDE. سنستخدم IntelliJ IDEA باعتباره IDE الخاص بنا. إذا كنت تستخدم IntelliJ IDEA Ultimate، فسنقوم بتثبيت المكون الإضافي "دعم UML" "خارج الصندوق". يتيح لك إنشاء مخططات فصلية جميلة تلقائيًا. على سبيل المثال، استخدم Ctrl+N أو عنصر القائمة "التنقل" -> "الفئة" للانتقال إلى فئة ArrayList. الآن في قائمة سياق اسم الفئة، حدد "مخطط" -> "إظهار المخطط المنبثق". ونتيجة لذلك، نحصل على رسم تخطيطي جميل. UML: من النظرية إلى التطبيق - 2 ولكن ماذا لو كنت تريد رسم المخطط بنفسك؟ وماذا لو لم يكن لديك الإصدار النهائي؟ باستخدام IntelliJ IDEA Community Edition، ليس لدينا أي خيار آخر. لذلك نحن بحاجة إلى فهم كيفية تنظيم مخطط UML. أولاً، نحتاج إلى تثبيت Graphviz . إنها مجموعة من أدوات تصور الرسم البياني. يعتمد البرنامج المساعد الذي سنستخدمه عليه. بعد التثبيت، تحتاج إلى إضافة دليل bin من دليل تثبيت Graphviz إلى متغير بيئة PATH. بعد ذلك، في IntelliJ IDEA، حدد ملف -> الإعدادات في القائمة. في نافذة "الإعدادات"، حدد فئة "المكونات الإضافية"، وانقر فوق الزر "تصفح المستودعات"، وقم بتثبيت البرنامج الإضافي لتكامل PlantUML . ما هو الشيء الجيد في PlantUML؟ فهو يصف UML باستخدام لغة وصف الرسم البياني التي تسمى "dot"، مما يجعلها أكثر عالمية، حيث يتم استخدام لغة النقطة من قبل أكثر من مجرد PlantUML. علاوة على ذلك، كل ما نقوم به أدناه يمكن القيام به ليس فقط في بيئة تطوير متكاملة (IDE)، ولكن أيضًا عبر الإنترنت على موقع planttext.com . بعد تثبيت البرنامج الإضافي PlantUML، سنكون قادرين على إنشاء مخططات UML باستخدام "ملف" -> "جديد". لنقم بإنشاء مخطط "فئة UML". سيؤدي هذا تلقائيًا إلى إنشاء قالب يحتوي على مثال. سنقوم بحذف محتوياته وإضافة محتوياتنا الخاصة. لفهم كيفية تمثيل ذلك في النص، قم بإلقاء نظرة على دليل PlantUML: مخطط فئة Plantuml. UML: من النظرية إلى التطبيق - 3بالاعتماد على هذه المواد، فلنبدأ في إنشاء مخطط UML الخاص بنا. أضف المحتوى التالي الذي يصف فئتين:

@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
لرؤية النتيجة في IDEA، حدد "عرض" -> "أداة Windows" -> "PlantUML". لقد حصلنا على مربعين يمثلان الفئات. نحن نعلم أن كلا الفئتين تطبقان واجهة القائمة . هذه العلاقة الطبقية تسمى الإدراك. يتم تمثيل هذه العلاقة باستخدام سهم بخط منقط. دعونا نرسمه:
interface List
List <|.. ArrayList
List <|.. LinkedList
القائمة هي أحد أبناء فئة المجموعة . أي أنه يرث المجموعة . وتسمى هذه العلاقة التعميم. يبدو وكأنه سهم بخط مستمر عادي. دعونا نرسمه:
interface Collection
Collection <|-- List
بالنسبة للنوع التالي من العلاقة، أضف إلى وصف فئة ArrayList إدخالاً حول مجموعة خاصة من العناصر:
~Object[] elementData
الآن نريد أن نظهر أن ArrayList يحتوي على بعض الكائنات. في هذه الحالة، ستكون هناك علاقة تجميع. ArrayList عبارة عن مجموعة، لأنها تحتوي على كائنات أخرى. نقول تجميعًا لأن كائنات القائمة يمكن أن توجد بدون القائمة: فهي ليست جزءًا لا يتجزأ من القائمة. لا يرتبط عمرهم بعمر القائمة. تأتي كلمة "إجمالي" إلينا من اللاتينية وتُترجم على أنها "مجمعة"، أي شيء مكون من شيء ما. على سبيل المثال، في الحياة، لدينا مجموعة مضخة (إجمالية)، تتكون من مضخة ومحرك. يمكن تفكيك المجموعة نفسها، ويمكننا ترك بعض مكوناتها بمفردها. على سبيل المثال، للبيع أو لوضعها في جمعية أخرى. إنها بنفس الطريقة في القائمة. يتم التعبير عن ذلك بمعين فارغ في المجموع وخط مستمر. وسنمثل ذلك على النحو التالي:
class Object{
}
ArrayList o- Object
نريد الآن أن نوضح أنه على عكس ArrayList ، تحتوي فئة LinkedList على حاويات Node s التي تشير إلى البيانات المخزنة. في هذه الحالة، تكون العقد جزءًا من LinkedList وليس لها وجود مستقل. العقدة ليست المحتوى نفسه . أنه يحتوي فقط على إشارة إلى المحتوى. على سبيل المثال، عندما نضيف سلسلة إلى LinkedList ، فإننا نضيف عقدة جديدة تحتوي على مرجع إلى السلسلة، بالإضافة إلى رابط إلى العقدة السابقة والتالية . وتسمى هذه العلاقة بالتكوين. تم تصويره من خلال رسم خط متواصل مع معين مملوء على المركب (شيء مصنوع من الأجزاء المكونة). الآن سوف نمثل العلاقة كنص:
class Node{
}
LinkedList *-- Node
والآن عليك أن تتعلم كيفية تصوير نوع آخر مهم من العلاقات: التبعية. يتم استخدامه عندما يستخدم أحد الفئات فئة أخرى، لكن الفصل لا يحتوي على الفصل المستخدم ولا يرثه. على سبيل المثال، يعرف LinkedList و ArrayList كيفية إنشاء ListIterator . نمثل ذلك بأسهم ذات خط منقط:
class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
بعد القيام بكل هذا، نحصل على: UML: من النظرية إلى التطبيق - 4يمكنك إضافة أكبر قدر ممكن من التفاصيل حسب الضرورة. وبطبيعة الحال، لا يوجد شيء خارق للطبيعة في رسم مثل هذا المخطط. عند العمل على مهامك الخاصة، يمكنك رسمها يدويًا بسرعة. سيساعدك هذا على تطوير القدرة على التفكير في بنية التطبيق وتحديد أوجه القصور في بنية الفصل في وقت مبكر، وليس بعد قضاء اليوم بالفعل في تنفيذ النموذج الخاطئ. يبدو هذا سببًا وجيهًا لتجربته، أليس كذلك؟ :)

أتمتة

هناك طرق مختلفة لإنشاء مخططات PlantUML تلقائيًا. على سبيل المثال، لدى IDEA البرنامج الإضافي SketchIT ، لكنه لا يرسم المخططات بشكل صحيح تمامًا. لنفترض أن تنفيذ الواجهات تم رسمه بشكل غير صحيح (يتم عرضه على أنه وراثة). يحتوي الإنترنت على أمثلة حول كيفية دمج ذلك في عملية إنشاء مشروعك. على سبيل المثال، يمكنك العثور على كيفية استخدام uml-Java-docklet مع Maven. للتوضيح، سنستخدم Maven Archetype لإنشاء مشروع Maven بسرعة. يجري

mvn archetype:generate
ردًا على اختيار رقم أو تطبيق عامل التصفية، اترك الإعداد الافتراضي — فقط اضغط على Enter. سيكون دائمًا "maven-archetype-quickstart". حدد الإصدار الأحدث. بعد ذلك، سنجيب على بعض الأسئلة وننتهي من إنشاء المشروع: UML: من النظرية إلى التطبيق - 5Maven ليس موضوع هذه المقالة، لذلك يمكنك العثور على إجابات لأسئلتك حول Maven في مركز مستخدمي Maven . في المشروع الذي تم إنشاؤه، افتح ملف وصف المشروع، pom.xml، للتحرير. سنقوم بنسخ المحتويات من وصف تثبيت uml-Java-docklet إلى هذا الملف. لا يمكن العثور على القطعة الأثرية المستخدمة في الوصف في مستودع Maven المركزي. لكن ما يلي كان مفيدًا بالنسبة لي: https://mvnrepository.com/artifact/com.chfourie/uml-java-doclet/1.0.0 . بمعنى آخر، في الوصف، تحتاج ببساطة إلى استبدال معرف المجموعة من "info.leadinglight" إلى "com.chfourie" وتعيين الإصدار على "1.0.0". بعد ذلك، يمكننا تنفيذ الأوامر التالية في الدليل باستخدام ملف pom.xml:

mvn clean install
و

mvn javadoc: javadoc
إذا فتحنا الآن الوثائق التي تم إنشاؤها (explorer target\site\apidocs\index.html)، فسنرى مخططات UML. بالمناسبة، يتم الآن عرض علاقة التنفيذ بشكل صحيح :)

خاتمة

كما ترون، UML يتيح لك تصور بنية التطبيق الخاص بك. لكن UML يمكنها أن تفعل أكثر من ذلك بكثير. يمكنك استخدام UML لوصف العمليات المختلفة داخل شركتك أو لوصف عملية الأعمال التي تشمل وظيفة تكتبها. ستحتاج إلى أن تقرر بنفسك مدى فائدة لغة UML بالنسبة لك شخصيًا، ولكن بغض النظر عما تقرره، سيكون من المفيد أن تجد الوقت لمعرفة المزيد عنها.
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION