CodeGym /جاوا بلاگ /Random-SD /جاوا ۾ خلاصي طبقن جا مخصوص مثال
John Squirrels
سطح
San Francisco

جاوا ۾ خلاصي طبقن جا مخصوص مثال

گروپ ۾ شايع ٿيل
سلام گذريل سبقن ۾، اسان انٽرفيس سان ملاقات ڪئي ۽ معلوم ڪيو ته اهي ڇا لاءِ آهن. اڄ جو موضوع گذريل موضوع جي گونج ڪندو. اچو ته جاوا ۾ خلاصي ڪلاس بابت ڳالهايون.جاوا ۾ خلاصي طبقن جا مخصوص مثال - 1

ڇو طبقن کي 'خلاصو' سڏيو ويندو آهي

توهان کي شايد ياد آهي ته 'تخليق' ڇا آهي - اسان اڳ ۾ ئي ان تي هليا ويا آهيون. :) جيڪڏهن توهان وساري ڇڏيو، خوف نه ڪريو. ياد رکو: اهو OOP جو هڪ اصول آهي جيڪو چوي ٿو جڏهن ڪلاس ڊزائين ڪرڻ ۽ شيون ٺاهي رهيا آهيون، اسان کي صرف اداري جي مکيه خاصيتن کي سڃاڻڻ گهرجي ۽ نابالغ کي رد ڪرڻ گهرجي. مثال طور، جيڪڏهن اسان هڪ SchoolTeacherڪلاس ٺاهي رهيا آهيون، اسان کي مشڪل سان ' اوچائي ' ملڪيت جي ضرورت آهي. درحقيقت، هي ملڪيت استاد لاء غير مناسب آهي. پر جيڪڏهن اسان هڪ BasketballPlayerڪلاس ٺاهي رهيا آهيون، ته پوء ترقي هڪ اهم خصوصيت هوندي. سو ٻڌو. خلاصو طبقو اوترو ئي خلاصو هوندو آهي جيترو اهي اچن ٿا - هڪ اڻ مڪمل 'خالي' مستقبل جي طبقن جي هڪ گروپ لاءِ. خالي استعمال نه ٿو ڪري سگھجي جيئن آهي. اهو تمام 'خام' آهي. پر اهو بيان ڪري ٿو ڪجهه رياست ۽ عام رويي جو جيڪو مستقبل جي طبقن جي قبضي ۾ هوندو جيڪي تجريدي طبقي جو وارث آهن.

خلاصي جاوا ڪلاس جا مثال

ڪارن سان هڪ سادي مثال تي غور ڪريو:
public abstract class Car {

   private String model;
   private String color;
   private int maxSpeed;

   public abstract void gas();

   public abstract void brake();

   public String getModel() {
       return model;
   }

   public void setModel(String model) {
       this.model = model;
   }

   public String getColor() {
       return color;
   }

   public void setColor(String color) {
       this.color = color;
   }

   public int getMaxSpeed() {
       return maxSpeed;
   }

   public void setMaxSpeed(int maxSpeed) {
       this.maxSpeed = maxSpeed;
   }
}
اهو ئي آهي جيڪو آسان ترين خلاصو ڪلاس وانگر نظر اچي ٿو. جئين توهان ڏسي سگهو ٿا، اهو ڪجهه خاص ناهي :) اسان کي ان جي ضرورت ڇو هوندي؟ سڀ کان پهريان، اهو بيان ڪري ٿو اسان جي گهربل ادارو، هڪ ڪار، سڀ کان وڌيڪ تجريدي طريقي سان ممڪن آهي. اتي ھڪڙو سبب آھي ڇو ته اسان لفظ خلاصو استعمال ڪري رھيا آھيون . حقيقي دنيا ۾، ڪو به 'تخليقي ڪارٽون' نه آهن. هتي ٽرڪون، ريس ڪارون، سيڊان، ڪوپس، ۽ SUVs آهن. اسان جو خلاصو ڪلاس صرف هڪ 'بليو پرنٽ' آهي جيڪو اسان بعد ۾ ڪار ڪلاس ٺاهڻ لاءِ استعمال ڪنداسين.
public class Sedan extends Car {

   @Override
   public void gas() {
       System.out.println("The sedan is accelerating!");
   }

   @Override
   public void brake() {
       System.out.println("The sedan is slowing down!");
   }

}
اهو بلڪل ساڳيو آهي جيڪو اسان وراثت بابت سبق ۾ ڳالهايو آهي. پر انهن سبقن ۾، اسان وٽ ڪار ڪلاس هو ۽ ان جا طريقا خلاصا نه هئا. پر انهي حل ۾ ڪيتريون ئي خرابيون آهن جيڪي خلاصي طبقن ۾ طئي ٿيل آهن. سڀ کان پهريان ۽ سڀ کان پهريان، توهان هڪ خلاصو طبقي جو مثال ٺاهي نٿا سگهو :
public class Main {

   public static void main(String[] args) {

       Car car = new Car(); // Error! The Car class is abstract!
   }
}
جاوا جي ٺاهيندڙن خاص طور تي هن 'فيچر' کي ڊزائين ڪيو. هڪ ڀيرو ٻيهر، هڪ ياد ڏياريندڙ طور: هڪ خلاصو ڪلاس صرف مستقبل جي 'عام' طبقن لاء هڪ نقشو آهي . توهان کي بليو پرنٽ جي ڪاپي جي ضرورت ناهي، صحيح؟ ۽ توهان خلاصي طبقي جا مثال نه ٺاهيندا آهيو :) پر جيڪڏهن اهو Carڪلاس خلاصو نه هجي ها ته اسان آساني سان ان جا مثال ٺاهي سگهون ٿا:
public class Car {

   private String model;
   private String color;
   private int maxSpeed;

   public void gas() {
       // Some logic
   }

    public void brake() {
       // Some logic
   }
}


public class Main {

   public static void main(String[] args) {

       Car car = new Car(); // Everything is fine. A car is created.
   }
}
ھاڻي اسان جي پروگرام ۾ ھڪڙي قسم جي ناقابل سمجھ ڪار آھي - اھو ھڪڙو ٽرڪ نه آھي، ھڪڙي ريس ڪار نه آھي، ھڪڙو سيڊان نه آھي، ۽ اھو مڪمل طور تي واضح آھي ته اھو ڇا آھي. هيءَ اها ئي ’خلاصي ڪار‘ آهي جيڪا فطرت ۾ موجود ناهي. اسان ساڳيو مثال مهيا ڪري سگهون ٿا جانورن کي استعمال ڪندي. تصور ڪريو جيڪڏهن Animalطبقن ( تجريدي جانور ). اهو واضح ناهي ته اهو ڪهڙي قسم جو جانور آهي، اهو ڪهڙي خاندان سان تعلق رکي ٿو، ۽ ان ۾ ڪهڙيون خاصيتون آهن. اهو توهان جي پروگرام ۾ ڏسڻ لاء عجيب ٿيندو. فطرت ۾ ڪي به 'تخليقي جانور' نه آهن. صرف ڪتا، ٻليون، لومڙ، مول وغيره خلاصي طبقو اسان کي تجريدي شين کان بچائي ٿو. اهي اسان کي بنيادي رياست ۽ رويي ڏين ٿا. مثال طور، سڀني ڪارن کي ماڊل ، رنگ ، ۽ وڌ ۾ وڌ رفتار هجڻ گهرجي ، ۽ توهان کي گيس ۽ بريڪ لاڳو ڪرڻ جي قابل هوندو . بس اهو آهي. هي هڪ عام خلاصو منصوبو آهي. اڳيون توھان ڪلاس ٺاھيو جيڪي توھان کي ضرورت آھي. نوٽ: abstract ڪلاس ۾ ٻه طريقا پڻ abstract جي طور تي نامزد ڪيا ويا آهن ، ۽ انهن تي عمل درآمد نه آهي. سبب ساڳيو آهي: تجريدي ڪلاس خلاصي ڪارن لاءِ ڊفالٽ رويو نه ٺاهيندا آهن. اهي صرف ظاهر ڪن ٿا ته هر ڪار کي ڇا ڪرڻ گهرجي. تنهن هوندي، جيڪڏهن توهان کي ڊفالٽ رويي جي ضرورت آهي، توهان طريقا لاڳو ڪري سگهو ٿا هڪ تجريدي طبقي ۾. جاوا هن کي منع نٿو ڪري:
public abstract class Car {

   private String model;
   private String color;
   private int maxSpeed;

   public void gas() {
       System.out.println("Gas!");
   }

   public abstract void brake();

   // Getters and setters
}


public class Sedan extends Car {

   @Override
   public void brake() {
       System.out.println("The sedan is slowing down!");
   }

}

public class Main {

   public static void main(String[] args) {

       Sedan sedan = new Sedan();
       sedan.gas();
   }
}
ڪنسول آئوٽ: ”گس!“ جيئن توهان ڏسي سگهو ٿا، اسان پهريون طريقو خلاصو ڪلاس ۾ لاڳو ڪيو آهي، ٻيو نه. نتيجي طور، اسان جي Sedanطبقي جي رويي کي ٻن حصن ۾ ورهايو ويو آهي: جيڪڏهن توهان gas()طريقي کي سڏيندا آهيو، ڪال خلاصي پيرن ڪلاس تائين ’اڀري‘ آهي Car، پر اسان ڪلاس brake()۾ ان طريقي کي ختم ڪري Sedanڇڏيو آهي، اهو تمام سولو ۽ لچڪدار ثابت ٿيو آهي، پر هاڻي اسان جو ڪلاس ايترو خلاصو نه رهيو آهي ؟ آخرڪار، ان جا اڌ طريقا لاڳو ڪيا ويا آهن. حقيقت ۾ هڪ تمام اهم خصوصيت آهي - هڪ طبقو خلاصو آهي جيڪڏهن گهٽ ۾ گهٽ هڪ طريقو خلاصو آهي ، ٻن طريقن مان هڪ، يا گهٽ ۾ گهٽ هڪ هزار طريقن مان هڪ - ان سان ڪو فرق ناهي. اسان سڀني طريقن کي لاڳو ڪري سگهون ٿا ۽ ڪنهن کي به نه ڇڏي ڏيو. پوءِ اهو خلاصي طريقن کان سواءِ هڪ خلاصو طبقو هوندو. اصولي طور تي، اهو ممڪن آهي، ۽ مرتب ڪندڙ غلطيون پيدا نه ڪندو، پر اهو بهتر آهي ته ان کان پاسو ڪيو وڃي: لفظ خلاصو پنهنجي معني وڃائي ٿو، ۽ توهان جا ساٿي پروگرامر ڏاڍو حيران ٿيو:/ ساڳئي وقت، جيڪڏهن هڪ طريقو لفظ خلاصو سان نشان لڳايو ويو آهي، هر ٻار طبقي کي لازمي طور تي ان کي لاڳو ڪرڻ يا ان کي خلاصو قرار ڏيڻ گهرجي. ٻي صورت ۾، مرتب ڪندڙ هڪ غلطي پيدا ڪندو. يقينن، هر طبقو صرف هڪ خلاصو طبقو وارث ڪري سگهي ٿو، تنهنڪري وراثت جي لحاظ کان خلاصي ۽ عام طبقن جي وچ ۾ ڪوبه فرق ناهي. اهو مسئلو ناهي ته اسان کي هڪ تجريدي طبقي يا هڪ عام هڪ وارث آهي، اتي صرف هڪ والدين طبقو ٿي سگهي ٿو.

ڇو جاوا وٽ ڪيترن ئي ڪلاسن جي وراثت نه آهي

اسان اڳ ۾ ئي چئي چڪا آهيون ته جاوا وٽ هڪ کان وڌيڪ وراثت ناهي، پر اسان حقيقت ۾ نه ڳوليا آهن ڇو. اچو ته هاڻي اهو ڪرڻ جي ڪوشش ڪريون. حقيقت اها آهي ته جيڪڏهن جاوا وٽ هڪ کان وڌيڪ وراثت هئي، ٻار طبقن کي اهو فيصلو ڪرڻ جي قابل نه هوندو ته انهن کي ڪهڙي مخصوص رويي کي چونڊڻ گهرجي. فرض ڪريو اسان وٽ ٻه طبقا آهن - Toaster۽ NuclearBomb:
public class Toaster {


 public void on() {

       System.out.println("The toaster is on. Toast is being prepared!");
   }

   public void off() {

       System.out.println("The toaster is off!");
   }
}


public class NuclearBomb {

   public void on() {

       System.out.println("Boom!");
   }
}
جئين توهان ڏسي سگهو ٿا، ٻنهي جو هڪ on()طريقو آهي. هڪ ٽاسٽر لاء، اهو ٽوسٽ شروع ٿئي ٿو. هڪ ايٽمي بم لاء، اهو هڪ ڌماڪو بند ڪري ٿو. اڙي: / ھاڻي تصور ڪريو ته توھان فيصلو ڪيو (مون کان نه پڇو ڇو!) وچ ۾ ڪجھ ٺاھيو. ۽ اھڙي طرح توھان وٽ ھڪڙو MysteriousDeviceڪلاس آھي! هي ڪوڊ، يقينا، ڪم نٿو ڪري، ۽ اسان ان کي صرف هڪ مثال طور مهيا ڪندا آهيون 'پر اهو ٿي سگهي ٿو':
public class MysteriousDevice extends Toaster, NuclearBomb {

   public static void main(String[] args) {

       MysteriousDevice mysteriousDevice = new MysteriousDevice();
       mysteriousDevice.on(); // So what should happen here? Do we get toast or a nuclear apocalypse?
   }
}
اچو ته هڪ نظر رکون ته اسان وٽ ڇا آهي. پراسرار ڊوائيس هڪ ئي وقت ٽاسٽر ۽ نيوڪليئر بم کي ورثي ۾ ملي ٿو. ٻنهي جا on()طريقا آهن. نتيجي طور، جيڪڏهن اسان on()طريقي کي سڏيندا آهيون، اهو واضح ناهي ته ڪنهن کي MysteriousDeviceاعتراض تي سڏڻ گهرجي. ڪو به طريقو ناهي ته اعتراض ڪڏهن به ڄاڻي سگهي. ۽ اهو سڀ ڪجهه ختم ڪرڻ لاءِ: نيوڪليئر بم وٽ ڪو طريقو ناهي off()، تنهن ڪري جيڪڏهن اسان صحيح اندازو نه لڳايو، ته ڊوائيس کي غير فعال ڪرڻ ناممڪن ٿي ويندو. جاوا ۾ خلاصي طبقن جا مخصوص مثال - 2اهو خاص طور تي هن 'مونجهاري' جي ڪري آهي، جتي اعتراض کي خبر ناهي ته ڪهڙي رويي کي ظاهر ڪيو وڃي، ته جاوا جي تخليق ڪندڙن ڪيترن ئي ورثي کي ڇڏي ڏنو. بهرحال، توهان کي ياد هوندو ته جاوا ڪلاس ڪيترن ئي انٽرفيس کي لاڳو ڪري سگهن ٿا. رستي جي ذريعي، توهان جي پڙهائي ۾، توهان اڳ ۾ ئي گهٽ ۾ گهٽ هڪ تجريدي طبقي سان منهن ڪيو آهي! جيتوڻيڪ شايد توهان کي خبر ناهي :)
public abstract class Calendar implements Serializable, Cloneable, Comparable<Calendar>
اهو توهان جو پراڻو دوست آهي، Calendarڪلاس. اهو خلاصو آهي ۽ ڪيترائي ٻار آهن. انهن مان هڪ آهي GregorianCalendar. توھان اڳ ۾ ئي تاريخن بابت سبق ۾ استعمال ڪيو آھي. :) هر شيء ڪافي صاف لڳي ٿي. هتي صرف هڪ سوال آهي: خلاصو طبقن ۽ انٽرفيس جي وچ ۾ بنيادي فرق ڇا آهي؟ انهن ٻنهي کي جاوا ۾ ڇو شامل ڪيو بلڪه ٻولي کي هڪ تائين محدود ڪرڻ جي؟ آخرڪار، اهو مڪمل طور تي ڪافي هوندو. اسان ان بابت ايندڙ سبق ۾ ڳالهائينداسين ! تيسيتائين :)
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION