CodeGym /جاوا بلاگ /Random-UR /طبقات کے درمیان تعلقات۔ وراثت، ساخت، اور جمع
John Squirrels
سطح
San Francisco

طبقات کے درمیان تعلقات۔ وراثت، ساخت، اور جمع

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

جاوا میں وراثت اور اس کے فوائد

جیسا کہ آپ کو یقیناً یاد ہے، وراثت ایک ایسا طریقہ کار ہے جو آپ کو موجودہ کلاس (والدین طبقے) کی بنیاد پر ایک نئی کلاس کی وضاحت کرنے دیتا ہے۔ ایسا کرنے میں، نئی کلاس پیرنٹ کلاس کی خصوصیات اور فعالیت کو مستعار لیتی ہے۔ آئیے پچھلے اسباق میں دی گئی وراثت کی ایک مثال یاد کرتے ہیں:
public class Car {

   private String model;
   private int maxSpeed;
   private int yearOfManufacture;

   public Car(String model, int maxSpeed, int yearOfManufacture) {
       this.model = model;
       this.maxSpeed = maxSpeed;
       this.yearOfManufacture = yearOfManufacture;
   }


public void gas() {
       // Gas
   }

   	public void brake() {
       // Brake
   }
}


public class Truck extends Car {

   public Truck(String model, int maxSpeed, int yearOfManufacture) {
       super(model, maxSpeed, yearOfManufacture);
   }
}



public class Sedan extends Car {
   public Sedan(String model, int maxSpeed, int yearOfManufacture) {
       super(model, maxSpeed, yearOfManufacture);
   }
}
ہمارے پاس ایک خاص پروگرام ہے جس میں مختلف قسم کی کاروں کے ساتھ کام کرنا شامل ہے۔ یہاں تک کہ اگر آپ کار کے شوقین نہیں ہیں، تو آپ شاید جانتے ہوں گے کہ دنیا میں کاروں کی بہت سی اقسام ہیں۔ :) اس کے مطابق، ہم کاروں کی مشترکہ خصوصیات کو ایک مشترکہ پیرنٹ کلاس میں الگ کریں گے جسے کہتے ہیں Car۔ تو ان کی قسم سے قطع نظر، تمام کاروں میں کیا مشترک ہے؟ ہر کار کی تیاری کا ایک سال، ماڈل کا نام، اور زیادہ سے زیادہ رفتار ہوتی ہے۔ modelہم ان خصوصیات کو , maxSpeedاور yearOfManufactureفیلڈز میں ڈالتے ہیں ۔ جہاں تک رویے کا تعلق ہے، کوئی بھی کار تیز اور سست ہو سکتی ہے۔ :) ہم اس رویے کی وضاحت gas()اور brake()طریقوں میں کرتے ہیں۔ اس سے ہمیں کیا فائدہ ہوتا ہے؟ سب سے پہلے، یہ کوڈ کی مقدار کو کم کرتا ہے۔ یقینا، ہم والدین کی کلاس کے بغیر بھی کر سکتے ہیں۔ لیکن چونکہ ہر کار کو تیز اور سست کرنے کے قابل ہونا چاہیے، ہمیں , , اور کلاسز میں اور ہر دوسری کار کلاس میں طریقے gas()اور طریقے بنانے ہوں گے۔ تصور کریں کہ ہمیں کتنا اضافی کوڈ لکھنا پڑے گا۔ اور , اور فیلڈز کے بارے میں مت بھولنا : اگر ہم پیرنٹ کلاس سے چھٹکارا پاتے ہیں، تو ہمیں انہیں ہر کار کلاس میں بنانا پڑے گا! جب ہمارے پاس کار کی دو درجن کلاسیں ہوتی ہیں، تو ڈپلیکیٹ کوڈ کی مقدار واقعی سنگین ہو جاتی ہے۔ عام شعبوں اور طریقوں کو (جسے "ریاستیں" اور "رویے" بھی کہا جاتا ہے) کو پیرنٹ کلاس میں منتقل کرنے سے ہمیں کافی وقت اور جگہ کی بچت ہوتی ہے۔ اگر کسی قسم کی منفرد خصوصیات یا طریقے ہیں جو دوسری کار قسموں کے پاس نہیں ہیں تو کوئی بڑی بات نہیں۔ آپ انہیں ہمیشہ ایک نسلی طبقے میں بنا سکتے ہیں، باقی سب سے الگ۔ brake()TruckSedanF1CarSportsCarmodelmaxSpeedyearOfManufactureطبقات کے درمیان تعلقات۔  وراثت، ساخت، اور جمع - 2
public class F1Car extends Car {

   public void pitStop() {

       // Only race cars make pit stops
   }

   public static void main(String[] args) {

       F1Car formula1Car = new F1Car();
       formula1Car.gas();
       formula1Car.pitStop();
       formula1Car.brake();
   }
}
آئیے مثال کے طور پر فارمولا ون ریس کاروں کو دیکھتے ہیں۔ اپنے "رشتہ داروں" کے برعکس، ان کا ایک منفرد رویہ ہے - وہ وقتاً فوقتاً ایک گڑھے کو روکتے ہیں۔ یہ ہمیں پریشان نہیں کرتا۔ ہم پہلے ہی پیرنٹ کلاس میں عام رویے کو بیان کر چکے ہیں Car، اور ان کلاسوں میں نسلی کلاسوں کے مخصوص رویے کو شامل کیا جا سکتا ہے۔ طبقات کے درمیان تعلقات۔  وراثت، ساخت، اور جمع - 3فیلڈز کے بارے میں بھی ایسا ہی ہے: اگر کسی چائلڈ کلاس میں منفرد خصوصیات ہیں، تو ہم ان فیلڈز کو چائلڈ کلاس کے اندر خاموشی سے اعلان کرتے ہیں اور پریشان ہونا چھوڑ دیتے ہیں۔ :) کوڈ کو دوبارہ استعمال کرنے کی صلاحیت وراثت کا بنیادی فائدہ ہے۔ پروگرامرز کے لیے، اضافی کوڈ نہ لکھنا بہت ضروری ہے۔ آپ اپنے کام میں بار بار اس کا سامنا کریں گے۔ براہ کرم کچھ اور اہم یاد رکھیں: Java میں متعدد وراثت نہیں ہے ۔ ہر کلاس کو صرف ایک کلاس وراثت میں ملتی ہے۔ ہم آئندہ اسباق میں اس کی وجوہات کے بارے میں مزید بات کریں گے۔ ابھی کے لیے، بس اسے یاد رکھیں۔ ویسے، یہ جاوا کو کچھ دوسری OOP زبانوں سے مختلف بناتا ہے۔ مثال کے طور پر، C++ متعدد وراثت کی حمایت کرتا ہے۔ وراثت سے سب کچھ کم و بیش واضح ہے۔ آئیے آگے بڑھیں۔

ترکیب اور جمع

کلاسز اور اشیاء کو ایک ساتھ جوڑا جا سکتا ہے۔ وراثت ایک "is-a" تعلق کو بیان کرتی ہے۔ شیر ایک جانور ہے۔ اس طرح کا رشتہ وراثت کا استعمال کرتے ہوئے آسانی سے ظاہر ہوتا ہے، Animalوالدین کی کلاس کہاں ہے اور Lionبچہ ہے۔ تاہم، تمام رشتوں کو اس طرح بیان نہیں کیا گیا ہے۔ مثال کے طور پر، کی بورڈ کا تعلق کمپیوٹر سے ضرور ہے، لیکن یہ کمپیوٹر نہیں ہے ۔ ہاتھ کسی نہ کسی طرح ایک شخص سے متعلق ہیں، لیکن وہ ایک شخص نہیں ہیں. ان معاملات میں، ہمارے پاس ایک اور قسم کا رشتہ ہے: "is-a" نہیں، بلکہ "has-a"۔ ہاتھ ایک شخص نہیں ہے، لیکن ایک شخص کا حصہ ہے. کی بورڈ کمپیوٹر نہیں ہے بلکہ کمپیوٹر کا حصہ ہے۔ A has-a تعلق کو کوڈ میں مرکب اور جمع کا استعمال کرتے ہوئے بیان کیا جا سکتا ہے ۔ فرق رشتہ کی "سختی" میں ہے۔ آئیے ایک سادہ سی مثال دیتے ہیں: ہمارے پاس ایک Carکلاس ہے۔ ہر گاڑی کا ایک انجن ہوتا ہے۔ مزید برآں، ہر گاڑی میں مسافر ہوتے ہیں۔ Engine engineفیلڈز اور فیلڈز کے درمیان بنیادی فرق کیا ہے Passenger[] passengers؟ حقیقت یہ ہے کہ مسافر Aکار میں بیٹھا ہے اس کا مطلب یہ نہیں ہے کہ مسافر Bکار Cمیں نہیں ہیں۔ ایک کار ایک سے زیادہ مسافروں کے مطابق ہو سکتی ہے۔ مزید یہ کہ اگر تمام مسافر گاڑی سے باہر نکل جائیں تو یہ پھر بھی آسانی سے کام کرے گی۔ Carکلاس اور صف کے درمیان تعلق Passenger[] passengersکم سخت ہے۔ اسے جمع کہتے ہیں ۔ یہ جمع کی ایک اور اچھی مثال پیش کرتا ہے۔ فرض کریں کہ ہمارے پاس ایک Studentکلاس اور ایک StudentGroupکلاس ہے۔ ایک طالب علم متعدد طلبہ تنظیموں میں شامل ہو سکتا ہے: ایک فزکس کلب، ایک سٹار وار فین کلب، اور/یا طالب علم کامیڈی کلب۔ ساخت ایک سخت قسم کا رشتہ ہے۔ کمپوزیشن کا استعمال کرتے وقت، کوئی چیز کسی چیز کا حصہ ہوتی ہے اور اسی قسم کی کسی دوسری چیز سے تعلق نہیں رکھ سکتی۔ سب سے آسان مثال کار انجن ہے۔ انجن ایک کار کا حصہ ہے اور دوسری کار کا حصہ نہیں ہو سکتا۔ Carجیسا کہ آپ دیکھ سکتے ہیں، ان کا رشتہ اور کے درمیان تعلقات سے کہیں زیادہ سخت ہے Passengers۔ طبقات کے درمیان تعلقات۔  وراثت، ساخت، اور جمع - 4
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION