Está en la página 1de 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 Superclase (Clase base) (Clase padre) (Clase madre)

Subclases (Clases derivadas) (Clases Hijas)


PalaMecanica PesoMaximoDeLevante : int MoverPala(string direccion) : void

Automovil CantidadDePuertas : int Acelerar(int cuanto) : 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 param!trico


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 param!trico


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#

$iferencia entre Polimorfismo % 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#

&!todos 'irtuales
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 virtual(override
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 virtual(override "Polimorfismo en )iempo 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 m!todos *eredados


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

+eferencias
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

También podría gustarte