CodeGym /جاوا بلاگ /Random-SD /اعتراض جي ٺهڻ دوران عملن جو سلسلو
John Squirrels
سطح
San Francisco

اعتراض جي ٺهڻ دوران عملن جو سلسلو

گروپ ۾ شايع ٿيل
سلام اڄ جو سبق ڪافي هوندو... اُها... گهڻ رخي :) ان لحاظ کان ته اسان موضوعن جي هڪ وسيع رينج کي ڍڪينداسين، پر اهي سڀ شيون ٺهڻ جي عمل سان لاڳاپيل هوندا . اعتراض جي تخليق دوران عملن جو سلسلو - 1اسان ان جو شروع کان آخر تائين تجزيو ڪنداسين: ڪنسٽرڪٽرز کي ڪيئن چئبو آهي، ڪيئن ۽ ڪهڙي ترتيب سان فيلڊز (جنهن ۾ جامد شعبن شامل آهن) شروع ڪيا ويندا آهن، وغيره. اسان اڳي مضمون ۾ ذڪر ڪيل ڪجهه نقطن کي ڇهيو آهي، تنهنڪري توهان ان تي غور ڪري سگهو ٿا. بنيادي طبقي جي تعمير ڪندڙن تي مواد . پهرين، اچو ته ياد رکون ته هڪ اعتراض ڪيئن ٺاهيو ويو آهي. توهان کي چڱي طرح ياد آهي ته اهو عمل ڊولپر جي نقطه نظر کان ڪيئن نظر اچي ٿو: هو هڪ ڪلاس ٺاهي ٿو، لکي ٿو new، ۽ سڀ ڪجهه تيار آهي :) هتي اسان ڳالهائينداسين ته ڪمپيوٽر ۽ جاوا مشين جي اندر ڇا ٿئي ٿو جڏهن اسان لکندا آهيون، مثال طور:

Cat cat = new Cat();
اسان ان بابت اڳ ۾ ڳالهايو آهي، پر صرف ان صورت ۾ اسان توهان کي ياد ڏينداسين:
  • پهرين، اعتراض کي محفوظ ڪرڻ لاء ميموري مختص ڪئي وئي آهي.
  • اڳيون، جاوا مشين اعتراض جو حوالو ٺاهي ٿو (اسان جي صورت ۾ حوالو Cat cat آهي).
  • آخرڪار، متغيرن جي شروعات ڪئي وئي آهي ۽ تعمير ڪندڙ سڏيو ويندو آهي (اسين هن عمل کي وڌيڪ تفصيل سان ڏسڻ وارا آهيون).
ان کان علاوه، سبق جي زندگي جي چڪر تي ، توهان کي شايد ياد آهي ته هڪ اعتراض ان وقت تائين رهي ٿو جيستائين گهٽ ۾ گهٽ هڪ حوالو آهي. جيڪڏهن ڪو به نه بچيو آهي، ته اهو اعتراض ڪچرو گڏ ڪندڙ لاءِ شڪار ٿي ويندو آهي. اعتراض جي تخليق دوران عملن جو سلسلو - 2اهي پهريان ٻه نقطا ڪو خاص سوال نه اٿارڻ گهرجن. ميموري مختص ڪرڻ هڪ سادي عمل آهي، ۽ صرف ٻه ممڪن نتيجا آهن: يا ته ياداشت آهي يا نه آهي :) ۽ لنڪ ٺاهڻ غير معمولي ناهي. پر ٽيون نقطو عملن جي مڪمل سيٽ جي نمائندگي ڪري ٿو جيڪو سخت ترتيب سان انجام ڏنو ويو آهي. مان ٽيسٽن لاءِ ڇڪڻ جو پرستار نه آهيان، پر توهان کي هن عمل کي چڱي طرح سمجهڻ جي ضرورت آهي ۽ توهان کي عملن جي هن ترتيب کي ياد رکڻ جي ضرورت آهي . جڏهن اسان گذريل سبقن ۾ شئي ٺاهڻ جي عمل جي باري ۾ ڳالهايو، ته توهان اڃا تائين وراثت جي باري ۾ ڪجهه به نه ڄاڻو، تنهنڪري ڪجهه شين جي وضاحت ڪرڻ مشڪل هو. هاڻي توهان تمام گهڻو ڄاڻو ٿا ۽ اسان آخرڪار هن سوال تي مڪمل طور تي غور ڪري سگهون ٿا:) پوء ٽيون نقطو چوي ٿو " آخر ۾، متغيرن جي شروعات ڪئي وئي آهي ۽ تعمير ڪندڙ سڏيو ويندو آهي. " پر اهو سڀ ڪجهه ڪهڙي ترتيب سان ٿئي ٿو؟ بهتر سمجھڻ لاءِ، اچو ته ٻه سپر سادو ڪلاس ٺاھيون - ھڪڙو والدين ۽ ھڪڙو ٻار:

public class Vehicle { 

   public static int vehicleCounter = 0; 

   private String description = "Vehicle"; 
   public Vehicle() { 
   } 

   public String getDescription() { 
       return description; 
   } 
} 

public class Truck extends Vehicle { 

   private static int truckCounter = 0; 

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

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

       Vehicle.vehicleCounter++; 
       truckCounter++; 
   } 
}
ڪلاس Truckھڪڙي ٽرڪ جو عمل آھي جنھن جي شعبن جي نمائندگي ڪندي پنھنجي سال، ماڊل، ۽ وڌ ۾ وڌ رفتار. هاڻي اسان هڪ اهڙي شئي ٺاهڻ چاهيون ٿا:

public class Main { 

   public static void main(String[] args) throws IOException { 

       Truck truck = new Truck(2017, "Scania S 500 4x2", 220); 
   } 
}
جاوا مشين ڏانهن، عمل هن طرح نظر ايندو:
  1. پهرين شيء جيڪا ٿئي ٿي اها آهي ڪلاس جا جامد متغير Vehicleشروعاتي آهن . ها، مون چيو Vehicleڪلاس، نه Truck. جامد متغيرن کي شروعات ڪرڻ کان اڳ ٺاھيندڙن کي سڏيو وڃي ٿو، ۽ اھو شروع ٿئي ٿو والدين طبقي ۾. اچو ته ان جي تصديق ڪرڻ جي ڪوشش ڪريو. اسان ڪلاس vehicleCounter۾ فيلڊ کي Vehicle10 جي برابر مقرر ڪيو ۽ ان کي ٻنهي Vehicle۽ Truckتعمير ڪندڙن ۾ ڏيکارڻ جي ڪوشش ڪريو.

    
    public class Vehicle { 
    
       public static int vehicleCounter = 10; 
       private String description = "Vehicle"; 
    
       public Vehicle() { 
           System.out.println(vehicleCounter); 
       } 
    
       public String getDescription() { 
           return description; 
       } 
    } 
    
    public class Truck extends Vehicle { 
    
       private static int truckCount = 0;
    
       private int yearOfManufacture; 
       private String model; 
       private int maxSpeed; 
    
       public Truck(int yearOfManufacture, String model, int maxSpeed) { 
           System.out.println(vehicleCounter); 
           this.yearOfManufacture = yearOfManufacture; 
           this.model = model; 
           this.maxSpeed = maxSpeed; 
    
           Vehicle.vehicleCounter++; 
           truckCount++; 
       } 
    }

    اسان عمدي طور پرنٽ ايلن بيان کي تعمير ڪندڙ جي شروعات ۾ رکون Truckٿا ته پڪ ڪرڻ لاء ته ٽرڪ جي فيلڊ اڃا تائين شروع نه ڪئي وئي آهي جڏهن vehicleCounterڏيکاريل آهي.

    ۽ هتي نتيجو آهي:

    
    10 
    10
  2. والدين طبقي جي جامد متغيرن جي شروعات ٿيڻ کان پوء، ٻار طبقي جي جامد متغيرن جي شروعات ڪئي وئي آهي. اسان جي حالت ۾، هي طبقي truckCounterجو ميدان آهي Truck.

    truckCounterاچو ته هڪ ٻيو تجربو ڪريون، جتي اسان ڪوشش ڪنداسين ته ڪنسٽرڪٽر جي اندر جي قيمت ڏيکارڻ Truckکان اڳ ٻين شعبن جي شروعات ڪئي وڃي:

    
    public class Truck extends Vehicle { 
    
       private static int truckCounter = 10; 
    
       private int yearOfManufacture; 
       private String model; 
       private int maxSpeed; 
    
       public Truck(int yearOfManufacture, String model, int maxSpeed) { 
           System.out.println(truckCounter); 
           this.yearOfManufacture = yearOfManufacture; 
           this.model = model; 
           this.maxSpeed = maxSpeed; 
    
           Vehicle.vehicleCounter++; 
           truckCounter++; 
       } 
    }

    جئين توهان ڏسي سگهو ٿا، قيمت 10 اڳ ۾ ئي مقرر ڪيو ويو آهي اسان جي جامد متغير کي جڏهن Truckتعمير ڪندڙ شروع ٿئي ٿي.

  3. اهو اڃا تائين تعمير ڪندڙن لاء وقت نه آهي! متغير شروعاتي جاري آهي. والدين طبقي جي غير جامد متغيرن کي ٽئين نمبر تي شروع ڪيو ويو آهي. جئين توهان ڏسي سگهو ٿا، وراثت خاص طور تي هڪ اعتراض ٺاهڻ جي عمل کي پيچيده ڪري ٿو، پر اتي ڪجھ به نه آهي جيڪو توهان ان بابت ڪري سگهو ٿا: توهان کي صرف پروگرامنگ ۾ ڪجهه شيون ياد رکڻو پوندو :)

    هڪ تجربي جي طور تي، اسان ڪلاس description۾ متغير کي ڪجهه شروعاتي قيمت تفويض ڪري سگھون ٿا Vehicle، ۽ پوء ان کي تعمير ڪندڙ ۾ تبديل ڪريو.

    
    public class Vehicle { 
    
       public static int vehicleCounter = 10; 
    
       private String description = "Initial value of the description field"; 
    
       public Vehicle() { 
           System.out.println(description); 
           description = "Vehicle"; 
           System.out.println(description); 
       } 
    
       public String getDescription() { 
           return description; 
       } 
    }

    اچو ته اسان جو main()طريقو هلون جيڪو ٽرڪ ٺاهي ٿو:

    
    public class Main { 
    
       public static void main(String[] args) throws IOException { 
    
           Truck truck = new Truck(2017, "Scania S 500 4x2", 220); 
       } 
    }

    اسان هيٺ ڏنل نتيجو حاصل ڪندا آهيون:

    
    Initial value of the description field 
    Vehicle

    اهو ثابت ٿئي ٿو ته جڏهن Vehicleتعمير ڪندڙ شروع ٿئي ٿو ته descriptionفيلڊ اڳ ۾ ئي هڪ قدر مقرر ڪيو ويو آهي.

  4. آخرڪار، اهو وقت تعمير ڪندڙن لاء آهي! وڌيڪ واضح طور تي، اهو وقت آهي بنيادي طبقي جي تعمير ڪندڙ لاء. اهو اعتراض جي تخليق جي عمل جي چوٿين مرحلي ۾ سڏيو ويندو آهي.

    اهو پڻ تصديق ڪرڻ بلڪل آسان آهي. اچو ته ڪنسول ڏانهن ٻه لائينون ڪڍڻ جي ڪوشش ڪريون: هڪ اندر اندر Vehicleبنيادي طبقي جي ڪنسٽرڪٽر، ٻي اندر Truckتعمير ڪندڙ. اسان کي يقين رکڻو پوندو ته ليڪ اندر Vehicleپهرين ڏيکاريل آهي:

    
    public Vehicle() { 
    
       System.out.println("Hello from the Vehicle constructor!"); 
    } 
    
    public Truck(int yearOfManufacture, String model, int maxSpeed) { 
    
       System.out.println("Hello from the Truck constructor!"); 
       this.yearOfManufacture = yearOfManufacture; 
       this.model = model; 
       this.maxSpeed = maxSpeed; 
    
       Vehicle.vehicleCounter++; 
       truckCounter++; 
    }

    اسان پنهنجو طريقو هلائينداسين main()۽ نتيجو ڏسو:

    
    Hello from the Vehicle constructor! 
    Hello from the Truck constructor!

    تمام سٺو. ان جو مطلب آهي ته اسان غلط نه آهيون :) اچو ته اڳتي وڌو.

  5. ھاڻي اھو وقت آھي ٻاراڻي طبقي جي غير جامد شعبن جي شروعاتTruck جو، يعني اسان جو ڪلاس. ڪلاس جي اندر فوري طور تي فيلڊ شروع نه ڪيا ويا آهن پنجين قدم تائين! حيرت انگيز، پر سچ :) ٻيهر، اسان هڪ سادي چيڪ ڪنداسين - جيئن والدين طبقي سان: اسان ويريبل جي ڪجهه ابتدائي قيمت ڏينداسين maxSpeed۽ تعمير ڪندڙ ۾ Truckاسان چيڪ ڪنداسين ته قيمت تعمير ڪندڙ شروع ٿيڻ کان اڳ مقرر ڪئي وئي هئي:

    
    public class Truck extends Vehicle { 
    
       private static int truckCounter = 10; 
    
       private int yearOfManufacture; 
       private String model; 
       private int maxSpeed = 150; 
    
       public Truck(int yearOfManufacture, String model, int maxSpeed) { 
    
           System.out.println("Initial value of maxSpeed = " + this.maxSpeed); 
           this.yearOfManufacture = yearOfManufacture; 
           this.model = model; 
           this.maxSpeed = maxSpeed; 
    
           Vehicle.vehicleCounter++; 
           truckCounter++; 
       } 
    }

    ڪنسول آئوٽ:

    
    Initial value of maxSpeed = 150

    جئين توهان ڏسي سگهو ٿا،  جڏهن Truck تعمير ڪندڙ شروع ٿئي ٿو، maxSpeed اڳ ۾ ئي 150 جي برابر آهي!

  6. ٻار جي طبقي جي تعمير ڪندڙ Truckکي سڏيو ويندو آهي.

    ۽ صرف هن موقعي تي، سڀ کان آخر ۾، ڇا ان طبقي جو تعمير ڪندڙ سڏيو ويندو، جنهن کي اسين فوري طور تي سڏي رهيا آهيون!

    صرف ڇهين قدم ۾ فيلڊ کي مقرر ڪيو ويندو قدر جيڪي اسان اسان جي ٽرڪ ڏانهن دليلن جي طور تي منتقل ڪندا آهيون.

    جئين توهان ڏسي سگهو ٿا، "تعمير" هڪ ٽرڪ، يعني اعتراض ٺاهڻ وارو عمل، سادو ناهي. پر اهو لڳي ٿو ته اسان ان کي ٽوڙي ڇڏيو آهي ننڍن حصن ۾ :)

اعتراض جي تخليق دوران عملن جو سلسلو - 3 ان عمل کي چڱيءَ طرح سمجهڻ ڇو ضروري آهي؟ تصور ڪريو ته هڪ عام شئي ٺاهڻ جا نتيجا ڪيترا غير متوقع ٿي سگهن ٿا جيڪڏهن توهان کي خبر نه هئي ته ڇا ٿي رهيو آهي ”هوڊ هيٺ“ :) هاڻي اهو وقت آهي ڪورس ڏانهن موٽڻ ۽ ڪجهه ڪم مڪمل ڪرڻ جو! سٺي قسمت ۽ توهان کي جلد ملندو! :)
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION