Itsatec

Solo disponible en BuenasTareas
  • Páginas : 8 (1819 palabras )
  • Descarga(s) : 0
  • Publicado : 21 de junio de 2010
Leer documento completo
Vista previa del texto
Polimorfismo
La palabra polimorfismo proviene del griego y significa que posee varias formas diferentes. Este es uno de los conceptos esenciales de una programación orientada a objetos. Así como la herencia está relacionada con las clases y su jerarquía, el polimorfismo se relaciona con los métodos.
En general, hay tres tipos de polimorfismo:
* Polimorfismo de sobrecarga
*Polimorfismo paramétrico (también llamado polimorfismo de plantillas)
* Polimorfismo de inclusión (también llamado redefinición o subtipado)

Trataremos de describir ahora con más precisión estos tipos de polimorfismo, pero le sugerimos prestar atención, ya que muchas personas suelen confundirse al tratar de comprender las diferencias existentes entre estos tres tipos.
Clases abstractas
Laabstracción es un recurso de la mente (quizás el más característico de nuestra pretendida superioridad respecto del mundo animal). Por su parte, los lenguajes de programación permiten expresar la solución de un problema de forma comprensible simultáneamente por la máquina y el humano. Constituyen un puente entre la abstracción de la mente y una serie de instrucciones ejecutables por un dispositivoelectrónico. En consecuencia, la capacidad de abstracción es una característica deseable de los lenguajes artificiales, pues cuanto mayor sea, mayor será su aproximación al lado humano. Es decir, con la imagen existente en la mente del programador. En este sentido, la introducción de las clases en los lenguajes orientados a objetos ha representado un importante avance respecto de la programacióntradicional y dentro de ellas, las denominadas clases abstractas son las que representan el mayor grado de abstracción.
De hecho, las clases abstractas presentan un nivel de "abstracción" tan elevado que no sirven para instanciar objetos de ellas. Representan los escalones más elevados de algunas jerarquías de clases y solo sirven para derivar otras clases, en las que se van implementando detalles yconcreciones, hasta que finalmente presentan un nivel de definición suficiente que permita instanciar objetos concretos. Se suelen utilizar en aquellos casos en que se quiere que una serie de clases mantengan una cierta característica o interfaz común. Por esta razón a veces se dice de ellas que son pura interfaz.
Resulta evidente en el ejemplo de la figura que los diversos tipos de motorestienen características diferentes. Realmente tienen poco en común un motor eléctrico de corriente alterna y una turbina de vapor. Sin embargo, la construcción de una jerarquía en la que todos motores desciendan de un ancestro común, la clase abstracta "Motores", presenta la ventaja de unificar la interfaz. Aunque evidentemente su definición será tan "abstracta", que no pueda ser utilizada parainstanciar directamente ningún tipo de motor. El creador del lenguaje dice de ellas que soportan la noción de un concepto general del que solo pueden utilizarse variantes más concretas [2].

  Clases abstractas
Una clase abstracta es la que tiene al menos una función virtual pura (como hemos visto, una función virtual es especificada como "pura" haciéndola igual a cero 4.11.8a).
Nota: recordemosque las clases que tienen al menos una función virtual (o virtual pura) se denominan clases polimórficas ( 4.11.8). Resulta por tanto, que todas las clases abstractas son también polimórficas, pero no necesariamente a la inversa.
  Reglas de uso:
* Una clase abstracta solo puede ser usada como clase base para otras clases, pero no puede ser instanciada para crear un objeto 1.
* Una claseabstracta no puede ser utilizada como argumento o como retorno de una función 2.
* Si puede declararse punteros-a-clase abstracta 3 [1].
* Se permiten referencias-a-clase abstracta, suponiendo que el objeto temporal no es necesario en la inicialización 4.
  Ejemplo

class Figura {       // clase abstracta (CA)
  point centro;
    ...
  public:
  getcentro() { return center; }...
tracking img