JavaRush /جاوا بلاگ /Random-UR /جاوا آبجیکٹ اورینٹڈ پروگرامنگ کے تصورات
shabnahm
سطح

جاوا آبجیکٹ اورینٹڈ پروگرامنگ کے تصورات

گروپ میں شائع ہوا۔
JAVA آبجیکٹ اورینٹڈ پروگرامنگ کے تصورات پر مبنی ہے، جو آپ کو کسی بھی مسئلے کو حقیقت پسندانہ طریقے سے حل کرنے کے لیے تجرید کی اعلی سطح پر جانے کی اجازت دیتا ہے۔ آبجیکٹ پر مبنی نقطہ نظر کسی مسئلے کے حل کو حقیقی دنیا کی اشیاء کے لحاظ سے تصور کرتا ہے جو ایپلی کیشن میں دوبارہ استعمال کرنا آسان ہے۔ مثال کے طور پر، Chair(کرسی)، Fan(پنکھا)، Dog(کتا)، Computer(کمپیوٹر) وغیرہ۔ JAVA میں، کلاس ایک ترتیب، ٹیمپلیٹ، یا پروٹو ٹائپ ہے جو کسی دی گئی قسم کی کسی چیز کے عمومی رویے کی وضاحت کرتی ہے۔ ایک مثال کلاس کا الگ نفاذ ہے، اور کلاس کی تمام مثالوں میں ایک جیسی خصوصیات ہیں، جو کلاس کی تعریف میں بیان کی گئی ہیں۔ مثال کے طور پر، آپ ایک خاصیت کے طور پر کمروں کی تعداد کے ساتھ ہاؤس نام کی کلاس کی وضاحت کر سکتے ہیں اور کلاس کی مثالیں بنا سکتے ہیں جیسے کہ دو کمروں کا گھر، تین کمروں کا گھر، وغیرہ۔ جاوا آبجیکٹ اورینٹڈ پروگرامنگ کے تصورات - 1فوائد: آبجیکٹ اورینٹڈ سافٹ ویئر ڈویلپمنٹ کے کچھ فوائد ذیل میں درج ہیں۔
  • سافٹ ویئر سپورٹ کے اخراجات میں کمی، بنیادی طور پر اس حقیقت کی وجہ سے کہ یہ ماڈیولر طریقے سے کیا جاتا ہے۔
  • وراثت جیسی خصوصیات کے ذریعے بہتر کوڈ کا دوبارہ استعمال، جس کے نتیجے میں سافٹ ویئر کی ترقی تیز تر ہوتی ہے۔
  • کوڈ کی وشوسنییتا اور لچک میں اضافہ۔
  • حقیقی دنیا کے تخروپن کی وجہ سے سمجھنے میں آسانی۔
  • آبجیکٹ کی سطح پر بہتر تجرید۔
  • ایک ترقی کے مرحلے سے دوسرے مرحلے میں منتقلی کی پیچیدگی کو کم کرنا۔
OOP کی چار اہم خصوصیات ہیں:
  • انکیپسولیشن
  • وراثت
  • پولیمورفزم
  • تجری

انکیپسولیشن

Encapsulation کسی چیز کے لیے ایک معاہدے کے طور پر کام کرتا ہے کہ اسے کیا چھپانا چاہیے اور اسے دوسری اشیاء کی رسائی کے لیے کیا کھولنا چاہیے۔ JAVA میں، ہم privateکسی طریقہ کو چھپانے اور بیرونی دنیا سے متغیر تک رسائی کو محدود کرنے کے لیے ایک رسائی موڈیفائر کا استعمال کرتے ہیں۔ JAVA میں مختلف رسائی ترمیم کار بھی ہیں: public, default, protected, private, جو مختلف سطحوں پر مرئیت کو محدود کرنے کے لیے استعمال ہوتے ہیں۔ لیکن حتمی مقصد ان چیزوں کو سمیٹنا ہے جنہیں تبدیل نہیں کیا جانا چاہیے۔ وہ نقطہ نظر جو بہترین کام کرتا ہے وہ یہ ہے کہ کلاس کو تبدیل کرنے کی صرف ایک وجہ ہونی چاہیے، اور encapsulation اس "ایک وجہ" کے ڈیزائن کو حقیقت بناتی ہے۔ انکیپسولیشن کا صحیح طریقہ یہ ہے کہ ایسی چیزوں کو چھپانا جو بار بار تبدیل ہوتی رہتی ہیں تاکہ دوسرے طبقوں کو نقصان نہ پہنچے۔ فوائد: ذیل میں encapsulation کے کچھ فوائد ہیں:
  • ہم کسی چیز کی اندرونی حالت کو اس کی صفات کو چھپا کر اس کی حفاظت کر سکتے ہیں۔
  • یہ کوڈ ماڈیولریٹی کو بہتر بناتا ہے کیونکہ یہ اشیاء کو غیر متوقع طریقوں سے تعامل سے روکتا ہے۔
  • کوڈ کے استعمال کو بہتر بناتا ہے۔
  • یہ ایک مخصوص ہستی کے معاہدے کے تعلقات کی حمایت کرتا ہے۔
  • Encapsulation سافٹ ویئر کو برقرار رکھنا آسان بناتا ہے۔
  • کوڈ میں تبدیلیاں ایک دوسرے سے آزادانہ طور پر کی جا سکتی ہیں۔

پولیمورفزم

پروگرامنگ میں پولیمورفزم مختلف بنیادی شکلوں (ڈیٹا کی اقسام) کے لیے ایک ہی انٹرفیس فراہم کرنے کی صلاحیت ہے۔ اس کا مطلب یہ ہے کہ مختلف فنکشنلٹی والی کلاسیں ایک ہی انٹرفیس کا اشتراک کرتی ہیں اور پیرامیٹر کو حوالہ سے پاس کرکے متحرک طور پر بلایا جا سکتا ہے۔ ایک کلاسک مثال کلاس Shape(شکل) اور تمام کلاسز ہیں جو اس سے وراثت میں ملتی ہیں: square(مربع)، circle(دائرہ)، dodecahedron(ڈوڈیکاہڈرون)، irregular polygon(غیر منظم کثیرالاضلاع)، splat(بلاب)، اور اسی طرح۔ اس مثال میں، ہر کلاس کا اپنا طریقہ ہوگا Draw()اور کلائنٹ کوڈ آسانی سے کر سکتا ہے:
Shape shape = new Shape();
Shape.area()کسی بھی شکل کا صحیح برتاؤ حاصل کرنے کے لیے پولیمورفزم کی خوبصورتی یہ ہے کہ مختلف کلاسوں کے ساتھ کام کرنے والے کوڈ کو یہ جاننے کی ضرورت نہیں ہے کہ وہ کون سی کلاس استعمال کر رہا ہے، کیونکہ یہ سب ایک ہی اصول پر کام کرتے ہیں۔ آبجیکٹ اورینٹڈ پروگرامنگ لینگویجز کے ذریعے ڈائنامک پولیمورفزم کو لاگو کرنے کے لیے استعمال کیا جانے والا عمل ڈائنامک بائنڈنگ کہلاتا ہے۔ نوٹ: پولیمورفزم آبجیکٹ کے لحاظ سے مزید مخصوص طریقوں کو منتخب کرنے کی صلاحیت ہے۔ پولیمورفزم اس وقت ہوتا ہے جب خلاصہ کلاسیں شامل نہیں ہوتی ہیں۔ فوائد:
  • دوبارہ قابل استعمال کوڈ بنانا۔ یعنی، ایک بار جب کوئی کلاس بن جاتی ہے، اس کو نافذ کیا جاتا ہے، اور تجربہ کیا جاتا ہے، تو اسے اس بات کی فکر کیے بغیر آزادانہ طور پر استعمال کیا جا سکتا ہے کہ اس میں بالکل کیا لکھا ہے۔
  • یہ زیادہ عام اور ڈھیلے سے جوڑے ہوئے کوڈ کی اجازت دیتا ہے۔
  • تالیف کا وقت کم ہو جاتا ہے، جو ترقی کو تیز کرتا ہے۔
  • متحرک لنکنگ۔
  • ایک ہی انٹرفیس کو مختلف نفاذ کے ساتھ طریقے بنانے کے لیے استعمال کیا جا سکتا ہے۔
  • پورے عمل کو ایک ہی طریقہ کے دستخطوں کا استعمال کرکے تبدیل کیا جاسکتا ہے۔
پولیمورفزم کے حصے کے طور پر اوور رائڈنگ کا طریقہ۔ ایک اوور رائڈ دو طریقوں سے تعامل کرتا ہے: پیرنٹ کلاس میں ایک طریقہ اور اخذ شدہ کلاس میں ایک طریقہ۔ ان طریقوں کے ایک جیسے نام اور دستخط ہیں۔ اوور رائیڈنگ آپ کو مختلف اقسام کی اشیاء کے لیے ایک ہی آپریشن کو مختلف طریقوں سے انجام دینے کی اجازت دیتی ہے۔ مثال کے طور پر:
while(it.hasNext()) {
Shape s = (Shape) it.next();
totalArea += s.area(dim); //будет применен полиморфизм и вызван нужный метод для каждого an object.
}
جاوا آبجیکٹ اورینٹڈ پروگرامنگ کے تصورات - 2طریقہ اوورلوڈنگ یا ایڈہاک پولیمورفزم یا سٹیٹک پولیمورفزم اوورلوڈنگ ایک ہی کلاس کے متعدد طریقوں کے ساتھ تعامل کرتی ہے جن کا نام ایک جیسا ہے لیکن ان کے طریقہ کار کے دستخط مختلف ہیں۔ دوبارہ لوڈ کرنا آپ کو مختلف ڈیٹا کے لیے ایک ہی آپریشن کو مختلف طریقوں سے بیان کرنے کی اجازت دیتا ہے۔ اسے بعض اوقات جامد پولیمورفزم کہا جاتا ہے، لیکن حقیقت میں یہ پولیمورفزم نہیں ہے۔ یہ صرف ایک ہی نام کے ساتھ دو طریقے رکھنے کے علاوہ کچھ نہیں ہے، بلکہ دلائل کی ایک مختلف فہرست ہے۔ ریبوٹنگ کا وراثت اور پولیمورفزم سے کوئی تعلق نہیں ہے۔ اور اوور لوڈ شدہ طریقہ بالکل بھی اوور رائیڈڈ طریقہ جیسا نہیں ہے۔ JAVA میں جنریکیشن کے ذریعے پیرامیٹرک پولیمورفزم کلاس کا اعلان کرتے وقت، نام کی فیلڈ کو مختلف اقسام کے ساتھ منسلک کیا جا سکتا ہے، اور طریقہ کا نام مختلف پیرامیٹرز اور واپسی کی اقسام سے منسلک کیا جا سکتا ہے۔ JAVA generics کا استعمال کرکے پیرامیٹرک پولیمورفزم کی حمایت کرتا ہے۔
List<String> list = new ArrayList<String>();
ہم جاوا میں جامد طریقہ کو اوور رائڈ کیوں نہیں کر سکتے؟ اوور رائیڈنگ کلاس کی مثال کے وجود پر منحصر ہے۔ پولیمورفزم کا خیال یہ ہے کہ آپ ایک ذیلی طبقے کو تشکیل دے سکتے ہیں، اور ان ذیلی طبقات کے ذریعے نافذ کردہ اشیاء پیرنٹ کلاس (ذیلی طبقات میں اوور رائڈ) کے انہی طریقوں کے ساتھ مختلف طریقے سے برتاؤ کریں گی۔ ایک جامد طریقہ کلاس کی کسی بھی مثال کے ساتھ منسلک نہیں ہے، لہذا خود کو اوور رائڈنگ کا تصور لاگو نہیں کیا جا سکتا۔ JAVA کے تخلیق کاروں کو اس نقطہ نظر کو متاثر کرنے والے دو خیالات سے رہنمائی ملی۔ سب سے پہلے، کوڈ پر عمل درآمد کے مسائل ہیں: Smalltalk پر سست ہونے کی وجہ سے بہت زیادہ تنقید کی گئی تھی (کوڑا اٹھانا اور پولیمورفزم اس مسئلے کا حصہ تھے)، اور JAVA کو اس سے بچنے کے لیے ڈیزائن کیا گیا تھا۔ دوسرا غور یہ فیصلہ تھا کہ JAVA کے ہدف کے سامعین C++ ڈویلپرز ہوں گے۔ جامد طریقوں کا اس طرح کام کرنا C++ پروگرامرز کے لیے بہت واقف تھا، اور اس نے چیزوں کو بھی تیز کر دیا کیونکہ یہ معلوم کرنے کے لیے کہ کس طریقہ کو کال کرنا ہے، کلاس کے درجہ بندی کو اوپر جانے کی ضرورت نہیں تھی۔ آپ سیدھے کلاس میں جائیں اور ایک مخصوص طریقہ کو کال کریں۔

وراثت

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

جاوا ڈویلپر گروپ:

تجری

تجرید کا مطلب ہے کہ عمل درآمد کی تفصیلات کو مدنظر رکھے بغیر ان کے انٹرفیس اور فعالیت کی بنیاد پر کلاسز کو ڈیزائن کرنا۔ ایک خلاصہ کلاس انٹرفیس کی نمائندگی کرتا ہے بغیر اصل نفاذ کو شامل کیے ۔ یہ کسی چیز کے نفاذ کو اس کے طرز عمل سے ممتاز کرتا ہے۔ خلاصہ غیر اہم تفصیلات کو چھپا کر کوڈ کو آسان بناتا ہے۔ فوائد:
  • تجرید کا استعمال کرتے ہوئے، ہم الگ کر سکتے ہیں کہ کس چیز کو کسی قسم میں گروپ کیا جا سکتا ہے۔
  • کثرت سے تبدیل شدہ خصوصیات اور طریقوں کو ایک الگ قسم میں گروپ کیا جا سکتا ہے، لہذا اہم قسم تبدیلیوں کے تابع نہیں ہو گی۔ اس سے OOP اصول کو تقویت ملتی ہے: "کوڈ ایکسٹینشن کے لیے کھلا ہونا چاہیے، لیکن تبدیلی کے لیے بند ہونا چاہیے ۔ "
  • خلاصہ ڈومین ماڈلز کی نمائندگی کو آسان بناتا ہے۔
تجرید اور encapsulation کے درمیان فرق Encapsulation ایک حکمت عملی ہے جسے تجرید کے حصے کے طور پر استعمال کیا جاتا ہے۔ Encapsulation سے مراد کسی شے کی ساخت ہے: اشیاء اپنی خصوصیات کو سمیٹتی ہیں اور انہیں باہر کی رسائی سے چھپاتی ہیں۔ کلاس کے صارفین اس کے طریقوں کا استعمال کرتے ہوئے اس کے ساتھ بات چیت کرتے ہیں، لیکن کلاس ڈھانچے تک براہ راست رسائی نہیں رکھتے۔ اس طرح، کلاس اس کے ڈیزائن سے متعلق نفاذ کی تفصیلات کا خلاصہ کرتی ہے۔ خلاصہ ایک زیادہ عام اصطلاح ہے۔ یہ دوسری چیزوں کے علاوہ ذیلی طبقات کا استعمال کرتے ہوئے بھی حاصل کیا جا سکتا ہے۔ مثال کے طور پر، معیاری لائبریری میں کلاس List(فہرست) عناصر کی ترتیب کے لیے ایک تجریدی ہے، فہرست میں ان کی جگہ کے مطابق ترتیب دی گئی ہے۔ فہرست کی مخصوص مثالیں Listہیں ArrayListیا LinkedList۔ کوڈ جو کسی فہرست کے ساتھ تعامل کرتا ہے Listاس کی تفصیلات کو خلاصہ کرتا ہے کہ وہ کون سی فہرست استعمال کرتا ہے۔ انکیپسولیشن کا استعمال کرتے ہوئے بنیادی حالت کو چھپائے بغیر اکثر تجرید ممکن نہیں ہوتا ہے۔ اگر کوئی طبقہ اپنے اندرونی ڈھانچے کو بے نقاب کرتا ہے، تو وہ اپنے اندرونی عمل کو تبدیل نہیں کر سکتا، اور اس لیے اسے خلاصہ نہیں کیا جا سکتا۔ خلاصہ کلاس اور خلاصہ طریقہ کیا ہیں؟ ایسا ہوتا ہے کہ ترقی کے دوران آپ چاہتے ہیں کہ بیس کلاس صرف اس کی اخذ کردہ کلاسوں کو ایک انٹرفیس فراہم کرے۔ یعنی آپ نہیں چاہتے کہ کوئی بھی بیس کلاس کی مثالیں بنائے۔ آپ کو انٹرفیس کو اس طرح استعمال کرنے کی ضرورت ہے کہ آپ صرف اس پر اشیاء کاسٹ کریں (یہ ایک مضمر کاسٹ ہے جو پولیمورفک رویے کی اجازت دیتا ہے)۔ یہ کلیدی لفظ کا استعمال کرتے ہوئے اس کلاس کو خلاصہ بنا کر حاصل کیا جاتا ہے abstract۔ یہ کچھ پابندیاں عائد کرتا ہے، جیسے کہ تجریدی طبقے کی مثالیں تخلیق کرنے میں ناکامی؛ جب تجریدی کلاس کا استعمال کرتے ہوئے، تجریدی طریقوں کو نافذ کرنا ضروری ہوتا ہے۔ یہ پولیمورفزم کو یقینی بناتا ہے۔ ایک تجریدی کلاس میں تجریدی اور ٹھوس طریقے دونوں شامل ہو سکتے ہیں۔ اگر کلاس میں کم از کم ایک طریقہ خلاصہ قرار دیا جاتا ہے، تو پوری کلاس کو بھی خلاصہ قرار دیا جانا چاہیے۔ تاہم، مخالف سمت میں اصول کا مشاہدہ کرنے کی ضرورت نہیں ہے. اگر کسی کلاس کو تجریدی قرار دیا جاتا ہے، تو اس میں تجریدی طریقے شامل نہیں ہوسکتے ہیں۔ ایک طریقہ جو محض اپنے دستخطوں کی وضاحت کرتا ہے اور عمل درآمد فراہم نہیں کرتا ہے اسے خلاصہ کہا جاتا ہے۔ اس کا اصل نفاذ اس کے ذیلی طبقات پر چھوڑ دیا جاتا ہے، جو تجریدی طبقے کو بڑھاتے ہیں۔ کسی شے کے ذریعہ ایک تجریدی طریقہ استعمال نہیں کیا جاسکتا ہے، صرف دوسرا طبقہ اسے بڑھا سکتا ہے۔ آپ کو خلاصہ کلاس کب استعمال کرنا چاہئے؟ خلاصہ کلاسز آپ کو کچھ پہلے سے طے شدہ طرز عمل کی وضاحت کرنے کی اجازت دیتی ہیں اور ذیلی کلاسیں کوئی مخصوص سلوک فراہم کرتی ہیں۔ مثال کے طور پر: List(فہرست) ایک انٹرفیس ہے، بدلے میں AbstractListایک فہرست کے بنیادی رویے کی وضاحت کرتا ہے، جسے ذیلی طبقے میں بطور استعمال یا بہتر کیا جا سکتا ہے، مثال کے طور پر، ArrayList(فہرست سرنی) میں۔ انٹرفیس کیا ہے؟ انٹرفیس کا تصور ایک تجریدی کلاس ہے، لیکن انٹرفیس (کی ورڈ کے ذریعے بیان کیا گیا ہے interface) ایک قدم آگے بڑھتا ہے۔ یہ کسی طریقہ یا فنکشن کے نفاذ کو بالکل بھی روکتا ہے۔ آپ صرف ایک طریقہ یا فنکشن کا اعلان کر سکتے ہیں، لیکن اس کا نفاذ فراہم نہیں کر سکتے۔ انٹرفیس کو نافذ کرنے والے طبقے کو حقیقی نفاذ کا خیال رکھنا چاہیے۔ انٹرفیس بہت مفید ہیں اور OOP میں بڑے پیمانے پر استعمال ہوتے ہیں۔ چونکہ وہ خود انٹرفیس اور نفاذ کا اشتراک کرتے ہیں، اس لیے وہ اپنے استعمال کے بہت سے فوائد فراہم کرتے ہیں:
  1. متعدد وراثت ۔
  2. ڈھیلا جوڑا آپریشن کا ایک خلاصہ ہے، جیسے تہہ بندی، اور ٹھوس نفاذ کچھ بھی ہو سکتا ہے: JDBC، JPA، JTA، وغیرہ۔
  3. انٹرفیس پروگرام لاگو نہیں ہوا ہے ۔
  4. ڈائنامک بائنڈنگ پولیمورفزم : کسی چیز کا پروگرامنگ انٹرفیس اس کے حقیقی نفاذ کو ظاہر کیے بغیر سامنے آتا ہے۔
  5. تجریدی سطح ، فعالیت کی علیحدگی۔
انٹرفیس اور خلاصہ کلاس کے درمیان فرق۔
  • انٹرفیس اس انٹرفیس کو نافذ کرنے والی کلاسوں کے ساتھ معاہدہ کا رشتہ ہے، یہ بتاتے ہوئے کہ عمل درآمد انٹرفیس کی طرف سے مقرر کردہ طریقے سے ہوتا ہے۔ یہ اعلان شدہ طریقوں کے ساتھ ایک خالی خول ہے۔
  • ایک تجریدی کلاس کچھ عمومی رویے کی وضاحت کرتی ہے اور اپنے ذیلی طبقات سے ان کی کلاس کے لیے غیر معمولی یا مخصوص رویے کی وضاحت کرنے کو کہتی ہے۔
  • تجریدی کلاس کے طریقوں اور اراکین کو کسی بھی رسائی میں ترمیم کرنے والے کے ساتھ نامزد کیا جا سکتا ہے؛ بدلے میں، تمام انٹرفیس کے طریقے عوامی ہونے چاہئیں۔
  • جب ایک تجریدی طبقے کو وراثت میں ملتا ہے تو، نسلی طبقے کو تجریدی طریقوں کی وضاحت کرنی چاہیے، جب کہ ایک انٹرفیس اپنے طریقوں کی وضاحت کیے بغیر دوسرے انٹرفیس کو وراثت میں لے سکتا ہے۔
  • ایک نسلی طبقہ صرف ایک تجریدی طبقے کو بڑھا سکتا ہے، لیکن ایک انٹرفیس بڑھا سکتا ہے یا ایک طبقہ بہت سے دوسرے انٹرفیس کو نافذ کر سکتا ہے۔
  • ایک نسلی طبقہ تجریدی طریقوں کی ایک ہی یا کم پابندی والے رسائی ترمیم کار کے ساتھ وضاحت کر سکتا ہے، لیکن انٹرفیس کو نافذ کرنے والی کلاس کو مرئیت کی اسی سطح کے ساتھ طریقوں کی وضاحت کرنی چاہیے۔
  • ایک انٹرفیس کنسٹرکٹرز پر مشتمل نہیں ہوتا ہے، جبکہ ایک تجریدی کلاس ہوتا ہے۔
  • جاوا انٹرفیس میں اعلان کردہ متغیرات بطور ڈیفالٹ حتمی ہیں۔ ایک تجریدی کلاس میں ایسے متغیر ہوسکتے ہیں جو حتمی نہیں ہیں۔
  • جاوا انٹرفیس کے تمام ممبران ہیں public۔ publicتجریدی طبقے کے ممبران ، protectedوغیرہ کے متحمل ہوسکتے ہیں۔

کمپوزیشن

کوڈ کا دوبارہ استعمال وراثت اور ساخت دونوں کا استعمال کرتے ہوئے حاصل کیا جا سکتا ہے۔ لیکن کمپوزیشن کا استعمال وراثت کے مقابلے میں انکیپسولیشن کی اعلی سطح فراہم کرتا ہے، کیونکہ بیک اینڈ کلاس میں تبدیلی ضروری طور پر اس کوڈ کو متاثر نہیں کرے گی جو فرنٹ اینڈ کلاس سے تعلق رکھتا ہے۔ کمپوزیشن ایک ڈیزائن کی تکنیک ہے جو کلاسوں میں "has-a" (ہے، شامل ہے) تعلقات کا استعمال کرتی ہے۔ جاوا وراثت اور آبجیکٹ کمپوزیشن دونوں کو کوڈ کو دوبارہ استعمال کرنے کے لیے استعمال کیا جا سکتا ہے۔ ساخت کا جوہر اشیاء کے درمیان "ہے" تعلق کا اظہار کرنا ہے۔ ایک کرسی کے بارے میں سوچو۔ کرسی پر سیٹ ہے۔ کرسی کی پشت ہے۔ ایک کرسی میں ٹانگوں کی ایک خاص تعداد ہوتی ہے۔ جملہ "has a" ایک ایسے رشتے کی تجویز کرتا ہے جس میں کرسی کے پاس کوئی اور چیز ہے، یا کم از کم استعمال کرتی ہے۔ یہ قطعی طور پر "has-a" کا رشتہ ہے، جو مرکب کی بنیاد ہے۔ فوائد:
  • مرئیت کا کنٹرول
  • نفاذ کو رن ٹائم پر تبدیل کیا جا سکتا ہے۔
  • ڈھیلا جوڑا، کیونکہ انٹرفیس کلاس نفاذ پر منحصر نہیں ہے۔
ساخت اور وراثت میں فرق
نہیں. مرکب (ایک ہے / ہے) وراثت (ایک ہے)
1 پولیمورفزم اور کوڈ کے دوبارہ استعمال کی حمایت کرتا ہے۔ پولیمورفزم اور کوڈ کے دوبارہ استعمال کی حمایت کرتا ہے۔
2 رن ٹائم آبجیکٹ پہلے ہی بن چکا ہے۔ کمپائل کے وقت آبجیکٹ کو متحرک طور پر تخلیق کیا جاتا ہے۔
3 نفاذ کو رن ٹائم پر تبدیل کیا جا سکتا ہے۔ عمل درآمد کو مرتب وقت پر تبدیل کیا جاسکتا ہے۔
4 ایک ذیلی طبقہ اپنے پیرنٹ کلاس سے آزاد ہوتا ہے، جو ڈھیلے جوڑے کی حمایت کرتا ہے (خاص طور پر انٹرفیس کنٹرول کے تحت)۔ ذیلی طبقے کا انحصار پیرنٹ کلاس کے نفاذ پر ہے، اس لیے بائنڈنگ کو مضبوط سمجھا جاتا ہے۔
5 استعمال کریں: گھر میں باتھ روم ہے۔ یہ کہنا غلط ہے کہ ایوان باتھ روم ہے۔ وراثت یک طرفہ ہے: مکان ایک عمارت ہے۔ لیکن عمارت گھر نہیں ہے۔
نوٹ: صرف کوڈ کے دوبارہ استعمال کو یقینی بنانے کے لیے وراثت کا استعمال نہ کریں۔ اگر کوئی تعلق نہیں ہے تو "is a" (is)، ان مقاصد کے لیے مرکب استعمال کیا جاتا ہے۔ مرکب اور جمع کے درمیان فرق آبجیکٹ تعلقات میں ہے۔ جمع ایک ایسا رشتہ ہے جس میں ایک طبقہ ایک مجموعہ میں فٹ بیٹھتا ہے۔ یہ ایک پورے رشتے کا ایک حصہ ہے، جہاں حصہ پورے کے بغیر موجود ہوسکتا ہے۔ ایسے رشتے بہت کمزور ہوتے ہیں۔ کوئی سائیکلک انحصار نہیں ہے۔ مثال کے طور پر: آرڈر اور پروڈکٹ۔ کمپوزیشن ایک ایسا رشتہ ہے جس میں ایک طبقہ ایک مجموعہ میں فٹ بیٹھتا ہے۔ یہ پورے رشتے کا ایک حصہ ہے جس میں حصہ پورے کے بغیر نہیں رہ سکتا۔ اگر سارا فنا ہو جائے تو اس کے تمام اجزا بھی فنا ہو جائیں گے۔ یہ ایک مضبوط رشتہ ہے۔ مثال کے طور پر: ایک کثیرالاضلاع اور اس کے عمودی حصے، ایک ترتیب اور اس کا جزو۔
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION