Polimorfismo en Java. Aprendiendo a utilizar la clase Number.

Por descargarpseint / hace 6 meses / 0 Comentarios ».

En el capitulo de hoy quiero ayudarte a comprender que es el polimorfismo en java. Como en cada uno de los artículos pertenecientes al curso Tutorial en Java Programando una calculadora paso a paso quiero hacerlo desde la práctica, esfuerzo y compromiso por tu parte y, por supuesto, introduciendo la teoría estrictamente necesaria. A partir de algunosn ejercicios irás viendo todo el potencial de la clase Number y como podemos aprovechar su naturaleza de clase abstracta. ¿Deseas aprender a utilizar la clase Number?

Ejercicio 1: Vas a definir un método privado (utilizando la palabra reservada private) llamando trabajandoConNumbers() y dentro de el programarás las siguientes líneas de código.

Number entero = new Integer(10);

Number enteroLargo = new Long(10);

enteroLargo = entero;

entero = enteroLargo;

entero = (Integer)enteroLargo;

En las dos primeras líneas has declarado dos variables de tipo Number y les has dado el valor número 10 envuelto en las clases wrapper Integer y Long. Quizás te estés preguntando como no ha fallado la asignación y la respuesta es que tanto Integer como Long extienden de Number (heredan atributos y métodos).

Si estás pensado en crear objetos Number directamente tengo que decirte que esto no es posible ya que Number forma parte de las clases abstractas en java.

En la tercera línea intentas asignar a un Long un Integer y funciona. Pero, ¿no vimos en el anterior capítulo que esto no era posible?. Directamente no lo es, sin embargo, si es posible hacerlo a través de la clase padre de ambas, Number.

Supongo que empiezas a entender la enorme potencia que Number nos va a proporcionar para poder programar una calculadora que trate tanto enteros como reales. Esto vendrá en próximos artículos, por ahora sigue concentrado porque con estos ejemplos vas a entender mucho sobre herencia y polimorfismo.

Las líneas cuatro y cinco funcionan perfectamente también. Nuevamente la razón es porque ambas variables son del mismo tipo aunque apunten a tipos distintos. Esto que te acabo de explicar forma parte del concepto que titula este capítulo. Te estoy hablando de polimorfismo en java. Una variable puede tomar diferentes formas durante su ciclo de vida. Una variable Number puede ser un Integer, pero también un Long, Float, Double o BigDecimal porque todas estas clases heredan de ella.

Number real = new Float(10.8f);

enteroLargo = real;

enteroLargo = (Float)real;

//Vamos a crear una lista de numeros.

List listaDeNumeros = new ArrayList();

listaDeNumeros.add(entero);

listaDeNumeros.add(enteroLargo);

listaDeNumeros.add(real);

Si programas las tres primeras líneas comprobarás que compilan y la razón es la misma que en los casos anteriores. Un Float también es un Number, lo mismo que un Long.

El siguiente bloque de código te va a permitir declarar una lista de números guardando dentro de ella los tres números que has definido en el ejercicio. La razón de que la lista acepte a todos los números es porque Number también extiende de Object, lo que significa que en la lista que has declarado listaDeNumeros podrías meter cualquier cosa, por ejemplo un String. Prueba  a declarar una variable String e intenta añadirla a la lista.

¿Qué es el polimorfismo en java?.

Ya has podido ver una característica muy importante de una variable polimórfica y es su capacidad para apuntar a objetos de diferentes clases. El ejemplo de Number, Integer y Float.

Ahora quiero que entiendas las ventajas que esto puede ofrecerte a la hora de programar y para ello voy a ofrecerte un ejemplo muy claro.

Ejercicio 2: Vas a crear una clase llamada PolimorfismoEnJava dentro del proyecto Tutorial-Number. Después declararás una clase abstracta Numero y dos clases hijas Entero y Real.

Para abreviar el ejemplo vas a declarar todas las clases dentro del fichero PolimorfismoEnJava.java. El lenguaje permite esto siempre y cuando solo exista una declaración de clase pública dentro del fichero.

/**

* Declaración de la clase abstracta Numero.

*

* @author Sergio * */abstract class Numero{

abstract String soy();

}

La palabra reservada abstract es la que nos proporciona java para indicarle que esta clase será abstracta, es decir, que no podrás existir instancias u objetos de dicha clase en memoria.

Además has definido un método, también abstracto, que será responsable de preguntarle a la clase quien es. Este ejemplo es poco realista, lo se, pero me sirve muy bien para que entiendas que es el polimorfismo y así puedas aplicarlo con soltura cuando implementemos la calculadora.

Ahora es el momento de definir dos clases hijas que extiendan de Numero y que serán las responsables de implementar el método soy.

class Entero extends Numero{

String soy() {
 // TODO Auto-generated method stub
 return "Entero";
 }

}

class Real extends Numero{

String soy() {
 // TODO Auto-generated method stub
 return "Real";
 }

}

Mientras programabas las clases Entero y Real habrás visto que el compilador se quejaba hasta que has terminado de implementar el método soy. Este comportamiento se debe al hecho de que dicho método sea abstracto.

Cuando una clase está definiendo un método abstracto, está mandándole dos mensajes muy claros al compilador de java. El primero es que ella no va a implementar ese método. Segundo, que las clases que extiendan de ella estarán obligadas a hacerlo si desean que se puedan crear objetos a partir de ellas.

Ahora que ya has programado la jerarquía de clases es el momento de que veas el polimorfismo en acción. ¿Cómo?, te lo muestro a continuación, sin embargo, vuelvo a recordarte que es muy importante que programes línea a línea y no caigas en la tentación de copiar y pegar. (Se que es mas lento y pesado pero estás aprendiendo y el tiempo invertido es el precio fundamental que vas a tener que pagar)

public static void main(String[] args) {
 Numero numero = new Entero();

System.out.println(numero.soy());

numero = new Real();

System.out.println(numero.soy());

}

Si compilas y ejecutas este trozo de código comprobarás que funciona y que nuestra dos mensajes por pantalla. La misma variable numero llamando al mismo método soy da como resultado dos comportamientos distintos (Entero y Real). Esto es el polimorfismo en java.

Hasta aquí este artículo y también el capítulo introductorio de la herencia y el polimorfismo. Espero que tengas los conceptos mucho mas claros porque los siguientes pasos a seguir, dentro de la programación de la calculadora, explotarán estos conceptos.

¿Te sientes preparado para explotar toda la potencia del polimorfismo en java?

Ver: Pseint Portable

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *