Polimorfisms objektorientētā programmēšanā

Vai vēlaties uzzināt, kas ir polimorfisms? Nākamajā rakstā mēs sniegsim jums detalizētu informāciju par to, ko sauc Polimorfisms objektorientētā programmēšanā.

polimorfisms-objektorientētā programmēšana-1

Polimorfisms objektorientētā programmēšanā

Lai gan tas var šķist vārds ar nedaudz sarežģītu aprakstu, patiesībā šāda veida ar datoru saistīta tēma ir saistīta ar pilnīgi tās galvenajiem aspektiem. Kad tu mācies Objektorientēta programmēšana, mēs varam sastapties ar šo aprakstu, kura nozīme ir vienkārši viena īpašuma vairāku un iespējamu stāvokļu apraksts.

Datoriem tā ir viena no objektorientētās programmēšanas pamatīpašībām, un tā ir arī metode, ko izmanto datorvīrusiem vai tārpiem, lai mainītu to koda daļas, apgrūtinot to noteikšanu. Tas var lai atvieglotu Daudz ko, programmējot kaut ko, ja mēs nevēlamies būt tik konkrēti un mums ir nepieciešams kaut kas funkcionālāks, kas pielāgojas plašākam darba veidam, samazina darbu un palīdz mums tikt galā ar kaut ko dinamiskāku un elastīgāku.

Pirms pāriet tieši pie lietas, mēs izskaidrosim dažus jēdzienus un sadalīsim definīcijas, kas kalpos kā atvērt muti, ne tikai labāk to izprast, bet arī izprast tā darbību, nozīmi un to, cik noderīga tā var būt datorzinātņu jomā, palīdzot mums atslābināt darbu. Mēs, iespējams, neatradīsim neko jaunu, pirms pāriesim tieši uz OOP polimorfismu, taču ir svarīgi paturēt prātā visu tālāk minēto, lai pareizi saprastu.

Polimorfisma jēdziens objektorientētā programmēšanā ir radies Simula 67, kas ir programmēšanas valoda, kas paredzēta simulāciju veikšanai. To izveidoja Ole Joha Dahl un Kristen Nygaard, kuri piederēja Norvēģijas datu centram Oslo.

Šis centrs bija veltīts kuģu simulācijai, sprādziena dēļ radās daudz neskaidrību to atšķirību dēļ, kad šie kuģi tika grupēti pēc to attiecīgās klasifikācijas, lai radītu lielāku kontroli studiju veikšanas laikā. tad šī ideja tika īstenota.

Šis programmēšanas stils 80. gados dominēja gandrīz visās skaitļošanas jomās, pateicoties lieliskajam pielietojumam ar C ++, kas ir vēl viena programmēšanas valoda C. Pateicoties grafiskajām lietotāja saskarnēm, šīs metodes pārsvars darbojās ļoti labi.

Polimorfismam objektorientētā programmēšanā ir vairākas iezīmes, kuras tika pielietotas dažādās tolaik lietotajās valodās, piemēram: Ada, BASIC, LISP, Pascal, daudzu citu starpā, lai gan tās radīja dažādas saderības problēmas.

Lai iegūtu sīkāku skaidrojumu par to, kas ir polimorfisms objektorientētā programmēšanā, aicinām jūs noskatīties šo video:

Polimorfisms un mantojums

Prefiksa poli izcelsme ir grieķu valodā, tāpēc precīzs tā apraksts nozīmē pārpilnību, daudzus vai daudzveidīgus, un morfisms ir grieķu valodas sufikss, kas veidojas vārdos ar ķermeņa formu, sastāvu vai struktūru. Ņemot to vērā, mēs varam iedziļināties tajā, ko vēlamies izskaidrot šajā fragmentā, mūsu galvenais vārds būtībā pēc definīcijas ir šķirne, ko veido ķermeņa uzbūve; Dažādās matemātikas jomās kartes sauc par lietojumprogrammām starp matemātiskām struktūrām, kas saglabā iekšējo struktūru.

Lai tas būtu pilnīgi skaidrs, mēs varam salīdzināt polimorfismu un mantojumu. Citiem vārdiem sakot, tas ļauj mums veikt polimorfismus klasifikācijas hierarhijās. Ir arī svarīgi pieminēt, ka tie tiek doti mantošanas ceļā, ja vien mantojums, ko mēs varētu saprast kā objekta atvasinājumus, vienmēr pieder vienai klasei; Lai sniegtu paskaidrojuma piemēru, mēs varam teikt, ka no vārda transportlīdzeklis izceļas vairākas klases, piemēram, automašīna, motocikls un autobuss, redzot to šādā veidā, polimorfisms un mantojums ir divi nenoliedzami saistīti jēdzieni.

Tipa sistēmas nozīme polimorfismā

Nosaucot šo klasifikāciju par tipa sistēmu, jo šī vārda atvasinājumi joprojām ir daļa no tiem, bet kāpēc tas ir svarīgi objektorientētās programmēšanas polimorfismā?

Daudzi cilvēki, kuri ievadīja šo rakstu, var būt pazīstami ar to, ko nozīmē programmēt vāji drukātās valodās, kā tas būtu Javascript un PHP gadījumā, tomēr ir svarīgi, lai mēs labi saprastu, kā tas ir.

Šāda veida valodā, nosakot mainīgo, mums vienmēr ir jānorāda veids, kuru vēlamies, lai šis mainīgais saturētu, piemēram: int myNumber.

Tādā veidā mums ir iespēja norādīt, ka mainīgais, kas izveidots kā "myNumber", vienmēr saturēs veselu skaitli; ja tas būtu citādi, kompilators mums nosūtītu kļūdas ziņojumu, kas neļauj mums apkopot mūsu izveidoto programmu.

Patiesībā tas var notikt arī ar mums ar objektiem, ja Java mēs definējam klasi "spēlfilma", zinot šo vārdu kā kinofilmu, kas ilgst vairāk nekā vienu stundu, kad veidojam klases "spēlfilmas" objektus mēs jānorāda mainīgie, kuros norādīts objekta veids, kuru paredzēts izgatavot. Mēs to varam izteikt šādi:

Spēlfilma miLargo = jauna spēlfilma

Mūsu mainīgais būtu "myLong", un, atklājot to, mums būs atsauce uz "spēlfilmu" klases vai veida objektu, un, kamēr tas ilgst, tam vienmēr vajadzētu būt jebkuram tās pašas klases vai tipa objektam. to ir svarīgi zināt, lai mainīgajā nevarētu saglabāt veselu skaitli vai kādu citu cita veida vai klases objektu, kas nav mantojums un kuram nav saistības.

Ja atgriezīsimies pie transportlīdzekļu un to tipu piemēra, ir svarīgi precizēt, ka, ja mēs nolemjam definēt mainīgo, kas norāda uz klases «moto» objektu, kamēr šis mainīgais ilgst, tam vienmēr jānorāda uz saistītu vai mantojuma objekts uz klasi «moto», nevis klases «automašīna», ne «autobuss»; tomēr tādās vāji izķidātās valodās kā tās, kuras mēs minējām iepriekš, šī neelastība nepastāv, lai gan tā ir raksturīga ļoti izķidātām valodām, piemēram, Java. Šeit ir plašāks piemērs:

  • Automašīna myCar = jauna automašīna (Mazda 2 ″): Mazda 2 būtu mūsu mantojums šai klasei vai tipam piederošajam objektam, un uz to norāda mainīgais, un, ja mēs to vēlētos, rīt tā varētu norādīt uz citu objektu Mans auto.

MyCar = jauna automašīna (Ford Focus 2.0 ″)

Tas, ko mēs nekad nevaram darīt, ir saglabāt mūsu mainīgo kopu kā automašīnu klase-kaut ko citu, kam nav nekāda sakara ar automašīnas tipu, jo tad mums būtu kompilācijas laika kļūda, ja tā notiek, tā noteikti ir saglabājusi jauno automašīnu Ford Focus 2.0 mēs būtu izvēlējušies New Moto Yamaha YBR.

Jāprecizē, ka šajā brīdī mēs vēl nerunājam par polimorfismu kā tādu, bet mēs testējam programmēšanu kopumā ar tipa sistēmu; jautājums ir tāds, ka mums ir jāatver prāts sarežģījumiem, ko var radīt stingri trīskāršu valodu ierobežojums, lai vēlāk saprastu, kāpēc polimorfisms ir svarīgs un galvenais polimorfisma elements objektorientētā programmēšanā.

Pilnībā drukātā datorvalodā, kad tiek parādīta funkcija, mums vienmēr ir jāpatur prātā tas, kas ir svarīgi, informējot par noteikumiem, kurus tā saņems. Mēs nevarēsim nodot mūsu izveidotajai funkcijai neko citu kā mainīgos vai burtus ar veselu skaitļu vērtībām, ja mums ienāk prātā nodot citus datus ar citiem veidiem, kompilators gatavojas mainīt, tas neļaus mēs apkopojam programmu, jo tādā gadījumā tā nevarēja atrast paredzētos veidus funkciju parametros.

moto-automašīna-1

Polimorfisms objektos

Visbeidzot, mēs esam nonākuši pie tās daļas, kas patiešām nosaka šo interesējošo tēmu, tāpēc šajā sistēmā tiks veidoti tā elementi, kas izpaužas tā klasēs un mērķos, jo, darbojoties stingri drukātām valodām, mainīgajam vienmēr ir jānorāda uz objektu tāda veida, kādu mēs norādījām tās izveidošanas laikā.

Tas ir kaut kas būtisks, lai atcerētos, ka tagad funkcija, kuras parametrs ir deklarēts no klases, pieņems mūs tikai, lai saņemtu šīs klases objektus; masīvs, par kuru ir paziņots, ka tas sastāv no noteikta veida elementiem, ļaus tikai aizpildīt tā lodziņus ar mūsu izveidotajiem šāda veida objektiem; mēs piedāvāsim vēl vienu piemēru:

Transportlīdzeklis [] myVehiculos = jauns transportlīdzeklis [3]

Šis piemērs, ko mēs sniedzam, ir mainīgais, kas ir masīvs, un tajā mēs paziņojam, ka lodziņu saturs būs transportlīdzekļu klases objekti, stingri trīskāršā valodā tas var saturēt tikai transportlīdzekļu klases objektus, jau paskaidrots, bet tagad mēs atrodam polimorfismu, ar kuru mēs varam piešķirt nedaudz lielāku elastību tipa sistēmai, dodot mums iespēju mainīgajam pieņemt arī "bērnu" klases objektus vai atvasinājumus.

Padarot tipa sistēmu elastīgāku, mēs nerunājam par visu kopumā, bet gan par to, kas tam būtu saistīts ar mantojuma klasifikāciju, kāda mums ir mūsu klases vai tipa sistēmās. Ja mums izdotos definēt masīvu, izmantojot noteiktas klases šūnas, kompilators pieņemtu, ka mēs šajās kastēs ievietojam tā objekta vārdus "bērni". Ja konstatējam, ka funkcija kā parametrus saņem kādas klases objektus , kompilators ļaus mums nosūtīt tai klases objektu piesaukšanu, kas iegūta no jau deklarētās.

Ņemot vērā kaut ko konkrētāku, mūsu transportlīdzekļu masīvs ne tikai ļaus mums ievietot vispārējos transportlīdzekļus tā mainīgajā, bet arī visus šīs klases bērna vai atvasināto klašu objektus, tad mums būtu autobusa, automašīnas un motocikla objekti klase vai jebkurš bērns, ko esam definējuši, un tas viss pateicoties polimorfismam.

Polimorfisma pielietošana

Neskatoties uz skaidrojumu, ko bijām devuši spēlfilmai, mēs vēlamies precizēt, ka papildus filmai mums var būt arī dokumentālās filmas un cita starpā; iespējams, abiem ir atšķirīgas iezīmes, atšķirīgs auditorijas laiks, dažādas cenas, un šī iemesla dēļ mēs būtu varējuši nolemt, ka mūsu spēlfilmu klasei ir meitas klases vai mantojums, piemēram, "filma" vai "dokumentālā filma".

Ja mēs izveidosim klasi, kas izveidota kā kino, un metodi, ko mēs sauksim par "reproducēšanu", tā kalpos kā parametrs tam, ko mēs vēlamies reproducēt kinoteātrī, kur var ierasties gan kino klases, gan dokumentālās klases objekti, ja mēs labi saprotam tipa sistēmu (pat neievadot polimorfismu), mūsu metodes noteiks saņemto parametru veidus. Tas izskatītos apmēram šādi:

  • Atskaņot (lai atskaņotu filmas filmu)

Bet tā vietā, ja mēs vēlamies reproducēt dokumentālo filmu, mums būtu jāmaina mūsu formula.

  • Spēlēt (dokumentālā dokumentālā filma, ko spēlēt)

Un vai tiešām ir jāizveido divas dažādas formulas? Abas šo divu lietu reproducēšanas metodes būtu pilnīgi vienādas, kāpēc uztraukties? Mums būtu tikai jāievieto spēlfilma atskaņotājā, jāspēlē (vai jāspēlē) un jāizveido rekords ar biļešu skaitu, kuras izdevās pārdot. Lai gan abas metodes nav apgrūtinošas, mums ir jāapzinās, ka mums var parādīties situācija, kurā mums jāizveido cita formula, mēs varētu minēt piemēru, ka mums ir filma, bet šoreiz 3D formātā.

Šajā brīdī mēs varam ķerties pie polimorfisma, ar tā palīdzību mēs varam izveidot reproducēšanas metodi, kas atpazīs visa veida elementus, dokumentālās filmas, filmas vai jebko citu no vienas klases (kas ir saistīts), kas mums ir jāizveido nākotne. Valodas mums ļautu izveidot reproducēšanas metodi, norādot, ka tās klases parametrs, kuru mēs saņemsim, ir objekta garuma objekts, bet valoda un kompilators pieņem jebkuru objektu, kas iegūts no filmas vai dokumentālā filma, mums paliktu kaut kas līdzīgs šim: spēlēt (spēlfilma itemToPlay).

Neatkarīgi no tā, vai mēs vēlamies radīt filmas vai dokumentālas filmas reproducēšanai, tas viss būs iespējams, izmantojot vienu reproducēšanas metodi, pateicoties tam, ka objektorientētās programmēšanas polimorfisma dēļ mēs padarām sistēmu elastīgāku. nepieciešams. Piemēram, ja vēlaties reproducēt filmu, nevis dokumentālu filmu, mums nebūs jāizvēlas Kino klase, bet pietiek ar to, ka tas, ko mēs vēlamies reproducēt, ir daļa no spēlfilmas objekta mantojuma.

Ja mēs atgriežamies pie transportlīdzekļa piemēra, pat paturot prātā polimorfisma lietderību un tā piedāvātās iespējas, lai samazinātu visu to datorprogrammu apkopi, kas mums būtu jādara, ja mums nebūtu šīs koncepcijas palīdzības.

Pieņemsim, ka mums ir autostāvvietas klase (spāņu valodā tā būtu klase, kas iemācītos novietot automašīnu), kuras ietvaros mums ir autostāvvietas funkcija. Autostāvvietā mums ir iespēja novietot autobusus un motociklus, papildus tikai automašīnām, un bez polimorfisma mums būtu jāizveido metode, kas ļauj novietot "automašīnas" tipa objektus un citu, kas ļauj novietot objektus. "autobusu" tipa un vēl viens, kas ļauj novietot "motocikla" tipa objektus, lai gan šo darbību veikšanas procedūra, neskatoties uz ievērojamo atšķirību starp šo trīs transportlīdzekļu izskatu, būtībā ir vienāda, tikai viens aizņem vairāk vietas nekā otra.

Visprecīzāk būtu, ja būtu viena metode, kas mums vienkāršo lietas un ļauj saņemt visa veida transportlīdzekļus, ne tikai automašīnas un automašīnu markas, bet arī visus pieņemtos un vērtīgos transportlīdzekļa objekta atvasinājumus. Vispirms mums būtu atkārtoti jāizmanto kods, jo, kā mēs jau teicām, šāda veida transportlīdzekļu novietošana stāvvietās ir līdzīga ar vienīgo atšķirību katra aizņemtajā telpā, bet papildus tam, ja rīt būtu kāds cits transportlīdzekļa tips lai to pārdotu tirgū, mums būtu iespēja, ka mūsu programmatūra to varētu pieņemt bez nepieciešamības mainīt mūsu jau izveidoto stāvvietu klasi.

Mūsu rīcībā ir viena metode, lai pieņemtu visus precīzos transportlīdzekļa mantojumus, padarot darbu elastīgāku un ietaupot laiku, ko mēs būtu pavadījuši, veidojot vienu katram transportlīdzekļa tipam. Polimorfisms objektorientētā programmēšanā atver durvis objektiem, kurus var pieņemt ar vienu metodi.

Mēs cenšamies izskaidrot polimorfismu vissaprotamākajā veidā un veikt plašu pārskatu par visu, kas aiz tā slēpjas, nebūtu bijis pareizi uzreiz ķerties pie jēdziena kā tāda, nesniedzot tā pamatinformāciju, lai palīdzētu mums to izprast un izprast tā izcilo nozīmi. un nozīme, izmantojiet to, ko mēs varam dot.

Iespēja izmantot vairākas metodes vienā, bet atvasinājumi piekrīt kā objekta mantojumam, ir diezgan noderīga, jo tas ietaupa mums nepieciešamību izveidot vairākas, liekot mums būt ļoti specifiskiem, nedodot mums iespēju darīt vairāk elastīgs darbs Fakts, ka mēs varam izveidot dinamiskāku veidu, kā rīkoties ar to, ko esam ieprogrammējuši, tikpat vienkārši kā zināt viena vārda pareizu atvasinājumu, tas ir, visu, ko tas ietver, palīdz mums veikt efektīvāku darbu.

Mēs ceram, ka jums patiks šis raksts un uzzināsit, kas ir polimorfisms objektorientētā programmēšanā. Ja vēlaties izlasīt vēl vienu mūsu rakstu par programmēšanu, iesakām apmeklēt šo rakstu, kas mums sniedz ļoti labi zināmu programmēšanas veidu datora pasaulē: C ++ programmēšana.


Atstājiet savu komentāru

Jūsu e-pasta adrese netiks publicēta. Obligātie lauki ir atzīmēti ar *

*

*

  1. Atbildīgs par datiem: Actualidad emuārs
  2. Datu mērķis: SPAM kontrole, komentāru pārvaldība.
  3. Legitimācija: jūsu piekrišana
  4. Datu paziņošana: Dati netiks paziņoti trešām personām, izņemot juridiskus pienākumus.
  5. Datu glabāšana: datu bāze, ko mitina Occentus Networks (ES)
  6. Tiesības: jebkurā laikā varat ierobežot, atjaunot un dzēst savu informāciju.