Está en la página 1de 5

En programacin orientada a objetos el polimorfismo se refiere a la capacidad para que varias clases derivadas de una antecesora utilicen un mismo

mtodo de forma diferente. Por ejemplo, podemos crear dos clases distintas: Pez y Ave que heredan de la superclase Animal. La clase Animal tiene el mtodo abstracto mover que se implementa de forma distinta en cada una de las subclases (peces y aves se mueven de forma distinta). Como se mencion anteriormente, el concepto de polimorfismo se puede aplicar tanto a funciones como a tipos de datos. As nacen los conceptos de funciones polimrficas y tipos polimrficos. Las primeras son aquellas funciones que pueden evaluarse o ser aplicadas a diferentes tipos de datos de forma indistinta; los tipos polimrficos, por su parte, son aquellos tipos de datos que contienen al menos un elemento cuyo tipo no est especificado. Clasificacin Se puede clasificar el polimorfismo en dos grandes clases:

Polimorfismo dinmico (o polimorfismo paramtrico) es aqul en el que el cdigo no incluye ningn tipo de especificacin sobre el tipo de datos sobre el que se trabaja. As, puede ser utilizado a todo tipo de datos compatible. Polimorfismo esttico (o polimorfismo ad hoc) es aqul 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.

El polimorfismo dinmico unido a la herencia es lo que en ocasiones se conoce como programacin genrica. Tambin se clasifica en herencia por redefinicin de mtodos abstractos y por mtodo sobrecargado. El segundo hace referencia al mismo mtodo con diferentes parmetros. Otra clasificacin agrupa los polimorfismo en dos tipos: Ad-Hoc que incluye a su vez sobrecarga de operadores y coercin, Universal(inclusin o controlado por la herencia, paramtrico o genericidad)..

Herencia (informtica) Para otros usos de este trmino, vase Herencia. En orientacin a objetos la herencia es el mecanismo fundamental para implementar la reutilizacin y extensibilidad del software. A travs de ella los diseadores pueden construir nuevas clases partiendo de una jerarqua de clases ya existente (comprobadas y verificadas) evitando con ello el rediseo, la modificacin y verificacin de la parte ya implementada. La herencia facilita la creacin de objetos a partir de otros ya existentes, obteniendo caractersticas (mtodos y atributos) similares a los ya existentes. Es la relacin entre una clase general y otra clase ms especifica. Por ejemplo: Si declaramos una clase prrafo derivada de una clase texto, todos los mtodos y variables asociadas con la clase texto, son automticamente heredados por la subclase prrafo. La herencia es uno de los mecanismos de la programacin orientada a objetos, por medio del cual una clase se deriva de otra, llamada entonces clase base o clase padre,(a veces se le denomina superclase pero no es muy comun), de manera que extiende su funcionalidad. Una de sus funciones ms importantes es la de proveer Polimorfismo y late binding. Ejemplo en Java public class Mamifero{ private int patas; private String nombre; public void imprimirPatas(){ JOptionPane.showMessageDialog(null," Tiene " + patas + "patas\n","Mamifero",JOptionPane.INFORMATION_MESSAGE); } public Mamifero(String nombre, int patas){ this.nombre = nombre; this.patas = patas; } } public class Perro extends Mamifero { public Perro(String nombre){ super(nombre, 4);

} } public class Gato extends Mamifero { public Gato(String nombre){ super(nombre, 4); } } public class CrearPerro { public static void main(String [] args) { Perro perrito = new Perro("Canelita"); perrito.imprimirPatas(); /*Est en la clase mamfero*/ } } Se declaran las clases mamferos, gato y perro, haciendo que gato y perro sean unos mamferos (derivados de esta clase), y se ve como a travs de ellos se nombra al animal pero as tambin se accede a patas dndole el valor por defecto para esa especie. La herencia permite que existan clases que nunca sern instanciadas directamente. En el ejemplo anterior, una clase "perro" heredara los atributos y mtodos de la clase "mamfero", as como tambin "gato", "delfn" o cualquier otra subclase; pero, en ejecucin, no habr ningn objeto "mamfero" que no pertenezca a alguna de las subclases. En ese caso, a una clase as se la conocera como Clase Abstracta. La ausencia de instancias especficas es su nica particularidad, para todo lo dems es como cualquier otra clase. [editar]Herencia y ocultacin de informacin El diseador puede definir qu variables de instancia y mtodos de los objetos de una clase son visibles. En C++ y java esto se consigue con las especificaciones private, protected y public. Slo las variables y mtodos definidos como pblicos en un objeto sern visibles por todos los objetos. En cuanto a las subclases, que heredan las estructuras de las superclases, el diseador puede controlar qu miembros de las superclases son visibles en las subclases. En el caso de java y C++

los especificadores de acceso (private, protected, public) de los miembros de la superclase afectan tambin a la herencia:

Private: ningn miembro privado de la superclase es visible en la subclase. Protected: los miembros protegidos de la superclase son visibles en la subclase, pero no visibles para el exterior.

Public: los miembros pblicos de la superclase siguen siendo pblicos en la subclase. [editar]Redefinicin de mtodos

En la clase derivada se puede redefinir algn mtodo ya definido en la clase base. Para redefinir un mtodo en la subclase, basta con declarar una funcin miembro con el mismo nombre. Si en una clase en particular se invoca a un mtodo, y el mtodo no est definido en la misma, es buscado automticamente en las clases superiores. Sin embargo, si existieran dos mtodos con el mismo nombre y distinto cdigo, uno en la clase y otro en una superclase, se ejecutara el de la clase, no el de la superclase. Por lo general, siempre se puede acceder explcitamente al mtodo de la clase superior mediante una sintaxis diferente, la cual depender del lenguaje de programacin empleado. [editar]Ventajas

Ayuda a los programadores a ahorrar cdigo y tiempo, ya que si tiene una clase lista es solo de implementarla y listo todo el cdigo de esta se resume a solo un llamado. Los objetos pueden ser construidos a partir de otros similares. Para ello es necesario que exista una clase base y una jerarqua (relacionamiento) de clases. La clase derivada puede heredar cdigo y datos de la clase base, aadiendo cdigo o modificando lo heredado.

Las clases que heredan propiedades de otra clase pueden servir como clase base de otras. [editar]Estereotipos de herencia

Herencia simple: Un objeto puede extender las caractersticas de otro objeto y de ningn otro, es decir, que solo puede heredar o tomar atributos de un solo padre o de una sola clase. Herencia mltiple: Un objeto puede extender las caractersticas de uno o ms objetos, es decir, puede tener varios padres. En este aspecto hay discrepancias entre los diseadores de lenguajes. Algunos de ellos han preferido no admitir la herencia mltiple por las posibles coincidencias en nombres de mtodos o datos miembros. Por ejemplo C++, Python permiten herencia mltiple, mientras queJava, Ada y C# slo permiten herencia simple.