تعارف
میرے خیال میں سب نے بچپن میں یہ کہاوت سنی ہوگی کہ ’’ دو بار ناپ لو، ایک بار کاٹو ‘‘۔ پروگرامنگ میں بھی ایسا ہی ہے۔ اس پر عمل درآمد کرنے میں وقت گزارنے سے پہلے اس کے نفاذ کے بارے میں سوچنا ہمیشہ بہتر ہے۔ اکثر عمل درآمد کے دوران آپ کو کلاسیں بنانا پڑتی ہیں اور ان کا تعامل ایجاد کرنا پڑتا ہے۔ اور اکثر اس کی بصری نمائندگی مسئلے کو درست طریقے سے حل کرنے میں مدد کر سکتی ہے۔ یہ وہ جگہ ہے جہاں UML ہماری مدد کرتا ہے ۔UML کیا ہے؟
اگر آپ سرچ انجن میں تصویریں دیکھیں تو یہ واضح ہو جائے گا کہ یو ایم ایل ڈائیگرام، تیر اور چوکوں کے بارے میں کچھ ہے۔ اہم بات یہ ہے کہ یو ایم ایل یونیفائیڈ ماڈلنگ لینگویج میں ترجمہ کرتا ہے ۔ یونیفائیڈ کا لفظ یہاں اہم ہے۔ یعنی ہماری تصویریں صرف ہم ہی نہیں بلکہ UML کو جاننے والے دوسرے بھی سمجھیں گے۔ یہ پتہ چلتا ہے کہ یہ خاکے بنانے کے لیے ایک بین الاقوامی زبان ہے۔
جیسا کہ وکی پیڈیا کہتا ہے۔
UML سافٹ ویئر ڈویلپمنٹ، بزنس پروسیس ماڈلنگ، سسٹم ڈیزائن، اور تنظیمی ڈھانچے کی نمائش میں آبجیکٹ ماڈلنگ کے لیے ایک گرافیکل وضاحتی زبان ہے۔سب سے دلچسپ بات جس کے بارے میں ہر کوئی نہیں سوچتا اور نہ ہی اس کا احساس ہوتا ہے وہ یہ ہے کہ UML کی خصوصیات ہیں۔ مزید یہ کہ، یہاں تک کہ ایک UML2 تفصیلات بھی ہیں۔ تفصیلات کے بارے میں مزید تفصیلات آبجیکٹ مینجمنٹ گروپ کی ویب سائٹ پر مل سکتی ہیں ۔ دراصل، یہ گروپ یو ایم ایل کی وضاحتیں تیار کر رہا ہے۔ یہ بھی دلچسپ ہے کہ UML صرف طبقات کی ساخت کو بیان کرنے تک محدود نہیں ہے۔ UML ڈایاگرام کی بہت سی قسمیں ہیں۔ یو ایم ایل ڈایاگرام کی اقسام کی ایک مختصر تفصیل اسی ویکیپیڈیا: یو ایم ایل ڈائیگرامز میں یا ویڈیو میں تیمور بطیرشینوف ریویو آف یو ایم ایل ڈائیگرامس میں دیکھی جا سکتی ہے ۔ UML بھی وسیع پیمانے پر مختلف عملوں کو بیان کرنے کے لیے استعمال کیا جاتا ہے، مثال کے طور پر یہاں: JWT کا استعمال کرتے ہوئے سنگل سائن آن ۔ UML کلاس ڈایاگرام کے استعمال کی طرف واپس آتے ہوئے، یہ کتاب Head First: Design Patterns پر توجہ دینے کے قابل ہے ، جس میں انہی UML ڈایاگرام کے ذریعے نمونوں کی عکاسی کی گئی ہے۔ یہ پتہ چلتا ہے کہ واقعی UML استعمال ہو رہا ہے۔ اور یہ پتہ چلتا ہے کہ اس کے اطلاق کے بارے میں علم اور سمجھ کافی مفید مہارت ہے۔
درخواست
آئیے دیکھتے ہیں کہ آپ IDE سے اسی UML کے ساتھ کیسے کام کر سکتے ہیں۔ آئیے IntelliJ Idea کو بطور IDE لیتے ہیں ۔ اگر ہم IntelliJ Idea Ultimate استعمال کرتے ہیں ، تو ہمارے پاس " UML Support " پلگ ان باکس کے باہر انسٹال ہوگا۔ یہ آپ کو خود بخود خوبصورت کلاس ڈایاگرام بنانے کی اجازت دیتا ہے۔ مثال کے طور پر، Ctrl+N یا مینو آئٹم "Navigate" -> "Class" کا استعمال کرتے ہوئے ہم ArrayList کلاس میں جاتے ہیں ۔ اب، کلاس کے نام کے لیے سیاق و سباق کے مینو کے ذریعے، "ڈایاگرام" -> "ڈائیگرام پاپ اپ دکھائیں" کو منتخب کریں۔ نتیجے کے طور پر، ہمیں ایک خوبصورت خاکہ ملتا ہے:
@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
Idea میں نتیجہ دیکھنے کے لیے، "View" -> "Tool Windows" -> "PlantUML" کو منتخب کریں۔ ہمیں کلاسز کی نمائندگی کرنے والے صرف دو مربع ملیں گے۔ جیسا کہ ہم جانتے ہیں، یہ دونوں کلاسیں فہرست انٹرفیس کو نافذ کرتی ہیں۔ اس طبقاتی تعلق کو نفاذ کہتے ہیں۔ اس طرح کے کنکشن کو ظاہر کرنے کے لیے، نقطے والی لکیر کے ساتھ تیر کا استعمال کریں۔ آئیے اس کی عکاسی کرتے ہیں:
interface List
List <|.. ArrayList
List <|.. LinkedList
List
- بچوں کی کلاسوں میں سے ایک Collection
۔ یعنی یہ مجموعہ سے وراثت میں ملتا ہے۔ اس تعلق کو جنرلائزیشن کہتے ہیں۔ یہ ایک تیر کی طرح لگتا ہے جس میں ایک باقاعدہ مسلسل لکیر ہے۔ آئیے اس کی عکاسی کرتے ہیں:
interface Collection
Collection <|-- List
درج ذیل قسم کے کنکشن کے لیے، کلاس کی تفصیل میں پیکج کے عناصر کی نجیArrayList
صف کے بارے میں ایک اندراج شامل کریں :
~Object[] elementData
اب ہم یہ دکھانا چاہتے ہیں کہ کیا ArrayList
کچھ اشیاء پر مشتمل ہے۔ اس صورت میں، کنکشن کی قسم جمع ہو گی ۔ اس معاملے میں یونٹ ہے ArrayList
، کیونکہ یہ دیگر اشیاء پر مشتمل ہے. ہم جمع کا انتخاب کرتے ہیں کیونکہ فہرست میں موجود اشیاء فہرست کے بغیر رہ سکتی ہیں: وہ اس کے لازمی حصے نہیں ہیں۔ ان کی زندگی کا وقت فہرست کی زندگی سے منسلک نہیں ہے۔ Aggregate کا لاطینی سے ترجمہ "جمع" کے طور پر کیا گیا ہے، یعنی کسی چیز سے بنی چیز۔ مثال کے طور پر، زندگی میں، ایک پمپنگ یونٹ ہے، جو ایک پمپ اور ایک موٹر پر مشتمل ہے. یونٹ خود جدا کیا جا سکتا ہے، اس کے کچھ اجزاء کو چھوڑ کر. مثال کے طور پر، بیچنا یا کسی دوسرے یونٹ میں ڈالنا۔ اسی طرح فہرست ہے۔ اور اس کا اظہار یونٹ کے قریب ایک خالی ہیرے اور ایک مسلسل لکیر کی صورت میں ہوتا ہے۔ آئیے اسے اس طرح بیان کرتے ہیں:
class Object{
}
ArrayList o- Object
اب ہم یہ دکھانا چاہتے ہیں کہ، اس کے برعکس ArrayList
، کلاس میں ایسے کنٹینرز LinkedList
ہوتے ہیں جو ذخیرہ شدہ ڈیٹا کا حوالہ دیتے ہیں۔ Node
اس صورت میں، Node
وہ خود کا حصہ ہیں LinkedList
اور الگ الگ نہیں رہ سکتے ہیں. Node
براہ راست ذخیرہ شدہ مواد نہیں ہے، لیکن اس کا صرف ایک لنک ہے۔ مثال کے طور پر، جب ہم LinkedList
کسی قطار میں شامل کرتے ہیں، تو ہم ایک نیا شامل کرتے ہیں Node
، جس میں اس قطار کا ایک لنک ہوتا ہے، ساتھ ہی پچھلی اور اگلی کا لنک ہوتا ہے Node
۔ اس قسم کے مواصلات کو کمپوزیشن کہتے ہیں ۔ ایک جامع (جو حصوں پر مشتمل ہوتا ہے) کو ظاہر کرنے کے لیے، ایک رنگین ہیرا کھینچا جاتا ہے، جس کی طرف ایک مسلسل لکیر ہوتی ہے۔ آئیے اب اسے کنکشن کے ٹیکسٹ ڈسپلے کے طور پر لکھتے ہیں:
class Node{
}
LinkedList *-- Node
اور اب ہمیں یہ سیکھنے کی ضرورت ہے کہ کس طرح ایک اور اہم قسم کے رشتے کو ظاہر کرنا ہے - انحصار کا رشتہ۔ یہ اس وقت استعمال ہوتا ہے جب ایک کلاس دوسری کلاس کا استعمال کرتی ہے، اور کلاس میں استعمال ہونے والی کلاس پر مشتمل نہیں ہوتا ہے اور یہ اس کی نسل نہیں ہے۔ مثال کے طور پر، LinkedList
وہ ArrayList
جانتے ہیں کہ کس طرح تخلیق کرنا ہے ListIterator
۔ آئیے اسے ایک نقطے والی لکیر کے ساتھ تیر کے طور پر دکھائیں:
class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
اس سب کے بعد یہ اس طرح نظر آئے گا:
آٹومیشن
خود کار طریقے سے PlantUML ڈایاگرام بنانے کے مختلف طریقے ہیں۔ مثال کے طور پر، Idea کے پاس SketchIT پلگ ان ہے ، لیکن یہ انہیں بالکل درست طریقے سے نہیں کھینچتا ہے۔ مثال کے طور پر، انٹرفیس کے نفاذ کو غلط طریقے سے تیار کیا گیا ہے (وراثت کے طور پر دکھایا گیا ہے)۔ انٹرنیٹ پر ایسی مثالیں بھی موجود ہیں کہ اسے اپنے پروجیکٹ کے بلڈ لائف سائیکل میں کیسے بنایا جائے۔ ہم کہتے ہیں کہ uml-java-docklet کا استعمال کرتے ہوئے Maven کے لیے ایک مثال موجود ہے ۔ یہ دکھانے کے لیے کہ یہ کیسے کیا جاتا ہے، ہم Maven Archetype کو تیزی سے Maven پروجیکٹ بنانے کے لیے استعمال کریں گے۔ آئیے کمانڈ پر عمل کریں: جب فلٹر کو منتخب کرنے کے لیے کہا جائے ( ایک نمبر منتخب کریں یا فلٹر لگائیں ) تو صرف Enter دبانے سے پہلے سے طے شدہ چھوڑ دیں۔ یہ ہمیشہ " maven-archetype-quickstart " ہوگا ۔ تازہ ترین ورژن منتخب کریں۔ اگلا، ہم سوالات کا جواب دیتے ہیں اور پروجیکٹ کی تخلیق مکمل کرتے ہیں:mvn archetype:generate
mvn clean install
فائل موجود ہے: اور mvn javadoc:javadoc
. اب، اگر ہم تیار کردہ دستاویزات (explorer target\site\apidocs\index.html) کو کھولتے ہیں، تو ہم UML ڈایاگرام دیکھیں گے۔ ویسے، عمل درآمد پہلے ہی یہاں صحیح طریقے سے دکھایا گیا ہے)
GO TO FULL VERSION