You are on page 1of 18

Programacin Orientada a Objetos en C# .

NET

CAPTULO 7
POLIMORFISMO

Ing. Bruno Lpez Takeyas, M.C.


http://www.itnuevolaredo.edu.mx/Takeyas

Programacin Orientada a Objetos en C# .NET

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

Ing. Bruno Lpez Takeyas, M.C.


http://www.itnuevolaredo.edu.mx/Takeyas

Programacin Orientada a Objetos en C# .NET

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

Conceptos relacionados con


polimorfismo
Sobrecarga (overload)
Herencia
Sobrescritura (override)
6

Ing. Bruno Lpez Takeyas, M.C.


http://www.itnuevolaredo.edu.mx/Takeyas

Programacin Orientada a Objetos en C# .NET

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 ( Adentro, Afuera)

miPuerta.Abrir ( Afuera, Adentro)

miPuerta.Abrir ( )
8

Ing. Bruno Lpez Takeyas, M.C.


http://www.itnuevolaredo.edu.mx/Takeyas

Programacin Orientada a Objetos en C# .NET

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

Acelerar(int cuanto) : void

MoverPala(string direccion) : void

Herencia y sobrescritura

10

Ing. Bruno Lpez Takeyas, M.C.


http://www.itnuevolaredo.edu.mx/Takeyas

Programacin Orientada a Objetos en C# .NET

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 ( )

...

miLibro y miLaptop heredan el mtodo


Abrir ( ) pero NO lo utilizan; sino que
cada uno lo implementa nuevamente de
manera distinta.

Herencia
Un libro y una Laptop se
abren de diferente manera.
miLibro.Abrir( )

miLaptop.Abrir( )
12

Ing. Bruno Lpez Takeyas, M.C.


http://www.itnuevolaredo.edu.mx/Takeyas

Programacin Orientada a Objetos en C# .NET

Paramtrico

TIPOS
DE
POLIMORFISMO

De sobrecarga

De subtipo

14

Ing. Bruno Lpez Takeyas, M.C.


http://www.itnuevolaredo.edu.mx/Takeyas

Programacin Orientada a Objetos en C# .NET

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

Ing. Bruno Lpez Takeyas, M.C.


http://www.itnuevolaredo.edu.mx/Takeyas

Programacin Orientada a Objetos en C# .NET

Otro ejemplo de polimorfismo


paramtrico
La misma clase tiene varios
mtodos con el mismo
nombre pero diferentes
firmas con diferentes tipos
de datos

La sobrecarga de mtodos no provoca polimorfismo de sobrecarga, sino polimorfismo


paramtrico
17

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

Ing. Bruno Lpez Takeyas, M.C.


http://www.itnuevolaredo.edu.mx/Takeyas

Programacin Orientada a Objetos en C# .NET

Ejemplo de polimorfismo de
subtipo (override)

Las clases derivadas redefinen los mtodos y/o propiedades


heredados mediante la sobrescritura (override)
19

Otro ejemplo de polimorfismo de


subtipo (override)

Se sobrescribe el mtodo heredado Mover() segn


lo requiera la pieza del ajedrez
20

Ing. Bruno Lpez Takeyas, M.C.


http://www.itnuevolaredo.edu.mx/Takeyas

10

Programacin Orientada a Objetos en C# .NET

Diferencia entre Polimorfismo y


Sobrecarga
Un mtodo est sobrecargado si dentro de una clase
existen dos o ms declaraciones de dicho mtodo con el
mismo nombre pero con parmetros distintos.
En definitiva: La sobrecarga se resuelve en tiempo de
compilacin utilizando los nombres de los mtodos y los
tipos de sus parmetros; el polimorfismo se resuelve en
tiempo de ejecucin del programa, esto es, mientras se
ejecuta, en funcin de la clase a la que pertenece el
objeto.
21

Polimorfismo
POLI = Mltiples MORFISMO = Formas

ObjetoEnFormaDeCaja

miRefrigerador.Abrir( Puerta de Abajo )


miRefrigerador.Abrir( Puerta de Arriba , Mitad )

miRegalo.Abrir( )

miCofre.Abrir( )

22

Ing. Bruno Lpez Takeyas, M.C.


http://www.itnuevolaredo.edu.mx/Takeyas

11

Programacin Orientada a Objetos en C# .NET

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

Ing. Bruno Lpez Takeyas, M.C.


http://www.itnuevolaredo.edu.mx/Takeyas

12

Programacin Orientada a Objetos en C# .NET

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

Ing. Bruno Lpez Takeyas, M.C.


http://www.itnuevolaredo.edu.mx/Takeyas

13

Programacin Orientada a Objetos en C# .NET

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.

Ejecucin del programa


Arrancar...Clase Vehiculo
Arrancar....Clase Carro

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

Ing. Bruno Lpez Takeyas, M.C.


http://www.itnuevolaredo.edu.mx/Takeyas

14

Programacin Orientada a Objetos en C# .NET

Ocultar mtodos heredados


Es posible ocultar un mtodo heredado e introducir uno
nuevo a la jerarqua de clases. El mtodo antiguo (heredado)
es reemplazado por otro nuevo, diferente, pero con el mismo
nombre y la misma firma.
class Vehiculo
{
public void Arrancar()
{
System.Console.WriteLine(" Clase Vehiculo. Metodo Arrancar ");
}
}
class Automovil : Vehiculo
{
public new void Arrancar()
{
System.Console.WriteLine(" Clase Automovil. Metodo Arrancar ");
}
}
29

Ejercicio

30

Ing. Bruno Lpez Takeyas, M.C.


http://www.itnuevolaredo.edu.mx/Takeyas

15

Programacin Orientada a Objetos en C# .NET

Diseo de la forma

31

Diagramas de flujo de los mtodos

Empleado.CalcularSalario() : double

Mtodo Virtual

return( HorasTrabajadas * SueldoPorHora )

32

Ing. Bruno Lpez Takeyas, M.C.


http://www.itnuevolaredo.edu.mx/Takeyas

16

Programacin Orientada a Objetos en C# .NET

Diagramas de flujo de los mtodos


(cont.)
EmpleadoSinHorasExtras.CalcularSalario() : double

Mtodo sobreescrito
(override)

Invoca el mtodo para


calcular el salario de la
clase base Empleado

return( base.CalcularSalario() )

33

Diagramas de flujo de los mtodos


(cont.)
EmpleadoConHorasDobles.CalcularSalario() : double

HorasTrabajadas
<
41

Mtodo sobreescrito
(override)

yes
return ( base.CalcularSalario() )

no

intHorasExtras = HorasTrabajadas - 40
dblSueldoExtra = intHorasExtras * SueldoPorHora * 2
dblSueldoNormal = 40 * SueldoPorHora

return ( dblSueldoNormal + dblSueldoExtra )


34

Ing. Bruno Lpez Takeyas, M.C.


http://www.itnuevolaredo.edu.mx/Takeyas

17

Programacin Orientada a Objetos en C# .NET

Diagramas de flujo de los mtodos


(cont.)
Mtodo sobreescrito
(override)

EmpleadoConHorasTriples.CalcularSalario() : double

HorasTrabajadas
<
41

yes
return ( base.CalcularSalario() )

no

intHorasExtras = HorasTrabajadas - 40
dblSueldoExtra = intHorasExtras * SueldoPorHora * 3
dblSueldoNormal = 40 * SueldoPorHora

return ( dblSueldoNormal + dblSueldoExtra )


35

Otros ttulos del autor


http://www.itnuevolaredo.edu.mx/Takeyas/Libro

takeyas@itnuevolaredo.edu.mx

Ing. Bruno Lpez Takeyas, M.C.


http://www.itnuevolaredo.edu.mx/Takeyas

Bruno Lpez Takeyas

18

You might also like