You are on page 1of 12

Programacin Orientada a Objetos con C#

Programacin Orientada
a Objetos en C#
Unidad 4.- Polimorfismo
Autor:
Dr. Ramn Roque Hernndez
http://ramonroque.com/Materias/pooTec.htm
ramonroque@yahoo.com
Colaborador:
Ing. Bruno Lpez Takeyas, M.C.
www.itnuevolaredo.edu.mx/takeyas
takeyas@itnuevolaredo.edu.mx

Pilares de la POO
1. Encapsulamiento
2. Herencia
3. Polimorfismo
2

Dr. Ramn Roque Hernndez


M.C. Bruno Lpez Takeyas

Programacin Orientada a Objetos con C#

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.
3

Conceptos relacionados
con polimorfismo
Sobrecarga (overload)
Herencia
Sobre-escritura (override)
4

Dr. Ramn Roque Hernndez


M.C. Bruno Lpez Takeyas

Programacin Orientada a Objetos con C#

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

Ejemplo de Sobrecarga
[ Overload ]

miPuerta.Abrir ( Adentro, Afuera)

miPuerta.Abrir ( Afuera, Adentro)

miPuerta.Abrir ( )
6

Dr. Ramn Roque Hernndez


M.C. Bruno Lpez Takeyas

Programacin Orientada a Objetos con C#

Herencia
Vehiculo
CaballosDeFuerza : int
Arrancar() : void
Detener() : void
Herencia

Automovil

Superclase
(Clase base)
(Clase padre)
(Clase madre)

Subclases
(Clases derivadas)
(Clases Hijas)
PalaMecanica

CantidadDePuertas : int

PesoMaximoDeLevante : int

Acelerar(int cuanto) : void

MoverPala(string direccion) : void

Anulacin / Sustitucin /
Sobreescritura
[ 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 Sobreescritos.
8

Dr. Ramn Roque Hernndez


M.C. Bruno Lpez Takeyas

Programacin Orientada a Objetos con C#

Anulacin / Sustitucin /
Sobreescritura
[ 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( )
9

10

Dr. Ramn Roque Hernndez


M.C. Bruno Lpez Takeyas

Programacin Orientada a Objetos con C#

11

Ejemplo de polimorfirmo
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
12

Dr. Ramn Roque Hernndez


M.C. Bruno Lpez Takeyas

Programacin Orientada a Objetos con C#

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

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

14

Dr. Ramn Roque Hernndez


M.C. Bruno Lpez Takeyas

Programacin Orientada a Objetos con C#

Ejemplo de polimorfismo
de subtipo (override)

Las clases derivadas redefinen los mtodos y/o


propiedades heredados mediante la sobreescritura (override)
15

Otro ejemplo de polimorfismo


de subtipo (override)

Se sobre-escribe el mtodo heredado Mover()


segn lo requiera la pieza del ajedrez
16

Dr. Ramn Roque Hernndez


M.C. Bruno Lpez Takeyas

Programacin Orientada a Objetos con C#

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.
17

Polimorfismo
POLI = Mltiples MORFISMO = Formas
ObjetoEnFormaDeCaja

miRefrigerador.Abrir( Puerta de Abajo )


miRefrigerador.Abrir( Puerta de Arriba , Mitad )

miRegalo.Abrir( )

miCofre.Abrir( )
18

Dr. Ramn Roque Hernndez


M.C. Bruno Lpez Takeyas

Programacin Orientada a Objetos con C#

Mtodos Virtuales
Son mtodos en la clase base pensados para ser sobre-escritos
por subclases.
Para declararlos, se utiliza la palabra reservada virtual; para
sobreescribirlos, en la subclase se utiliza la palabra reservada
override.
Un mtodo virtual PUEDE ser sobreescrito, 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
19

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
20

Dr. Ramn Roque Hernndez


M.C. Bruno Lpez Takeyas

10

Programacin Orientada a Objetos con C#

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

21

override sealed
Agregar sealed a un mtodo override impide la
futura sobre-escritura 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 sobreescribir.
{
public override void Prender()
{ System.Console.WriteLine(" La tele a color se esta prendiendo");
}
22
}

Dr. Ramn Roque Hernndez


M.C. Bruno Lpez Takeyas

11

Programacin Orientada a Objetos con C#

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 ");
}
}
23

Referencias
http://www.devjoker.com/contenidos/TutorialC/135/Polimorfismo.aspx
http://www.nebrija.es/~abustind/Informatica/Met
odologiaII/Polimorfismo.pdf
http://apdazapoo.blogspot.mx/2008/04/polimorfismo.html
http://www.clikear.com/manuales/csharp/c38.as
px
http://www.elguille.info/colabora/NET2005/jbarri
entos_polimorfismoCS.htm
24

Dr. Ramn Roque Hernndez


M.C. Bruno Lpez Takeyas

12

You might also like