JavaRush /جاوا بلاگ /Random-SD /حاصل ڪندڙ / سيٽ ڪندڙ. بڇڙو. ۽ مدت
angelina
سطح

حاصل ڪندڙ / سيٽ ڪندڙ. بڇڙو. ۽ مدت

گروپ ۾ شايع ٿيل
آرٽيڪل پاران Egor Bugaenko سيپٽمبر 19، 2014 | پوسٽ ڪيو ويو: ڪور جاوا حاصل ڪندڙ / سيٽ ڪندڙ.  بڇڙو.  ۽ پوائنٽ - 1 هي پراڻو بحث ايلن هولب پنهنجي مشهور مضمون ۾ 2003 ۾ شروع ڪيو هو، ڇو حاصل ڪندڙ ۽ سيٽر طريقا بڇڙا آهن - ڇا حاصل ڪندڙ/سيٽر هڪ مخالف نمونو آهن ۽ ڇا اسان کي انهن کان پاسو ڪرڻ گهرجي، يا اهو ڪجهه آهي جيڪو اسان کي آهي. جي ضرورت آهي اعتراض تي مبني پروگرامنگ ۾. مان هن بحث ۾ پنهنجا ٻه سينٽ شامل ڪندس. هيٺ ڏنل متن جو خلاصو هي آهي: حاصل ڪرڻ وارا ۽ سيٽر خراب عمل آهن؛ جيڪي انهن کي استعمال ڪن ٿا انهن کي ڪو به عذر ناهي. پر ٻيهر، غلط فهمي کان بچڻ لاءِ، مان هرگز اهو نه ٿو چوان ته جتي به ممڪن هجي get/set جي استعمال کان پاسو ڪيو وڃي. نه. مان چئي رهيو آهيان ته توهان انهن کي پنهنجي ڪوڊ جي ويجهو وڃڻ نه ڏنو . حاصل ڪندڙ / سيٽ ڪندڙ.  بڇڙو.  ۽ پوائنٽ - 2توهان هن بيان جي باري ۾ ڇا ٿا سوچيو؟ توهان جي توجه جي لائق؟ ڇا توهان 15 سالن کان حاصل/سيٽ جو نمونو استعمال ڪري رهيا آهيو ۽ ڇا توهان جاوا جي معزز معمار آهيو؟ ۽ تون اهو به نه ٿو چاهين ته هي بڪواس ڪنهن اجنبي کان ٻڌي؟ خير... مان سمجهان ٿو تنهنجي احساسن کي. مون ساڳيو ئي محسوس ڪيو جيستائين مون کي ڊيوڊ ويسٽ جي ڪتاب ”آبجڪٽ ٿنڪنگ“ ڏسڻ ۾ نه آيو - اهو سڀ کان بهترين ڪتاب آهي آبجیکٹ-اورينٽيڊ پروگرامنگ تي جيڪو مون ڪڏهن پڙهيو آهي. تنهن ڪري مهرباني. آرام ڪر ۽ سمجھڻ جي ڪوشش ڪريو جيڪو مان وضاحت ڪرڻ جي ڪوشش ڪري رھيو آھيان. تڪرار جو موضوع اعتراض تي مبني دنيا ۾ "رسائيندڙن" (جيٽرز ۽ سيٽرز جو ٻيو نالو) جي خلاف ڪيترائي دليل آهن. ۽ اھي سڀ بلڪل صحيح دليل آھن. اچو ته انهن تي هڪ تڪڙو نظر وٺو. پڇو، نه ٻڌاءِ : ايلن هولب چوي ٿو، "اها ڄاڻ نه پڇو جيڪا توهان کي نوڪري ڪرڻ جي ضرورت آهي؛ 'پڇ' اهو ادارو جنهن وٽ اها معلومات آهي توهان لاءِ نوڪري ڪرڻ لاءِ." Violated Encapsulation Principle : هڪ شئي کي ٻين شين کان ڌار ڪري سگهجي ٿو ڇاڪاڻ ته اهي سيٽرز ذريعي ڪنهن به ڊيٽا کي اعتراض ۾ شامل ڪري سگھن ٿا. هڪ شئي صرف پنهنجي رياست کي محفوظ طور تي ان ڪري نه ٿو ڪري سگهي ڇاڪاڻ ته ڪو به ان حالت کي تبديل ڪري سگهي ٿو. عمل درآمد جا تفصيل ظاهر ڪيا ويا : جيڪڏهن توهان هڪ اعتراض ٻئي اعتراض مان حاصل ڪري سگهو ٿا، ته پوء اسان پهرين اعتراض جي عمل جي تفصيل تي تمام گهڻو ڀروسو ڪري رهيا آهيون. جيڪڏهن سڀاڻي اهو تبديل ٿئي ٿو (مثال طور، نتيجو جو قسم)، پوء اسان کي ڪوڊ تبديل ڪرڻو پوندو. مٿين سڀني دليلن کي يقيني طور تي سمجهه ۾ اچي ٿو، پر اهو سڀ کان اهم نقطو وڃائي ٿو. بنيادي غلط تصور گھڻا پروگرامر مڃيندا آھن ته ڪو اعتراض ھڪڙي ڊيٽا جي جوڙجڪ آھي طريقن سان. مان بوزدار بوزانوف جي مضمون جو حوالو ڏيان ٿو: حاصل ڪندڙ ۽ مقرر ڪرڻ وارا برائي نه آهن. پر گهڻيون شيون جن لاءِ حاصل ڪندڙ ۽ سيٽر ٺاهيا ويا آهن صرف ڊيٽا تي مشتمل آهن. اها غلط فهمي هڪ وڏي غلط فهمي جو نتيجو آهي! شيون نه "صرف ڊيٽا کي ذخيرو ڪريو." شيون ڳنڍيل طريقن سان ڊيٽا جي جوڙجڪ نه آهن. "ڊيٽا اسٽوريج" جو اهو تصور اعتراض تي مبني پروگرامنگ ۽ طريقيڪار ٻولين، خاص طور تي C ۽ COBOL مان آيو آهي. مان ٻيهر ورجائيندس: هڪ اعتراض صرف ڊيٽا عناصر ۽ افعال جو هڪ مجموعو ناهي جيڪو انهن کي ترتيب ڏئي ٿو. هڪ اعتراض هڪ ڊيٽا اعتراض نه آهي. پوءِ ڇا؟ بال ۽ ڪتا حقيقي اعتراض تي مبني پروگرامنگ ۾، شيون جاندار آهن، جهڙوڪ توهان ۽ مون وانگر. اهي جاندار آهن، انهن جي پنهنجي رويي، ملڪيت ۽ زندگي جي چڪر سان. ڇا هڪ جاندار هڪ سيٽر رکي سگهي ٿو؟ ڇا توهان ڪتي سان هڪ بال ("سيٽ") ڳنڍي سگهو ٿا؟ نه سوچيو. پر اھو اھو آھي جيڪو ھيٺ ڏنل ڪوڊ جو ٽڪرو آھي:
Dog dog = new Dog();
dog.setBall(new Ball());
پوءِ توهان اهو ڪيئن پسند ڪيو؟ ڇا توهان حاصل ڪري سگهو ٿا ("حاصل") ڪتي مان بال؟ خير، اچو ته فرض ڪريو ته توهان ڪري سگهو ٿا. ان صورت ۾ ته هوءَ اها کائي ۽ توهان هن تي سرجري ڪئي. انهي حالت ۾، ها، توهان حاصل ڪري سگهندا ("حاصل") ڪتي کان بال. اھو اھو آھي جيڪو مان ڳالھائي رھيو آھيان:
Dog dog = new Dog();
Ball ball = dog.getBall();
يا اڃا به وڌيڪ مضحکہ خیز مثال:
Dog dog = new Dog();
dog.setWeight("23kg");
ڇا توهان حقيقي زندگي ۾ اهو تصور ڪري سگهو ٿا؟ ڇا اهو آواز آهي ته توهان هر روز لکندا آهيو؟ جيڪڏهن ها، ته پوءِ توهان هڪ پروسيسر پروگرامر آهيو. بس ان کي تسليم ڪيو. ھتي اھو آھي جيڪو ڊيوڊ ويسٽ پنھنجي ڪتاب جي صفحي 30 تي چوي ٿو: ھڪڙي ڪامياب طريقيڪار ڊولپر کي ھڪڙي ڪامياب مقصد ڊولپر ۾ تبديل ڪرڻ ۾ پھريون قدم آھي ھڪ لوبٽومي. توهان کي هڪ lobotomy جي ضرورت آهي؟ مون کي ضرور ان جي ضرورت هئي، ۽ اها مون کي مغرب جي ڪتاب ”آبجڪٽ ٿنڪنگ“ پڙهڻ دوران ملي. مقصدي سوچ هڪ اعتراض وانگر سوچڻ شروع ڪريو ۽ توهان فوري طور تي انهن طريقن کي تبديل ڪندا. هتي آهي جيڪو توهان حاصل ڪري سگهو ٿا:
Dog dog = new Dog();
dog.take(new Ball());
Ball ball = dog.give();
هاڻي اسان ڪتي کي حقيقي جانور سمجهون ٿا جيڪو اسان کان بال وٺي سگهي ٿو ۽ جيڪڏهن اسان پڇو ته ان کي واپس ڏئي سگهي ٿو. بس صورت ۾، مان نوٽ ڪريان ٿو ته ڪتو NULL واپس نٿو ڪري سگهي. ڪتن کي خبر ناهي ته NULL ڇا آهي! مقصدي سوچ (سوچڻ) توهان جي ڪوڊ مان NULL حوالن کي فوري طور تي هٽائي ٿو.حاصل ڪندڙ / سيٽ ڪندڙ.  بڇڙو.  ۽ پوائنٽ - 3
وانڊا نالي هڪ مڇي (1988) چارلس ڪرچٽن طرفان
اضافي طور تي، مقصدي سوچ هڪ اعتراض جي غير مستحڪميت کي ڏسندي، جهڙوڪ "ڪتي جو وزن" اسان جي مثال ۾. توهان ڪوڊ ٻيهر لکندا ڪجهه هن طرح:
Dog dog = new Dog("23kg");
int weight = dog.weight();
ڪتو هڪ غير تبديل ٿيندڙ جاندار آهي جيڪو ٻاهران ڪنهن کي به اجازت نه ڏيندو آهي ته هو پنهنجي وزن، سائيز، يا نالو وغيره تبديل ڪري. هوء "ٻڌا" ڪري سگهي ٿي، درخواست تي، هن جو وزن يا نالو. عوامي طريقن سان ڪجھ به غلط ناهي جيڪو اعتراض جي ڪجهه "اندروني" ملڪيتن لاء سوالن کي ظاهر ڪري ٿو. پر اهي طريقا ”حاصل ڪندڙ“ نه آهن ۽ انهن کي ڪڏهن به ”حاصل“ اڳياڙي نه ملڻ گهرجي. اسان ڪتي مان نڪرندا آهيون "نه". اسان کي هن جو نالو نٿو ملي. اسان هن کان پڇيو ته اسان کي هن جو نالو ٻڌايو. ڇا توهان فرق ڏسي رهيا آهيو؟ اسان هتي لفظي معنيٰ بابت به نه ڳالهائي رهيا آهيون. اسان پروگرامنگ جي طريقيڪار واري طريقي کي اعتراض تي مبني هڪ کان مختلف ڪريون ٿا. پروسيسنگ پروگرامنگ ۾، اسان ڊيٽا سان ڪم ڪريون ٿا، ان کي ترتيب ڏيو، ان کي حاصل ڪريو، ان کي سيٽ ڪريو، ۽ ضروري هجي ته ان کي حذف ڪريو. اسان انچارج آهيون، ۽ ڊيٽا صرف هڪ غير فعال جزو آهي. هڪ ڪتو اسان لاءِ ڪجهه به ناهي - اهو صرف "ڊيٽا تي مشتمل آهي." هن جي پنهنجي زندگي ناهي. اسان آزاديءَ سان حاصل ڪري سگھون ٿا (حاصل) سڀ ڪجھ اسان کي ان مان گهربل آھي ۽ ان ۾ ڪو به ڊيٽا (سيٽ) رکون ٿا. اهڙيءَ طرح C، COBOL، Pascal ۽ ٻيون پروسيجري ٻوليون ڪم ڪن ٿيون (ڪم ڪيون ويون). ۽ اعتراض واري دنيا ۾ صورتحال بلڪل برعڪس آهي. هتي اسان شين کي زنده جاندار سمجهون ٿا، انهن جي پنهنجي ڄمڻ جي تاريخ ۽ موت جي لمحن سان، انهن جي پنهنجي شخصيت ۽ عادتن سان، جيڪڏهن توهان چاهيو ٿا. اسان ڪتي کان پڇي سگهون ٿا ته اسان کي ڊيٽا جو هڪ ٽڪرو ڏيو (مثال طور، ان جو وزن) ۽ اهو اسان کي معلومات واپس ڪري سگهي ٿو. پر هميشه ياد رهي ته ڪتو فعال جزو آهي. هوء فيصلو ڪري ٿي ته درخواست کان پوء ڇا ٿيندو. ۽ اهو ئي سبب آهي ته اهو بلڪل غلط آهي ڪنهن شئي جي طريقن لاءِ سيٽ سان شروع ڪرڻ يا حاصل ڪرڻ. ۽ اهو به انڪپسوليشن جي خلاف ورزي جي باري ۾ ناهي، جيئن ڪيترن ئي ماڻهن جو خيال آهي. اهو حقيقت بابت آهي ته يا ته توهان هڪ اعتراض وانگر سوچي رهيا آهيو يا توهان اڃا تائين جاوا نحو سان COBOL لکي رهيا آهيو. پي ايس . ۽ ها، توهان پڇي سگهو ٿا: "ڇا جاوا بينس، JPA، JAXB ۽ ٻين ڪيترن ئي جاوا APIs بابت جيڪي حاصل ڪرڻ/سيٽ تي منحصر آهن؟" روبي ۾ تعمير ٿيل فنڪشن بابت ڇا آهي جيڪو ان کي رسائي ٺاهڻ آسان بڻائي ٿو؟ خير، مان توهان کي ڇا ٻڌايان ... توهان قسمت کان ٻاهر آهيو. حقيقي شين جي شاندار دنيا کي سمجهڻ ۽ ان کي قبول ڪرڻ جي بجاءِ طريقيڪار واري COBOL جي ابتدائي دنيا ۾ رهڻ تمام آسان آهي. پي پي ايس _ مون کي چوڻ وسري ويو، ها، هڪ سيٽر ذريعي انحصار داخل ڪرڻ پڻ هڪ خوفناڪ مخالف نمونو آهي. پر انهي تي وڌيڪ ايندڙ پوسٽ ۾! اصل مضمون
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION