Actualizaciones

Unidad 7 - Excepciones.EXAMEN PROXIMA SEMANA (VIERNES 21 DE MAYO 2010)
Para comprender mejor este tema es necesario leer de distintas fuentes,
te recomiendo leer en las diversas fuentes recomendadas en la sección de la bibliografia en el avance programático que te entregue al inicio del curso.

Nota: Hay varios ejemplares del Libro "Como Programar en Java " de Deitel esta disponible en la biblioteca.

- Actualizado el Sabado 15 de Mayo del 2010 -

lunes, 19 de abril de 2010

Unidad 6 > Polimorfismo y Reutilización

POLIMORFISMO
Conceptos

Ahora continuaremos nuestro estudio de la programación orientada a objetos, explicando y demostrando el polimorfismo con el uso de las jerarquias de herencia. El polimorfismo nos permite "programar de forma general", en vez de "programar de forma especifica". En especial, nos permite escribir programas que procesen objetos que compartan la misma superclase en una jerarquia de clases, como si todos fueran objetos de la superclase; esto puede simplificar la programación.

Con el polimorfismo podemos diseñar e implementar sistemas que puedan extenderse con facilidad; pueden agregarse nuevas clases con sólo modificar un poco (o nada) las porciones generales de la aplicación, siempre y cuando las nuevas clases sean parte de la jerarquía de herencia que la aplicación procesa en forma genérica. Las únicas partes de un programa que deben alterarse para dar cabida a las nuevas clases son las que requieren un conocimiento directo de las nuevas clases que el programador agregará a la jerarquía. Por ejemplo, si extendemos la clase Animal para crear la clase Tortuga (que podría responder a un mensaje mover) caminando una pulgada), necesitamos escribir sólo la clase Tortuga y la parte de la simulación que crea una instancia de un objeto Tortuga. Las porciones de la simulación que procesan a cada Animal en forma genérica pueden permanecer iguales.

El polimorfismo, desde un punto de vista de orientación a objetos, permite que clases de diferentes tipos puedan ser referenciadas por una misma variable. En el siguiente ejemplo, una instancia de la clase Figura (MiFigura) podrá referenciar a
propiedades y métodos implementados en las clases Circulo y Rectángulo.



Pongamos como ejemplo que las clases Circulo y Rectangulo implementan
un método llamado Perimetro que calcula el perímetro de la figura geométrica:



La referencia MiFigura (de tipo Figura) podrá invocar al método Perimetro de la clase Circulo o al método Perimetro de la clase Rectangulo , dependiendo de, si en tiempo de ejecución, está referenciando a una instancia de la clase Circulo o está
referenciando a una instancia de la clase Rectangulo.
Es importante resaltar que la determinación del método Perimetro que se va a invocar (el de la clase Circulo o el de la clase Rectangulo ) no se realiza en la compilación, sino en tiempo de ejecución, lo que hace del polimorfismo un mecanismo de programación muy potente.
Para entender mejor la utilidad del polimorfismo, pongamos un ejemplo en el que su utilización es adecuada: supongamos que estamos realizando un editor gráfico en el que el usuario puede dibujar figuras geométricas bidimensionales tales como círculos, rectángulos, pentágonos, triángulos, etc. Además, dentro de las opciones de la herramienta, existe un botón que al ser pulsado nos muestra en una ventana el valor del perímetro de la figura seleccionada.
Nosotros no conocemos a priori las figuras que el usuario dibujará, eso es algo que ocurre en tiempo de ejecución, al igual que no podemos saber por adelantado de qué figura o figuras solicitará conocer el perímetro. En un momento dado, mientras un usuario utiliza el editor gráfico, existirá una estructura de datos que contendrá las figuras dibujadas:




El vector MiFigura contendrá referencias a objetos de tipo Figura (Figura[]MiFigura = new Figura[100]). Según el usuario, en tiempo de ejecución, seleccione una figura geométrica u otra se invocará a un método Perimetro u otro. Esto es posible gracias al polimorfismo.

El polimorfismo, en Java, debe implementarse respetando a las siguientes reglas:

· La invocación a un método de un subclase debe realizarse a través de
una referencia a la superclase; es decir,
es adecuado poner p = LaFigura.Perimetro(), pero no p = ElCirculo.Perimetro().

· El método llamado debe ser también un miembro de la superclase; en nuestro
ejemplo, el método Perimetro debe existir también en la clase Figura.

· La firma del método debe ser igual en la superclase que en las clases derivadas;
es decir, el nombre del método y el número y tipos de sus parámetros debe ser
igual en las clases Figura, Circulo, Rectangulo, etc.

· El tipo de retorno del método (que se utilizará de forma polimórfica)
debe ser igual en la superclase que en las subclases.

· El atributo de acceso del método no debe ser más restrictivo en las clases
derivadas que en la superclase.

.

No hay comentarios:

Publicar un comentario