CodeGym /جاوا بلاگ /Random-SD /انٽرفيس ۾ ڊفالٽ طريقا
John Squirrels
سطح
San Francisco

انٽرفيس ۾ ڊفالٽ طريقا

گروپ ۾ شايع ٿيل
جاوا جو هر نئون نسخو انهن کان مختلف آهي جيڪي اڳ ۾ آيا هئا. هتي مواد ۾ تبديلين جو هڪ مثال آهي جنهن کي اسان ڍڪي ڇڏيو آهي: جاوا 5 کان اڳ، ٻولي enums نه هئي. انٽرفيس ۾ ڊفالٽ طريقا - 1اهڙي طرح، جاوا 8 جاوا 7 کان واضح طور تي مختلف آهي. اسان جا اڪثر سبق ٻولي جي 7 هين ورزن لاءِ لکيل هئا، پر يقيناً اسان اهم جدت کي نظرانداز نه ڪنداسين. جيئن ته اسان اڳ ۾ ئي هن سبق ۾ انٽرفيس جي باري ۾ ڳالهائي رهيا آهيون، اسان هڪ اپڊيٽ تي غور ڪنداسين - انٽرفيس ۾ ڊفالٽ طريقن . توهان اڳ ۾ ئي ڄاڻو ٿا ته هڪ انٽرفيس رويي تي عمل نٿو ڪري . ان جو ڪم اهو آهي ته اهو رويو بيان ڪري ته سڀئي شيون جيڪي ان تي عمل ڪن ٿيون انهن وٽ هجڻ گهرجن . پر ڊولپرز کي اڪثر حالتن سان منهن ڏيڻو پوي ٿو جتي هڪ طريقو لاڳو ڪرڻ سڀني طبقن ۾ ساڳيو آهي. اچو ته اسان جي پراڻي ڪار مثال تي غور ڪريو:
public interface Car {

   public void gas();

   public void brake();
}
public class Sedan implements Car {

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

   @Override
   public void brake() {
       System.out.println("Brake!");
   }
}


public class Truck implements Car {

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

   @Override
   public void brake() {
       System.out.println("Brake!");
   }
}


public class F1Car implements Car {
   @Override
   public void gas() {
       System.out.println("Gas!");
   }

   @Override
   public void brake() {
       System.out.println("Brake!");
   }
}
"توهان جي خيال ۾، هن ڪوڊ سان بنيادي مسئلو ڇا آهي؟ توهان شايد محسوس ڪيو آهي ته اسان بار بار ڪوڊ جو هڪ گروپ لکيو آهي! اهو مسئلو پروگرامنگ ۾ عام آهي، ۽ توهان کي ان کان بچڻ جي ضرورت آهي. اها ٻي ڳالهه آهي ته خاص حل اڳ ۾ موجود نه هئا. جاوا 8 جاري ڪيو ويو. ھن ورزن سان ڊفالٽ طريقن کي بيان ڪرڻ جي صلاحيت آئي آھي ۽ انھن کي انٽرفيس جي اندر ئي لاڳو ڪرڻ جي صلاحيت آھي! ھتي آھي توھان ڪيئن ڪندا آھيو:
public interface Car {

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

   public default void brake() {
       System.out.println("Brake!");
   }
}

public class Sedan implements Car {

}

public class Truck implements Car {

}

public class F1Car implements Car {

}
هاڻي gas()۽ brake()طريقا، جيڪي سڀني ڪارن لاء ساڳيا هئا، انٽرفيس ڏانهن منتقل ڪيا ويا آهن. بار بار ڪوڊ جي ضرورت ناهي. وڌيڪ ڇا آهي، طريقا هر طبقي ۾ موجود آهن!
public class Main {

   public static void main(String[] args) {

       F1Car f1Car = new F1Car();
       Sedan sedan = new Sedan();
       Truck truck = new Truck();
       truck.gas();
       sedan.gas();
       f1Car.brake();
   }
}
ڇا ٿيندو جيڪڏهن طريقي سان 100 طبقا آهن gas()، پر انهن مان صرف 99 ساڳيو رويي آهي؟ ڇا اهو سڀ ڪجهه برباد ڪري ٿو ۽ ڊفالٽ طريقي کي هن صورتحال لاءِ نا مناسب بڻائي ٿو؟ يقينا، نه :) انٽرفيس ۾ ڊفالٽ طريقن کي عام طور تي ساڳئي طريقي سان ختم ڪري سگهجي ٿو.
public class UnusualCar implements Car {
   @Override
   public void gas() {
       System.out.println("This car accelerates differently!");
   }

