Polymorphism sa object-oriented na programa

Gusto mo bang malaman kung ano ang polymorphism? Sa susunod na artikulo, bibigyan ka namin ng detalyadong impormasyon tungkol sa tinatawag na polymorphism sa object-oriented programming.

polymorphism-in-object-oriented-programming-1

Polymorphism sa object-oriented na programa

Bagama't maaaring mukhang medyo komplikado ang termino, ang ganitong uri ng paksa sa agham pangkompyuter ay talagang nauugnay sa mga pinakasimpleng aspeto ng larangan. Kapag natututo ng Object-Oriented Programming , maaari nating matagpuan ang paglalarawang ito, na nangangahulugang paglalarawan ng maraming posibleng estado ng isang katangian.

Sa agham pangkompyuter, isa ito sa mga pangunahing katangian ng object-oriented programming at isa ring pamamaraan na ginagamit ng mga virus o worm sa computer upang baguhin ang mga bahagi ng kanilang code, na ginagawang mas mahirap itong matukoy. Maaari nitong lubos na gawing simple ang programming kapag ayaw nating maging masyadong espesipiko at nangangailangan ng isang bagay na mas gumagana na umaangkop sa mas malawak na paraan ng pagtatrabaho, na binabawasan ang ating workload at tinutulungan tayong pamahalaan ang isang bagay na mas dynamic at flexible.

Bago tayo dumiretso sa pangunahing paksa, ipapaliwanag muna natin ang ilang konsepto at susuriin ang mga kahulugan upang mabigyan ka ng panimula , hindi lamang upang matulungan kang mas maunawaan ito, kundi upang maunawaan din ang tungkulin nito, ang kahalagahan nito, at kung gaano ito kapaki-pakinabang sa larangan ng agham pangkompyuter, na makakatulong sa atin na gawing mas maayos ang ating gawain. Malamang na wala kang makikitang anumang makabagong bagay bago ka direktang tumalon sa polymorphism sa object-oriented programming, ngunit mahalagang tandaan ang mga sumusunod para sa wastong pag-unawa.

Ang konsepto ng polymorphism sa object-oriented na programa ay nagmula sa Simula 67, na isang programa ng wika, na ginawa upang maisagawa ang mga simulation. Ito ay nilikha ni Ole Joha Dahl at Kristen Nygaard na kabilang sa Norwegian data center sa Oslo.

Ang sentro na ito ay nakatuon sa simulation ng mga barko, mayroong maraming pagkalito dahil sa pagsabog dahil sa mga pagkakaiba sa pagitan nila, nang ang mga barkong ito ay pinagsama-sama ng kani-kanilang pag-uuri upang makabuo ng higit na kontrol sa oras ng pag-aaral, ito ay pagkatapos na ang ideyang ito ay nagbunga. float.

Ang istilong ito ng pagprograma noong 80 ay nangibabaw sa halos lahat ng mga lugar ng computing dahil sa mahusay na pagpapatungkol sa C ++ na isa pang wika ng C program. Salamat sa mga graphic na interface ng gumagamit ang pangingibabaw ng pamamaraang ito ay mahusay na gumana.

Ang polymorphism sa object-oriented na programa ay may maraming mga katangian, na inilapat sa iba't ibang mga wika na ginamit sa oras na iyon, tulad ng: Ada, BASIC, LISP, Pascal, bukod sa marami pang iba, kahit na nakabuo sila ng iba't ibang mga problema sa pagiging tugma.

Para sa isang mas detalyadong paliwanag kung ano ang Polymorphism sa object-oriented na programa, inaanyayahan ka naming panoorin ang sumusunod na video:

Polymorphism at Mana

Ang prefiks na poly ay nagmula sa Greek, kaya ang eksaktong paglalarawan nito ay nangangahulugang kasaganaan, marami o pagkakaiba-iba, at ang morphism ay isang panlapi ng Griyego na pumapasok sa pagbuo ng mga salita na may kahulugan ng hugis, komposisyon, o istraktura ng isang katawan. Isinasaalang-alang ito, maaari nating isaalang-alang ang nais naming ipaliwanag sa fragment na ito, ang aming pangunahing salita ay karaniwang sa pamamagitan ng kahulugan ng isang iba't ibang nabuo ng istraktura ng isang katawan; Sa iba't ibang larangan ng matematika, ang mga mapa ay tinatawag na mga aplikasyon sa pagitan ng mga istrukturang matematika na nagpapanatili ng panloob na istraktura.

Upang ganap na linawin ito, maaari nating ihambing ang polymorphism at mana. Sa madaling salita, pinapayagan kaming isagawa ang mga polymorphism sa mga hierarchy ng pag-uuri. Mahalaga ring banggitin na ang mga ito ay ibinibigay sa pamamagitan ng pamana, basta ang mana, na maaari nating maunawaan bilang mga nagmula sa isang bagay, ay palaging kabilang sa iisang klase; Upang magbigay ng isang halimbawa ng ipinaliwanag, maaari nating sabihin na mula sa salitang sasakyan, maraming klase ang lumalabas, tulad ng isang kotse, motorsiklo, at isang bus, na nakikita ito sa ganitong paraan, ang polymorphism at mana ay dalawang hindi maikakailang naka-link na mga konsepto.

Ang kahalagahan ng Type System sa Polymorphism

Pangalanan ang pag-uuri na ito bilang isang uri ng system, dahil ang mga derivatives ng salitang iyon ay bahagi pa rin sa kanila, ngunit bakit ito mahalaga sa polymorphism ng programa na nakatuon sa object?

Marami sa mga tao na pumasok sa artikulong ito ay maaaring pamilyar sa kung ano ang programa sa mahina na nai-type na mga wika, tulad ng sa kaso ng Javascript at PHP, subalit mahalaga na maunawaan natin nang mabuti kung ano ito.

Sa ganitong uri ng wika, kapag tinutukoy ang isang variable, palaging kailangan naming ipahiwatig ang uri na nais naming maglaman ng variable na iyon, halimbawa: int myNumber.

Sa ganitong paraan mayroon tayong posibilidad na ipahiwatig na ang variable na itinatag bilang "myNumber" ay laging naglalaman ng isang integer; kung hindi man, magtatapon sa amin ang tagatala ng isang mensahe ng error na pumipigil sa amin sa pag-ipon ng program na ginawa namin.

Sa katunayan, maaari rin itong mangyari sa mga bagay, kung sa Java tinukoy natin ang klase na "tampok na pelikula", na nalalaman ang salitang ito bilang isang film ng pelikula na gumagalaw nang higit sa isang oras, kapag lumikha kami ng mga bagay ng klase na "tampok na pelikula" dapat naming ipahiwatig ang mga variable na kung saan ang uri ng bagay na inilaan na gawin ay ipinahiwatig. Maaari naming ipahayag ito sa ganitong paraan:

Tampok na film miLargo = bagong Tampok na pelikula

Ang aming variable ay "myLong" at ilalantad ito, magkakaroon kami ng sanggunian sa isang bagay ng klase o mga uri ng "Feature Film", at habang tumatagal ito, dapat palaging mayroong anumang bagay ng parehong klase o uri, na sinabi ito ay mahalagang malaman upang hindi ka makakapag-imbak ng isang integer sa variable, o ilang ibang bagay ng ibang uri o klase, na hindi mana at walang ugnayan.

Kung bumalik tayo upang banggitin ang halimbawa ng mga sasakyan at kanilang mga uri, mahalagang linawin na kung magpasya kaming tukuyin ang isang variable na tumuturo sa object ng klase «moto», habang ang variable na ito ay tumatagal, dapat itong laging ituro sa isang nauugnay o pamana object sa klase «moto», hindi ang klase «kotse», ni «bus»; gayunpaman, sa mga mahinang wika na basura tulad ng mga nabanggit namin kanina, ang hindi kakayahang umangkop na ito ay hindi umiiral, kahit na ito ay isang pangkaraniwang tampok ng mga mabibigat na nasirang wika tulad ng Java. Narito ang isang mas malawak na halimbawa:

  • Kotse myCar = bagong Kotse (Mazda 2 ″): Ang Mazda 2 ay magiging aming mana ng bagay na kabilang sa klase o uri na iyon, at ito ay kung saan ang mga variable point, at kung nais namin, bukas ay maaari itong magturo sa ibang bagay ng Ang aking kotse.

MyCar = bagong Kotse (Ford Focus 2.0 ″)

Ang hindi namin magagawa ay mag-imbak sa aming variable na itinakda bilang klase ng Car, ibang bagay na walang kaugnayan sa uri ng Kotse, dahil magkakaroon kami ng isang error sa pagtitipid-oras, kung sakaling mangyari ito, dapat ay nai-save ang New Car Ford Tumuon ang 2.0 pipiliin namin ang Bagong Moto Yamaha YBR.

Dapat itong linawin na sa puntong ito hindi pa namin pinag-uusapan ang tungkol sa polymorphism, ngunit sinusubukan namin ang pangkalahatan sa mga programa sa uri ng sistema; ang punto ay dapat buksan natin ang ating isipan sa mga komplikasyon na maibibigay sa atin ng paghihigpit ng mga wikang mahigpit na na-tripahan upang maunawaan mamaya kung bakit mahalaga ang polymorphism at isang pangunahing piraso ng polymorphism sa object-oriented na programa.

Sa isang ganap na nai-type na wika ng computer kapag ang isang pagpapaandar ay ipinakita, dapat nating laging panatilihin bilang isang punto ng kahalagahan na kapag ipinapaalam ang uri ng mga patakaran na tatanggapin nito. Sa pagpapaandar na naitaguyod namin, hindi kami makakapasa ng anupaman maliban sa mga variable o literal na may mga halaga ng integer bilang mga pamantayan, kung nagkakaroon kami ng iba pang data sa iba pang mga uri, magbabago ang tagatala, hindi kami papayagang isama ang programa sapagkat sa ganitong kaso hindi ito matagpuan ang mga inaasahang uri ng mga parameter ng pagpapaandar.

moto-car-1

Polymorphism sa mga bagay

Sa wakas, naabot namin ang bahagi na talagang tumutukoy sa paksang ito ng interes, iyon ang dahilan kung bakit sa ilalim ng sistemang ito ay gagawin ang sarili nitong mga elemento na nagpapakita ng mga klase at layunin nito, dahil gumagana ang mga wikang malakas na nai-type, dapat palaging ituro ng isang variable ang isang bagay ng uri na ipinahiwatig namin sa oras na itinaguyod namin ito.

Iyon ay isang bagay na kailangan tandaan, ngayon, isang pagpapaandar na ang parameter ay idineklara ng isang klase, tatanggapin lamang kami upang makatanggap ng mga bagay ng klase na iyon; Ang isang array na idineklarang binubuo ng mga elemento ng isang tiyak na uri ay papayagan lamang kaming punan ang mga kahon nito ng mga bagay ng uri na aming itinatag; magpapakita kami ng isa pang halimbawa:

Sasakyan [] myVehiculos = bagong Sasakyan [3]

Ang halimbawang ito na ibinibigay namin, ito ay isang variable na isang array at dito ipinahayag namin na ang nilalaman ng mga kahon ay magiging mga object ng klase ng Sasakyan, sa malakas na na-trip na wika maaari lamang itong maglaman ng mga bagay ng klase ng sasakyan, tulad ng mayroon kaming naipaliwanag na, ngunit ngayon nakita namin ang polymorphism, kung saan maaari kaming magbigay ng kaunting kakayahang umangkop sa uri ng sistema, na nagbibigay sa amin ng pagkakataon para sa isang variable na tumanggap din ng mga bagay ng klase na "mga bata" o derivatives.

Sa pamamagitan ng paggawa ng sistema ng uri na mas nababaluktot hindi namin pinag-uusapan bilang isang buo, ngunit sa kung ano ang gagawin nito sa mga pag-uuri ng mana na mayroon kami sa aming mga sistema ng klase o uri. Kung namamahala kami upang tukuyin ang isang array gamit ang mga cell ng isang itinatag na klase, tatanggapin kami ng tagatala upang magsingit ng mga salitang "bata" ng bagay na naitaguyod na namin sa mga kahon na iyon. Kung itinatakda namin na ang isang pagpapaandar ay tumatanggap ng mga bagay ng ilang klase bilang mga parameter. , papayagan kami ng tagatala na magpadala sa amin ng paanyaya ng mga bagay ng isang klase na nagmula sa isa na naideklara na namin.

Dadalhin ito sa isang bagay na mas konkreto, ang aming hanay ng sasakyan ay hindi lamang papayagan na ipasok namin ang mga generic na sasakyan sa variable nito, kundi pati na rin ang lahat ng mga object ng bata o nagmula sa mga klase ng klase na ito, kung magkakaroon kami ng mga bagay ng bus, kotse at motorsiklo klase o sinumang bata. na aming tinukoy, at ang lahat ng ito salamat sa polymorphism.

Paglalapat ng Polymorphism

Sa kabila ng paliwanag na ibinigay namin sa tampok na pelikula, nais naming linawin na bilang karagdagan sa pagiging isang pelikula, maaari din kaming magkaroon ng mga dokumentaryo, at bukod sa iba pa; marahil kapwa may magkakaibang katangian, magkakaibang oras ng madla, magkakaibang presyo at sa kadahilanang ito maaari kaming magpasya na ang aming klase sa Tampok na Pelikula ay mayroong mga klase ng anak na babae o pamana tulad ng "pelikula" o "dokumentaryo".

Kung lumikha kami ng isang klase na itinatag bilang Cinema at isang pamamaraan na tatawagin namin na "magparami", magsisilbi itong isang parameter para sa kung ano ang nais naming muling gawin sa isang sinehan, kung saan maaaring dumating ang mga bagay ng parehong klase ng sinehan at klase ng dokumentaryo. kung naiintindihan natin nang maayos ang uri ng sistema (nang hindi pumapasok sa polymorphism) ang aming mga pamamaraan ay magtatatag ng mga uri ng mga parameter na natanggap namin. Magmumukhang ganito:

  • Patugtugin (Pelikulang Pelikula Upang Patugtugin)

Ngunit sa halip kung nais naming gumawa ng isang dokumentaryo kailangan naming baguhin ang aming pormula.

  • Patugtugin (Documentary Documentary To Play)

At talagang kinakailangan ba upang lumikha ng dalawang magkakaibang mga formula? Ang parehong mga pamamaraan upang kopyahin ang dalawang mga bagay ay magiging eksaktong pareho, bakit mag-abala? Kakailanganin lamang naming ilagay ang tampok na pelikula sa manlalaro, hit play (o maglaro) at lumikha ng isang record na may bilang ng mga tiket na naibenta. Bagaman hindi abala na gawin ang parehong pamamaraan, dapat nating magkaroon ng kamalayan na maaaring lumitaw ang sitwasyon kung saan kailangan naming lumikha ng isa pang pormula, maaari naming ibigay ang halimbawa na mayroon kaming isang pelikula, ngunit sa oras na ito sa format na 3D.

Kapag narating na natin ang puntong ito, maaari na tayong bumaling sa polymorphism. Sa tulong nito, makakalikha tayo ng isang paraan ng `play` na kikilala sa lahat ng uri ng elemento—mga dokumentaryo, pelikula, o anumang bagay na kapareho ng klase (na kaugnay)—na maaaring kailanganin nating likhain sa hinaharap. Ang magagawa ng mga wika ay tukuyin ang paraan ng `play` sa pamamagitan ng pagtukoy na ang parameter ng klase na matatanggap natin ay isang feature film object, ngunit tatanggapin ng wika at ng compiler ang anumang bagay na hango sa pelikula o dokumentaryo. Magtatapos tayo sa ganito: `play(FeatureFilm elementToPlay)`.

Nais ba naming lumikha ng mga pelikula o dokumentaryo upang kopyahin ang mga ito, posible ang lahat ng ito sa isang solong pamamaraan, ng paggawa ng maraming kopya, salamat sa katotohanan na dahil sa polymorphism sa object-oriented na programa ginagawa namin ang system na mas may kakayahang umangkop, hindi ito kailangan Halimbawa, kung nais mong kopyahin ang isang pelikula at hindi isang dokumentaryo, hindi namin pipiliin ang klase ng Cinema, ngunit sapat na ang nais naming kopyahin ay bahagi ng mana ng tampok na pelikula na tampok.

Kung babalik tayo sa halimbawa ng sasakyan, kahit na isinasaalang-alang ang pagiging kapaki-pakinabang ng polymorphism at ang mga posibilidad na inaalok sa amin na bawasan ang lahat ng pagpapanatili ng mga programa sa computer na dapat nating gawin kung wala tayong tulong ng konseptong ito.

Sabihin nating mayroon tayong klase sa Paradahan (sa Espanyol ay magiging klase ito upang malaman na iparada) kung saan mayroon kaming pagpapaandar ng paradahan. Sa isang paradahan mayroon kaming posibilidad ng mga paradahan ng bus at motorsiklo, bilang karagdagan sa mga kotse lamang, at walang polymorphism kailangan naming lumikha ng isang pamamaraan na nagbibigay-daan sa amin upang iparada ang mga bagay ng uri ng "kotse" at isa pa na nagpapahintulot sa amin na iparada ang mga bagay ng uri ng "bus" at iba pa na nagpapahintulot sa amin na iparada ang mga bagay na uri ng "motorsiklo," kahit na ang pamamaraan para sa pagsasagawa ng mga pagkilos na ito sa kabila ng kapansin-pansin na pagkakaiba sa pagitan ng mga hitsura ng tatlong sasakyan na ito ay karaniwang pareho, tanging ang isang iyon ay sumasakop ng mas maraming puwang kaysa sa Yung isa.

Ang pinaka-tumpak na bagay ay ang magkaroon ng isang solong pamamaraan na nagpapasimple ng mga bagay para sa amin at pinapayagan kaming makatanggap ng lahat ng mga uri ng sasakyan, hindi lamang mga kotse at tatak ng kotse, ngunit lahat ng tinanggap at mahalagang hango ng object ng sasakyan. Una ay magkakaroon kami ng muling paggamit ng code, dahil tulad ng nasabi na namin, ang pag-park ng mga ganitong uri ng sasakyan ay pareho sa pagkakaiba lamang sa puwang na sinasakop ng bawat isa, ngunit bilang karagdagan sa ito, kung bukas ang iba pang uri ng sasakyan ay upang ipagbili sa merkado, magkakaroon kami ng posibilidad na matanggap ito ng aming software nang hindi na kailangang baguhin ang aming naitatag na klase sa Paradahan.

Mayroon kaming pagtatapon ng isang solong pamamaraan ang pagtanggap ng lahat ng mga tumpak na mana na maaaring mayroon ang sasakyan, na ginagawang mas nababaluktot ang gawain at nai-save sa amin ang oras na gugugol namin sa paglikha ng isa para sa bawat uri ng sasakyan. Ang polymorphism sa object-oriented na programa ay magbubukas ng mga pintuan sa isang saklaw ng mga bagay na maaaring tanggapin ng isang solong pamamaraan.

Sinusubukan naming ipaliwanag ang polymorphism sa pinaka-nauunawaan na paraan at gumawa ng isang malawak na pagsusuri sa lahat ng nasa likuran nito, hindi ito nararapat na tumalon nang sabay-sabay sa konsepto nang hindi binibigyan ang background nito upang matulungan kaming maunawaan ito at maunawaan ang napakahalagang kahalagahan at ang paggamit na maaari nating ibigay ito.

Ang pagkakaroon ng posibilidad na maisama ang maraming mga pamamaraan sa isa, habang ang mga hango ay sumasang-ayon bilang mana ng bagay, ay lubos na kapaki-pakinabang sapagkat nakakatipid ito sa atin ng pangangailangan na lumikha ng maraming pinipilit sa amin na maging napaka tiyak na hindi binibigyan kami ng posibilidad na gumawa ng higit pa kakayahang umangkop na trabaho sa Ang katunayan na makakalikha kami ng isang mas masiglang paraan ng paghawak ng na-program namin, kasing simple ng pag-alam ng tamang paghuhula ng isang solong salita, iyon ay, ang lahat ng nasasakop nito, ay tumutulong sa amin na makagawa ng mas mahusay na trabaho.

Umaasa kaming nagustuhan ninyo ang artikulong ito at natutunan ninyo ang tungkol sa polymorphism sa object-oriented programming. Kung gusto ninyong magbasa ng isa pa sa aming mga artikulo sa programming, inirerekomenda naming bisitahin ang sumusunod, na sumasaklaw sa isang kilalang programming language sa mundo ng computer science: C++ Programming.


Idagdag bilang ginustong mapagkukunan sa Google