Polimorfismo  ppt
Upcoming SlideShare
Loading in...5
×
 

Polimorfismo ppt

on

  • 1,967 views

Trabajo final de Estructura de Datos

Trabajo final de Estructura de Datos
tema: Polimorfismo C++

Statistics

Views

Total Views
1,967
Views on SlideShare
1,967
Embed Views
0

Actions

Likes
1
Downloads
54
Comments
1

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Polimorfismo  ppt Polimorfismo ppt Presentation Transcript

  • Tema:Polimorfismo en C++ Nombre: Iván Villarreal Profesora: María de Dimares Materia:Estructura de Datos I 2012
  • INTRODUCCION Una de las tres mayores facetas de la programación orientada aobjetos es el polimorfismo. Aplicado a C++, el términopolimorfismo usado para describir el proceso en el cualdiferentes implementaciones de una función pueden seraccedidas a través del mismo nombre. Por esta razón, elpolimorfismo es en ocasiones caracterizado por la frase "Unainterface, múltiples métodos." Esto significa que cada miembrode una clase general de operaciones puede ser accedida delmismo modo, incluso cuando las acciones especificas con cadaoperación puedan diferir.
  • Polimorfismo  En programación orientada a objetos el polimorfismo se refiere a la posibilidad de enviar un mensaje a un grupo de objetos cuya naturaleza puede ser heterogénea. El único requisito que deben cumplir los objetos que se utilizan de manera polimórfica es saber responder al mensaje que se les envía. La apariencia del código puede ser muy diferente dependiendo del lenguaje que se utilice, más allá de las obvias diferencias sintácticas. Por ejemplo, en un lenguaje de programación que cuenta con un sistema de tipos dinámico (en los que las variables pueden contener datos de cualquier tipo u objetos de cualquier clase) como Smalltalk no se requiere que los objetos que se utilizan de modo polimórfico sean parte de una jerarquía de clases.
  • En resumen…En la programación orientada a objetos, la esencia delpolimorfismo no atañe a la clase o prototipo de la queprovienen los objetos. Aún así, en los lenguajes basados enclases, es habitual (y en algunos tal vez sea el único modo)que dichos objetos pertenezcan a subclases pertenecientesa una misma jerarquía. Entonces, el polimorfismo debeverse como una forma flexible de usar un grupo de objetos(como si fueran sólo uno).Podría decirse que el polimorfismo en esencia refiere alcomportamiento de los objetos, no a su pertenencia a unajerarquía de clases (o a sus tipos de datos).
  • #include<iostream>EJEMPLOS using namespace std; class Figura { private: float base; float altura; public: void captura(); virtual unsigned float perimetro()=0; virtual unsigned float area()=0; }; class Rectangulo: public Figura { public: void imprime(); unsigned float perimetro(){return 2*(base+altura);} unsigned float area(){return base*altura;} }; class Triangulo: public Figura { public: void muestra(); unsigned float perimetro(){return 2*altura+base} unsigned float area(){return (base*altura)/2;} }; void Figura::captura() { cout << "CALCULO DEL AREA Y PERIMETRO DE UN TRIANGULO ISÓSCELES Y UN RECTANGULO:" << endl; cout << "escribe la altura: "; cin >> altura; cout << "escribe la base: "; cin >> base; cout << "EL PERIMETRO ES: " << perimetro(); cout << "EL AREA ES: " << area(); }
  • EJEMPLOS
  • PUNTEROS A TIPOS DERIVADOS.  La fundación del polimorfismo en tiempo de ejecución es el puntero de la clase base. Punteros a la clase base y clases derivadas están relacionados en la manera en que otros tipos de puntero no lo están. Como aprendió al principio del libro, un puntero de un tipo generalmente no puede apuntar a un objeto de otro tipo. Sin embargo, los punteros de clase base y objetos derivados son la excepción a esta regla. En C++, un puntero de la clase base podría ser usado para apuntar a un objeto de cualquier clase derivada de esa base. Por ejemplo, asumiendo que usted tiene una clase base llamada clase B y una clase llamada clase_D, la cual es derivada de clase_B. En C++, cualquier puntero declarado como un puntero a clase_B puede tambien ser un puntero a clase_D. Entonces, dado
  • REFERENCIAS A TIPOS DERIVADOS  Similar a la acción de punteros ya descritas, una referencia a la clase base puede ser usada para referirse a un objeto de un tipo derivado. La mas común aplicación de esto es encontrada en los parámetros de la funciones. Una parámetro de referencia de la clase base puede recibir objetos de la base clase así como también otro tipo derivado de esa misma base.
  • Clasificación Se puede clasificar el polimorfismo en dos grandesclases: Polimorfismo dinámico (o polimorfismo paramétrico) 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 (o polimorfismo ad hoc) 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.
  • Diferencia entre polimorfismo y sobre carga El polimorfismo como se muestra en el ejemplo anterior, suele ser bastanteventajoso aplicado desde las interfaces, ya que permite crear nuevos tipos sinnecesidad de tocar las clases ya existentes (imaginemos que deseamos añadiruna clase Multiplicar), basta con recompilar todo el código que incluye losnuevos tipos añadidosLa sobrecarga se da siempre dentro de una sola clase, mientras que elpolimorfismo se da entre clases distintas.Un método está sobrecargado si dentro de una clase existen dos o másdeclaraciones de dicho método con el mismo nombre pero con parámetrosdistintos, por lo que no hay que confundirlo con polimorfismo.En definitiva: La sobrecarga se resuelve en tiempo de compilación utilizando losnombres de los métodos y los tipos de sus parámetros; el polimorfismo se resuelveen tiempo de ejecución del programa, esto es, mientras se ejecuta, en funciónde la clase a la que pertenece el objeto.
  • FUNCIONES VIRTUALES  El polimorfismo en tiempo de ejecución es logrado por una combinación de dos características: Herencia y funciones virtuales". Aprendió sobre la herencia en el capitulo precedente. Aquí, aprenderá sobre función virtual. Una función virtual es una función que es declarada como virtual en una clase base y es redefinida en una o mas clases derivadas. Además, cada clase derivada puede tener su propia versión de la función virtual. Lo que hace interesantes a las funciones virtuales es que sucede cuando una es llamada a través de un puntero de clase base ( o referencia ). En esta situación, C++ determina a cual versión de la función llamar basándose en el tipo de objeto apuntado por el puntero. Y, esta determinación es hecha en tiempo de ejecución. Además, cuando diferentes objetos son apuntados, diferentes versiones de la función virtual son ejecutadas.
  • PORQUE FUNCIONES VIRTUALES Como se declaraba en el inicio de este capítulo, las funciones virtualesen combinación con tipos derivados le permiten a C++ soportarpolimorfismo en tiempo de ejecución. El polimorfismo es esencial para laprogramación orientada a objetos por una razón: Esta permite a unaclase generalizada especificar aquellas funciones que serán comunes atodas las derivadas de esa clase, mientras que permite a una clasederivada definir la implementación específica de algunos o todas deesas funciones. A veces esta idea es expresada como: La clase basedicta la interface general que cualquier objeto derivado de esa clasetendrá, pero permite a la clase derivada definir el método actual usadopara implementar esa interface. De ahí que la frase "una interfacemúltiples métodos" sea usada a menudo para describir el polimorfismo.
  • Parte del truco de aplicar el polimorfismo de una manera satisfactoria escomprender que la clase base y derivada forman una jerarquía, la cual semueve de mayor a menor generalización (base a derivada). Diseñadacorrectamente, la clase base provee todos los elementos que una clasederivada puede usar directamente. También define cuales funciones laclase derivada debe implementar por su cuenta. Esto permite a la clasederivada la flexibilidad para definir sus propios métodos, y aun mantener uninterface consistente.Eso es, como la forma de la interface es definida por la clase base,cualquier clase derivada compartirá esa interface común. Además, el usode funciones virtuales hace posible para la clase base definir interfacesgenéricas que serán usada por todas las clases derivadas. En este punto,usted debe preguntarse a si mismo porque una consistente interface conmúltiples implementaciones es importante. La respuesta, nuevamente, nolleva a la fuerza central manejadora detrás de la programación orientada aobjetos: Esta ayuda al programador a manejar programas de complejidadcreciente.
  • FUNCIONES VIRTUALES PURAS Y CLASES ABSTRACTAS  Como se ha visto, cuando una funcion virtual que no es redefinida en una clase derivada es llamada por un objeto de esa clase derivada, la version de la funcion como se ha definido en la clase base es utilizada. Sin embargo, en muchas circunstancias, no habra una declaracion con significado en una funcion virtual dentro de la clase base. Por ejemplo, en la clase base figura usada en el ejemplo anterior, la definicion de mostrar_area() es simplemente un sustituto sintetico. No computara ni mostrara el area de ningun tipo de objeto. Como vera cuando cree sus propias librerias de clases no es poco comun para una funcion virtual tener una definicion sin significado en el contexto de su clase base.