'
'ڈیزائن پیٹرنز ایکسپوزڈ' سیریز کی پہلی پوسٹ میں خوش آمدید۔ اس سیریز میں ہم شروع سے ہر ڈیزائن پیٹرن کو ننگا کرنے جارہے ہیں۔
صرف ایک پروگرامنگ زبان اور اس کی تشکیل جاننے سے آپ کو بہتر پروگرامر یا ڈویلپر نہیں بن پائے گا۔ ایسا سافٹ ویئر بنانے کے لئے ڈیزائن پیٹرنز کا علم درکار ہے جو آج اور آئندہ بھی کام کرے گا۔
بہت سارے ڈویلپرز ان ڈیزائن پریشانیوں کا مقابلہ کر چکے ہیں جن کا ابھی آپ سامنا کر رہے ہیں یا مستقبل میں ان کا سامنا کرنا پڑے گا۔ انہوں نے اس مسئلے سے نمٹنے کا ایک معیاری طریقہ بیان کیا ہے۔ لہذا ڈیزائن پیٹرنز کا استعمال کرکے آپ کو ثابت شدہ تکنیک کو استعمال کرنے کا فائدہ ملتا ہے۔
ہر ڈیزائن پیٹرن ایک خاص قسم کی صورتحال کو حل کرنے کے لئے ہوتا ہے ایسی صورتحال ہوسکتی ہے جہاں ایک سے زیادہ ڈیزائن پیٹرن استعمال ہوسکیں۔
زیادہ تر پروگرامر صرف اس مسئلے کو حل کرنے کی کوشش کرتے ہیں جس کا سامنا وہ ڈیزائن پیٹرن ، بے کار کوڈ یا یہاں تک کہ سخت جوڑے کی پرواہ کیے بغیر کرتے ہیں۔ لیکن اچھے پروگرامر مختلف طریقے سے شروع کرتے ہیں۔ وہ آج کی ضروریات ، آئندہ کی ضروریات ، کوڈ کی بحالی اور کوڈ کے دوبارہ استعمال کے بارے میں سوچتے ہیں۔
اچھے پروگرامرز کو ضرورت کے ملنے کے بعد کوڈنگ شروع کرنے میں جلدی نہیں ہوتی ہے۔ وہ بیٹھ کر اس مسئلے کے بارے میں سوچتے ہیں کہ آیا ان کا ڈیزائن کام کرے گا۔ اگر ہاں ، چاہے یہ 6 ماہ کے بعد کام کرے ، جب تقاضے بدل جائیں گے۔
اچھے پروگرامر اپنا قلم اور کاغذ لیتے ہیں اور اپنی کلاسوں اور کلاسوں کے مابین تعلقات کو ڈیزائن کرنا شروع کردیتے ہیں۔ وہ ان کے ڈیزائن میں ڈھیلے ڈھونگ اور اعلی آہنگ کو حاصل کرنے کی کوشش کرتے ہیں ، جبکہ یہ سب کرتے ہوئے ان کے ذہن میں آبجیکٹ اورینٹڈ اصول ہیں۔ وہ فوری طور پر نچلی سطح کے کوڈ کے اندر نہیں جاتے ہیں۔ لچکدار اور دوبارہ قابل استعمال سافٹ ویئر ڈیزائن کرنے کے ل you ، آپ کو اس نقطہ نظر پر عمل کرنا چاہئے بصورت دیگر آپ اپنے آپ کو کوڈ میں ترمیم کرتے ہوئے ہمیشہ تلاش کریں گے۔
سافٹ ویئر انڈسٹری میں صرف ایک ہی چیز مستقل ہے اور وہ ہے بدلیں۔ ضروریات ضرور بدلتی رہیں گی۔ تو ہم کس طرح سافٹ ویئر ڈیزائن کرتے ہیں جسے آپ کا کوڈ آسانی سے مستقبل کی ضروریات کے مطابق ڈھال سکتا ہے؟ اس کے ل you آپ کو جلدی سے شروع کرنا ہوگا ، اور اس کو اس طرح سے ڈیزائن کرنا ہوگا کہ آئندہ ضروریات آپ کے پچھلے کوڈ کو توڑے نہیں۔
میں یہ کیسے کر سکتا ہوں؟
ٹھیک ہے ، یہ ان اصولوں پر مبنی ڈیزائن اصولوں اور ڈیزائن پیٹرن پر عمل کرکے کیا جاسکتا ہے۔
اب ، کوڈنگ میں کودو لگائیں اور ایک بہتر پروگرامر بننے کے لئے سفر شروع کریں۔ اس پوسٹ میں ، ہم ایک انتہائی اہم نمونہ کو ننگا کرنے جارہے ہیں - حکمت عملی کا نمونہ .
جب میں کہتا ہوں کہ سب سے اہم یہ اس عام پریشانی کی عکاسی کرتا ہے جو اسٹریٹیجی پیٹرن کے ذریعہ حل کیا جاتا ہے۔
حکمت عملی کا نمونہ کیا ہے؟
یہاں تعریف ’گینگ آف فور‘ کتاب سے سیدھی ہے۔حکمت عملی کا نمونہ الگورتھم کا تبادلہ کرنے والا خاندان بنانے کے لئے استعمال ہوتا ہے جہاں سے رن ٹائم کے دوران مطلوبہ عمل کا انتخاب کیا جاتا ہے”۔
اگر آپ ہیںسمجھنے کے قابل نہیں ، پریشان نہ ہوں ، ہم اسے ایک میں بیان کرنے جارہے ہیںآسانراستہآپ کے لئےسمجھ
آئیے پہلے اس مسئلے کو سمجھیں اور پھر ہم دیکھیں گے کہ حکمت عملی پیٹرن اس کو کیسے حل کرسکتا ہے۔
مذکورہ بالا یو ایم ایل آریھ میں ، ہمارے پاس اینیمل تجرید کلاس اور دو کنکریٹ کلاسز ، ڈاگ اینڈ برڈ ہیں ، جو اینیمل سپر کلاس سے بڑھ رہے ہیں۔
تو آئیے ایک انیمل تجریدی کلاس اور دو کنکریٹ کلاس ، ڈاگ اینڈ برڈ کی تعریف کرتے ہیں۔
آپ مندرجہ بالا ڈیزائن کے بارے میں کیا سوچتے ہیں؟ ہمارے ڈیزائن میں ایک بڑی غلطی ہے۔
تمام جانور اڑ نہیں سکتے ، جیسے اوپر والے معاملے میں کتا بھی اڑ نہیں سکتا۔ لیکن پھر بھی اس میں ’اڑن‘ کا برتاؤ ہے۔
ہم نے جانوروں کی کلاس کے اندر خلاصہ مکھی () کا طریقہ لکھ کر غلطی کی۔ یہ ڈیزائن ہر ذیلی طبقے کے ڈاگ ، برڈ ، پینگوئن ، مگرمچرچھ ، گوز وغیرہ کو مکھی () کے طریقہ کار کو نافذ کرنے پر مجبور کرے گا۔
ہمیں سمجھنا چاہئے تھا کہ اڑنا ایک ایسی صلاحیت ہے جو تمام جانوروں میں نہیں ہوگی۔ جانوروں کے تجریدی کلاس میں مکھی () کا طریقہ مہی providingا کرکے ہم نے تمام ذیلی طبقات میں پرواز کی اہلیت طے کرلی ہے جو جانوروں کے تمام ذیلی طبقات کے لئے درست نہیں ہے۔
آپ سوچ سکتے ہیں کہ ذیلی کلاسوں میں اڑنے کے طریقہ کار کو نافذ کرنے میں کیا حرج ہے۔ اگرچہ آپ صرف 'میں اڑ نہیں سکتا' پرنٹ کرنے کے لئے اڑان والے جانوروں کی ذیلی کلاسوں میں مکھی () کے طریقہ کار کو نافذ کرسکتے ہیں۔ لیکن مسئلہ یہ ہے کہ ، آپ اب بھی اڑنے والے جانوروں کو مکھیوں کا سلوک دے رہے ہیں۔ یہ درست نہیں ہے۔
کت dogا فلائی () یا مگرمچرچھ. (فلائی) کو فون کرنا کس طرح محسوس ہوتا ہے۔
لہذا ، اب ہم یہ سمجھ چکے ہیں کہ ہمارا ڈیزائن ٹھیک نہیں ہے اور ہمیں جانوروں کی ذیلی طبقے سے مکھی () کا طریقہ ختم کرنا چاہئے۔
جاوا میں پیلنڈروم کی جانچ کیسے کریں
اپنی کلاسوں کو اس انداز سے ڈیزائن کرنے کا دوسرا طریقہ کیا ہے کہ ہمارے ڈیزائن میں جانوروں کی سب ذیلی جماعتوں کو مکھیوں کے طرز عمل کا اطلاق نہیں ہوتا ہے۔
ایک حل جو فوری طور پر ذہن میں آتا ہے وہ یہ ہے کہ ہم اڑنے کا طریقہ کار رکھ کر اڑنے والے انٹرفیس کو بناسکتے ہیں اور صرف جانوروں کو ہی اڑ سکتا ہے جو اڑنے والے انٹرفیس کو نافذ کرے گا۔ اس طرح ہم مکھیوں کے طرز عمل کی وضاحت کرنے کیلئے جانوروں کی سب ذیلی جماعتیں نافذ نہیں کریں گے۔ تو آئیے اس ڈیزائن کے نقطہ نظر کوڈ کریں۔
جانوروں کی کلاس سے اڑنے والے طریقہ کو ہٹانے کے بعد اب ، ہمارے جانوروں کی کلاس نیچے والے کوڈ کی طرح نظر آئے گی۔
اب چلیں فلائنگ انٹرفیس کی
اب ، ڈاگ کلاس تبدیل کردی جائے گیجیسےنیچے کوڈ ہے اور اس میں اڑنے والا سلوک کرنے کی ضرورت نہیں ہے۔
آئیے ہمارے کچھ جانوروں کی ذیلی کلاسوں کو دیکھیں جن میں پرواز کا طرز عمل ہوگا۔
ہم نے اپنے پچھلے مسئلے کو حل کرلیا ہے ، لیکن ہم ایک نئی پریشانی میں مبتلا ہوگئے ہیں اور وہ ہے 'کوڈ ڈپلیکیشن'۔
کہیں ، ہمارے پاس 100 مختلف اڑان والے جانوروں کی ذیلی کلاسیں ہونے والی ہیں۔ ہمیں مکھیوں کے طرز عمل کے لئے کوڈ کو نقل کرنا ہوگا کیوں کہ فلائنگ انٹرفیس مکھیوں کے طرز عمل کے لئے کوئی عمل درآمد نہیں کرسکتا ہے ، اور بعد میں اگر ہم کسی بھی ذیلی طبقے میں مکھی () کے طریقہ کار کو تبدیل کرنا چاہتے ہیں تو ہمیں اس کلاس کو کھولنا ہوگا اور کوڈ کو تبدیل کرنا ہوگا۔ جو برا ہے۔ ہمارے پاس کچھ بڑی کمی ہے اور وہ یہ ہے کہ ہم رن ٹائم کے وقت کلاس کے اڑنے والے سلوک کو تبدیل نہیں کرسکتے ہیں۔
لیکن پریشان نہ ہوں ، آپ کو اس پریشانی سے نکالنے کے لئے حکمت عملی کا نمونہ موجود ہے۔
تو آئیے اسٹریٹجی پیٹرن کو استعمال کرنے کیلئے ہمارا کوڈ ریفیکٹر۔
فلائنگ انٹرفیس ویسے ہی رہے گا جیسا کہ ہے۔ اب ، خود کو ہر اڑانے والے ذیلی طبقے کے بجائے خود ہی اڑان والے انٹرفیس کو نافذ کرنے کے بجائے ، ہم الگ ٹھوس کلاس کی تعریف کرنے جارہے ہیں جو مختلف فلائنگ سلوک کو نافذ کرے گی۔ آئیے دیکھتے ہیں کہ ایسا کیسے کریں۔
تو ، یہ سب کیسے کام کرتا ہے ، آئیے ٹیسٹ کلاس دیکھیں
اسٹریٹیجی پیٹرن کا استعمال کرکے ہم اب رن ٹائم کے وقت کسی بھی جانور کے اڑنے والے سلوک کو تبدیل کرنے کے اہل ہیں اور وہ کسی بھی ذیلی طبقے کو بھی بغیر کسی عمل کے اپنے اپنے طرز عمل کی وضاحت کرنے کے قابل ہے۔
حکمت عملی کا نمونہ کب استعمال کریں؟
جب آپ رن ٹائم کے رویے کو متحرک طور پر تبدیل کرنا چاہتے ہیں۔
اس بات کو یقینی بنانے کے لئے کہ آپ حکمت عملی پیٹرن کو واضح طور پر سمجھتے ہو ، آئیے ایک اور مثال پیش کرتے ہیں۔
مذکورہ ملازمین کی کلاس میں ہم ملازم کی تنخواہ مقرر کررہے ہیں۔ اگر کوئی ملازم 'انٹرن' ہے تو ہم اصل تنخواہ کا حساب کتاب کرنے کے لئے بنیادی تنخواہ میں 10٪ بونس شامل کر رہے ہیں۔
اگر کوئی ملازم 'ویب ڈویلپر' ہے تو ہم اصل تنخواہ کا حساب کتاب کرنے کے لئے بنیادی تنخواہ میں 20٪ بونس شامل کر رہے ہیں اور اسی طرح کا عمل دیگر اقسام کے ملازمین کے لئے بھی ہے۔ اگرچہ اصل تنخواہ کا حساب لگانے کے لئے ہمارے الگورتھم کو سمجھنے میں آسانی پیدا کرنے کے لئے بہت آسان ہے لیکن زیادہ تر وقت ، اس میں بہت سارے موازنہ اور حساب کتاب شامل ہیں۔
تو ، ملازم کلاس کوڈ میں کیا غلط ہے؟
ٹھیک ہے ، تنخواہ (getPay ()) کا حساب لگانے کے لئے کوڈ مستحکم ہے۔ فرض کریں کہ میں 'انٹرن' کے لئے بونس کو 10٪ سے 14٪ میں تبدیل کرنا چاہتا ہوں۔ مجھے ملازم کلاس کا کوڈ کھولنا اور اسے تبدیل کرنا پڑے گا۔
اور دوسرا مسئلہ یہ ہے کہ میں رن ٹائم کے وقت کسی ملازم کی تنخواہ الگورتھم کو تبدیل نہیں کرسکتا ہوں۔ تو ، یہ کیسے کریں؟ اس طرح کی پریشانی سے نمٹنے کے لئے اسٹریٹجی پیٹرن خاص طور پر استعمال ہوتا ہے۔
آئیے اسٹریٹیجی پیٹرن کو استعمال کرنے کے لئے کوڈ کو ری ایکٹر کریں۔
میں تنخواہ کا حساب کتاب کرنے کے لئے کئی الگورتھم کی وضاحت کرنے جارہا ہوں۔ تب میں رن ٹائم پر تنخواہ کا حساب کتاب کرنے کے لئے ان میں سے کسی بھی الگورتھم کا استعمال کروں گا۔
اب ، آئیے دیکھتے ہیں کہ ملازم کلاس کس طرح تبدیل ہو رہا ہے۔
نوٹ: میں نے ملازمین کی کلاس سے تنخواہ کے حساب کتاب کی منطق کو ہٹا دیا ہے اور ایک سیٹ پے الگوریتھم () طریقہ تیار کیا ہے جس کے ذریعے میں پے ایلگوریتھم کا تعین کروں گا جسے میں تنخواہ کے حساب کتاب کے لئے استعمال کرنا چاہتا ہوں۔
اس سے مجھے رن ٹائم پر متحرک طور پر کسی بھی پے ایلگوریتھم کی وضاحت کرکے تنخواہ کا حساب کتاب کرنے میں نرمی ہوگی۔ اس کے علاوہ ، یہ بھی نوٹ کریں کہ بعد میں اگر مجھے تنخواہ کے حساب کتاب کی منطق کو تبدیل کرنا ہے تو میں ایک نیا پے ایلگوریتھم تشکیل دے سکتا ہوں اور اسے تنخواہ کا حساب کتاب کرنے کے لئے استعمال کرسکتا ہوں۔ مجھے پچھلے کوڈ کو تبدیل کرنے کی ضرورت نہیں ، کیا یہ اچھا نہیں ہے؟
تو آئیے اسے کام کرتے دیکھتے ہیں۔
مجھے امید ہے کہ آپ اسٹریٹیجی پیٹرن کو اچھی طرح سمجھ چکے ہوں گے۔ کسی چیز کو سیکھنے کا بہترین طریقہ مشق کرنا ہے۔
اگر آپ کے پاس اسٹریٹیجی پیٹرن یا کسی اور پیٹرن سے متعلق کوئی سوالات ہیں تو ، اپنے سوالات کو نیچے چھوڑ دیں۔
ابتدائیوں کے لئے بہترین جاوا آئیڈیا
اگلی پوسٹ کے لئے دیکھو ، جہاں ہم ایک انتہائی مشہور ڈیزائن پیٹرن ، فیکٹری پیٹرن کو ننگا کریں گے۔
تب تک آپ اس کے ساتھ کوڈ پلے ڈاؤن لوڈ کرسکتے ہیں اور اس بات کو یقینی بنائیں کہ آپ اپنے سر میں اسٹریٹیجی پیٹرن کو سیمنٹ کریں۔
ہمارے لئے ایک سوال ہے؟ تبصرے کے سیکشن میں ان کا تذکرہ کریں اور ہم آپ کو واپس ملیں گے۔
متعلقہ اشاعت: