Programación Orientada a Objetos con C#
Dr. Ramón Roque HernándezM.C. Bruno López Takeyas 1
1
Programación Orientada
a Objetos en C#
Autor:Dr. Ramón Roque Hernándezhttp://ramonroque.com/Materias/[email protected]
Colaborador:Ing. Bruno López Takeyas, M.C.www.itnuevolaredo.edu.mx/[email protected]
Unidad 4.- Polimorfismo
Pilares de la POO
1. Encapsulamiento
2. Abstracción
3. Herencia
4. Polimorfismo2
Programación Orientada a Objetos con C#
Dr. Ramón Roque HernándezM.C. Bruno López Takeyas 2
Pilares de la POO
3
4
Polimorfismo
• Es la habilidad que poseen los objetos parareaccionar de modo diferente ante los mismosmensajes.
• El polimorfismo se refiere a la posibilidad de definirmúltiples clases con funcionalidad diferente, pero conmétodos o propiedades denominados de formaidéntica, que pueden utilizarse de maneraintercambiable mediante código cliente en tiempo deejecución.
• En C# el polimorfismo está íntimamente relacionadocon la sobrecarga y métodos virtuales.
Programación Orientada a Objetos con C#
Dr. Ramón Roque HernándezM.C. Bruno López Takeyas 3
Conceptos relacionados
con polimorfismo
• Sobrecarga (overload)
• Herencia
• Sobre-escritura (override)
5
6
Sobrecarga [ Overload ]
• La sobrecarga representa diferentes maneras de realizar unamisma acción.
• En los programas se usa el mismo nombre en diferentes métodoscon diferentes firmas [número, orden y tipo de los parámetros].
• El código de programación asociado a cada sobrecarga puedevariar.
• Ejemplos:– miEmpleado.Contratar(“Juan”, “Ventas”, 2500)– miEmpleado.Contratar(“Juan”)– miEmpleado.Contratar(“Juan”, 2500)
Programación Orientada a Objetos con C#
Dr. Ramón Roque HernándezM.C. Bruno López Takeyas 4
7
Ejemplo de Sobrecarga
[ Overload ]
miPuerta.Abrir ( Adentro, Afuera) miPuerta.Abrir ( Afuera, Adentro)
miPuerta.Abrir ( )
88
Herencia
Vehiculo
CaballosDeFuerza : int
Arrancar() : voidDetener() : 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
Programación Orientada a Objetos con C#
Dr. Ramón Roque HernándezM.C. Bruno López Takeyas 5
9
Anulación / Sustitución /
Sobreescritura
[ Overriding ]
• Sucede cuando una clase “B” heredacaracterísticas de una clase “A”, pero laclase “B” re-define las característicasheredadas de “A”.
• Propiedades y métodos puedenheredarse de una superclase. Si estaspropiedades y métodos son re-definidosen la clase derivada, se dice que hansido “Sobreescritos”.
10
Anulación / Sustitución /
Sobreescritura
[ Overriding ]
Articulo_AcademicoPropiedades:
… … …
Metodos: ...Abrir ( )
miLibro.Abrir( ) miLaptop.Abrir( )
miLibro y miLaptop heredan el métodoAbrir ( ) pero NO lo utilizan; sino quecada uno lo implementa nuevamente de
manera distinta.
Herencia
Un libro y una Laptop se abrende diferente manera.
Programación Orientada a Objetos con C#
Dr. Ramón Roque HernándezM.C. Bruno López Takeyas 6
11
12
Programación Orientada a Objetos con C#
Dr. Ramón Roque HernándezM.C. Bruno López Takeyas 7
Ejemplo de polimorfirmo
paramétrico
• Una clase define varios métodos con el mismo nombre pero diferente firma (sobrecarga)
• Se elige el método de acuerdo a la firma aplicada
• La sobrecarga del constructor es un ejemplo de ello
13
Otro ejemplo de
polimorfismo paramétrico
La misma clase tiene varios métodos con el mismo nombre pero diferentes firmas con diferentes tipos de datos
14
Programación Orientada a Objetos con C#
Dr. Ramón Roque HernándezM.C. Bruno López Takeyas 8
Ejemplo de polimorfismo
de sobrecarga (overload)
• Diferentes clases tienen un método con el mismo nombre, pero comportamiento diferente
• Se aplica el método de acuerdo al objeto en que se trabaje
15
Ejemplo de polimorfismo
de subtipo (override)
• Las clases derivadas redefinen los métodos y/o propiedades heredados mediante la sobre-escritura (override) 16
Programación Orientada a Objetos con C#
Dr. Ramón Roque HernándezM.C. Bruno López Takeyas 9
Otro ejemplo de polimorfismo
de subtipo (override)
• Se sobre-escribe el método heredado Mover()según lo requiera la pieza del ajedrez
17
Diferencia entre
Polimorfismo y Sobrecarga
• Un método está sobrecargado si dentro de unaclase existen dos o más declaraciones de dichométodo con el mismo nombre pero con parámetrosdistintos.
• En definitiva: La sobrecarga se resuelve en tiempode compilación utilizando los nombres de losmétodos y los tipos de sus parámetros; elpolimorfismo se resuelve en tiempo de ejecucióndel programa, esto es, mientras se ejecuta, enfunción de la clase a la que pertenece el objeto.
18
Programación Orientada a Objetos con C#
Dr. Ramón Roque HernándezM.C. Bruno López Takeyas 10
19
Polimorfismo
POLI = Múltiples MORFISMO = Formas
miRefrigerador.Abrir( “Puerta de Abajo” )miRefrigerador.Abrir( “Puerta de Arriba” , “Mitad” )
miRegalo.Abrir( ) miCofre.Abrir( )
ObjetoEnFormaDeCaja
20
Métodos Virtuales
• Son métodos en la clase base pensados para ser sobre-escritospor subclases.
• Para declararlos, se utiliza la palabra reservada “virtual”; parasobreescribirlos, en la subclase se utiliza la palabra reservada“override”.
• Un método virtual “PUEDE” ser sobreescrito, o utilizarse talcomo está.
• Solo se puede utilizar “override” si el método en la clase base está marcado como “virtual”, “abstract” u “override”.
• El método “override” debe mantener el mismo nivel de accesoque el método “Virtual” correspondiente
Programación Orientada a Objetos con C#
Dr. Ramón Roque HernándezM.C. Bruno López Takeyas 11
21
Ejemplo
virtual…override
class Vehiculo{ public virtual void Arrancar()
{ System.Console.WriteLine("Arrancar...Clase Vehic ulo");}
}
class Carro: Vehiculo{ public override void Arrancar()
{ System.Console.WriteLine("Arrancar....Clase Car ro");}
}
class Programa{ static void Main()
{ Carro miCarro = new Carro();miCarro.Arrancar();System.Console.ReadLine();
}}
Ejecución del programa…Arrancar....Clase Carro
22
Ejemplo virtual…override
(Polimorfismo en Tiempo de ejecución)
class Vehiculo{ public virtual void Arrancar()
{ System.Console.WriteLine("Arrancar...Clase Vehi culo");}
}
class Carro : Vehiculo{ public override void Arrancar()
{ System.Console.WriteLine("Arrancar....Clase Car ro");}
}
class Programa{ static void Main()
{ Vehiculo v;v = new Vehiculo();v.Arrancar();v = new Carro();v.Arrancar();System.Console.ReadLine();
}}
Ejecución del programa…Arrancar...Clase VehiculoArrancar....Clase Carro
En una variabletipo “Vehiculo” se almacenan objetos tipo
“Vehiculo” y tipo “Carro”.
Al invocar el mismo método para el mismo
objeto, se observa
una conducta diferente,
apropiada paracada objeto.
Programación Orientada a Objetos con C#
Dr. Ramón Roque HernándezM.C. Bruno López Takeyas 12
23
override sealed
• Agregar “sealed” a un método “override” impide la futura sobre-escritura de ese método, proporcionando una implementación 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 PRENDIE NDO ");}
}class TVColor : TV{ public override void Prender()
{ System.Console.WriteLine(" La tele a color se es ta prendiendo");}
}
ERROR!!!...El método ya no se puede sobreescribir.
24
Ocultar métodos heredados
• Es posible ocultar un método heredado e introducir uno nuevo a la jerarquía de clases. El método 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 A rrancar ");}
}class Automovil : Vehiculo{
public new void Arrancar(){
System.Console.WriteLine(" Clase Automovil. Metodo Arrancar ");}
}
Programación Orientada a Objetos con C#
Dr. Ramón Roque HernándezM.C. Bruno López Takeyas 13
Referencias
• http://www.devjoker.com/contenidos/Tutorial-C/135/Polimorfismo.aspx
• http://www.nebrija.es/~abustind/Informatica/MetodologiaII/Polimorfismo.pdf
• http://apdaza-poo.blogspot.mx/2008/04/polimorfismo.html
• http://www.clikear.com/manuales/csharp/c38.aspx
• http://www.elguille.info/colabora/NET2005/jbarrientos_polimorfismoCS.htm 25