Publicado el 17 de Febrero del 2019
2.256 visualizaciones desde el 17 de Febrero del 2019
1,1 MB
18 paginas
Creado hace 5a (15/08/2018)
Programación Orientada a Objetos en C# .NET
CAPÍTULO 7
POLIMORFISMO
2
Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
1
Programación Orientada a Objetos en C# .NET
Preguntas detonadoras
¿Qué es y para qué sirve el polimorfismo?
¿Qué ventajas ofrece una aplicación polimórfica?
¿Qué conceptos debo dominar para implementar
polimorfismo?
¿Cuántos tipos de polimorfismo existen?
¿Cualquier método definido en una clase base puede
sobrescribirse en sus clases derivadas para provocar
comportamiento polimórfico?
¿Cuáles son las diferencias entre un método virtual,
uno abstracto y uno sobrescrito?
Pilares de la POO
3
4
Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
2
Programación 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
múltiples clases con funcionalidad diferente, pero
con métodos o propiedades denominados de forma
idéntica, que pueden utilizarse de manera
intercambiable mediante código cliente en tiempo
de ejecución.
el
polimorfismo
En C#
está
íntimamente
relacionado con la sobrecarga y métodos virtuales.
Conceptos relacionados con
polimorfismo
Sobrecarga (overload)
Herencia
Sobrescritura (override)
5
6
Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
3
Programación Orientada a Objetos en C# .NET
Sobrecarga [ Overload ]
La sobrecarga representa diferentes maneras de realizar
una misma acción.
En los programas se usa el mismo nombre en diferentes
métodos con diferentes firmas [número, orden y tipo de los
parámetros].
El código de programación 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 López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
4
Programación Orientada a Objetos en C# .NET
Herencia
Vehiculo
CaballosDeFuerza : int
Arrancar() : void
Detener() : void
Superclase
(Clase base)
(Clase padre)
(Clase madre)
Herencia
Automovil
Subclases
(Clases derivadas)
(Clases Hijas)
PalaMecanica
CantidadDePuertas : int
PesoMaximoDeLevante : int
Acelerar(int cuanto) : void
MoverPala(string direccion) : void
Herencia y sobrescritura
9
10
Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
5
Programación Orientada a Objetos en C# .NET
Sobrescritura [ Overriding ]
Sucede
cuando una
“B” hereda
características de una clase “A”, pero la clase
“B” re-define las características heredadas de
“A”.
clase
Propiedades y métodos pueden heredarse de
Si estas propiedades y
una superclase.
métodos
clase
derivada, se dice que han sido “sobrescritos”.
son re-definidos
en la
11
Sobrescritura [ Overriding ]
Articulo_Academico
Propiedades:
…
…
…
Metodos:
Abrir ( )
...
Herencia
miLibro y miLaptop heredan el método
Abrir ( ) pero NO lo utilizan; sino que
cada uno lo implementa nuevamente de
manera distinta.
miLibro.Abrir( )
miLaptop.Abrir( )
Un libro y una Laptop se
abren de diferente manera.
12
Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
6
Programación Orientada a Objetos en C# .NET
TIPOS
DE
POLIMORFISMO
Paramétrico
De sobrecarga
De subtipo
14
Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
7
Programación Orientada a Objetos en C# .NET
15
Ejemplo de polimorfismo
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
16
Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
8
Programación Orientada a Objetos en C# .NET
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
La sobrecarga de métodos no provoca polimorfismo
de sobrecarga, sino polimorfismo paramétrico
17
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
18
Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
9
Programación Orientada a Objetos en C# .NET
Ejemplo de polimorfismo de
subtipo (override)
Las clases derivadas redefinen los métodos y/o propiedades
heredados mediante la sobrescritura (override)
19
Otro ejemplo de polimorfismo de
subtipo (override)
Se sobrescribe el método heredado Mover() según
lo requiera la pieza del ajedrez
20
Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
10
Programación Orientada a Objetos en C# .NET
Diferencia entre Polimorfismo y
Sobrecarga
Un método está sobrecargado si dentro de una clase
existen dos o más declaraciones de dicho método con el
mismo nombre pero con parámetros distintos.
En definitiva: La sobrecarga se resuelve en tiempo de
compilación utilizando los nombres de los métodos y los
tipos de sus parámetros; el polimorfismo se resuelve en
tiempo de ejecución del programa, esto es, mientras se
ejecuta, en función de la clase a la que pertenece el
objeto.
21
Polimorfismo
POLI = Múltiples MORFISMO = Formas
ObjetoEnFormaDeCaja
miRefrigerador.Abrir( “Puerta de Abajo” )
miRefrigerador.Abrir( “Puerta de Arriba” , “Mitad” )
miRegalo.Abrir( ) miCofre.Abrir( )
22
Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
11
Programación Orientada a Objetos en C# .NET
Métodos virtuales
Son métodos 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 método virtual “PUEDE” ser sobrescrito, o utilizarse tal
como 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
acceso que el método “virtual” correspondiente
23
Método virtual
class ClaseBase
{
// Método virtual (preparado para ser modificado
en una clase derivada)
public virtual void Metodo()
. . . .
{
}
}
24
Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
12
Programación Orientada a Objetos en C# .NET
Método sobrescrito
class ClaseDerivada : ClaseBase
{
}
// Sobrescritura del método heredado
public override void Metodo()
{
}
. . . .
25
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();
}
}
Ejecución del programa…
Arrancar....Clase Carro
26
Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
13
Programación Orientada a Objetos en C# .NET
Ejemplo virtual…override
(Polimorfismo en Tiempo de ejecució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();
{
}
}
En una variable
tipo “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 para
cada objeto.
Ejecución del programa…
Arrancar...Clase Vehiculo
Arrancar....Clase Carro
27
override sealed
Agregar “sealed” a un método “override” impide la
futura sobrescritura 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 PRENDIENDO ");
}
}
class TVColor : TV
{ public override void Prender()
ERROR!!!...El método ya
no se puede sobrescribir.
{ System.Console.WriteLine(" La tele a color se esta prendiendo");
}
}
28
Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
14
Programación Orientada a Objetos en C# .NET
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 Arrancar ");
}
}
class Automovil : Vehiculo
{
public new void Arrancar()
{
System.Console.WriteLine(" Clase Automovil. Metodo Arrancar ");
}
}
Ejercicio
29
30
Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
15
Programación Orientada a Objetos en C# .NET
Diseño de la forma
Diagramas de flujo de los métodos
Empleado.CalcularSalario() : double
Método Virtual
return( HorasTrabajadas * SueldoPorHora )
31
32
Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
16
Programación Orientada a Objetos en C# .NET
Diagramas de flujo de lo
Comentarios de: 07.- Polimorfismo - Programación Orientada a Objetos en C# .NET (0)
No hay comentarios