CodeGym /جاوا بلاگ /Random-UR /یو ایم ایل کلاس ڈایاگرام
John Squirrels
سطح
San Francisco

یو ایم ایل کلاس ڈایاگرام

گروپ میں شائع ہوا۔

تعارف

میرے خیال میں سب نے یہ کہاوت سنی ہے کہ "دو بار پیمائش کریں، ایک بار کاٹیں"۔ پروگرامنگ میں یہ سچا مشورہ ہے۔ اس پر عمل درآمد کرنے میں کوئی بھی وقت صرف کرنے سے پہلے اس کے نفاذ کے بارے میں سوچنا ہمیشہ بہتر ہے۔ عمل درآمد کے دوران، آپ کو اکثر کلاسز بنانے اور یہ سوچنے کی ضرورت ہوتی ہے کہ وہ کس طرح تعامل کریں گے۔ اس سب کی بصری نمائندگی اکثر آپ کو صحیح حل تلاش کرنے میں مدد کر سکتی ہے۔ یہ وہ جگہ ہے جہاں UML کلاس ڈایاگرام ہماری مدد کے لیے آتا ہے۔

UML کیا ہے؟

اگر آپ تلاش کے انجن میں متعلقہ امیجز کو دیکھتے ہیں، تو آپ دیکھیں گے کہ UML کا خاکوں، تیروں اور چوکوں کے ساتھ کوئی تعلق ہے۔ آپ کو یہ جاننے کی ضرورت ہے کہ UML کا مطلب یونیفائیڈ ماڈلنگ لینگویج ہے۔ متحد یہاں اہم لفظ ہے۔ اس کا مطلب یہ ہے کہ ہماری تصاویر نہ صرف ہم سمجھیں گے بلکہ UML کو جاننے والے کسی اور کو بھی سمجھ آئے گی۔ یہ خاکے بنانے کی زبان ہے۔

وکی پیڈیا کے مطابق،

"UML سافٹ ویئر انجینئرنگ کے میدان میں ایک عام مقصد کی، ترقیاتی، ماڈلنگ زبان ہے جس کا مقصد کسی سسٹم کے ڈیزائن کو تصور کرنے کا ایک معیاری طریقہ فراہم کرنا ہے۔"
سب سے دلچسپ بات، جس کا ہر کوئی اندازہ نہیں لگائے گا، وہ یہ ہے کہ UML کی وضاحتیں ہیں۔ اور یہاں تک کہ ایک UML 2 تفصیلات بھی ہیں۔ تفصیلات کے بارے میں مزید معلومات آبجیکٹ مینجمنٹ گروپ کی ویب سائٹ پر دستیاب ہے۔ درحقیقت، یہ گروپ یو ایم ایل کی وضاحتیں تیار کرتا ہے۔ یہ بھی دلچسپ ہے کہ یو ایم ایل صرف طبقات کی ساخت کو بیان کرنے تک محدود نہیں ہے۔ UML ڈایاگرام کی بہت سی قسمیں ہیں۔ ویکیپیڈیا میں UML ڈایاگرام کی مختلف اقسام کی مختصر تفصیل ہے: UML ڈایاگرام ۔ UML کلاس ڈایاگرام پر واپسی، یہ کتاب "Head First Design Patterns" کا ذکر کرنے کے قابل ہے ، ڈیزائن کے نمونوں کو واضح کرنے کے لیے UML ڈایاگرام کا استعمال کرتی ہے۔ نچلی بات یہ ہے کہ واقعی UML استعمال کیا جاتا ہے۔ اور یہ پتہ چلتا ہے کہ اسے جاننا اور استعمال کرنے کا طریقہ سمجھنا کافی مفید ہے۔

درخواست

آئیے معلوم کریں کہ ہم IDE میں UML کے ساتھ کام کر سکتے ہیں۔ ہم IntelliJ IDEA کو اپنے IDE کے طور پر استعمال کریں گے۔ اگر آپ IntelliJ IDEA Ultimate استعمال کر رہے ہیں، تو ہمارے پاس "UML Support" پلگ ان "آؤٹ آف دی باکس" انسٹال ہوگا۔ یہ آپ کو خود بخود خوبصورت کلاس ڈایاگرام بنانے دیتا ہے۔ مثال کے طور پر، ArrayList کلاس میں جانے کے لیے Ctrl+N یا "نیویگیٹ" -> "کلاس" مینو آئٹم کا استعمال کریں۔ اب کلاس کے نام کے سیاق و سباق کے مینو میں، "ڈایاگرام" -> "ڈائیگرام پاپ اپ دکھائیں" کو منتخب کریں۔ نتیجے کے طور پر، ہمیں ایک خوبصورت خاکہ ملتا ہے۔ یو ایم ایل: تھیوری سے پریکٹس تک - 2 لیکن اگر آپ خود خاکہ کھینچنا چاہتے ہیں تو کیا ہوگا؟ اور اگر آپ کے پاس الٹیمیٹ ورژن نہیں ہے تو کیا ہوگا؟ IntelliJ IDEA کمیونٹی ایڈیشن کا استعمال کرتے ہوئے، ہمارے پاس کوئی دوسرا انتخاب نہیں ہے۔ لہذا ہمیں یہ سمجھنے کی ضرورت ہے کہ یو ایم ایل ڈایاگرام کو کس طرح منظم کیا جاتا ہے۔ سب سے پہلے، ہمیں Graphviz انسٹال کرنے کی ضرورت ہے ۔ یہ گراف ویژولائزیشن ٹولز کا ایک سیٹ ہے۔ ہم جو پلگ ان استعمال کریں گے اس کا انحصار اس پر ہے۔ انسٹالیشن کے بعد، آپ کو بن ڈائرکٹری کو گرافویز انسٹالیشن ڈائرکٹری سے PATH ماحولیاتی متغیر میں شامل کرنے کی ضرورت ہے۔ اس کے بعد، IntelliJ IDEA میں، مینو میں فائل -> سیٹنگز کو منتخب کریں۔ "سیٹنگز" ونڈو میں، "پلگ انز" زمرہ منتخب کریں، "براؤز ریپوزٹریز" بٹن پر کلک کریں، اور PlantUML انٹیگریشن پلگ ان انسٹال کریں۔ PlantUML کے بارے میں کیا اچھا ہے؟ یہ UML کو "ڈاٹ" نامی گراف کی وضاحت کی زبان کا استعمال کرتے ہوئے بیان کرتا ہے، جو اسے زیادہ عالمگیر بناتا ہے، کیونکہ ڈاٹ لینگویج صرف PlantUML سے زیادہ استعمال کرتی ہے۔ مزید یہ کہ ہم ذیل میں جو کچھ بھی کرتے ہیں وہ نہ صرف IDE میں بلکہ planttext.com پر آن لائن بھی کیا جا سکتا ہے ۔ پلانٹ یو ایم ایل پلگ ان انسٹال کرنے کے بعد، ہم "فائل" -> "نیا" کا استعمال کرتے ہوئے یو ایم ایل ڈائیگرامس بنانے کے قابل ہو جائیں گے۔ آئیے ایک "UML کلاس" ڈایاگرام بنائیں۔ یہ خود بخود ایک مثال کے ساتھ ایک ٹیمپلیٹ تیار کرے گا۔ ہم اس کے مواد کو حذف کر دیں گے اور اپنے مواد کو شامل کر دیں گے۔ متن میں اس کی نمائندگی کرنے کا طریقہ سمجھنے کے لیے، پلانٹ یو ایم ایل مینوئل پر ایک نظر ڈالیں: plantuml class-diagram. یو ایم ایل: تھیوری سے پریکٹس تک - 3ان مواد پر انحصار کرتے ہوئے، آئیے اپنا UML خاکہ بنانا شروع کریں۔ درج ذیل مواد شامل کریں، جو دو کلاسوں کی وضاحت کرتا ہے:

@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
IDEA میں نتیجہ دیکھنے کے لیے، "View" -> "Tool 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 کا حصہ ہیں اور ان کا کوئی آزاد وجود نہیں ہے۔ نوڈ خود مواد نہیں ہے ۔ اس میں صرف مواد کا حوالہ ہے۔ مثال کے طور پر، جب ہم لنکڈ لسٹ میں سٹرنگ شامل کرتے ہیں ، تو ہم ایک نیا نوڈ شامل کر رہے ہیں جس میں سٹرنگ کا حوالہ ہوتا ہے، ساتھ ہی پچھلے اور اگلے نوڈ کا لنک ہوتا ہے ۔ اس تعلق کو مرکب کہتے ہیں۔ اسے جامع پر ایک بھرے ہوئے رومبس کے ساتھ ایک مسلسل لکیر کھینچ کر دکھایا گیا ہے (جزئی حصوں سے بنی کوئی چیز)۔ اب ہم متن کے طور پر رشتہ کی نمائندگی کریں گے:

class Node{
}
LinkedList *-- Node
اور اب آپ کو یہ سیکھنے کی ضرورت ہے کہ ایک اور اہم قسم کے رشتے کو کیسے بیان کیا جائے: انحصار۔ یہ اس وقت استعمال ہوتا ہے جب ایک کلاس دوسری کلاس کا استعمال کرتی ہے، لیکن کلاس میں استعمال شدہ کلاس پر مشتمل نہیں ہوتا اور نہ ہی اس کا وارث ہوتا ہے۔ مثال کے طور پر، LinkedList اور ArrayList جانتے ہیں کہ ListIterator کیسے بنانا ہے ۔ ہم اسے ایک نقطے والی لکیر کے ساتھ تیر کے طور پر پیش کرتے ہیں:

class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
یہ سب کرنے کے بعد، ہمیں ملتا ہے: یو ایم ایل: تھیوری سے پریکٹس تک - 4آپ ضرورت کے مطابق زیادہ سے زیادہ تفصیل شامل کر سکتے ہیں۔ بلاشبہ، اس طرح کا خاکہ بنانے کے بارے میں کوئی مافوق الفطرت نہیں ہے۔ اپنے کاموں پر کام کرتے وقت، آپ اسے جلدی سے ہاتھ سے نکال سکتے ہیں۔ اس سے آپ کو ایپلی کیشن کے فن تعمیر کے ذریعے سوچنے کی صلاحیت پیدا کرنے اور طبقاتی ڈھانچے میں کوتاہیوں کی جلد شناخت کرنے میں مدد ملے گی، نہ کہ اس کے بعد کہ آپ نے غلط ماڈل کو نافذ کرنے میں دن گزارا ہو۔ ایسا لگتا ہے کہ اسے آزمانے کی ایک اچھی وجہ ہے، ہے نا؟ :)

آٹومیشن

خود کار طریقے سے PlantUML ڈایاگرام بنانے کے مختلف طریقے ہیں۔ مثال کے طور پر، IDEA میں SketchIT پلگ ان ہے، لیکن یہ مکمل طور پر صحیح طریقے سے خاکے نہیں کھینچتا ہے۔ ہم کہتے ہیں کہ انٹرفیس کے نفاذ کو غلط طریقے سے تیار کیا گیا ہے (یہ وراثت کے طور پر ظاہر ہوتا ہے)۔ انٹرنیٹ کے پاس اس کی مثالیں ہیں کہ اسے آپ کے پروجیکٹ کی تعمیر کے عمل میں کیسے ضم کیا جائے۔ مثال کے طور پر، آپ Maven کے ساتھ uml-java-docklet استعمال کرنے کا طریقہ تلاش کر سکتے ہیں ۔ ظاہر کرنے کے لیے، ہم Maven Archetype کو تیزی سے Maven پروجیکٹ بنانے کے لیے استعمال کریں گے۔ رن

mvn archetype:generate
نمبر منتخب کریں یا فلٹر لگائیں کے جواب میں، پہلے سے طے شدہ چھوڑ دیں — بس Enter دبائیں۔ یہ ہمیشہ "maven-archetype-quickstart" رہے گا۔ تازہ ترین ورژن منتخب کریں۔ اس کے بعد، ہم کچھ سوالات کے جوابات دیں گے اور پروجیکٹ کی تخلیق مکمل کریں گے: یو ایم ایل: تھیوری سے پریکٹس تک - 5Maven اس مضمون کا موضوع نہیں ہے، لہذا آپ Maven Users Center میں Maven کے بارے میں اپنے سوالات کے جوابات حاصل کر سکتے ہیں ۔ تیار کردہ پروجیکٹ میں، ترمیم کے لیے پروجیکٹ کی تفصیل کی فائل pom.xml کو کھولیں۔ ہم اس فائل میں uml-java-docklet انسٹال کرنے کی تفصیل سے مواد کاپی کریں گے ۔ تفصیل میں استعمال ہونے والا نمونہ ماون سینٹرل ریپوزٹری میں نہیں مل سکتا۔ لیکن مندرجہ ذیل نے میرے لئے کام کیا: 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 ذاتی طور پر آپ کے لیے کتنا مفید ہے، لیکن اس سے کوئی فرق نہیں پڑتا ہے کہ آپ جو بھی فیصلہ کرتے ہیں، اس کے بارے میں مزید جاننے کے لیے وقت نکالنا مددگار ثابت ہوگا۔
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION