miércoles, 10 de noviembre de 2010

Abstracción y Polimorfismo

LABORATORIO DE LENGUAJES
JUEVES V1

Que tal Compañeros, les hablare un poco sobre la abstracción y polimorfismo y algunos ejemplos de ellos.

La abstracción consiste en aislar un elemento de su contexto o del resto de los elementos que lo acompañan. El término se refiere al énfasis en el "¿qué hace?" más que en el "¿cómo lo hace?".El común denominador en la evolución de los lenguajes de programación, desde los clásicos o imperativos hasta los orientados a objetos, ha sido el nivel de abstracción del que cada uno de ellos hace uso.

OTRO EJEMPLO DE ABSTRACCION:
La abstraccion es un metodo por el cual abstraemos, una determinada entidad de la realidad sus caracteristicas y funciones que desempeñan, estos son representados en clases por medio de atributos y metodos de dicha clase. Ejemplo:
Un ejemplo sencillo para comprender este concepto seria la abstraccion de un Automovil.
Vamos a sacar de estas entidad sus caracteristicas por ejemplo: color, año de fabricacion, modelo, etc. Y ahora sacamos sus metodos o funciones tipicas de esta entidad como por ejemplo: frenar, encender, etc. A esto se le llama abstracción.

Los lenguajes de programación son las herramientas mediante las cuales los diseñadores de lenguajes pueden implementar los modelos abstractos. La abstracción ofrecida por los lenguajes de programación se puede dividir en dos categorías: abstracción de datos y abstracción de control.

La abstracción encarada desde el punto de vista de la programación orientada a objetos expresa las características esenciales de un objeto, las cuales distinguen al objeto de los demás. Además de distinguir entre los objetos provee límites conceptuales.

SU USO:

Este Permite que dispongamos de las características de un objeto que necesitemos. Si necesitamos el objeto PERSONA, podríamos poner nombre, edad, dirección, estado civil, etc. Si lo necesitamos en un sistemabiología, dentro de sus atributos quizá tengamos, ADN, RND, Gen x1, Gen x2, etc. Y los atributos antes mencionados no sean requeridos. En general, podemos decir que PERSONA cuenta con todos los atributos mencionados aquí, pero, por el proceso de administrativo, pero, si lo requerimos para el área de abstracción excluimos todos aquellos, que no tiene cabida en nuestro sistema.


EJEMPLO EN JAVA:
Pensemos en una estructura de clases para manipular figuras geométricas. Podríamos pensar en tener una clase genérica, que podría llamarse FiguraGeometrica y una serie de clases que extienden a la anterior que podrían ser Circulo, Poligono, etc.
Podría haber un método dibujar dado que sobre todas las figuras puede llevarse a cabo esta acción, pero las operaciones concretas para llevarla a cabo dependen del tipo de figura en concreto (de su clase). Por otra parte la acción dibujar no tiene sentido para la clase genérica FiguraGeometrica, porque esta clase representa una abstracción del conjunto de figuras posibles.

Declaración e implementación de métodos abstractos

Siguiendo con el ejemplo del apartado anterior, se puede escribir:

La clase abstracta se declara simplemente con el modificador abstract en su declaración. Los métodos abstractos se declaran también con el mismo modificador, declarando el método pero sin implementarlo (sin el bloque de código encerrado entre {}).

  

Referencias y objetos abstractos

Se pueden crear referencias a clases abstractas como cualquier otra. No hay ningún problema en poner:
FiguraGeometrica figura;
Sin embargo una clase abstracta no se puede instanciar, es decir, no se pueden crear objetos de una clase abstracta. El compilador producirá un error si se intenta:
FiguraGeometrica figura = new FiguraGeometrica();
Esto es coherente dado que una clase abstracta no tiene completa su implementación y encaja bien con la idea de que algo abstracto no puede materializarse. 
Sin embargo utilizando el up-casting visto en el capítulo dedicado a la Herencia si se puede escribir:
FiguraGeometrica figura = new Circulo(. . .);
figura.dibujar();


POLIMORFISMO
Se refiere a la capacidad para que varias clases derivadas de una antecesora utilicen un mismo método de forma diferente.
Por ejemplo, podemos crear dos clases distintas: Pez y Ave que heredan de la superclase ANIMAL. La clase ANIMAL tiene el método abstracto mover que se implementa de forma distinta en cada una de las subclases (peces y aves se mueven de forma distinta).

EJEMPLO MÁS CLARO:
Este concepto se base en que podemos utilizar varios métodos con el mismo nombre y con diferente funcionalidad. Por ejemplo de la clase Vehículos tenemos el método frenar, y tenemos sus sub clases Automóvil y Motocicleta, ambos tienen el método frenar pero cada uno tiene una definición diferente para cada clase. A esto se le denomina polimorfismo.

Se puede clasificar el polimorfismo en dos grandes clases:
  • Polimorfismo dinámico es aquél en el que el código no incluye ningún tipo de especificación sobre el tipo de datos sobre el que se trabaja. Así, puede ser utilizado a todo tipo de datos compatible.
  • Polimorfismo estático  es aquél en el que los tipos a los que se aplica el polimorfismo deben ser explicitados y declarados uno por uno antes de poder ser utilizados.

Código 
 

Si se invoca el método breathe desde un objeto-perro, imprimirá en pantalla "Respirar...", pero si es invocado desde un objeto-trucha, imprimirá en pantalla "Burbujear...".

SALUDOS!!

1 comentario: