CodeGym /جاوا بلاگ /Random-SD /طبقن جي وچ ۾ لاڳاپا. وراثت، ٺهڻ، ۽ گڏ ڪرڻ
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ساڳيو ئي شعبن جو به سچو آهي: جيڪڏهن ٻار طبقي ۾ منفرد خاصيتون آهن، ته اسان آرام سان انهن شعبن کي چائلڊ ڪلاس ۾ بيان ڪريون ٿا ۽ پريشان ٿيڻ بند ڪريون ٿا. :) ڪوڊ ٻيهر استعمال ڪرڻ جي صلاحيت وراثت جو بنيادي فائدو آهي. پروگرامرز لاءِ، اهو تمام ضروري آهي ته اضافي ڪوڊ نه لکو. توھان کي توھان جي ڪم ۾ بار بار اھو ملندو. مھرباني ڪري ڪجھ ٻيو اهم ياد رکو: جاوا وٽ گھڻن وراثت نه آھي . هر طبقي کي صرف هڪ طبقو ورثي ۾ ملي ٿو. اسان ان جي سببن بابت مستقبل جي سبقن ۾ وڌيڪ ڳالهائينداسين. في الحال، بس ياد رکو. رستي ۾، هي جاوا کي ڪجهه ٻين OOP ٻولين کان مختلف بڻائي ٿو. مثال طور، C++ گھڻن وراثت کي سپورٽ ڪري ٿو. وراثت سان هر شيء گهٽ يا گهٽ واضح آهي. اچو ته اڳتي وڌون.

ٺاھڻ ۽ گڏ ڪرڻ

ڪلاس ۽ شيون گڏ ڪري سگهجن ٿيون. وراثت هڪ "آهي-هڪ" تعلق بيان ڪري ٿو. شينهن هڪ جانور آهي. اهڙو تعلق وراثت استعمال ڪندي آساني سان بيان ڪيو ويندو آهي، جتي 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