Polimorfismo
PO LIM O RFISM O
Cristina Cachero, Pedro J. Ponce de León
4 Sesiones (6 horas)
Versión 1.1
POO
Tema 4. Polimorfismo
Objetivos básicos
Comprender el concepto de polimorfismo
Conocer y saber utilizar los diferentes tipos de polimorfismo.
Comprender el concepto de enlazado estático y dinámico en los
lenguajes OO.
Comprender la relación entrepolimorfismo y herencia en los lenguajes
fuertemente tipados.
Apreciar la manera en que el polimorfismo hace que los sistemas sean
extensibles y mantenibles.
Curso 10-11
2
Indice
1.
2.
3.
4.
5.
6.
Motivación y conceptos previos
Signatura
Ámbito
Sistema de tipos
Polimorfismo y reutilización
Definición
Tipos de polimorfismo
Sobrecarga
Sobrecarga basada enámbito
Sobrecarga basada en signatura de tipo
Alternativas a la sobrecarga
Polimorfismo en jerarquías de herencia
Redefinición
Shadowing
Sobrescritura
Variables polimórficas
La variable receptora
Downcasting
Polimorfismo puro
Genericidad
Funciones genéricas en C++
Plantillas de clase en C++
Herencia en clases genéricas
Curso 10-11
3
1. Motivación
Objetivo de la POO
Aproximarse al modo de resolver problemas en el mundo
real.
El polimorfismo es el modo en que los lenguajes OO
implementan el concepto de polisemia del mundo
real:
Curso 10-11
Un único nombre para muchos significados, según el
c o nt e x t o .
4
1. Conceptos previos
Signatura
S ig n a tu r a d e tip o d e u n m é t o d o :
Descripción de los tipos de sus argumentos, su orden y
el tipo devuelto por el método.
Notación:
Omitimos el nombre del método y de la clase a la que pertenece
Ejemplos
double power (double base, int exp)
double * int double
double Posicion::distanciaA(const Posicion& p)
Posicion double
Curso 10-11
5
1. Conceptos previos:
Ámbito
Ámbito de unnombre:
Porción del programa en la cual un nombre puede ser utilizado de una determinada
manera.
Ejemplo:
double power ( d ouble b ase, i nt exp )
La variable base sólo puede ser utilizada dentro del método power
Ámbitos activos: puede haber varios simultáneamente
Las clases, los cuerpos de métodos, cualquier bloque de código define un ámbito:
class A {
int x,y;public:
void f() {
// Ámbitos activos:
// GLOBAL
// CLASE (atribs. de clase y de instancia)
// METODO (argumentos, var. locales)
i f (…) {
string s;
// ámbito LOCAL (var. locales)
}
}
Curso 10-11
6
1. Conceptos previos:
Ámbito: Espacio de nombres
Un espacio de nombres es un ámbito con nombre
Agrupa declaraciones (clases, métodos, objetos…) que forman una unidadlógica.
C++: n amespace
Graficos.h
(declaraciones agrupadas)
namespace Graficos {
class Circulo {…};
class Rectangulo { … } ;
class Lienzo {…};
…
}
Circulo.h
namespace Graficos {
class Circulo {…};
}
Rectangulo.h
namespace Graficos {
class Rectangulo { … } ;
}
(cada clase en su .h)
Curso 10-11
7
1. Conceptos previos:
Ámbito: Espacio de nombres
Unespacio de nombres es un ámbito con nombre
Agrupa declaraciones (clases, métodos, objetos…) que forman una unidad lógica.
Ja v a : p a q u e t e s (p a c k a g e )
Circulo.java
package Graficos;
class Circulo {…}
Rectangulo.java
package Graficos;
c l a s s R e c t a n g u l o {… }
Curso 10-11
8
1. Conceptos previos:
Ámbito: Espacio de nombres
C++: cláusulausing
#include “ G raficos.h ”
int main() {
Graficos::Circulo c;
Graficos::Rectangulo r;
c.setRadio(4);
double a = r.getArea();
}
#include “ G raficos.h ”
using Graficos::Circulo ;
int main() {
C irculo c;
Graficos::Rectangulo r;
c.setRadio(4);
double a = r.getArea();
}
Curso 10-11
9
1. Conceptos previos:
Ámbito: Espacio de nombres
C++ : cláusula using...
Regístrate para leer el documento completo.