top of page

Polimorfismo: El viejo desconocido.

  • Foto del escritor: Federico Machado
    Federico Machado
  • 13 feb
  • 2 Min. de lectura

Cuando me toca entrevistar gente para Java Senior, una de las preguntas que más me gusta hacer para romper el hielo es: ¿Qué es el polimorfismo? Siento que es un concepto que muchos tienen por asumido que entienden y conocen, pero a la hora de la verdad me ha sorprendido escuchar como gente con muchos años de experiencia, flaquea al contestar esta pregunta de un concepto que me parece un pilar fundamental de la programación orientada a objetos. ¿Sabías que por ejemplo, hay dos tipos de polimorfismo? Dependiendo de dónde vengas y cómo te hayas instruido, es posible que respondas a esta pregunta de manera diferente.


La primera definición se refiere al polimorfismo estático, que trata del comportamiento en tiempo de compilación a la hora de definir métodos, en función de los parámetros de estos. Es también a veces definido como sobrecarga de métodos. Todos los métodos tienen el mismo nombre pero tienen diferentes tipos de parámetros o diferentes cantidades de parámetros. Un ejemplo clásico de este comportamiento es un método sumar(int x, int y) y un método sumar(double x, double y).


La otra definición es aquella del polimorfismo dinámico, y es a la que apunto que respondan en las entrevistas. Se trata de una manera de redefinir comportamientos a través de herencia para ahorrar código y mantenerlo lo más desacoplado posible. Otro de los ejemplos clásicos que trata de explicar este concepto es el tener una clase FiguraGeométrica, con un método que se llame public abstract int calcularArea(). Que deberá ser implementado por quienes extiendan esta clase. Es de este modo que en la clase triángulo tenemos public int calcularArea() que devuelve la base por la altura dividido dos, y en la clase rectángulo tenemos que este método devuelve la base por la altura. Si estamos recorriendo una lista de FiguraGeómetrica, a la hora de llamar el calcularArea(), se llamará al método de la clase concreta (Ya sea triángulo o rectángulo) con la implementación que definimos. Este concepto nos ayuda mucho a mejorar el desacoplamiento y la modificabilidad del código, ya que si en el futuro quiero agregar una nueva figura geométrica, no voy a tener que agregar ifs para que dependiendo de la clase que agrego, haga una cosa u otra, si no que todo se va a ejecutar polimórficamente en función de la clase concreta.


Generalmente si en nuestro código tenemos un switch o varios ifs preguntando si nuestra variable es una instancia de cierta clase (Utilizando por ejemplo instanceof) , quizás deberíamos replantearnos nuestra solución para utilizar polimorfismo dinámico. ¿Les ha pasado que han tenido que usar polimorfismo para hacer más manejable el código?


 
 
 

21 Comments


annu243kumari
hace 12 horas

https://conifer.rhizome.org/AQUIRE02

https://greenbusinesses.com/author/aquire02/

https://doodleordie.com/profile/aquire02

https://ca-riverside-acr.publicaccessnow.com/ActivityFeed/MyProfile/tabid/24/UserId/28853/Default.aspx

https://fairygodboss.com/users/profile/3YrRQp06kq/AQUIRE02

https://forum.codeigniter.com/member.php?action=profile&uid=186570

https://bitbucket.org/aquire02/workspace/projects/

https://public.tableau.com/app/profile/auto.nexa/vizzes

https://devpost.com/chiku3318

https://www.beatstars.com/aquire02

https://mikropragmata.lifo.gr/meli/52361/

https://minne.com/@aquire02/profile

https://www.devglan.com/user/public/chiku33180

https://secondstreet.ru/profile/aquire02/

https://os.mbed.com/users/aquire02/

https://ukrainaincognita.com/wp-admin/profile.php

https://interestpin.com.au/user/aquire02/

https://employbahamians.com/author/aquire02/

https://youtopiaproject.com/author/aquire02/

https://laloidesparties.fr/author/aquire02

https://eternagame.org/players/539210

https://www.giveawayoftheday.com/forums/profile/1133188

https://bioimagingcore.be/q2a/user/AQUIRE02

ko-fi.com/aquire02

https://glose.com/u/AQUIRE02

https://willysforsale.com/author/aquire02/

https://scioly.org/forums/memberlist.php?mode=viewprofile&u=159999

https://villatheme.com/supports/users/aquire02/

https://www.worldanvil.com/author/AQUIRE02

https://1businessworld.com/pro/aquire02/

https://heavenarticle.com/author/aquire02-390016/

https://groover.co/en/band/profile/0.aquire02/

https://thegroundsman.com.au/author/aquire02/

https://www.webmastersun.com/members/aquire02.136653/#about

https://www.thebostoncalendar.com/user/118238

https://maltajobs.com.mt/author/aquire02/

https://answers.themler.io/users/aquire02

https://www.thelascopress.com/author/AQUIRE02/

https://answers.themler.io/users/AQUIRE02

https://dojour.us/u/AQUIRE02

https://thedyrt.com/member/aquire02/reviews

https://en.meetmygoods.com/user/favorite_products/AQUIRE02

https://www.1001fonts.com/users/AQUIRE02/

https://referrallist.com/profile/-auto-nexa/

https://git.forum.ircam.fr/chiku3318

https://coolors.co/u/aquire02

https://reactos.org/roslogin/?p=selfservice

https://peopleimages.com/profile/view/116956

Like




bottom of page