M.C. Bruno Lpez Takeyas 1 1 Programacin Orient ada a Objet os en C# 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 Unidad 4.- Polimorfismo Pi l ar es de l a POO 1. Encapsulamiento 2. Herencia 3. Polimorfismo 2 Programacin Orientada a Objetos con C# Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas 2 3 Pol i mor f i smo 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. Conc ept os r el ac i onados c on pol i mor f i smo Sobrecarga (overload) Herencia Sobre-escritura (override) 4 Programacin Orientada a Objetos con C# Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas 3 5 Sobr ec ar ga [ Over l oad ] 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) 6 Ej empl o de Sobr ec ar ga [ Over l oad ] miPuerta.Abrir ( Adentro, Afuera) miPuerta.Abrir ( Afuera, Adentro) miPuerta.Abrir ( ) Programacin Orientada a Objetos con C# Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas 4 77 Her enc i a Vehiculo CaballosDeFuerza : int Arrancar() : void Detener() : void Automovil CantidadDePuertas : int Acelerar(int cuanto) : void PalaMecanica PesoMaximoDeLevante : int MoverPala(string direccion) : void Superclase (Clase base) (Clase padre) (Clase madre) Subclases (Clases derivadas) (Clases Hijas) Herencia 8 Anul ac i n / Sust i t uc i n / Sobr eesc r i t ur a [ Over r i di ng ] 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. Programacin Orientada a Objetos con C# Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas 5 9 Anul ac i n / Sust i t uc i n / Sobr eesc r i t ur a [ Over r i di ng ] Articulo_Academico Propiedades:
Metodos: ... Abrir ( ) miLibro.Abrir( ) miLaptop.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. 10 Programacin Orientada a Objetos con C# Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas 6 11 Ej empl o de pol i mor f i r mo par amt r i c o 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 Programacin Orientada a Objetos con C# Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas 7 Ot r o ej empl o de pol i mor f i smo par amt r i c o La misma clase tiene varios mtodos con el mismo nombre pero diferentes firmas con diferentes tipos de datos 13 Ej empl o de pol i mor f i smo de sobr ec ar ga (over l oad) 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 Programacin Orientada a Objetos con C# Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas 8 Ej empl o de pol i mor f i smo de subt i po (over r i de) Las clases derivadas redefinen los mtodos y/o propiedades heredados mediante la sobre- escritura (override) 15 Ot r o ej empl o de pol i mor f i smo de subt i po (over r i de) Se sobre-escribe el mtodo heredado Mover() segn lo requiera la pieza del ajedrez 16 Programacin Orientada a Objetos con C# Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas 9 Di f er enc i a ent r e Pol i mor f i smo y Sobr ec ar ga 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 18 Pol i mor f i smo POLI = Mltiples MORFISMO = Formas miRefrigerador.Abrir( Puerta de Abajo ) miRefrigerador.Abrir( Puerta de Arriba , Mitad ) miRegalo.Abrir( ) miCofre.Abrir( ) ObjetoEnFormaDeCaja Programacin Orientada a Objetos con C# Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas 10 19 Mt odos Vi r t ual es 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 20 Ej empl o vi r t ual over r i de 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 Programacin Orientada a Objetos con C# Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas 11 21 Ej empl o vi r t ual over r i de (Pol i mor f i smo en Ti empo de ej ec uc i n) 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(); } } Ejecucin del programa Arrancar...Clase Vehiculo Arrancar....Clase Carro 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. 22 over r i de seal ed 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 "); } } class TVColor : TV { public override void Prender() { System.Console.WriteLine(" La tele a color se esta prendiendo"); } } ERROR!!!...El mtodo ya no se puede sobreescribir. Programacin Orientada a Objetos con C# Dr. Ramn Roque Hernndez M.C. Bruno Lpez Takeyas 12 23 Oc ul t ar mt odos her edados 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 "); } } Ref er enc i as http://www.devjoker.com/contenidos/Tutorial- C/135/Polimorfismo.aspx http://www.nebrija.es/~abustind/Informatica/Met odologiaII/Polimorfismo.pdf http://apdaza- poo.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