Polimorfisme en programació orientada a objectes

Vols saber que és el Polimorfisme? En el següent article, et donarem una detallada informació sobre el que és l'anomenat Polimorfisme en programació orientada a objectes.

poliformismo-en-programació-orientada-objectes-1

Polimorfisme en programació orientada a objectes

Encara que pugui semblar una paraula amb una descripció una mica complexa, realment aquest tipus de tema relacionat a la informàtica es relaciona a aspectes totalment bàsics de la mateixa. Quan s'aprèn Programació Orientada a Objectes, Podem topar-nos amb aquesta descripció, el significat és senzillament la descripció de múltiples i possibles estats d'una única propietat.

Per a la informàtica, és una de les propietats fonamentals per a la programació orientada a objectes i és també una tècnica utilitzada per virus informàtics o cucs per modificar parts del seu codi dificultant la seva detecció. això pot facilitar molt les coses a l'hora de programar alguna cosa quan no volem ser tan específics i necessitem alguna cosa més funcional que s'adapti a una manera més àmplia de treballar, que ens redueixi la feina i ens ajudi a poder gestionar una mica més dinàmic i flexible.

Abans de saltar directe a l'gra estarem explicant alguns conceptes i desglossant definicions que ens serviran com obreboca, No només per entendre-ho millor, sinó per entendre el seu funcionament, la seva importància, i l'útil que ens pot ser en el camp de la informàtica, ajudant-nos a relaxar el nostre treball. Possiblement no trobarem res de nou abans de saltar directament a l'polimorfisme en programació orientada a objectes, però és important tenir tot el següent en compte per poder comprendre apropiadament.

El concepte de polimorfisme en programació orientada a objectes té el seu origen en el Simula 67, el qual és un llenguatge de programació, fet per a realitzar simulacions. Això va ser creat per Ole Joha Dahl i Kristen Nygaard qui pertanyien a centre de còmput noruec a Oslo.

Aquest centre es dedicava a la simulació de naus, hi va haver molta confusió per l'explosió per la diferències entre unes i altres, quan aquestes naus van ser agrupades per la seva respectiva classificació per generar més control a l'hora de fer els estudis va ser llavors quan aquesta idea va sortir a flotació.

Aquest estil de programació en els anys 80 's predominava en gairebé tots els àmbits de la informàtica per la seva gran atribució amb C ++ que és un altre llenguatge de programació C. Gràcies a les interfícies gràfiques d'usuari la dominació d'aquest mètode va funcionar molt bé.

El polimorfisme en programació orientat a objectes posseeix diverses característiques, les quals van ser aplicades en diferents llenguatges que es feien servir en aquesta època com el són: Ada, BASIC, LISP, Pascal, entre molts altres, encara que aquests van desenvolupar diversos problemes de compatibilitat.

Per a una explicació més detallada sobre el que és el Polimorfisme en programació orientada a objectes, et convidem a veure el següent vídeo:

El Polimorfisme i l'Herència

El prefix poli té el seu origen en el grec pel que la seva descripció exacta vol dir abundància, molts o varietat, i morfisme és un sufix grec que entra en la formació de paraules amb el significat de forma, composició, o estructura d'un cos. Tenint en compte això, podem endinsar-nos en el que volem explicar en aquest fragment, la nostra paraula protagonista és bàsicament per definició una varietat formada per l'estructura d'un cos; en diversos camps de les matemàtiques, es diuen morfismes a les aplicacions entre estructures matemàtiques que preserven l'estructura interna.

Per poder deixar això completament clar, podem comparar polimorfisme i herència. És a dir que això ens permet duu a terme els polimorfisme en jerarquies de classificació. és important a més esmentar que aquests es donen a través d'herència, sempre que, l'herència, que podríem entendre com derivats d'un objecte, sempre pertanyi a la mateixa classe; per posar un exemple del que s'ha explicat, podem dir que de la paraula vehicle, es desprenen diverses classes, com ho seria un acte, una moto, i un autobús, veient d'aquesta manera, el polimorfisme i l'herència són dos conceptes innegablement lligats.

La importància de l'Sistema de Tipus a l'Polimorfisme

Nomenant a aquesta classificació com a sistema de tipus, perquè els derivats d'aquesta paraula segueixen formant part d'elles, però Per què és aquest important en el polimorfisme en programació orientada a objectes ?.

Moltes de les persones que van entrar en aquest article, podrien estar familiaritzats amb el que és programar en llenguatges feblement tipats, com ho seria en el cas de Javascript i PHP, de totes maneres és important que entenguem bé com és.

En aquest tipus de llenguatges, a l'definir una variable, sempre hem d'assenyalar el tipus que volem que contingui aquesta variable, per exemple: int miNumero.

D'aquesta manera tenim la possibilitat d'indicar que la variable establerta com «miNumero» sempre contindrà un nombre enter; de ser un altre el cas, el compilador ens llançaria un missatge d'error obstaculizándonos la possibilitat de compilar el programa que hàgim realitzat.

De fet això també pot passar-nos amb els objectes, si en Java definim la classe «llargmetratge», coneixent està paraula com una pel·lícula cinematogràfica de durada superior a una hora, quan vam crear objectes de la classe «llargmetratge» hem d'assenyalar les variables en què s'indiqui el tipus d'objecte que es pretén que realitzi. Podem expressar-ho d'aquesta manera:

Llargmetratge miLargo = new llargmetratge

La nostra variable vindria sent «miLargo» i exposant això, tindrem una referència a un objecte de la classe o dels tipus de «llargmetratge», i mentre que duri sempre haurà de tenir qualsevol objecte de la mateixa classe o tipus, dit això és important conèixer llavors que no es pot guardar un sencer en la variable, o algun altre objecte d'un altre tipus o classe, que no sigui herència i que no tingui cap relació.

Si tornem a esmentar l'exemple dels vehicles i els seus tipus, és important aclarir que si decidim definir una variable que apunti cap a l'objecte de classe «moto», mentre està variable duri, sempre haurà d'apuntar a un objecte relacionat o d'herència a la classe «moto», no a la classe «cotxe», ni «bus»; però, en els llenguatges feblement tripados com els que hem esmentat anteriorment, no existeix aquesta inflexibilitat, encara que sigui una característica habitual dels llenguatges com Java que són fortament tripados. A continuació oferirem un exemple més ampli:

  • Cotxe miCoche = new Cotxe (Mazda 2 "): Mazda 2 vindria sent la nostra herència de l'objecte pertanyent a aquesta classe o tipus, i és a què la variable apunta, i si així ho volguéssim demà podria apuntar cap a un altre objecte de miCotxe.

MiCoche = new Cotxe (Ford Focus 2.0 ")

El que mai podrem fer és emmagatzemar en la nostra variable establerta com de classe Cotxe, una altra cosa que no tingui cap relació amb el tipus Cotxe, perquè llavors tindríem un error en temps de compilació, en cas que passi, hi ha d'haver guardat New Cotxe Ford Focus 2.0 haguéssim escollit New Moto Yamaha YBR.

S'ha d'aclarir que en aquest punt no estem parlant de polimorfisme com a tal encara, sinó que estem temptejant la programació en general amb el sistema de tipus; l'assumpte és que hem d'obrir les nostres ments a les complicacions que pot donar-nos la restricció de llenguatges fortament tripados per després comprendre perquè el polimorfisme és important i una peça clau en el polimorfisme en programació orientada a objectes.

En una llengua informàtic totalment tipat quan es manifesta una funció, sempre hem de mantenir com a punt d'importància que a l'informar el tipus de normes que rebrà. A la funció que hàgim establert, no li podrem passar com a normes altra cosa que no siguin variables o literals amb valors de nombre sencer, si se'ns ocorre passar altres dades amb altres tipus el compilador es va a alterar, no ens deixarà compilar el programa perquè en aquest cas no podria trobar els tipus esperats en els paràmetres de la funció.

moto-auto-1

Polimorfisme en objectes

Finalment hem arribat a la part que realment puntualitza aquest tema d'interès, és per això que sota aquest sistema s'efectuaran elements propis que manifestin les classes i objectius de la mateixa, tal qual funcionen els llenguatges fortament tipats, un variable sempre ha de apuntar a un objecte de la classe que indiquem a el moment en què ho vam establir.

Això és una cosa indispensable de recordar, ara, una funció el paràmetre s'hagi declarat d'una classe, només ens acceptarà rebre objectes d'aquesta classe; un array que s'hagi declarat que és d'elements d'un tipus determinat només ens permetrà omplir polleguera amb objectes d'aquest tipus que vam establir; presentarem un altre exemple:

Vehicle [] misVehiculos = new Vehicle [3]

Aquest exemple estem donant, és una variable que és un array i en la mateixa declarem que el contingut de les caselles seran objectes de la classe Vehicle, en llenguatge fortament tripado només podrà contenir objectes de la classe vehicle, com ja havíem explicat, però ara ens trobem amb el polimorfisme, amb el qual podem donar-li una mica més de flexibilitat a el sistema de tipus, donant-nos l'oportunitat que una variable també ens accepti objectes de la classe «filles» o derivades.

A l'fer a el sistema de tipus més flexible no estem parlant d'en la seva totalitat, sinó amb el que tindria a veure amb les classificacions d'herència que tinguem en els nostres sistemes de classes o tipus. Si aconseguim definir una matriu usant caselles d'una classe establerta, el compilador ens acceptaria inserir en aquestes caselles paraules «filles» d'aquest objecte que ja havíem establert, si establim que una funció rep com a paràmetres objectes d'alguna classe, el compilador ens permetrà que li enviem la invocació d'objectes d'una classe derivada d'aquella que ja havíem declarat.

Portant-ho a alguna cosa més concret, el nostre array de vehicle no només ens permetrà inserir vehicles genèrics al seu variable, sinó també tots els objectes de les classes filles o derivades d'aquesta classe, llavors tindríem objectes de la classe bus, cotxe i moto o qualsevol filla que hàgim definit, i tot això gràcies a l'polimorfisme.

Aplicant el Polimorfisme

Tot i l'explicació que li havíem donat a llargmetratge, volem aclarir que a més de ser una pel·lícula, podem també tenir documentals, i entre altres; potser tots dos tenen diferents característiques, diferents horaris d'audiència, diferents preus i per això vam poder haver decidit que la nostra classe llargmetratge tingui classes filles o herències com «pel·lícula» o «documental».

Si vam crear una classe establerta com Cinema i un mètode a què anomenarem «reproduir», ens servirà com a paràmetre per allò que volem reproduir en una sala de cinema, on podran arribem objectes tant de la classe cinema com de la classe documental, si comprenem bé el sistema de tipus (sense encara entrar a polimorfisme) els nostres mètodes van a establir els tipus dels paràmetres que rebem. Es veuria alguna cosa com això:

  • Reproduir (pel·lícula películaParaReproducir)

Però en canvi si volem reproduir un documental hauríem de canviar la nostra fórmula.

  • Reproduir (Documental documentalParaReproducir)

¿I és realment necessari crear dues fórmules diferents? Tots dos mètodes per reproduir les dues coses serien exactament els mateixos, Per què molestar? Només hauríem de posar el llargmetratge en el reproductor, donar-li a reproduir (o play) i crear un registre amb la quantitat d'entrades que van aconseguir ser venudes. Encara que no ens suposi una molèstia fer tots dos mètodes, hem d'estar conscients que se'ns pot presentar la situació en què haguem de crear una altra fórmula, podríem posar l'exemple que tinguem una pel·lícula, però aquesta vegada en format 3D.

Ja arribats a aquest punt, podem recórrer a l'polimorfisme, amb la seva ajuda podrem crear un mètode de reproduir que ens reconeixerà tot tipus d'elements, documentals, pel·lícules o qualsevol altra cosa de la mateixa classe (que tingui relació), que necessitem crear al futur. El que ens estarien permetent els llenguatges, és establir el mètode reproduir indicant que el paràmetre de la classe que rebrem és un objecte de tipus llargmetratge, però el llenguatge i el compilador ens estarien acceptant qualsevol objecte derivat de pel·lícula o documental, quedaríem amb alguna cosa com això: reproduir (Llargmetratge elementoParaReproducir).

Ja sigui que vulguem crear pel·lícules o documentals per reproduir-los, tot això serà possible amb un sol mètode, el de reproduir, gràcies al fet que pel polimorfisme en programació orientada a objectes flexibilitzem el sistema, no caldrà. Per exemple, si vols reproduir una pel·lícula i no un documental, no ens veurem en la necessitat de seleccionar la classe Cinema, sinó que només n'hi ha prou que el que vulguem reproduir formi part de l'herència de l'objecte llargmetratge.

Si ens tornem a l'exemple de el vehicle, tot i tenir en ment la utilitat de l'polimorfisme i les possibilitats que ens brinda per reduir tot el manteniment dels programes informàtics que hauríem de fer de no tenir l'ajuda d'aquest concepte.

Diguem que tenim la classe Aparcament (en espanyol seria la classe per aprendre a estacionar) dins de la qual tenim la funció d'estacionar. En un estacionament tenim la possibilitat d'estacionar autobusos i motos, a més de solament cotxes, i sense polimorfisme hauríem de crear un mètode que ens permeti estacionar objectes de tipus «cotxe» i un altre que ens permeti estacionar objectes de tipus «autobús» i un altre que ens permeti estacionar objectes de tipus «moto», tot i que el procediment per a realitzar aquestes accions tot i la notable diferència entre les aparences d'aquests tres vehicles és bàsicament la mateixa, només que un ocupa més espai que l'altre.

El més precís seria tenir un sol mètode que ens simplifiqui les coses i ens permeti rebre tot tipus de vehicles, no només cotxes i marca de cotxes, sinó tots els derivats acceptats i preciosos de l'objecte vehicle. Primer tindríem la reutilització de el codi, perquè com ja havíem dit, estacionar aquests tipus de vehicles és semblant amb l'única diferència l'espai que ocupa cada un, però a més d'això, si demà sortís a la venda en el mercat algun altre tipus de vehicle , tindríem la possibilitat que el nostre programari sigui capaç d'acceptar-sense cap necessitat de modificar la nostra classe ja establerta Aparcament.

Tenim a la disposició d'un sol mètode l'acceptació de totes les herències precises que pugui tenir vehicle, flexibilitzant la feina i estalviant-nos el temps que ens hauríem gastat creant un per a cada tipus de vehicle. El polimorfisme en programació orientada a objectes ens obre les portes a una gamma d'objectes que poden ser acceptades per un sol mètode.

Intentem explicar de la manera més comprensible el polimorfisme i fer una revisió àmplia de tot el que hi ha darrere d'ell mateix, no hauria estat adequat saltar d'una vegada a l'concepte com a tal sense proveir els seus antecedents per ajudar-nos a entendre-ho ia entendre la seva resaltante importància i el ús que podem donar-li.

Tenir la possibilitat de poder englobar diversos mètodes en un de sol, mentre les derivacions concordin com a herència de l'objecte, és força útil perquè ens estalvia la necessitat d'haver de crear diversos obligant-nos a ser molt específics sense donar-nos la possibilitat de fer un treball més flexible en el que puguem crear una manera més dinàmica de manejar el que hàgim programat, tan simple com saber la derivació correcta d'una sola paraula, és a dir, tot el que engloba, ens ajuda a fer un treball més eficaç.

Esperem gaudiràs aquest article i aprenguessis que és el polimorfisme en programació orientada a objectes. Si vols llegir un altre dels nostres articles sobre programació, et recomanem visitar el següent que ens brinda una forma de programació molt coneguda en el món de la informàtica: Programació C ++.