کی دنیا میں (او او پی) ، ڈیزائن کے بہت سارے رہنما خطوط ، نمونے یا اصول موجود ہیں۔ ان اصولوں میں سے پانچ کو عام طور پر ایک ساتھ جوڑا جاتا ہے اور مخفف SOLID کے ذریعہ جانا جاتا ہے۔ جب کہ ان پانچ اصولوں میں سے ہر ایک مخصوص چیز کی وضاحت کرتا ہے ، وہ اس طرح کے بھی آتے ہیں کہ ان میں سے کسی ایک کو اپنانے کا مطلب ہوتا ہے یا دوسرے کو اپنانے کی طرف جاتا ہے۔ اس مضمون میں ہم جاوا میں سولیڈ اصولوں کو سمجھیں گے۔
جاوا میں سولیڈ اصولوں کی تاریخ
رابرٹ سی مارٹن نے آبجیکٹ پر مبنی ڈیزائن کے پانچ اصول دیئے ، اور مخفف 'S.O.L.I.D' اس کے لئے استعمال کیا جاتا ہے۔ جب آپ S.O.L.I.D کے تمام اصولوں کو مشترکہ انداز میں استعمال کرتے ہیں تو ، آپ کے لئے ایسا سافٹ ویئر تیار کرنا آسان ہوجاتا ہے جس کا آسانی سے انتظام کیا جاسکے۔ S.O.L.I.D استعمال کرنے کی دوسری خصوصیات یہ ہیں:
- یہ کوڈ کی بدبو سے بچتا ہے۔
- جلدی سے ریفریکٹر کوڈ۔
- انکولی یا فرتیلی سافٹ ویئر ڈویلپمنٹ کرسکتے ہیں۔
جب آپ اپنے کوڈنگ میں S.O.L.I.D کے اصول کو استعمال کرتے ہیں تو ، آپ کوڈ لکھنا شروع کردیتے ہیں جو موثر اور موثر ہے۔
S.O.L.I.D کا کیا مطلب ہے؟
ٹھوس جاوا کے پانچ اصولوں کی نمائندگی کرتا ہے جو یہ ہیں:
- ایس : واحد ذمہ داری کا اصول
- یا : کھلا اصول
- ایل : لیسکوف متبادل اصول
- میں : انٹرفیس الگ الگ اصول
- ڈی : انحصار الٹا اصول
اس بلاگ میں ، ہم جاوا کے پانچوں سولوڈ اصولوں پر تفصیل سے گفتگو کریں گے۔
جاوا میں واحد ذمہ داری کا اصول
یہ کیا کہتا ہے؟
رابرٹ سی مارٹن نے اس کی وضاحت کی ہے کیونکہ ایک کلاس کی صرف ایک اور صرف ذمہ داری ہونی چاہئے۔
واحد ذمہ داری کے اصول کے مطابق ، صرف ایک ہی وجہ ہونی چاہئے جس کی وجہ سے کلاس کو تبدیل کرنا پڑتا ہے۔ اس کا مطلب یہ ہے کہ کلاس کا ایک کام کرنا چاہئے۔ اس اصول کو اکثر ساپیکش کہتے ہیں۔
اس کی مثال کو مثال کے ساتھ سمجھا جاسکتا ہے۔ ذرا تصور کریں کہ یہاں ایک کلاس ہے جو مندرجہ ذیل آپریشن کرتی ہے۔
ڈیٹا بیس سے منسلک
ڈیٹا بیس ٹیبلز سے کچھ ڈیٹا پڑھیں
آخر میں ، اسے کسی فائل میں لکھ دیں۔
کیا آپ نے منظر نامے کا تصور کیا ہے؟ یہاں کلاس کے بدلنے کی متعدد وجوہات ہیں ، اور ان میں سے کچھ فائل آؤٹ پٹ میں تبدیلی ، نئے ڈیٹا بیس اپنانے ہیں۔ جب ہم واحد اصولی ذمہ داری کے بارے میں بات کر رہے ہیں ، تو ہم کہیں گے ، کلاس کے بدلے جانے کی بہت ساری وجوہات ہیں ، لہذا یہ واحد ذمہ داری کے اصول میں ٹھیک سے فٹ نہیں آتی ہے۔
مثال کے طور پر ، ایک آٹوموبائل کلاس خود کو شروع کر سکتی ہے یا روک سکتی ہے لیکن اسے دھونے کا کام کار واش کلاس سے ہے۔ ایک اور مثال میں ، کتابی کلاس میں اپنے نام اور متن کو محفوظ کرنے کی خصوصیات ہیں۔ لیکن کتاب چھپانے کا کام کتاب پرنٹر کلاس سے ہونا چاہئے۔ کتاب پرنٹر کلاس کنسول یا کسی اور میڈیم پر چھاپ سکتی ہے لیکن اس طرح کے انحصار کو کتاب کلاس سے ہٹا دیا جاتا ہے
یہ اصول کیوں ضروری ہے؟
جب سنگل ذمہ داری کے اصول کی پیروی کی جاتی ہے ، تو جانچنا آسان ہوتا ہے۔ ایک ہی ذمہ داری کے ساتھ ، کلاس میں ٹیسٹ کے معاملات کم ہوں گے۔ کم فعالیت کا مطلب یہ بھی ہوتا ہے کہ دوسرے طبقات سے انحصار کم ہوجائے۔ یہ بہتر کوڈ تنظیم کی طرف جاتا ہے چونکہ چھوٹی اور عمدہ کلاسوں کی تلاش آسان ہے۔
اس اصول کی وضاحت کرنے کے لئے ایک مثال:
فرض کیج you کہ آپ سے یوزر سیٹنگ سروس نافذ کرنے کے لئے کہا گیا ہے جس میں صارف کی ترتیبات کو تبدیل کرسکتے ہیں لیکن اس سے پہلے صارف کی توثیق کرنی ہوگی۔ اس پر عمل درآمد کرنے کا ایک طریقہ یہ ہوگا:
پبلک کلاس یوزرسیٹنگسروسی {پبلک باطل چینل ای میل (صارف صارف) {اگر (چیک آکسیس (صارف)) {// گرانٹ آپشن change} پبلک بولین چیک اکسسی (صارف صارف) {// تصدیق کریں کہ صارف درست ہے یا نہیں۔ }
سبھی اچھے لگتے ہیں جب تک کہ آپ چیکاساسی کوڈ کو کسی اور جگہ پر دوبارہ استعمال کرنا نہیں چاہتے ہیں یا آپ چیکآکسیس کے طریقہ کار میں تبدیلی کرنا چاہتے ہیں۔ تمام 2 صورتوں میں آپ ایک ہی طبقے کو تبدیل کرنا ختم کردیں گے اور پہلے ہی معاملے میں آپ کو رسائی کی جانچ پڑتال کے ل User یوزر سیٹٹنگ سروس کا استعمال کرنا پڑے گا۔
اس کو درست کرنے کا ایک طریقہ یہ ہے کہ یوزرسیٹنگسروسیس کو یوزر سیٹٹنگسروس اور سیکیورٹی سروسس میں گلنا ہے۔ اور چیک ایکسیس کوڈ کو سیکیورٹی سروس میں منتقل کریں۔
پبلک کلاس یوزرسیٹنگسروسی {پبلک باطل چینج ای میل (صارف صارف) {اگر (سیکیورٹی سروسس.کیک چیک (صارف)) {// Grant}} پبلک کلاس سیکیورٹی سروس {عوامی جامد بولین چیک اکس (صارف صارف) change // کو تبدیل کرنے کے لئے گرانٹ آپشن {// رسائی کی جانچ کریں۔ }
جاوا میں بند اصول کھولیں
رابرٹ سی مارٹن نے اس کی وضاحت کی ہے کیوں کہ سافٹ ویئر کے اجزاء توسیع کے ل open کھلے ہونا چاہئے ، لیکن ترمیم کے لئے بند ہیں۔
قطعیت کے مطابق ، اس اصول کے مطابق ، ایک طبقے کو اس انداز میں لکھا جانا چاہئے کہ وہ اس کام کو بغیر کسی بے دلی کے فرائض سرانجام دیئے بغیر سمجھے کہ مستقبل میں لوگ آسانی سے اس میں تبدیلی لائیں گے۔ لہذا ، کلاس کو ترمیم کے ل closed بند رہنا چاہئے ، لیکن اس میں توسیع کرنے کا اختیار ہونا چاہئے۔ کلاس بڑھانے کے طریقوں میں شامل ہیں:
کلاس سے وراثت کرنا
کلاس سے مطلوبہ طرز عمل کو ختم کرنا
جاوا میں حوالہ سے کیسے گزرنا ہے
کلاس کے کچھ مخصوص سلوک کو بڑھانا
کھلے بند اصول کی ایک عمدہ مثال کو براؤزرز کی مدد سے سمجھا جاسکتا ہے۔ کیا آپ کو اپنے کروم براؤزر میں ایکسٹینشن انسٹال کرنا یاد ہے؟
کروم براؤزر کا بنیادی کام مختلف سائٹس کو سرف کرنا ہے۔ جب آپ کروم براؤزر کا استعمال کرتے ہوئے ای میل لکھ رہے ہیں تو کیا آپ گرائمر چیک کرنا چاہتے ہیں؟ اگر ہاں ، تو آپ محض گرائمری ایکسٹینشن کا استعمال کرسکتے ہیں ، اس سے آپ کو مواد پر گرائمر چیک مل جاتا ہے۔
یہ طریقہ کار جہاں آپ براؤزر کی فعالیت کو بڑھانے کے لئے چیزیں شامل کررہے ہیں وہ ایک توسیع ہے۔ لہذا ، براؤزر فعالیت کی ایک بہترین مثال ہے جو توسیع کے لئے کھلا ہے لیکن ترمیم کے لئے بند ہے۔ آسان الفاظ میں ، آپ اپنے براؤزر پر پلگ انز شامل کرکے / انسٹال کرکے فعالیت کو بڑھا سکتے ہیں ، لیکن کوئی نئی چیز نہیں بنا سکتے ہیں۔
یہ اصول کیوں ضروری ہے؟
او سی پی ضروری ہے کیونکہ کلاس تیسری پارٹی کے لائبریریوں کے ذریعہ ہمارے پاس آسکتی ہیں۔ ہمیں پریشانی کے ان کلاسوں میں توسیع کرنے کے قابل ہونا چاہئے اگر وہ بیس کلاس ہمارے ایکسٹینشن کی حمایت کرسکتے ہیں۔ لیکن وراثت ذیلی طبقات کا باعث بن سکتی ہے جو بیس کلاس کے نفاذ پر منحصر ہے۔ اس سے بچنے کے ل، ، انٹرفیس کے استعمال کی سفارش کی جاتی ہے۔ یہ اضافی تجرید ڈھیلی جوڑے کی طرف جاتا ہے۔
ہم کہتے ہیں کہ ہمیں مختلف اشکال کے علاقوں کا حساب لگانے کی ضرورت ہے۔ ہم اپنی پہلی شکل مستطیل کے لئے ایک کلاس بنانے کے ساتھ شروع کرتے ہیںجس میں 2 صفات کی لمبائی ہےاور چوڑائی
عوامی کلاس مستطیل {عوامی ڈبل لمبائی عوامی ڈبل چوڑائی}
اگلا ، ہم اس مستطیل کے رقبے کا حساب لگانے کے لئے ایک کلاس بناتے ہیںجس کا ایک حساب کتابتطریقہ آریہ ہےجو مستطیل لیتا ہےبطور ان پٹ پیرامیٹر اور اس کے رقبے کا حساب لگاتا ہے۔
پبلک کلاس ایریاکلیکولیٹر {عوامی ڈبل حساب کتابی مستطیل ایریا (مستطیل مستطیل) {واپسی مستطیل۔ لمبائی * مستطیل۔ چوڑائی}
اب تک بہت اچھا ہے۔ اب ہم کہتے ہیں کہ ہمیں اپنا دوسرا شکل کا دائرہ ملتا ہے۔ لہذا ہم فوری طور پر ایک نیا کلاس سرکل تشکیل دیتے ہیںایک ہی وصف رداس کے ساتھ۔
عوامی کلاس سرکل {عوامی ڈبل رداس
پھر ہم ایریاکلیکولیٹر میں ترمیم کرتے ہیںکلاس حلقہ کے حساب کو ایک نئے طریقہ کار کے ذریعے حلقہ حساب شامل کرنے کے لئے حلقہ حلقہ ()
پبلک کلاس ایریاکلیکولیٹر {عوامی ڈبل حساب کتابتطریقہ اوریا (مستطیل مستطیل) {واپسی مستطیل۔ لمبائی * مستطیل۔ چوڑائی} عوامی ڈبل کیلکولیٹکل سرکل (حلقہ کا دائرہ) {واپسی (22/7) * वृत्त
تاہم ، نوٹ کریں کہ جس طرح سے ہم نے اپنے حل کو اوپر تیار کیا اس میں خامیاں تھیں۔
چلیں ہم کہتے ہیں کہ ہمارے پاس ایک نئی شکل کا پینٹاگون ہے۔ اس صورت میں ، ہم پھر ایریا کیلکولیٹر کلاس میں ترمیم کریں گے۔ جیسے جیسے شکلیں بڑھتی ہیں یہ اور بھی گندا ہوجاتی ہے کیوں کہ ایریا کیلکولیٹر بدلتا رہتا ہے اور اس طبقے کے کسی بھی صارفین کو اپنی لائبریریوں کو اپ ڈیٹ کرتے رہنا ہوگا جس میں ایریا کیلکولیٹر ہوتا ہے۔ نتیجے کے طور پر ، ایریا کیلکولیٹر کلاس ضمانت کے ساتھ بیس لائن (حتمی شکل) نہیں دی جائے گی کیونکہ جب بھی نئی شکل آئے گی اس میں ترمیم کی جائے گی۔ لہذا ، یہ ڈیزائن ترمیم کے لئے بند نہیں ہے۔
ایریا کیلکولیٹر کو نئے طریقوں میں اپنی گنتی کی منطق شامل کرنے کی ضرورت ہوگی۔ ہم واقعی شکل کے دائرہ کار میں توسیع نہیں کررہے ہیں بلکہ ہم شامل کردہ ہر شکل کے ل piece محض ٹکڑا کھانے (بٹ بہ بٹ) حل کر رہے ہیں۔
کھلی / بند اصول کی تعمیل کے لئے مذکورہ ڈیزائن میں ترمیم:
آئیے اب ہم ایک مزید خوبصورت ڈیزائن دیکھیں جو اوپن / بند اصول پر عمل پیرا ہوکر مذکورہ ڈیزائن میں موجود خامیوں کو دور کرتا ہے۔ ہم سب سے پہلے ڈیزائن کو قابل توسیع بنائیں گے۔ اس کے لئے ہمیں پہلے ایک بنیادی قسم کی شکل کی وضاحت کرنے کی ضرورت ہے اور سرکل اور مستطیل کو شکل انٹرفیس نافذ کرنے کی ضرورت ہے۔
عوامی انٹرفیس شکل {عوامی ڈبل کیلکولیٹ اریہ ()} عوامی کلاس مستطیل شکل لگاتا ہے {ڈبل لمبائی ڈبل چوڑائی عوامی ڈبل کیلکولیٹ اریا () {واپسی کی لمبائی * چوڑائی} class عوامی کلاس حلقہ شکل ments پبلک ڈبل رداس پبلک ڈبل کیلکولیٹ ایریا () {ریٹرن (22) / 7) * رداس * رداس}
ایک بیس انٹرفیس شکل ہے۔ اب تمام شکلیں بیس انٹرفیس شیپ کو نافذ کرتی ہیں۔ شکل کا انٹرفیس ایک تجریدی طریقہ کی کیلکولیٹ اریہ () رکھتا ہے۔ حلقہ اور مستطیل دونوں ہی ان کی خصوصیات کو استعمال کرتے ہوئے کیلکولیٹ اریہ () کے طریقہ کار پر خود کو منسوخ کرتے ہیں۔
ہم توسیع کی ڈگری لے کر آئے ہیں کیونکہ اب شکلیں شیپ انٹرفیس کی مثال ہیں۔ یہ ہمیں انفرادی کلاسوں کے بجائے Shape استعمال کرنے کی سہولت دیتا ہے
مذکورہ اشکال کے اوپر درج بالا صارف ہمارے معاملے میں ، صارف ایریاکلیکولیٹر کلاس ہوگا جو اب اس طرح نظر آئے گا۔
پبلک کلاس ایریاکلیکولیٹر {عوامی ڈبل کیلکولیٹشپی ایریا (شکل کی شکل) {واپسی کی شکل. کالکولیٹ اریہ ()}
یہ ایریاکالکولیٹرکلاس اب مذکورہ بالا ہمارے ڈیزائن کردہ خامیوں کو مکمل طور پر دور کرتی ہے اور ایک صاف حل پیش کرتی ہے جو کھلے بند اصول پر عمل پیرا ہے۔ آئیے جاوا میں SOLID کے دیگر اصولوں کے ساتھ چلتے ہیں
جاوا میں لیسکوڈ سبسٹیشن کا اصول
رابرٹ سی مارٹن نے اس کی وضاحت کی ہے کہ اخذ شدہ اقسام کو ان کی بنیادی اقسام کے لئے مکمل طور پر متبادل ہونا ضروری ہے۔
لِسکوف کے متبادل کے اصول نے (x) کو ایک ایسی پراپرٹی سمجھا ہے ، جو x کی ہستیوں کے بارے میں ثابت ہو جو قسم T سے تعلق رکھتا ہے۔ اب ، اس اصول کے مطابق ، ق (y) اب ایسی چیزوں کے لئے قابل عمل ہونا چاہئے جو S کی قسم سے متعلق ہوں ، اور ایس دراصل ٹی کی ایک ذیلی قسم ہے۔ کیا آپ اب الجھے ہوئے ہیں اور نہیں جانتے کہ لِسکوف کے متبادل اصول کا اصل مطلب کیا ہے؟ اس کی تعریف تھوڑی پیچیدہ ہوسکتی ہے ، لیکن حقیقت میں ، یہ بہت آسان ہے۔ صرف ایک چیز یہ ہے کہ ہر ذیلی طبقے یا اخذ کلاس کو ان کے والدین یا بیس کلاس کے لئے متبادل ہونا چاہئے۔
آپ کہہ سکتے ہیں کہ یہ ایک انوکھا مقصد پر مبنی اصول ہے۔ بچوں کو کسی خاص قسم کے والدین کے ذریعہ اس اصول کو مزید آسان بنایا جاسکتا ہے بغیر کسی پیچیدگی یا چیزوں کو اڑانے کے اس والدین کے ساتھ کھڑے ہونے کی اہلیت ہونی چاہئے۔ اس اصول کا لِسکوف متبادل کے اصول سے گہرا تعلق ہے۔
یہ اصول کیوں ضروری ہے؟
یہ وراثت کے ناجائز استعمال سے اجتناب کرتا ہے۔ اس سے ہمیں 'ہے ایک' تعلقات کے مطابق رہنے میں مدد ملتی ہے۔ ہم یہ بھی کہہ سکتے ہیں کہ ذیلی طبقات کو بیس کلاس کے ذریعہ متعینہ معاہدہ پورا کرنا ضروری ہے۔ اس لحاظ سے ، اس سے متعلق ہےمعاہدہ کے لحاظ سے ڈیزائن کیا گیااس کا بیان سب سے پہلے برٹرینڈ میئر نے کیا تھا۔ مثال کے طور پر ، یہ کہنا دل چسپ ہے کہ حلقہ بیضوی شکل کی ایک قسم ہے لیکن حلقوں میں دو فوکس یا بڑے / معمولی محور نہیں ہوتے ہیں۔
ایل ایس پی کو مربع اور مستطیل مثال کے ذریعے مقبول طور پر بیان کیا گیا ہے۔ اگر ہم اسکوائر اور مستطیل کے مابین ISA کا تعلق مان لیں۔ اس طرح ، ہم کہتے ہیں 'مربع ایک مستطیل ہے۔' ذیل میں دیا ہوا کوڈ رشتہ کی نمائندگی کرتا ہے۔
عوامی کلاس مستطیل {نجی INT لمبائی نجی INT چوڑائی پبلک INT getLength () {واپسی کی لمبائی} عوامی باطل سیٹ لینتھ (INT لمبائی) {this.leight = لمبائی} عوامی INT getBreadth () {واپسی چوڑائی} عوامی باطل سیٹ بریڈتھ (INT چوڑائی) { this.breadth = چوڑائی} عوامی INT getArea () this اس واپس کریں۔ لمبائی * this.breadth} {
اسکوائر کا کوڈ ذیل میں ہے۔ نوٹ کریں کہ اسکوائر مستطیل میں توسیع کرتا ہے۔
ایک iterator استعمال کرنے کے لئے کس طرح
عوامی کلاس اسکوائر میں مستطیل {عوامی باطل سیٹ بریڈتھ (INT چوڑائی) {super.setBreadth (چوڑائی) super.setLength (چوڑائی)} پبلک باطل سیٹ لینتھ (INT لمبائی) {super.setLength (لمبائی) super.setBreadth (لمبائی) length}
اس معاملے میں ، ہم اسکوائر اور مستطیل کے مابین ISA تعلقات قائم کرنے کی کوشش کرتے ہیں جیسے اسکوئر کی مثال کو منظور ہوجانے پر درج ذیل کوڈ میں 'اسکوائر ایک مستطیل ہے' کہنا غیر متوقع طور پر برتاؤ کرنا شروع کردے گا۔ 'ایریا' کی جانچ پڑتال اور 'بریڈتھ' کی جانچ پڑتال کی صورت میں دعوی کی غلطی پھینک دی جائے گی ، حالانکہ یہ پروگرام ختم ہوجائے گا کیونکہ ایریا چیک کی ناکامی کی وجہ سے دعوی کی غلطی پھینک دی گئی ہے۔
عوامی کلاس LSPDemo {عوامی باطل کیلکولیٹ اریا (مستطیل r) {r.setBreadth (2) r.setLength (3) اصرار r.getArea () == 6: پرنٹ ایئرر ('ایریا' ، r) اصرار کریں r.getLength () == 3: پرنٹ ایرر ('لمبائی' ، r) اثبات کریں r.getBreadth () == 2: پرنٹ یرر ('چوڑائی' ، r)} نجی اسٹرنگ پرنٹ ایرر (سٹرنگ ایررآئڈیئنفر ، مستطیل r) {'غیر متوقع قدر +' غلطی شناخت کنندہ + 'کی واپسی مثال کے طور پر '+ r.getClass (). getName ()} عوامی جامد باطل اہم (سٹرنگ [] آرگس) {LSPDemo lsp = new LSPDemo () // مستطیل کی ایک مثال lsp.calculateArea (نیا مستطیل ()) گزر گئی // اسکوائر کی ایک مثال lsp.calculateArea (نیا اسکوائر ()) منظور} is
کلاس نے لیسکو سبسٹیشن اصول (ایل ایس پی) کا مظاہرہ کیا اصول کے مطابق ، جو فنکشنز بیس کلاس کے حوالے استعمال کرتے ہیں وہ لازمی طور پر اخذ کلاس کی اشیاء کو استعمال کیے بغیر استعمال کیے جانے کے اہل ہوں گے۔
اس طرح ، ذیل میں دکھائی گئی مثال میں ، فنکشن کیلکولیٹ اریہ جو 'مستطیل' کے حوالہ کو استعمال کرتا ہے ، اس سے مربع جیسے مشتق طبقے کی اشیاء کو استعمال کرنے اور مستطیل کی تعریف کیذریعہ درکار ضرورت کو پورا کرنے کے قابل ہونا چاہئے۔ ایک کو نوٹ کرنا چاہئے کہ مستطیل کی تعریف کے مطابق ، مندرجہ ذیل اعدادوشمار کو دیکھتے ہوئے ہمیشہ درست رہنا چاہئے۔
- لمبائی ہمیشہ اس طوالت کے برابر ہونی چاہئے جس میں ان پٹ کے طریقہ کار ، سیٹ لینگتھ کے برابر گزر جائے
- میٹھا ، سیٹ بریڈتھ کے ان پٹ کے بطور چوڑائی ہمیشہ کی چوڑائی کے برابر ہونی چاہئے
- رقبہ لمبائی اور وسعت کے برابر ہمیشہ ہونا چاہئے
اگر ہم اسکوائر اور مستطیل کے مابین ISA تعلقات قائم کرنے کی کوشش کرتے ہیں جس کو ہم کہتے ہیں کہ 'اسکوائر ایک مستطیل ہے' ، اگر اسکوائر کی ایک مثال گزر جاتی ہے تو مذکورہ بالا کوڈ غیر متوقع طور پر برتاؤ کرنا شروع کردے گا۔ چوڑائی کے ل، ، اگرچہ ایریا چیک کی ناکامی کی وجہ سے اصرار کی غلطی پھینک جانے کی وجہ سے یہ پروگرام ختم ہوجائے گا۔
اسکوائر کلاس کو سیٹ بریڈتھ یا سیٹ لینتھ جیسے طریقوں کی ضرورت نہیں ہے۔ ایل ایس پی ڈیمو کلاس کو پھینکنے والی غلطی سے بچنے کے ل appropriate مناسب کوڈ کے ل to مستطیل (جیسے اسکوائر) کی مشتق کلاسوں کی تفصیلات جاننے کی ضرورت ہوگی۔ موجودہ کوڈ میں تبدیلی پہلی جگہ کھلے ہوئے اصول کو توڑ دیتی ہے۔
انٹرفیس الگ کرنے کا اصول
رابرٹ سی مارٹن نے اس کی وضاحت کی ہے کیونکہ مؤکلوں کو غیر ضروری طریقوں کو نافذ کرنے پر مجبور نہیں کیا جانا چاہئے جو وہ استعمال نہیں کریں گے۔
کے مطابقانٹرفیس الگ کرنے کا اصولایک مؤکل ، اس سے کوئی فرق نہیں پڑتا ہے کہ کبھی بھی کسی ایسے انٹرفیس کو نافذ کرنے کے لئے مجبور نہیں کیا جانا چاہئے جو اسے استعمال نہیں کرتا ہے یا موکلین کو کبھی بھی کسی طریقہ پر انحصار کرنے کا پابند نہیں ہونا چاہئے ، جو ان کے ذریعہ استعمال نہیں کیا جاتا ہے۔ لہذا ، بنیادی طور پر ، انٹرفیس الگ الگ اصول جب آپ اپنی ترجیح کو ترجیح دیتے ہیں انٹرفیس ، جو یکجہتی اور بڑے انٹرفیس کی بجائے چھوٹے لیکن کلائنٹ کے لئے مخصوص ہیں۔ مختصر یہ کہ ، آپ کے لئے یہ برا ہوگا کہ موکل کو کسی خاص چیز پر انحصار کرنے پر مجبور کرنا ، جس کی انہیں ضرورت نہیں ہے۔
مثال کے طور پر ، نوشتہ لکھنے اور پڑھنے کے ل for ایک واحد لاگنگ انٹرفیس ڈیٹا بیس کے ل useful مفید ہے لیکن کنسول کے لئے نہیں۔ کونگول لاگر کے لئے نوشتہ پڑھنا کوئی معنی نہیں رکھتا ہے۔ جاوا آرٹیکل میں اس ٹھوس اصولوں کے ساتھ آگے بڑھ رہے ہیں۔
یہ اصول کیوں ضروری ہے؟
ہم کہتے ہیں کہ یہاں ایک ریسٹورنٹ انٹرفیس موجود ہے جس میں آن لائن صارفین ، ڈائل ان یا ٹیلیفون صارفین اور واک ان صارفین کے آرڈر قبول کرنے کے طریقے شامل ہیں۔ اس میں آن لائن ادائیگیوں (آن لائن صارفین کے لئے) اور ذاتی ادائیگیوں سے نمٹنے کے طریقوں (ذاتی طور پر واک میں آنے والے صارفین کے ساتھ ساتھ ٹیلیفون صارفین کے لئے جب ان کا آرڈر گھر پر دیا جاتا ہے) پر مشتمل ہے۔
اب آئیے ریستوراں کے لئے جاوا انٹرفیس بنائیں اور اس کا نام RestaurantInterface.java رکھیں۔
پبلک انٹرفیس ریسٹورینٹ انٹرفیس {پبلک باطل قبول آن لائن آرڈر () پبلک باطل ٹیک ٹیلیفون آرڈر () پبلک باطل تنخواہ آن لائن () پبلک باطل واک انکیسٹومر آرڈر () پبلک باطل پے ان پیئرسن ()}
ریسٹورینٹ انٹرفیس میں 5 طریقے بیان کیے گئے ہیں جو آن لائن آرڈر کو قبول کرنے ، ٹیلی فونک آرڈر لینے ، واک ان کسٹمر سے آرڈر قبول کرنے ، آن لائن ادائیگی کو قبول کرنے اور ذاتی طور پر ادائیگی قبول کرنے کے لئے ہیں۔
آئیے آن لائن صارفین کے لئے ریسٹورینٹ انٹر فرفیس کو بطور آن لائن کلائنٹ آئی ایم پی ایل جاوا نافذ کرکے شروع کریں
پبلک کلاس آن لائنکلائنٹیمپل نے ریسٹورینٹ انٹرفیس کو نافذ کیا ہے {پبلک باطل قبول آن لائن آرڈر () {// آن لائن آرڈر رکھنے کے لئے منطق} عوامی باطل ٹیک ٹیلیفون آرڈر () {// آن لائن آرڈر کے لئے لاگو نہیں ہے آن لائن} عوامی باطل واک۔کیسٹومرآرڈر () {// آن لائن آرڈر کے لئے لاگو نہیں ہوتا ہے نیا غیر تعاون یافتہ عملیہ کا تصور () پھینک دیں} عوامی باطل تنخواہ انپرسن () {// آن لائن آرڈر کے لئے لاگو نہیں ہوتا ہے نیا غیر تعاون یافتہ عمل () کا تجربہ ()}}
چونکہ مذکورہ کوڈ (آن لائنکلیئینٹ امپل.جاوا) آن لائن آرڈرز کے لئے ہے ، لہذا غیر تعاون یافتہ آپریشن کی خواہش کو پھینک دیں۔
آن لائن ، ٹیلی فونک اور واک ان کلائنٹ ان میں سے ہر ایک کے لئے مخصوص ریستوراں انٹرفیس عملدرآمد کا استعمال کرتے ہیں۔
ٹیلیفونک کلائنٹ اور واک ان کلائنٹ کے نفاذ کلاسوں میں غیر تعاون یافتہ طریقے ہوں گے۔
چونکہ 5 طریقے ریستوران انٹرفیس کا حصہ ہیں ، نفاذ کلاسوں کو ان سب 5 کو نافذ کرنا ہوگا۔
ان طریقوں کو جن پر عمل درآمد کلاس میں سے ہر ایک غیر تعاون یافتہ عمل کی توجیہ کرتا ہے۔ جیسا کہ آپ واضح طور پر دیکھ سکتے ہیں - تمام طریقوں پر عمل درآمد ناکارہ ہے۔
ریسٹورینٹ انٹرفیس کے کسی بھی طریقوں میں کسی بھی تبدیلی کا اطلاق تمام نفاذ کلاسوں میں کیا جائے گا۔ اس کے بعد کوڈ کی دیکھ بھال واقعی بوجھل بننا شروع ہوجاتی ہے اور تبدیلیوں کے اثرات میں اضافہ ہوتا رہے گا۔
ریسٹورینٹ انٹرفیس ڈاٹ جاوا نے سنگل ذمہ داری کے اصول کو توڑا ہے کیونکہ ادائیگیوں کے ساتھ ساتھ آرڈر پلیسمنٹ کے لئے بھی ایک ہی انٹرفیس میں گروہ بندی کیا گیا ہے۔
مذکورہ دشواریوں پر قابو پانے کے ل Inter ، ہم مذکورہ ڈیزائن کو ری ایکٹر کے ل. انٹرفیس سیگریگیشن اصول کو لاگو کرتے ہیں۔
ادائیگی اور آرڈر کی اہلیت کی خصوصیات کو الگ الگ دو دبلی پتلی انٹرفیس ، PaymentInterface.java اور OrderInterface.java میں الگ کریں۔
گاہکوں میں سے ہر ایک ادائیگی کی انٹرفیس اور آرڈر انٹیرفیس پر عمل کرتا ہے۔ مثال کے طور پر - آن لائنکلیوینٹ.جاوا آن لائن پےمنٹ آئی ایم پی ایل اور آن لائن آرڈر آئی ایم پی ایل اور اسی طرح کا استعمال کرتا ہے۔
سنگل ذمہ داری کا اصول اب ادائیگی کے انٹرفیس (PaymentInterface.java) اور آرڈرنگ انٹرفیس (آرڈر انٹرفیس) کے بطور منسلک ہے۔
کسی بھی آرڈر میں تبدیلی یا ادائیگی انٹرفیس دوسرے کو متاثر نہیں کرتی ہے۔ وہ اب آزاد ہیں۔ کوئی ڈمی عمل درآمد کرنے یا غیر تعاون یافتہ عمل پھیلانے کی ضرورت نہیں ہوگی کیونکہ ہر انٹرفیس کے پاس صرف وہ طریقے ہیں جو ہمیشہ استعمال ہوں گے۔
آئی ایس پی لگانے کے بعد
جاوا میں ایک مخصوص لفظ کیا ہے؟
انحصار الٹی اصول
رابرٹ سی مارٹن نے اس کی وضاحت کی ہے کیونکہ یہ انحصارات پر منحصر ہے جس پر تنازعات نہیں ہیں۔ اس کے مطابق ، اعلی سطحی ماڈیول کو کبھی بھی کسی بھی کم سطح کے ماڈیول پر انحصار نہیں کرنا چاہئے۔ مثال کے طور پر
آپ کچھ خریدنے کے لئے مقامی اسٹور پر جاتے ہیں ، اور آپ اپنے ڈیبٹ کارڈ کا استعمال کرکے اس کی ادائیگی کرنے کا فیصلہ کرتے ہیں۔ لہذا ، جب آپ ادائیگی کے لئے اپنا کارڈ کلرک کو دیتے ہیں تو ، کلرک یہ جانچنے کی زحمت نہیں کرتا ہے کہ آپ نے کس قسم کا کارڈ دیا ہے۔
یہاں تک کہ اگر آپ نے ویزا کارڈ دیا ہے ، تو وہ آپ کے کارڈ کو تبدیل کرنے کے لئے ویزا مشین نہیں لگائے گا۔ ادائیگی کے ل credit آپ کے پاس جو قسم کا کریڈٹ کارڈ یا ڈیبٹ کارڈ ہے اس سے بھی فرق نہیں پڑتا ہے کہ وہ اسے آسانی سے ختم کردیں گے۔ لہذا ، اس مثال میں ، آپ دیکھ سکتے ہیں کہ آپ اور کلرک دونوں ہی کریڈٹ کارڈ خلاصہ پر منحصر ہیں اور آپ کارڈ کی تفصیلات سے پریشان نہیں ہیں۔ یہ انحصار الٹا اصول ہے۔
یہ اصول کیوں ضروری ہے؟
یہ پروگرامر کو ہارڈ کوڈ والے انحصار کو دور کرنے کی اجازت دیتا ہے تاکہ ایپلی کیشن ڈھیلی ہوکر جوڑ اور توسیع پذیر ہوجائے۔
عوامی کلاس کا طالب علم {نجی پتہ ایڈریس عوامی طالب علم () {پتہ = نیا پتہ ()}}
مذکورہ بالا مثال میں ، اسٹوڈنٹ کلاس کو ایڈریس آبجیکٹ کی ضرورت ہوتی ہے اور یہ ایڈریس آبجیکٹ کو شروع کرنے اور استعمال کرنے کے لئے ذمہ دار ہے۔ اگر مستقبل میں ایڈریس کلاس بدلی جاتی ہے تو ہمیں اسٹوڈنٹ کلاس میں بھی تبدیلی لانا ہوگی۔ اس سے طلبہ اور پتے کی اشیاء کے مابین سخت جوڑے پڑ جاتے ہیں۔ ہم انحصار الٹی ڈیزائن ڈیزائن کا نمونہ استعمال کرکے اس مسئلے کو حل کر سکتے ہیں۔ یعنی ایڈریس آبجیکٹ کو آزادانہ طور پر لاگو کیا جائے گا اور جب طالب علم کو کنسٹرکٹر پر مبنی یا سیٹٹر پر مبنی انحصار الٹا استعمال کرکے انسٹنٹ کیا جاتا ہے تو وہ اسٹوڈنٹ کو فراہم کی جائے گی۔
اس کے ساتھ ، ہم جاوا میں اس ٹھوس اصولوں کا خاتمہ کرتے ہیں۔
چیک کریں ایڈوریکا کے ذریعہ ، ایک قابل اعتماد آن لائن سیکھنے والی کمپنی جس کی دنیا بھر میں 250،000 سے زیادہ مطمئن سیکھنے والوں کا نیٹ ورک موجود ہے۔ ایڈورکا کا جاوا J2EE اور SOA ٹریننگ اور سرٹیفیکیشن کورس طلباء اور پیشہ ور افراد کے لئے ڈیزائن کیا گیا ہے جو جاوا ڈویلپر بننا چاہتے ہیں۔ کورس آپ کو جاوا پروگرامنگ میں آغاز فراہم کرنے اور ہائبرنیٹ اینڈ اسپرنگ جیسے جاوا کے مختلف فریم ورک کے ساتھ ساتھ جاوا کے دونوں بنیادی خیالات کے ساتھ تربیت دینے کے لئے ڈیزائن کیا گیا ہے۔
ہمارے لئے ایک سوال ہے؟ برائے کرم اس 'جاوا میں ٹھوس اصول' بلاگ کے تبصرے سیکشن میں اس کا تذکرہ کریں اور ہم جلد سے جلد آپ کے پاس واپس آجائیں گے۔