Mga seksyon ng site
Pinili ng Editor:
- JAVA Object Oriented Programming Concepts
- Ano ang information warfare
- Paano malalaman kung available ang isang domain name
- Pagtanggal ng mga bagay sa 1s 8
- 1s zup 3.0 exchange accounting. Pagse-set up ng iskedyul ng pagpapalitan ng data
- 1s 83 barcode para sa halimbawa ng invoice
- Paano makakuha ng data mula sa tabular na bahagi ng mga dokumento?
- Pag-set up ng mga karagdagang detalye at karagdagang impormasyon para sa mga item 1s 8
- Pagtanggap ng mga batch postal items Batch reception rpo
- Ang Silangan ay isang maselang bagay: mga cryptocurrencies sa Japan Regulasyon ng mga cryptocurrencies sa Japan
Advertising
JAVA Object Oriented Programming Concepts. Polymorphism - ano ito? Genetic polymorphism Polymorphism at ang paggamit nito sa mga programa |
Ang genetic polymorphism ay isang kondisyon kung saan mayroong pangmatagalang pagkakaiba-iba ng mga gene, ngunit ang dalas ng pinakabihirang gene sa populasyon ay higit sa isang porsyento. Ang pagpapanatili nito ay nangyayari dahil sa patuloy na mutation ng mga gene, pati na rin ang kanilang patuloy na recombination. Ayon sa pananaliksik na isinagawa ng mga siyentipiko, ang genetic polymorphism ay naging laganap, dahil maaaring mayroong ilang milyong mga kumbinasyon ng gene. Malaking stockAng mas mahusay na pagbagay ng isang populasyon sa isang bagong kapaligiran ay nakasalalay sa isang malaking supply ng polymorphism, at sa kasong ito, ang ebolusyon ay nangyayari nang mas mabilis. Hindi praktikal na tantyahin ang buong bilang ng mga polymorphic alleles gamit ang tradisyonal na genetic na pamamaraan. Ito ay dahil sa ang katunayan na ang pagkakaroon ng isang tiyak na gene sa genotype ay nakakamit sa pamamagitan ng pagtawid sa mga indibidwal na may iba't ibang mga katangian ng phenotypic na tinutukoy ng gene. Kung alam mo kung anong bahagi ng isang tiyak na populasyon ang binubuo ng mga indibidwal na may iba't ibang mga phenotypes, kung gayon posible na matukoy ang bilang ng mga alleles kung saan nakasalalay ang pagbuo ng isang partikular na katangian. Kung paano nagsimula ang lahat?Ang mga genetika ay nagsimulang umunlad nang mabilis noong 60s ng huling siglo, pagkatapos ay nagsimulang gamitin ang mga enzyme sa mga gel, na naging posible upang matukoy ang genetic polymorphism. Ano ang pamamaraang ito? Ito ay sa tulong nito na ang mga protina ay gumagalaw sa isang electric field, na nakasalalay sa laki ng protina na inililipat, pagsasaayos nito, pati na rin ang kabuuang singil sa iba't ibang bahagi ng gel. Pagkatapos nito, depende sa lokasyon at bilang ng mga spot na lumilitaw, natukoy ang natukoy na sangkap. Upang masuri ang polymorphism ng protina sa isang populasyon, sulit na suriin ang humigit-kumulang 20 o higit pang loci. Pagkatapos, gamit ang isang matematikal na pamamaraan, ang bilang at ratio ng homo- at heterozygotes ay tinutukoy. Ayon sa pananaliksik, ang ilang mga gene ay maaaring monomorphic, habang ang iba ay maaaring hindi pangkaraniwang polymorphic. Mga uri ng polymorphismAng konsepto ng polymorphism ay napakalawak; kabilang dito ang isang transisyonal at isang balanseng variant. Depende ito sa piling halaga ng gene at natural na seleksyon, na naglalagay ng presyon sa populasyon. Bilang karagdagan, maaari itong maging genetic at chromosomal. Gene at chromosomal polymorphismAng polymorphism ng gene ay kinakatawan sa katawan ng higit sa isang allele; isang kapansin-pansing halimbawa nito ay dugo. Ang Chromosomal ay kumakatawan sa mga pagkakaiba sa loob ng mga chromosome na nangyayari dahil sa mga aberration. Gayunpaman, may mga pagkakaiba sa mga heterochromatic na rehiyon. Sa kawalan ng patolohiya na hahantong sa kapansanan o kamatayan, ang mga naturang mutasyon ay neutral. Transitional polymorphismAng transitional polymorphism ay nangyayari kapag ang isang allele na dating karaniwan ay pinalitan sa isang populasyon ng isa pang nagbibigay sa carrier nito ng higit na kakayahang umangkop (tinatawag ding multiple allelism). Sa isang naibigay na iba't, mayroong isang direksyon na pagbabago sa porsyento ng mga genotype, dahil sa kung saan nangyayari ang ebolusyon at ang mga dinamika nito ay isinasagawa. Ang kababalaghan ng mekanismong pang-industriya ay maaaring maging isang magandang halimbawa na nagpapakilala sa transisyonal na polymorphism. Kung ano ito ay ipinapakita ng isang simpleng paru-paro, na, sa pag-unlad ng industriya, nagbago ang puting kulay ng mga pakpak nito sa madilim. Ang hindi pangkaraniwang bagay na ito ay nagsimulang maobserbahan sa England, kung saan higit sa 80 species ng mga butterflies ang naging madilim na bulaklak mula sa maputlang cream, na unang napansin pagkatapos ng 1848 sa Manchester dahil sa mabilis na pag-unlad ng industriya. Noong 1895, higit sa 95% ng mga gamugamo ang nakakuha ng madilim na kulay ng kanilang mga pakpak. Ang ganitong mga pagbabago ay nauugnay sa katotohanan na ang mga puno ng kahoy ay naging mas mausok, at ang mga light-colored butterflies ay naging madaling biktima ng mga thrush at robin. Ang mga pagbabago ay naganap dahil sa mutant melanistic alleles. Balanseng polymorphismAng kahulugan ng "balanseng polymorphism" ay nagpapakita ng kawalan ng pagbabago sa anumang numerical ratios ng iba't ibang anyo ng genotypes sa isang populasyon na nasa matatag na kondisyon sa kapaligiran. Nangangahulugan ito na mula sa henerasyon hanggang sa henerasyon ang ratio ay nananatiling pareho, ngunit maaaring bahagyang magbago sa loob ng isang tiyak na halaga, na pare-pareho. Kung ihahambing sa transisyonal, balanseng polymorphism - ano ito? Pangunahin itong isang static na proseso ng ebolusyon. I. I. Shmalhausen noong 1940 ay binigyan din ito ng pangalang equilibrium heteromorphism. Halimbawa ng balanseng polymorphismAng isang malinaw na halimbawa ng balanseng polymorphism ay ang pagkakaroon ng dalawang kasarian sa maraming monogamous na hayop. Ito ay dahil sa ang katunayan na sila ay may pantay na pumipili na mga pakinabang. Ang kanilang ratio sa loob ng isang populasyon ay palaging pantay. Kung mayroong polygamy sa isang populasyon, ang selective ratio ng mga kinatawan ng parehong kasarian ay maaaring maputol, kung saan ang mga kinatawan ng isang kasarian ay maaaring ganap na masira o maalis mula sa pagpaparami sa mas malaking lawak kaysa sa mga kinatawan ng hindi kabaro. Ang isa pang halimbawa ay ang pangkat ng dugo ayon sa sistema ng ABO. Sa kasong ito, ang dalas ng iba't ibang genotype sa iba't ibang populasyon ay maaaring magkakaiba, ngunit sa parehong oras ay hindi nito binabago ang pagiging matatag nito mula sa henerasyon hanggang sa henerasyon. Sa madaling salita, walang isang genotype ang may pumipiling kalamangan sa iba. Ayon sa istatistika, ang mga lalaking may unang pangkat ng dugo ay may mas mahabang pag-asa sa buhay kaysa sa iba pang mga miyembro ng mas malakas na pakikipagtalik sa ibang mga grupo ng dugo. Kasabay nito, ang panganib na magkaroon ng duodenal ulcer sa pagkakaroon ng unang grupo ay mas mataas, ngunit maaari itong magbutas, at ito ay magdudulot ng kamatayan kung ang tulong ay naantala. Balanse ng genetikoAng marupok na estadong ito ay maaaring magambala sa isang populasyon bilang resulta ng paglitaw, at dapat itong mangyari sa isang tiyak na dalas at sa bawat henerasyon. Ipinakita ng mga pag-aaral na ang mga polymorphism ng mga gene ng sistema ng hemostatic, ang pag-decode nito ay nagpapalinaw kung ang proseso ng ebolusyon ay nagtataguyod ng mga pagbabagong ito o, sa kabaligtaran, ay sumasalungat sa kanila, ay napakahalaga. Kung masusubaybayan mo ang kurso ng proseso ng mutant sa isang partikular na populasyon, maaari mo ring hatulan ang halaga nito para sa pagbagay. Ito ay maaaring katumbas ng isa kung ang mutation ay hindi ibinukod sa panahon ng proseso ng pagpili at walang mga hadlang sa pagkalat nito. Karamihan sa mga kaso ay nagpapakita na ang halaga ng naturang mga gene ay mas mababa sa isa, at sa kaso ng kawalan ng kakayahan ng naturang mga mutant na magparami, ang lahat ay bumaba sa 0. Ang mga mutasyon ng ganitong uri ay itinatabi sa proseso ng natural na pagpili, ngunit ito ay hindi ibubukod ang paulit-ulit na pagbabago sa parehong gene, na nagbabayad para sa pag-aalis na isinasagawa sa pamamagitan ng pagpili. Pagkatapos ay maabot ang equilibrium, maaaring lumitaw ang mga mutated genes o, sa kabaligtaran, mawala. Ito ay humahantong sa isang balanseng proseso. Ang isang halimbawa na malinaw na mailalarawan kung ano ang nangyayari ay sickle cell anemia. Sa kasong ito, ang isang nangingibabaw na mutated gene sa isang homozygous na estado ay nag-aambag sa maagang pagkamatay ng organismo. Ang mga heterozygous na organismo ay nabubuhay ngunit mas madaling kapitan sa sakit na malaria. Ang balanseng polymorphism ng sickle cell anemia gene ay maaaring masubaybayan sa mga lugar ng pamamahagi ng tropikal na sakit na ito. Sa ganitong populasyon, ang mga homozygotes (mga indibidwal na may parehong mga gene) ay tinanggal, at ang pagpili ay kumikilos pabor sa mga heterozygotes (mga indibidwal na may iba't ibang mga gene). Dahil sa pagpili ng multi-vector na nagaganap sa gene pool ng populasyon, ang mga genotype ay pinananatili sa bawat henerasyon, na nagsisiguro ng mas mahusay na kakayahang umangkop ng organismo sa mga kondisyon sa kapaligiran. Kasama ang pagkakaroon ng sickle cell anemia gene, mayroong iba pang mga uri ng mga gene na nagpapakilala sa polymorphism. Ano ang ibinibigay nito? Ang sagot sa tanong na ito ay isang phenomenon na tinatawag na heterosis. Heterozygous mutations at polymorphismAng heterozygous polymorphism ay nagbibigay ng kawalan ng mga pagbabagong phenotypic sa pagkakaroon ng recessive mutations, kahit na nakakapinsala ang mga ito. Ngunit sa parehong oras, maaari silang maipon sa isang populasyon sa isang mataas na antas, na maaaring lumampas sa nakakapinsalang nangingibabaw na mutasyon. proseso ng ebolusyonAng proseso ng ebolusyon ay tuloy-tuloy, at ang kailangan nito ay polymorphism. Ang ibig sabihin nito ay ang patuloy na kakayahang umangkop ng isang partikular na populasyon sa tirahan nito. Ang mga organismo ng iba't ibang kasarian na naninirahan sa loob ng parehong grupo ay maaaring nasa isang heterozygous na estado at naililipat mula sa henerasyon hanggang sa henerasyon sa loob ng maraming taon. Kasama nito, ang kanilang phenotypic manifestation ay maaaring hindi umiiral - dahil sa malaking reserba ng genetic variability. Fibrinogen geneSa karamihan ng mga kaso, isinasaalang-alang ng mga mananaliksik ang fibrinogen gene polymorphism bilang isang pasimula sa pag-unlad ng ischemic stroke. Ngunit sa ngayon, ang problema kung saan ang genetic at nakuha na mga kadahilanan ay maaaring maka-impluwensya sa pag-unlad ng sakit na ito ay darating sa unahan. Ang ganitong uri ng stroke ay bubuo dahil sa thrombosis ng cerebral arteries, at sa pamamagitan ng pag-aaral ng polymorphism ng fibrinogen gene, mauunawaan ng isa ang maraming proseso, sa pamamagitan ng pag-impluwensya kung aling sakit ang maiiwasan. Sa kasalukuyan, hindi sapat na pinag-aralan ng mga siyentipiko ang mga koneksyon sa pagitan ng mga pagbabago sa genetic at mga parameter ng biochemical ng dugo. Ang karagdagang pananaliksik ay gagawing posible na maimpluwensyahan ang kurso ng sakit, baguhin ang kurso nito, o pigilan lamang ito sa maagang yugto ng pag-unlad. Lecture sa anyo ng isang pagtatanghal sa pdf format na may mga halimbawa - 27 slide. Tinatalakay ng panayam ang lahat ng anyo ng polymorphism ng mga function at pamamaraan at ipinakita ang kanilang hierarchy sa anyo ng isang diagram. Mga sipi mula sa panayamAng konsepto ng polymorphism
Mga Pakinabang ng Paggamit ng Polymorphism
Parameterized polymorphism
Purong polymorphism
Overloading o ad hoc polymorphism
Overloading na pamamaraan sa mga hindi nauugnay na klase
Parametric overload
Pamamaraan Pagpapalit
Layunin ng mekanismo ng pagpapalit ng pamamaraan
Halimbawa ng Override ng ParaanClass MyEllipse MyEllipse ellipse; // Ang MyEllipse::area() na paraan ay tatawagin // PANSIN!!! Ang MyEllipse::area() na pamamaraan ay tatawagin Pamamaraan Overriding
Halimbawa ng override na pamamaraanClass MyEllipse MyEllipse ellipse; // Ang MyEllipse::area() na paraan ay tatawagin // Ang MyEllipse::area() na paraan ay tatawagin // Ang MyCircle::area() method ay tatawagin // PANSIN!!! Ang MyCircle::area() na pamamaraan ay tatawagin Layunin ng mekanismo ng overriding na pamamaraan
Mga ipinagpaliban na pamamaraan
Mga ipinagpaliban na pamamaraan sa wikang C++
Polymorphism (pagprograma) Sa madaling sabi, ang kahulugan ng polymorphism ay maaaring ipahayag sa pariralang: "Isang interface, maraming pagpapatupad." Ang polymorphism ay isa sa apat na pinakamahalagang mekanismo ng object-oriented programming (kasama ang abstraction, encapsulation at inheritance). Binibigyang-daan ka ng polymorphism na magsulat ng higit pang abstract na mga programa at dagdagan ang muling paggamit ng code. Ang mga pangkalahatang katangian ng mga bagay ay pinagsama sa isang sistema, na maaaring tawaging iba - interface, klase. Ang komunidad ay may panlabas at panloob na pagpapahayag:
Mga halimbawaAng isang klase ng mga geometric na hugis (ellipse, polygon) ay maaaring magkaroon ng mga pamamaraan para sa mga geometric na pagbabagong-anyo (displacement, rotation, scaling). Sa mga functional na wikaMayroong dalawang uri ng polymorphism sa Haskell - parametric (puro) at espesyal (class-based). Espesyal ay tinatawag din ad hoc(mula sa Latin ad hoc - lalo na). Maaari silang makilala sa mga sumusunod: Parametric polymorphismEspesyal na polymorphismAng Haskell ay may dibisyon sa mga klase at pagkakataon, na hindi matatagpuan sa OOP. Tinutukoy ng klase ang isang set at mga lagda ng mga pamamaraan (marahil ay nagbibigay ng mga default na pagpapatupad para sa ilan o lahat ng mga ito), at ang mga pagkakataon ay nagpapatupad ng mga ito. Kaya, ang problema ng maramihang pamana ay awtomatikong nawawala. Ang mga klase ay hindi nagmamana o nag-o-override ng mga pamamaraan ng iba pang mga klase - ang bawat pamamaraan ay nabibilang lamang sa isang klase. Ang diskarte na ito ay mas simple kaysa sa kumplikadong diagram ng mga relasyon sa klase sa OOP. Ang isang naibigay na uri ng data ay maaaring kabilang sa ilang mga klase; ang isang klase ay maaaring mangailangan na ang bawat isa sa mga uri nito ay kinakailangang kabilang sa ibang klase, o kahit na ilang; ang parehong pangangailangan ay maaaring iharap ng isang halimbawa. Ito ay mga analogue ng maramihang mana. Mayroon ding ilang mga katangian na walang mga analogue sa OOP. Halimbawa, ang pagpapatupad ng isang listahan bilang isang halimbawa ng klase ng mga maihahambing na dami ay nangangailangan na ang mga elemento ng listahan ay kabilang din sa klase ng mga maihahambing na dami. Ang mga programmer na lumilipat mula sa OOP patungo sa FP ay dapat magkaroon ng kamalayan sa isang mahalagang pagkakaiba sa pagitan ng kanilang mga sistema ng klase. Kung sa OOP ang isang klase ay "nakatali" sa isang bagay, ibig sabihin, sa data, pagkatapos ay sa FP ito ay nakatali sa isang function. Sa FP, ang impormasyon tungkol sa pagiging miyembro ng klase ay ipinapasa kapag tinawag ang isang function, sa halip na naka-imbak sa mga field ng object. Ang diskarte na ito, sa partikular, ay nagbibigay-daan sa amin upang malutas ang problema ng isang paraan ng ilang mga bagay (sa OOP, ang isang pamamaraan ay tinatawag sa isang bagay). Halimbawa: ang paraan ng pagdaragdag (mga numero, mga string) ay nangangailangan ng dalawang argumento, parehong may parehong uri. Implicit na pag-typeAng ilang mga programming language (halimbawa, Python at Ruby) ay gumagamit ng tinatawag na duck typing (iba pang pangalan: latent, implicit), na isang uri ng signature polymorphism. Kaya, halimbawa, sa Python, ang polymorphism ay hindi kinakailangang nauugnay sa mana. Mga anyo ng polymorphismStatic at dynamic na polymorphism(nabanggit sa klasikong aklat nina Sutter at Alexandrescu, na siyang pinagmulan). Ang polymorphism ay maaaring maunawaan bilang ang pagkakaroon ng mga punto ng pagpapasadya sa code, kapag ang parehong piraso ng code na isinulat ng programmer ay maaaring mangahulugan ng iba't ibang mga operasyon depende sa isang bagay. Sa isang kaso, ang partikular na kahulugan ng isang fragment ay nakasalalay sa kapaligiran kung saan binuo ang code. Ito ang tinatawag na static na polymorphism. Ang overloading ng function at mga template sa C++ ay nagpapatupad ng static polymorphism. Kung, halimbawa, ang std::sort ay tinatawag sa code ng isang template class, kung gayon ang tunay na kahulugan ng tawag ay depende sa kung aling uri ng mga parameter ang idi-deploy ang template na ito - isa sa std::sort ang tatawagin Sa isa pang kaso, ang tiyak na kahulugan ng isang fragment ay tinutukoy lamang sa yugto ng pagpapatupad at depende sa eksakto kung paano at saan eksakto ang bagay ay binuo. Ito ay ordinaryong, dynamic na polymorphism, na ipinatupad sa pamamagitan ng mga virtual na pamamaraan. Pagsasama ng polymorphismAng polymorphism na ito ay tinatawag na purong polymorphism. Sa pamamagitan ng paggamit ng ganitong anyo ng polymorphism, ang mga kaugnay na bagay ay maaaring gamitin sa pangkalahatang paraan. Gamit ang substitution at inclusion polymorphism, maaari kang sumulat ng isang paraan upang gumana sa lahat ng uri ng mga bagay na TPerson. Gamit ang inclusion at substitution polymorphism, maaari kang magtrabaho sa anumang bagay na pumasa sa pagsubok na "is-A". Pinapasimple ng polymorphism ng pagsasama ang gawain ng pagdaragdag ng mga bagong subtype sa isang programa, dahil hindi na kailangang magdagdag ng isang tiyak na pamamaraan para sa bawat bagong uri; maaari kang gumamit ng isang umiiral na, sa pamamagitan lamang ng pagbabago ng pag-uugali ng system sa loob nito. Sa polymorphism, maaari mong gamitin muli ang isang base class; gumamit ng anumang inapo o pamamaraan na ginagamit ng batayang klase. Parametric polymorphismGamit ang Parametric Polymorphism maaari kang lumikha ng mga unibersal na uri ng base. Sa kaso ng parametric polymorphism, ang function ay ipinatupad nang pantay-pantay para sa lahat ng mga uri at sa gayon ang function ay ipinatupad para sa isang arbitrary na uri. Sinasaklaw ng Parametric Polymorphism ang mga parametric na pamamaraan at uri. Parametric na Paraan Kung ang polymorphism sa pagsasama ay nakakaapekto sa ating pang-unawa sa isang bagay, ang parametric polymorphism ay nakakaapekto sa mga pamamaraan na ginamit, dahil posible na lumikha ng mga pamamaraan ng mga kaugnay na klase, na ipinagpaliban ang deklarasyon ng mga uri hanggang sa runtime. Upang maiwasan ang pagsusulat ng hiwalay na paraan para sa bawat uri, ginagamit ang parametric polymorphism, kung saan ang uri ng mga parameter ay magiging kapareho ng parameter ng mga operand. Mga uri ng parametric Sa halip na magsulat ng klase para sa bawat partikular na uri, dapat tayong lumikha ng mga uri na ipapatupad sa panahon ng pagpapatupad ng programa, iyon ay, lumikha tayo ng parametric na uri. I-override ang polymorphismAng mga abstract na pamamaraan ay madalas na tinutukoy bilang mga ipinagpaliban na pamamaraan. Ang klase kung saan tinukoy ang pamamaraang ito ay maaaring tumawag sa pamamaraan, at tinitiyak ng polymorphism na ang naaangkop na bersyon ng ipinagpaliban na pamamaraan ay tinatawag sa mga klase ng bata. Ang ad hoc polymorphism ay nagbibigay-daan sa isang espesyal na pagpapatupad para sa bawat uri ng data. Polymorphism-overloadIto ay isang espesyal na kaso ng polymorphism. Sa tulong ng overloading, ang parehong pangalan ay maaaring magtalaga ng iba't ibang mga pamamaraan, at ang mga pamamaraan ay maaaring magkakaiba sa bilang at uri ng mga parameter, iyon ay, hindi sila nakasalalay sa kanilang mga argumento. Ang pamamaraan ay maaaring hindi limitado sa mga partikular na uri ng parameter ng maraming iba't ibang uri. Paghahambing ng polymorphism sa functional at object-oriented na programmingAng mga sistema ng klase sa FP at OOP ay naiiba ang pagkakaayos, kaya ang mga paghahambing sa pagitan ng mga ito ay dapat na maingat na lapitan. Ang polymorphism ay isang medyo nakahiwalay na pag-aari ng isang programming language. Halimbawa, ang mga klase sa C++ ay orihinal na ipinatupad bilang isang preprocessor para sa C. Para sa Haskell, mayroong isang algorithm para sa pagsasalin ng mga programa na gumagamit ng espesyal na polymorphism sa mga programa na may eksklusibong parametric polymorphism. Sa kabila ng mga konseptong pagkakaiba sa pagitan ng mga sistema ng klase sa FP at OOP, ipinapatupad ang mga ito sa humigit-kumulang sa parehong paraan - gamit ang mga talahanayan ng mga virtual na pamamaraan. Madalas na ginagamit sa Java. Tingnan dinMga linkMga TalaWikimedia Foundation. 2010. Tingnan kung ano ang "Polymorphism (programming)" sa iba pang mga diksyunaryo:Ang terminong ito ay may iba pang kahulugan, tingnan ang Polymorphism. Ang polymorphism ng computer virus (Griyego: πολυ many + Greek: μορφή form, appearance) ay isang espesyal na pamamaraan na ginagamit ng mga may-akda ng malisyosong software... ... Wikipedia Sa object-oriented programming, ang kakayahan ng isang bagay na pumili ng tamang paraan depende sa uri ng data na natanggap sa mensahe. Sa English: Polymorphism Tingnan din ang: Object-oriented programming Financial Dictionary... ... Diksyunaryo sa pananalapi Ang polymorphism (sa mga programming language) ay ang pagpapalitan ng mga bagay na may parehong interface. Sinusuportahan ng isang programming language ang polymorphism kung ang mga klase na may parehong detalye ay maaaring magkaroon ng iba't ibang mga pagpapatupad, halimbawa, ang pagpapatupad ng isang klase... ... Wikipedia Ang pagsasama-sama ng mga bagay sa mga klase ay nagpapahintulot sa amin na isaalang-alang ang problema sa isang mas pangkalahatang pagbabalangkas. Ang isang klase ay may pangalan (halimbawa, "kabayo") na tumutukoy sa lahat ng bagay ng klase na iyon. Bilang karagdagan, ang klase ay naglalaman ng mga pangalan ng mga katangian na tinukoy para sa mga bagay. Sa ganitong diwa, ang paglalarawan ng isang klase ay katulad ng paglalarawan ng isang uri ng istruktura o talaan (record), na malawakang ginagamit sa procedural programming; Bukod dito, ang bawat bagay ay may parehong kahulugan bilang isang halimbawa ng istraktura (isang variable o pare-pareho ng kaukulang uri). Pormal Klase ay isang pattern ng pag-uugali ng mga bagay ng isang tiyak na uri na may tinukoy na mga parameter na tumutukoy sa estado. Ang lahat ng mga pagkakataon ng parehong klase (mga bagay na nagmula sa parehong klase) ay may parehong hanay ng mga katangian at karaniwang pag-uugali, iyon ay, ang mga ito ay tumutugon sa parehong paraan sa parehong mga mensahe. Alinsunod sa UML( Pinag-isang Wika ng Pagmomodelo - pinag-isa wika ng pagmomodelo), ang klase ay may sumusunod na graphical na representasyon. Ang klase ay inilalarawan bilang isang parihaba na binubuo ng tatlong bahagi. Ang pangalan ng klase ay inilalagay sa itaas na bahagi, ang mga katangian ng mga bagay ng klase ay nasa gitna, at ang mga aksyon na maaaring isagawa sa mga bagay ng klase na ito (mga pamamaraan) ay nasa ibabang bahagi. Ang bawat klase ay maaari ding magkaroon ng mga espesyal na pamamaraan na awtomatikong tinatawag kapag ang mga bagay ng klase na iyon ay nilikha at nawasak:
Karaniwan, ang constructor at destructor ay may espesyal na syntax, na maaaring iba sa syntax na ginamit sa pagsulat ng mga normal na pamamaraan ng klase. EncapsulationEncapsulation(encapsulation) ay itinatago ang pagpapatupad ng isang klase at pinaghihiwalay ang panloob na representasyon nito mula sa panlabas (interface). Kapag gumagamit ng isang object-oriented na diskarte, hindi kaugalian na direktang i-access ang mga katangian ng isang klase mula sa mga pamamaraan ng iba pang mga klase. Upang ma-access ang mga katangian ng isang klase, kaugalian na gumamit ng mga espesyal na pamamaraan ng klase na ito upang makuha at baguhin ang mga katangian nito. Sa loob ng isang bagay, ang data at mga pamamaraan ay maaaring magkaroon ng iba't ibang antas ng pagiging bukas (o pagiging naa-access). Ang mga antas ng pagiging naa-access na pinagtibay sa wikang Java ay tatalakayin nang detalyado sa Kabanata 6. Nagbibigay-daan sa iyo ang mga ito na mas makontrol ang pag-aari ng encapsulation. Ang mga pampublikong miyembro ng isang klase ay bumubuo sa panlabas na interface ng isang bagay. Ito ay functionality na available sa iba. Ang lahat ng mga katangian ng isang klase ay karaniwang idineklara na pribado, pati na rin ang mga pantulong na pamamaraan na mga detalye ng pagpapatupad at kung saan ang ibang mga bahagi ng system ay hindi dapat umasa. Sa pamamagitan ng pagtatago ng pagpapatupad sa likod ng panlabas na interface ng isang klase, maaari mong baguhin ang panloob na lohika ng isang hiwalay na klase nang hindi binabago ang code ng iba pang mga bahagi ng system. Ang ari-arian na ito ay tinatawag na modularity. Ang pagtiyak na ang mga katangian ng isang klase ay maa-access lamang sa pamamagitan ng mga pamamaraan nito ay nagbibigay din ng ilang mga benepisyo. Una, ginagawa nitong mas madaling kontrolin ang mga tamang halaga ng mga patlang, dahil imposibleng subaybayan ang direktang pag-access sa mga pag-aari, na nangangahulugang maaari silang italaga sa mga maling halaga. Pangalawa, hindi magiging mahirap na baguhin ang paraan ng pag-imbak ng data. Kung ang impormasyon ay naka-imbak sa hindi memorya na imbakan, tulad ng isang file system o database, kakailanganin mo lamang na baguhin ang ilang mga pamamaraan sa isang klase sa halip na ipatupad ang functionality na ito sa buong system. Sa wakas, ang code na nakasulat gamit ang prinsipyong ito ay mas madaling i-debug. Upang malaman kung sino at kailan binago ang pag-aari ng bagay na interesado kami, sapat na upang magdagdag ng output ng impormasyon sa pag-debug sa paraan ng bagay kung saan na-access ang ari-arian ng bagay na ito. Kapag gumagamit ng direktang pag-access sa mga katangian ng bagay, ang programmer ay kailangang magdagdag ng output ng impormasyon sa pag-debug sa lahat ng mga seksyon ng code kung saan ginagamit ang object ng interes. ManaMana Ang inheritance ay isang relasyon sa pagitan ng mga klase kung saan ginagamit ng isang klase ang istruktura o pag-uugali ng ibang klase (solong mana) o iba pang mga klase (multiple inheritance). Ang inheritance ay nagpapakilala ng pampubliko/pribadong hierarchy kung saan subclass nagmana mula sa isa o higit pang karaniwan mga superclass. Ang mga subclass ay karaniwang nagpapalawak o nag-o-override sa minanang istraktura at pag-uugali. Bilang halimbawa, maaari nating isaalang-alang ang isang problema kung saan kinakailangan na ipatupad ang mga klase na "Kotse" at "Truck". Malinaw, ang dalawang klase na ito ay may karaniwang pag-andar. Kaya, pareho silang may 4 na gulong, isang makina, maaaring gumalaw, atbp. Anumang kotse ay may lahat ng mga katangiang ito, hindi alintana kung ito ay isang trak o isang pampasaherong sasakyan, 5- o 12-seater. Makatuwirang ilagay ang mga karaniwang katangian at functionality na ito sa isang hiwalay na klase, halimbawa, "Kotse" at magmana mula rito ng mga klase na "Kotse" at "Truck", upang maiwasan ang pagsusulat ng parehong code nang paulit-ulit sa iba't ibang klase. Ang ugnayan sa pangkalahatan ay ipinapahiwatig ng isang solidong linya na may tatsulok na arrow sa dulo. Ang arrow ay tumuturo sa isang mas pangkalahatang klase ( klase ng ninuno o superclass), at ang kawalan nito - sa isang mas espesyal na klase ( klase ng bata o subclass). Ang paggamit ng inheritance ay nakakatulong na bawasan ang dami ng code na ginawa para ilarawan ang mga katulad na entity, at nakakatulong din sa iyong magsulat ng mas mahusay at flexible na code. Sa halimbawang isinasaalang-alang, ginagamit ang solong mana. Ang isang klase ay maaari ding magmana ng mga katangian at pag-uugali ng ilang mga klase nang sabay-sabay. Ang pinakasikat na halimbawa ng paggamit ng maramihang mana ay ang pagdidisenyo ng isang sistema ng imbentaryo ng produkto sa isang tindahan ng alagang hayop. Ang lahat ng mga hayop sa tindahan ng alagang hayop ay mga tagapagmana ng klase ng "Animal", pati na rin ang mga tagapagmana ng klase ng "Produkto". Yung. lahat sila ay may edad, nangangailangan ng pagkain at tubig at kasabay nito ay may presyo at maaaring ibenta. Ang maramihang pamana sa diagram ay inilalarawan nang eksakto sa parehong paraan tulad ng iisang pamana, maliban na ang mga linya ng mana ay nagkokonekta ng isang descendant na klase sa ilang superclass nang sabay-sabay. Hindi lahat ng object-oriented programming language ay naglalaman ng mga construct ng wika upang ilarawan ang maramihang pamana. Sa Java, ang multiple inheritance ay may limitadong suporta sa pamamagitan ng mga interface at sasakupin sa Kabanata 8. PolymorphismPolymorphism ay isa sa mga pangunahing konsepto sa object-oriented na programming kasama ng mana at encapsulation. Ang salitang "polymorphism" ay nagmula sa Greek at nangangahulugang "may maraming anyo." Upang maunawaan kung ano ang ibig sabihin nito kaugnay sa object-oriented na programming, tingnan natin ang isang halimbawa. Ipagpalagay na gusto naming lumikha ng isang vector graphics editor kung saan kailangan naming ilarawan ang isang hanay ng mga graphic primitive sa anyo ng mga klase - Point, Line, Circle, Box, atbp. Para sa bawat isa sa mga klase ay tutukuyin namin ang isang paraan ng pagguhit upang ipakita ang kaukulang primitive sa screen. Malinaw, kailangan mong magsulat ng code na, kung kinakailangan, upang magpakita ng isang guhit, ay magkakasunod na umuulit sa lahat ng mga primitive na nasa screen sa oras ng pagguhit, at tawagan ang paraan ng pagguhit sa bawat isa sa kanila. Ang isang taong hindi pamilyar sa polymorphism ay malamang na lumikha ng maraming array (isang hiwalay na array para sa bawat primitive na uri) at magsusulat ng code na umuulit sa mga elemento sa bawat array nang sunud-sunod at tumatawag sa paraan ng pagguhit sa bawat elemento. Ang magiging resulta ay humigit-kumulang sa sumusunod na code: ... //paglikha ng isang walang laman na hanay na maaaring // naglalaman ng mga bagay na Punto na may pinakamataas na // kapasidad na 1000 Punto p = bagong Punto; Linya l = bagong Linya; Circle c = bagong Circle; Kahon b = bagong Kahon; ... // ipagpalagay na sa puntong ito // ang lahat ng mga arrays ay puno ng katumbas na // objects... for(int i = 0; i< p.length;i++) { //цикл с перебором всех ячеек массива. //вызов метода draw() в случае, // если ячейка не пустая. if(p[i]!=null) p[i].draw(); } for(int i = 0; i < l.length;i++) { if(l[i]!=null) l[i].draw(); } for(int i = 0; i < c.length;i++) { if(c[i]!=null) c[i].draw(); } for(int i = 0; i < b.length;i++) { if(b[i]!=null) b[i].draw(); } ... Ang kawalan ng code na nakasulat sa itaas ay ang pagdoble ng halos magkaparehong code upang ipakita ang bawat uri ng primitive. Hindi rin maginhawa na sa karagdagang modernisasyon ng aming graphic editor at pagdaragdag ng kakayahang gumuhit ng mga bagong uri ng mga graphic primitive, halimbawa Text, Star, atbp., gamit ang diskarteng ito kailangan naming baguhin ang umiiral na code at magdagdag ng mga kahulugan ng mga bagong array. dito, pati na rin ang pagproseso na nakapaloob sa mga ito ng mga elemento. Sa pamamagitan ng paggamit ng polymorphism, maaari naming lubos na pasimplehin ang pagpapatupad ng naturang pag-andar. Una sa lahat, lumikha tayo ng isang karaniwang magulang Kamusta! Ito ay isang artikulo tungkol sa isa sa mga prinsipyo ng OOP - polymorphism. Ano ang polymorphismNakakatakot ang kahulugan ng polymorphism :)
salita" polymorphism"maaaring mukhang kumplikado - ngunit hindi. Kailangan mo lamang na hatiin ang kahulugan na ito sa mga bahagi at ipakita sa mga halimbawa kung ano ang ibig sabihin. Maniwala ka sa akin, sa dulo ng artikulo ang kahulugan ng polymorphism na ito ay tila malinaw sa iyo :) Polymorphism, kung isinalin, ibig sabihin nito "maraming anyo" Halimbawa, maaaring subukan ng isang artista sa teatro ang maraming tungkulin - o kumuha ng "maraming anyo." Ang aming code ay pareho - salamat sa polymorphism, ito ay nagiging mas nababaluktot kaysa sa mga programming language na hindi gumagamit ng mga prinsipyo ng OOP. Kaya anong mga form ang pinag-uusapan natin? Magbigay muna tayo ng mga halimbawa at ipakita kung paano nagpapakita ang polymorphism sa pagsasanay, at pagkatapos ay bumalik sa kahulugan nito. Paano ipinakikita ang polymorphism?Sa katotohanan ay kung ang Java ay walang prinsipyo ng polymorphism, bibigyang-kahulugan ito ng compiler bilang isang error: Tulad ng nakikita mo, ang mga pamamaraan sa larawan ay naiiba sa mga halagang tinatanggap nila:
Gayunpaman, dahil ginagamit ng Java ang prinsipyo ng polymorphism, hindi ito ituturing ng compiler bilang isang error dahil ang mga ganitong pamamaraan ay maituturing na iba: Ang parehong mga pamamaraan ng pagbibigay ng pangalan ay napaka-maginhawa. Halimbawa, kung mayroon kaming paraan na naghahanap ng square root ng isang numero, mas madaling matandaan ang isang pangalan (halimbawa, sqrt()) kaysa sa isang hiwalay na pangalan para sa parehong pamamaraan, na isinulat para sa bawat uri: Tulad ng nakikita mo, hindi namin kailangang magkaroon ng isang hiwalay na pangalan para sa bawat pamamaraan - ngunit ang pangunahing bagay ay tandaan ang mga ito! Napakakomportable. Ngayon ay mauunawaan mo na kung bakit ang prinsipyong ito ay madalas na inilarawan sa parirala:
Ipinapalagay nito na maaari naming punan ang isang pangalan (isang interface) kung saan maaari naming ma-access ang maraming mga pamamaraan. Overloading ng pamamaraanAng ipinakita namin sa itaas - ilang mga pamamaraan na may parehong pangalan at iba't ibang mga parameter - ay tinatawag labis na karga. Ngunit ito ay isang halimbawa ng overloading ng pamamaraan sa isang klase. Ngunit may isa pang kaso - ang mga overriding na pamamaraan ng parent class. Overriding Magulang ParaanKapag nagmana tayo ng klase, minana natin ang lahat ng pamamaraan nito. Ngunit kung gusto nating baguhin ang alinman sa mga pamamaraan na ating namana, maaari nating i-override ito. Hindi kami obligado, halimbawa, na lumikha ng isang hiwalay na pamamaraan na may katulad na pangalan para sa aming mga pangangailangan, at ang minanang pamamaraan ay magiging "patay na timbang" sa aming klase. Tinatawag na overriding ang katotohanan na maaari tayong lumikha ng klase sa isang descendant na klase na may parehong pangalan sa klase na minana natin mula sa magulang. Halimbawa Isipin natin na mayroon tayong ganitong istraktura: Sa tuktok ng hierarchy ng klase ay ang klase Hayop. Ito ay minana ng tatlong klase - Pusa, aso At baka. Ang klase na "Animal" ay may "boses" na pamamaraan. Ipinapakita ng paraang ito ang mensaheng "Voice" sa screen. Natural, hindi sinasabi ng aso o ng pusa ang "Voice" :) Tumahol sila at ngiyaw. Alinsunod dito, kailangan mong magtakda ng ibang paraan para sa mga klase Pusa, aso At baka- upang ang pusa ay ngumyaw, ang aso ay tumahol, at ang baka ay nagsabi ng "Moo". Samakatuwid, sa mga descendant na klase ay pinapalampas namin ang pamamaraan boses(), upang matanggap namin ang "Meow", "Woof" at "Moo" sa console.
Kaya kung ano ang polymorphism
Tingnan natin muli ang kahulugan na ibinigay namin sa simula ng artikulo: Polymorphism- ang kakayahang gumamit ng mga pamamaraan ng parehong pangalan na may pareho o magkakaibang hanay ng mga parameter sa isang klase o sa isang pangkat ng mga klase na nauugnay sa isang relasyon sa mana. Mukhang mas malinaw, hindi ba? Ipinakita namin kung paano mo magagawa:
Ang lahat ng ito ay mga pagpapakita ng "nadagdagang flexibility" ng mga object-oriented na wika dahil sa polymorphism. Inaasahan namin na ang aming artikulo ay naging kapaki-pakinabang sa iyo. Maaari kang mag-sign up para sa aming mga kurso sa Javamayroon kaming . |
Basahin: |
---|
Sikat:
Bago
- Ano ang information warfare
- Paano malalaman kung available ang isang domain name
- Pagtanggal ng mga bagay sa 1s 8
- 1s zup 3.0 exchange accounting. Pagse-set up ng iskedyul ng pagpapalitan ng data
- 1s 83 barcode para sa halimbawa ng invoice
- Paano makakuha ng data mula sa tabular na bahagi ng mga dokumento?
- Pag-set up ng mga karagdagang detalye at karagdagang impormasyon para sa mga item 1s 8
- Pagtanggap ng mga batch postal items Batch reception rpo
- Ang Silangan ay isang maselang bagay: mga cryptocurrencies sa Japan Regulasyon ng mga cryptocurrencies sa Japan
- Pagsubok ng isa pang autoclicker para sa SEOsprint