JavaRush /Java Blog /Random-TK /Getirýänler / sazlaýjylar. Erbetlik. We döwür
angelina
Dereje

Getirýänler / sazlaýjylar. Erbetlik. We döwür

Toparda çap edildi
Egor Bugaenko tarapyndan 2014-nji ýylyň 19-njy sentýabry | Iberilen: Core Java Getirýänler / sazlaýjylar.  Erbetlik.  Nokat - 1 Bu köne çekişme Allen Holub tarapyndan 2003-nji ýylda meşhur makalasynda başlandy, Näme üçin almagyň we kesgitlemegiň usullary erbet - girdeji gazanýanlar / kesgitleýjilerdir we biz olardan gaça durmalymy ýa-da bu bir zatmy? ' obýekte gönükdirilen programmirleme zerurmy? Bu çekişmä iki sentimi goşaryn. Aşakdaky tekstiň düýp manysy: alýanlar we sazlaýjylar erbet amal; olary ulanýanlaryň hiç hili bahanasy ýok. Againöne ýene-de düşünişmezlikden gaça durmak üçin, mümkin boldugyça get / seti ulanmakdan gaça durmagy maslahat beremok. No.ok. Olary koduňyzyň ýanynda goýmadyňyz diýýärin . Getirýänler / sazlaýjylar.  Erbetlik.  2-nji nokatBu söz hakda näme pikir edýärsiňiz? Üns bermäge mynasypmy? Get / set nagşyny 15 ýyl bäri ulanýarsyňyzmy we Java abraýly arhitektormy? Bu bolgusyz zatlary hatda nätanyş adamdan diňlemek islemeýärsiňizmi? Bolýar ... Men siziň duýgularyňyza düşünýärin. Deýwid Westyň "Obýekt pikirlenmesi" atly kitabyna duşýançam özümi şeýle duýdum - bu, şu wagta çenli okan obýekte gönükdirilen programmirleme boýunça iň gowy kitap. Şonuň üçin haýyş edýärin. Köşeş we düşündirjek bolýan zadymy düşünmäge synanyş. Jedeliň mowzugy Obýekte gönükdirilen dünýäde "aksesuarlara" (girýänler we sazlaýjylar üçin başga bir at) garşy birnäçe argument bar. Bularyň hemmesi gaty dogry argumentler. Geliň, olara gysgaça göz aýlalyň. Soraň, aýtmaň : Allen Holub: "Bir iş etmek üçin maglumat soramaň; şol maglumaty bolan guramanyň size bu işi etmegini soraň" diýýär. Düzülen Enkapsulýasiýa ýörelgesi : Bir obýekt beýleki obýektler tarapyndan aýrylyp bilner, sebäbi olar islendik maglumatlary obýektiň içine, sazlaýjylaryň üsti bilen ýerleşdirip bilýärler. Obýekt diňe öz ýagdaýyny ýeterlik derejede gurşap bilmeýär, sebäbi her kim bu ýagdaýy üýtgedip biler. Açylan ýerine ýetiriş jikme-jiklikleri : Bir obýekti başga bir obýektden alyp bilýän bolsaňyz, birinji obýektiň ýerine ýetiriş jikme-jikliklerine aşa bil baglaýarys. Ertir üýtgese (mysal üçin, netijäniň görnüşi), onda kody üýtgetmeli bolarys. Aboveokardaky delilleriň hemmesi elbetde manyly, ýöne bu iň möhüm nokady ýitirýär. Esasy ýalňyş düşünje Programmistleriň köpüsi obýektiň usullar bilen maglumat gurluşydygyna ynanýarlar. Bozhidar Bozanowyň makalasyndan sitata getirýärin: Getirýänler we düzüjiler erbet däl. Getöne alýanlar we sazlaýjylar döredilen obýektleriň köpüsinde diňe maglumatlar bar. Bu ýalňyş düşünje ullakan düşünişmezligiň netijesidir! Obýektler "diňe maglumatlary saklamaýarlar". Obýektler birikdirilen usullar bilen maglumat gurluşy däl. "Maglumat saklamak" düşünjesi obýekte gönükdirilen programmirleme we prosessual dillerden, esasanam C we COBOL-dan gelip çykýar. Againene-de bir gezek gaýtalaýaryn: bir obýekt diňe maglumat elementleriniň we olary dolandyrýan funksiýalaryň ýygyndysy däl. Obýekt maglumat obýekti däl. Onda näme? Top we it Hakyky obýekte gönükdirilen programmirlemekde, edil siziň we meniň ýaly jandarlar. Özlerini alyp barşlary, häsiýetleri we ýaşaýyş sikli bilen janly organizmlerdir. Janly organizmiň sazlaýjysy bolup bilermi? Bir topy ite dakyp bilersiňizmi? Pikir etme. Belowöne aşakdaky kod bölegi edil şu:
Dog dog = new Dog();
dog.setBall(new Ball());
Onda nädip haladyňyz? Topy itden alyp bilersiňizmi? Bolýar diýip pikir edeliň. Eger ony iýen bolsa, siz oňa operasiýa etdiňiz. Bu ýagdaýda hawa, topy itden alyp bilersiňiz (“alyp”). Ine, meniň aýdýan zadym:
Dog dog = new Dog();
Ball ball = dog.getBall();
Ora-da has gülkünç mysal:
Dog dog = new Dog();
dog.setWeight("23kg");
Muny hakyky durmuşda göz öňüne getirip bilersiňizmi? Her gün ýazýan ýalymy? Hawa bolsa, prosessual programmist. Muny kabul ediň. Ine, Deýwid West kitabynyň 30-njy sahypasynda näme diýýär: Üstünlikli prosessual döredijini üstünlikli obýektiw döredijä öwürmekde ilkinji ädim lobotomiýa. Size lobotomiýa gerekmi? Elbetde, maňa gerekdi we Günbataryň "Obýekt pikirlenmek" kitabyny okanymda aldym. Obýektiw pikirlenmek Obýekt ýaly pikirlenip başlaň we derrew bu usullaryň adyny üýtgedersiňiz. Ine, näme alyp bilersiňiz:
Dog dog = new Dog();
dog.take(new Ball());
Ball ball = dog.give();
Indi ite topy bizden alyp bilýän we sorasak yzyna berip biljek hakyky haýwan hökmünde garaýarys. Şeýle bolan ýagdaýynda, itiň NULL yzyna gaýdyp bilmejekdigini belläp geçýärin. Itler diňe NULL-yň nämedigini bilenoklar! Obýektiw pikirlenmek (pikirlenmek) koduňyzdan NULL salgylanmalaryny derrew aýyrýar.Getirýänler / sazlaýjylar.  Erbetlik.  3-nji nokat
Çarlz Kriçtonyň “Wanda” atly balyk (1988)
Mundan başga-da, obýektiw pikirlenmek, mysalymyzdaky “itiň agramy” ýaly bir zadyň üýtgemezligine getirer. Kody şuňa meňzeş bir zat ýazyp bilersiňiz:
Dog dog = new Dog("23kg");
int weight = dog.weight();
It üýtgemeýän janly organizm, daşarda hiç kime agramyny, ululygyny, adyny we ş.m. üýtgetmegine ýol bermez. Islegine görä agramyny ýa-da adyny "aýdyp" biler. Obýektiň käbir "içerki" häsiýetleri üçin talaplary açýan köpçülikleýin usullarda ýalňyşlyk ýok. Emma bu usullar “alýanlar” däl we hiç haçan “almak” prefiksini almaly däldirler. Biz itden "çykmaýarys". Biz onuň adyny tutmaýarys. Ondan bize adyny aýtmagyny haýyş edýäris. Tapawudyny görýärsiňizmi? Bu ýerde semantika hakda-da gürleşemzok. Programmirleme prosessual çemeleşmäni obýekte gönükdirilen usuldan tapawutlandyrýarys. Prosessual programmirlemekde maglumatlar bilen işleýäris, dolandyrýarys, alýarys, düzýäris we zerur bolsa pozýarys. Biz jogapkär, maglumatlar diňe passiw komponent. It biziň üçin hiç zat däl - diňe "maglumatlary öz içine alýar". Onuň öz durmuşy ýok. Ondan zerur zatlaryň hemmesini arkaýyn alyp (alyp) we islendik maglumatlary goýup bileris. Ine, C, COBOL, Paskal we beýleki prosessual diller işleýär (işleýär). Obýekte gönükdirilen dünýäde ýagdaý düýbünden ters. Bu ýerde obýektlere janly organizmler hökmünde garaýarys, doglan senesi we ölüm pursaty, isleseňiz şahsyýeti we endikleri bilen. Itden bize bir bölek maglumat bermegini haýyş edip bileris (mysal üçin, onuň agramy) we maglumatlary bize gaýtaryp biler. Emma itiň işjeň komponentdigini hemişe ýadyňyzdan çykarmaň. Islegden soň näme boljagyny çözýär. Şonuň üçin obýektiň usullarynyň toplumdan başlamagy ýa-da alynmagy düýbünden ýalňyş. Bu, hatda köp adamyň pikir edişi ýaly, encapsulýasiýany bozmak barada-da däl. Bu, ýa-da bir zat ýaly pikir edýändigiňiz ýa-da henizem Java sintaksis bilen COBOL ýazýandygyňyz hakda. PS . Hawa, sorap bilersiňiz: "JavaBeans, JPA, JAXB we başga-da köp sanly Java API-leri / alynmagyna bagly?" Ruby-da garnituralary döretmegi aňsatlaşdyrýan içerki funksiýa hakda näme aýdyp bilersiňiz? Bolýar, saňa näme aýdyp bilerin ... sen bagtyňdan çykdyň. Prosessual COBOL-yň başlangyç dünýäsinde galmak, hakyky zatlaryň ajaýyp dünýäsine düşünmekden we kabul etmekden has aňsat. P.P.S. _ Hawa, aýtmagy ýatdan çykardym, kesgitleýjiniň üsti bilen garaşlylygy girizmek hem aýylganç anti-nagyş. Emma indiki ýazgyda has giňişleýin! Asyl makala
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION