Professional Documents
Culture Documents
NET
CAPTULO 7
POLIMORFISMO
Preguntas detonadoras
Qu es y para qu sirve el polimorfismo?
Qu ventajas ofrece una aplicacin polimrfica?
Qu conceptos debo dominar para implementar
polimorfismo?
Cuntos tipos de polimorfismo existen?
Cualquier mtodo definido en una clase base puede
sobrescribirse en sus clases derivadas para provocar
comportamiento polimrfico?
Cules son las diferencias entre un mtodo virtual,
uno abstracto y uno sobrescrito?
3
Pilares de la POO
Polimorfismo
Es la habilidad que poseen los objetos para
reaccionar de modo diferente ante los mismos
mensajes.
El polimorfismo se refiere a la posibilidad de definir
mltiples clases con funcionalidad diferente, pero
con mtodos o propiedades denominados de forma
idntica, que pueden utilizarse de manera
intercambiable mediante cdigo cliente en tiempo
de ejecucin.
En C# el polimorfismo est ntimamente
relacionado con la sobrecarga y mtodos virtuales.
5
Sobrecarga [ Overload ]
La sobrecarga representa diferentes maneras de realizar
una misma accin.
En los programas se usa el mismo nombre en diferentes
mtodos con diferentes firmas [nmero, orden y tipo de los
parmetros].
El cdigo de programacin asociado a cada sobrecarga
puede variar.
Ejemplos:
miEmpleado.Contratar(Juan, Ventas, 2500);
miEmpleado.Contratar(Juan);
miEmpleado.Contratar(Juan, 2500);
7
Ejemplo de Sobrecarga
[ Overload ]
miPuerta.Abrir ( )
8
Herencia
Vehiculo
CaballosDeFuerza : int
Arrancar() : void
Detener() : void
Superclase
(Clase base)
(Clase padre)
(Clase madre)
Subclases
(Clases derivadas)
(Clases Hijas)
Herencia
Automovil
PalaMecanica
CantidadDePuertas : int
PesoMaximoDeLevante : int
Herencia y sobrescritura
10
Sobrescritura [ Overriding ]
Sucede cuando una clase B hereda
caractersticas de una clase A, pero la clase
B re-define las caractersticas heredadas de
A.
Propiedades y mtodos pueden heredarse de
una superclase. Si estas propiedades y
mtodos son re-definidos en la clase
derivada, se dice que han sido sobrescritos.
11
Sobrescritura [ Overriding ]
Articulo_Academico
Propiedades:
Metodos:
Abrir ( )
...
Herencia
Un libro y una Laptop se
abren de diferente manera.
miLibro.Abrir( )
miLaptop.Abrir( )
12
Paramtrico
TIPOS
DE
POLIMORFISMO
De sobrecarga
De subtipo
14
15
Ejemplo de polimorfismo
paramtrico
Una clase define varios
mtodos con el mismo
nombre pero diferente
firma (sobrecarga)
Se elige el mtodo de
acuerdo a la firma
aplicada
La sobrecarga del
constructor es un
ejemplo de ello
16
Ejemplo de polimorfismo de
sobrecarga (overload)
Diferentes clases
tienen un mtodo con
el mismo nombre, pero
comportamiento
diferente
Se aplica el mtodo de
acuerdo al objeto en
que se trabaje
18
Ejemplo de polimorfismo de
subtipo (override)
10
Polimorfismo
POLI = Mltiples MORFISMO = Formas
ObjetoEnFormaDeCaja
miRegalo.Abrir( )
miCofre.Abrir( )
22
11
Mtodos virtuales
Son mtodos en la clase base pensados para ser sobrescritos
por subclases.
Para declararlos, se utiliza la palabra reservada virtual;
para sobrescribirlos, en la subclase se utiliza la palabra
reservada override.
Un mtodo virtual PUEDE ser sobrescrito, o utilizarse tal
como est.
Solo se puede utilizar override si el mtodo en la clase base
est marcado como virtual, abstract u override.
El mtodo override debe mantener el mismo nivel de
acceso que el mtodo virtual correspondiente
23
Mtodo virtual
class ClaseBase
{
// Mtodo virtual (preparado para ser modificado
en una clase derivada)
public virtual void Metodo()
{
. . . .
}
}
24
12
Mtodo sobreescrito
class ClaseDerivada : ClaseBase
{
// Sobrescritura del mtodo heredado
public override void Metodo()
{
. . . .
}
}
25
Ejemplo
virtualoverride
class Vehiculo
{
public virtual void Arrancar()
{ System.Console.WriteLine("Arrancar...Clase Vehiculo");
}
}
class Carro: Vehiculo
{
public override void Arrancar()
{
System.Console.WriteLine("Arrancar....Clase Carro");
}
}
class Programa
{
static void Main()
{
Carro miCarro = new Carro();
miCarro.Arrancar();
System.Console.ReadLine();
}
}
Ejecucin del programa
Arrancar....Clase Carro
26
13
Ejemplo virtualoverride
(Polimorfismo en Tiempo de ejecucin)
class Vehiculo
{
public virtual void Arrancar()
{
System.Console.WriteLine("Arrancar...Clase Vehiculo");
}
}
class Carro : Vehiculo
{
public override void Arrancar()
{
System.Console.WriteLine("Arrancar....Clase Carro");
}
}
class Programa
{
static void Main()
{
Vehiculo v;
v = new Vehiculo();
v.Arrancar();
v = new Carro();
v.Arrancar();
System.Console.ReadLine();
}
}
En una variable
tipo Vehiculo
se almacenan
objetos tipo
Vehiculo y tipo
Carro.
Al invocar el
mismo mtodo
para el mismo
objeto,
se observa
una conducta
diferente,
apropiada para
cada objeto.
27
override sealed
Agregar sealed a un mtodo override impide la
futura sobrescritura de ese mtodo, proporcionando
una implementacin final.
class Aparato
{
public virtual void Prender()
{ System.Console.WriteLine(" Prendiendo el Aparato ");
}
}
class TV : Aparato
{
public override sealed void Prender()
{ System.Console.WriteLine(" LA TV SE ESTA PRENDIENDO ");
}
}
ERROR!!!...El mtodo ya
class TVColor : TV
no se puede sobrescribir.
{
public override void Prender()
{ System.Console.WriteLine(" La tele a color se esta prendiendo");
}
}
28
14
Ejercicio
30
15
Diseo de la forma
31
Empleado.CalcularSalario() : double
Mtodo Virtual
32
16
Mtodo sobreescrito
(override)
return( base.CalcularSalario() )
33
HorasTrabajadas
<
41
Mtodo sobreescrito
(override)
yes
return ( base.CalcularSalario() )
no
intHorasExtras = HorasTrabajadas - 40
dblSueldoExtra = intHorasExtras * SueldoPorHora * 2
dblSueldoNormal = 40 * SueldoPorHora
17
EmpleadoConHorasTriples.CalcularSalario() : double
HorasTrabajadas
<
41
yes
return ( base.CalcularSalario() )
no
intHorasExtras = HorasTrabajadas - 40
dblSueldoExtra = intHorasExtras * SueldoPorHora * 3
dblSueldoNormal = 40 * SueldoPorHora
takeyas@itnuevolaredo.edu.mx
18