   @Override
   public void brake() {
       System.out.println("This car decelerates differently!");
   }
}
سڀ 99 ٻين قسمن جون ڪارون ڊفالٽ طريقي تي عمل ڪنديون، ۽ ڪلاس UnusualCar، جيڪو هڪ استثنا آهي، مجموعي تصوير کي خراب نه ڪندو ۽ آرام سان پنهنجي رويي جي وضاحت ڪندو. انٽرفيس جي گھڻن وراثت. جئين توهان اڳ ۾ ئي ڄاڻو ٿا، جاوا ڪيترن ئي ورثي جي حمايت نٿو ڪري. ان جا ڪيترائي سبب آهن. اسان انهن کي هڪ الڳ سبق ۾ تفصيل سان ڏسندا سين. ٻيون ٻوليون، جهڙوڪ C++، ان جي حمايت ڪن ٿيون. گهڻن وراثت کان سواء، هڪ سنگين مسئلو پيدا ٿئي ٿو: هڪ شئي ڪيترن ئي مختلف خاصيتون ۽ 'رويي' ٿي سگهي ٿي. هتي زندگي مان هڪ مثال آهي: اسان پنهنجي والدين لاء ٻار، اسان جي استادن لاء شاگرد، ۽ اسان جي ڊاڪٽرن لاء مريض. زندگيءَ ۾، اسين مختلف ڪردار کڻون ٿا ۽، مطابق، مختلف طريقي سان هلون ٿا: ظاهر آهي، اسان استادن سان ائين نه ڳالهائينداسين جيئن اسان پنهنجن ويجهن دوستن سان ڳالهايون ٿا. اچو ته ان کي ڪوڊ ۾ ترجمو ڪرڻ جي ڪوشش ڪريو. تصور ڪريو ته اسان وٽ ٻه طبقا آهن: تالاب ۽ Aviary. تلاءَ لاءِ، اسان کي پاڻي جي پکيءَ جي ضرورت آهي. aviary لاء، اسان کي پرواز پکين جي ضرورت آهي. هن کي ڪرڻ لاء، اسان ٻه بنيادي ڪلاس ٺاهيا آهن: FlyingBird۽ Waterfowl.
public class Waterfowl {
}

public class FlyingBird {
}
ان مطابق، اسان پکي موڪلينداسين جن جا طبقا وراثت FlyingBird۾ اچن ٿا، ۽ اسان انهن پکين کي موڪلينداسين جيڪي وراثت Waterfowl۾ ملن ٿا. اهو سڀ ڪجهه بلڪل سادو لڳي ٿو. پر اسان بت کي ڪٿي موڪليندا آهيون؟ اهو ترڻ ۽ اڏامي ٿو. ۽ اسان وٽ ڪيترائي وراثت نه آهن. خوشقسمتيء سان، جاوا انٽرفيس جي ڪيترن ئي عملن کي سپورٽ ڪري ٿو. جيتوڻيڪ هڪ طبقو ڪيترن ئي والدين کي وارث نٿو ڪري سگهي، اهو آساني سان ڪيترن ئي انٽرفيس کي لاڳو ڪري سگهي ٿو! اسان جي بت هڪ اڏامندڙ پکي ۽ هڪ waterfowl ٻئي ٿي سگهي ٿو :) اسان کي صرف ٺاهڻ FlyingBird۽ Waterfowlinterfaces نه بلڪه طبقن جي ضرورت آهي گهربل نتيجو حاصل ڪرڻ لاء.
public class Duck implements FlyingBird, Waterfowl {

   // The methods of both interfaces can be easily combined into one class

   @Override
   public void fly() {
       System.out.println("Fly!");
   }

   @Override
   public void swim() {

       System.out.println("Swim!");
   }
}
ان جي مطابق، اسان جو پروگرام طبقن جي لچڪ کي برقرار رکي ٿو، ۽، ڊفالٽ طريقن سان گڏ، اسان جي شين جي رويي کي بيان ڪرڻ جي صلاحيت تقريبا لامحدود ٿي ويندي آهي! :)
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION