Herencia y Polimorfismo

Cuando hablamos de herencia, nos referimos a que una sub clase deriva de una clase superior adoptando todos los atributos y métodos de la súper clase.

Herencia

La herencia consiste en hacer uso de los atributos o métodos de una clase dentro de otra como si le perteneciera a este mismo. Esto se podría dar en un caso muy exclusivo para poder ahorrar proceso y código a implementar. Por ejemplo podría ser para una serie de empleados que ocupen diferentes cargos pero tienen atributos en común como el nombre, apellido, DNI, etc. Lo cual sería conveniente usar la herencia juntando los datos en común en una misma clase y distribuir clases independientes para los demás datos de los empleados.

Herencias es un pilar muy útil en java como podemos ver para hacértelo más simple te diré otro ejemplo más sutil:

Nuestros padres tienen sus vienes raíces que han construido con el paso del tiempo, claro es posible que ellos tenga sus hijos los cuales ellos serán los herederos de todo lo que tiene papá, adquiriendo así sus genes y dinero (en java heredaríamos sus atributos y métodos).

herencia1 herencia2 Ahora vamos a ver como es la sintaxis para definir las super clases (padre) y las sub clases (hija). Cuando vamos a definir una sub clase nuestro código sera así; herencia3

Extends, es una de las palabras reservadas de java la cual sera la que siempre utilizaras para relacionar y decir cual sera la clase padre (super-clase) que quieres que tome o herede todos sus atributos e métodos.

Al, hija extender de padre obtiene todos sus atributos y métodos y ten en cuenta que una sub clase no hereda sus constructores si quieres tenerlos tienes que hacer uso de esta palabra reservada en java “Super” que se encarga de decir que vamos a utilizar el constructor de la super clase y también tiene como utilidad cuando vamos a redefinir un método, para mayor entendimiento te lo ilustrare.

Extends, es una de las palabras reservadas de java la cual sera la que siempre utilizaras para relacionar y decir cual sera la clase padre (super-clase) que quieres que tome o herede todos sus atributos e métodos.

Al, hija extender de padre obtiene todos sus atributos y métodos y ten en cuenta que una sub clase no hereda sus constructores si quieres tenerlos tienes que hacer uso de esta palabra reservada en java “Super” que se encarga de decir que vamos a utilizar el constructor de la super clase y también tiene como utilidad cuando vamos a redefinir un método, para mayor entendimiento te lo ilustrare.

herencia4

herencia5

herencia6

Acá hemos evidenciado la funcionalidad de la palabra super.

Bueno ahora te contara algo que tiene java, es que desde que creamos un proyecto para nuestro aplicativo ya estamos presenciando lo de herencia, “como así!” pues es por que todo lo que realizamos en java y todas las super clase y sub clases que establezcamos nosotros como programadores, tenemos que saber que la clase principal (super clase), esta preestablecida por java es object, no la definimos nosotros ni nada pero ya esta incorporada y con todos sus métodos, es algo básico y útil conocer de ella.

Mira la herencia es una de las maravillas y fuerte de la programación orientada a objetos por su alta utilidad y beneficio que tiene para nuestro desarrollo como programadores, a continuación les enseñare otro ejemplo de herencia utilizando el super para que lo repasemos y lo tengamos mas claro (como llamar los construtores del padre).

herencia7 herencia8

Observas que la clase Taxi e Autobús heredan los atributos y métodos de la super-clase Vehículo, así que gracias a la super clase se ahorrara la necesidad de volver a implementar o copiar el código, solo sera necesario implementar los atributos que complementan a las sub clases, como numeroLinecia(); de taxi y numero Plazas(); .

herencia9

Observa los modificadores de acceso para que hagas uso de ellos adecuadamente según las necesidades de la aplicación que estés realizando;

Modificador Clase Package Subclase Todos
Public Si
Protected No
No especificado No No
Private No No No

Polimorfismo El Polimorfismo es uno de los 4 pilares de la programación orientada a objetos (POO) junto con la Abstracción, Encapsulación y Herencia. Para entender que es el polimorfismo es muy importante que tengáis bastante claro el concepto de la Herencia. Consiste en la posibilidad de tener métodos con el mismo nombre en distintas clases. Al hablar de métodos en distintas clases nos estamos refiriendo a métodos distintos y por tanto con comportamientos distintos a pesar de que tengan el mismo nombre. El polimorfismo permite poder enviar un mismo mensaje (recordemos que un mensaje es una invocación a un método) a objetos de clases diferentes. Estos objetos recibirán el mismo mensaje pero responderán a él de formas diferentes. Por ejemplo, un mensaje “+” para un objeto entero significaría una suma, mientras que para un objeto String (cadena de caracteres) significaría la concatenación.

Este tutorial ha sido realizado con la ayuda del estudiante Andres Felipe Vásquez.

Referencias

Copyrights © 2018 Sebastian Gomez. All Rights Reserved.

Sobre mí

sebastianMi nombre es Sebastián Gómez, soy ingeniero de sistemas e Informática y Magister en Ingeniería de Sistemas de la Universidad Nacional de Colombia.

Actualmente trabajo en Globant como Web UI Developer con énfasis en aplicaciones híbridas y cross compiladas. Soy el organizador del Google Developers Group de Medellín, así que contactame si quieres dar alguna charla o participar actuamente de esta comunidad.

He participado en una Startup Colombiana llamada SponzorMe al lado de Carlos Rojas y fuí participante de Startup Chile a pesar de no haber continuado con esta startup me apasiona el emprendimiento y me gusta aconsejar y ayudar startups como mentor técnico. También he trabajado en empresas Americanas como StudioHyperset en Estados Unidos y para Measured Medium. Mi interés y mi experiencia es el desarrollo de web y móvil full stack como Front-end con Javascript. Me apasiona desarrollar software, escribir código y enseñar lo que aprendo día a día.

También he trabajado como profesor en diferentes universidades en Medellín Colombia, con tematicas relacionadas con la Inteligencia Artificial, Bases de datos, programación orientada a objetos, minería de datos, desarrollo de software, desarrollo móvil y desarrollo web.

Me encanta escribir código rápido y prototipar de una manera accelerada si quieres ver que hago día a día puedes darle un vistazo a mi codepen:  https://codepen.io/seagomezar/.

Todos los días trato de crear o participar en proyectos, la mayoría open source, así que puede chequear mi GitHub:  https://github.com/seagomezar.

Mi áreas de investigación académica son: Ingeniería de software, Ingeniería de requisitos, procesamiento del lenguaje natural, Ontologías, Bases De Datos,  Machine Learning, Seguimiento de trayectorias y Modelamiento matemático de formaciones.

Estas son algunas de mis publicaciones académicas mas recientes: