Documentos de Académico
Documentos de Profesional
Documentos de Cultura
V1.0
Febrero 2014
“Providing a single interface to
Ferreiras entities of different types. . BS”
1
Polimorfismo
• Es cuando un método con un mismo
nombre se puede procesar de diferentes
maneras.
2
Polimorfismo
• El polimorfismo proporciona las siguientes
características :
3
Polimorfismo
• El polimorfismo es de dos tipos:
4
Polimorfismo estático
• La vinculación se produce en tiempo de
compilación;
5
Sobrecarga de métodos
La sobrecarga de métodos ( overloading
methods ) Significa definir dos o más métodos
dentro de la misma clase, los cuales tienen el
mismo nombre, pero con diferentes
declaraciones de parámetros. Los tipos de
retornos podrán ser iguales o diferentes. Lo
único que se toma en cuenta son los nombres
de los métodos y sus listas de parámetros, esto
es, la firma de los métodos.
6
Cuando un método sobrecargado se invoca,
utiliza el tipo y / o número de argumentos como
guía para determinar qué versión del método
sobrecargado debe llamar.
7
/*
polimoStatic0.cs
csc.exe 3.5
*/
Obsérvese que el método fofi ()
using System;
es sobrecargado 3 veces.
class Sobrecargada {
public void fofi(string cad1) {
Console.WriteLine("\n\t=> " + cad1 );
}
8
polimoStatic0.cs
9
polimoStatic0.cs
10
En resumen, los métodos sobrecargados:
Tienen diferentes listas de parámetros;
Los tipos de retorno pueden ser iguales o
diferentes. No importa;
Pueden cambiar el modificador de acceso;
Pueden declarar nuevas o más amplias
excepciones;
Pueden estar en la misma clase o en una clase
derivada;
La sobrecarga de métodos no tiene nada que
ver con la herencia y métodos virtuales.
11
Polimorfismo estático
• Polimorfismo estático, vinculación
temprana, sobrecarga de métodos Son
todos sinónimos.
• La sobrecarga de métodos es la forma
en que C# implementa el polimorfismo
estático.
18
/*
polimorDinam0.cs
*/
using System;
/////////////////
class Animal {
19
polimorDinam0.cs
20
polimorDinam0.cs
//////////////
class Polimorfismo0 {
}
}
//////////////////
21
polimorDinam0.cs
22
/*
polimorDinam0.cs
NOTA 1
*/
23
En resumen, para sobreescribir los métodos
en la clase base:
• Los métodos debe ser virtual
• Los métodos virtual o abstract no pueden ser private
• Un método declarado static no puede ser marcado como override, virtual o abstrac
• Si un método no puede ser heredado, este no puede ser sobreescrito;
• La lista de parámetros en el método sobreescrito debe ser exactamente la misma
que la lista del método en la clase base;
• El tipo de retorno en el método sobreescrito debe ser exactamente el mismo tipo
que el del método en la clase base o un subtipo de este.
• Un constructor no puede ser sobreescrito;
24
Polimorfismo dinámico
• La vinculación tardía Hace posible que, con un método declarado
en una clase base (o en una interface) y sobreescrito en las clases
derivadas (o en clases que implementan la interface), sea el tipo de
objeto, y no el tipo de la referencia lo que determine qué definición
del método se va a ejecutar.
27
Polimorfismo dinámico
Por ejemplo:
ClaseBase variableDeReferencia;
variableDeReferencia
= new ClaseDerivada();
28
/*
polimorDinam1.cs
csc.exe 3.5
*/
using System;
////////////////////
class Animal {
29
polimorDinam1.cs
////////////////
class Mamifero : Animal {
///////////////
class Caballo : Mamifero {
///////////////
30
polimorDinam1.cs
31
polimorDinam1.cs
/////////////
El Principio de Sustitución de Liskow
class Tester {
public static void Main() { Si se tiene una variable cuyo tipo es una
Animal refAnimal; superclase, el programa debería funcionar
correctamente si se coloca una instancia de
refAnimal = new Animal(); esa superclase o cualquiera de sus
refAnimal.hablar(); subclases en dicha variable.
32
polimorDinam1.cs
33
Polimorfismo dinámico en C# vía interface
34
Polimorfismo dinámico en C# vía interface
/*
polimorInterface0.cs
csc.exe 3.5
El nombre de una interface se puede utilizar para declarar el tipo de una variable,
el valor de la variable puede ser (de referencia) a un objeto de cualquier clase que
implemente esta interfaz. Así, podremos utilizar los métodos de la interface,
vía la variable de referencia a la que le fuese asignado un objeto de dicha clase,
sin mas que conocer el actual tipo de objeto.
Téngase en cuenta que la clase que implemente la interface debe implementar todos
los métodos declarados en esta ultima.
*/
36
polimorInterface0.cs
using System;
// Declaramos la interface
interface IProfesorEstudiante {
void elProfesor();
}
// Implementamos la interface
37
polimorInterface0.cs
38
polimorInterface0.cs
39
polimorInterface0.cs
40
La causa de este error es que
intentamos usar la variable de
referencia ,varRef, con un método que
polimorInterface0.cs no esta declarado en la interface usada
como tipo de la variable.
NOTA 1
41
Sum up of the polymorphism in C# 1
1. C# recognizes the method by its parameters and not by its name.
2. The return value/parameter type of a method is never the part of method signature if the
names of the methods are same. So this is not polymorphism.
3. Modifiers such as static are not considered as part of method signature.
4. The signature of a method consists of its name, number and types of its formal parameters. The
return type of a function is not part of the signature. Two methods can not have the same
signature and also non-members cannot have the same name as members.
5. Parameter names should be unique. And also we can not have a parameter name and a
declared variable name in the same function as same.
6. In case of pass by value, the value of the variable is passed and in the case of ref and out, the
address of the reference is passed.
7. The “this” param keyword can only be applied to the last argument of the method. So the n
number of parameters can only be at the end.
8. C# is very smart to recognize if the penultimate argument and the params have the same data
type.
9. Parameter array must be a single dimensional array.
42
EJEMPLOS
...
43
EJERCICIOS
...
44
Referencias
• Types (C# Programming Guide)
http://msdn.microsoft.com/en-us/library/ms173104.aspx
• Head First C#; Andrew Stellman and Jennifer Greene ; Second Edition; O’Reilly Media,
2010.
• Desarrollo de aplicaciones .NET con Visual C#; Miguel Rodríguez Gómez-Stern, Marcos
Antonio Besteiro Gorostizaga; McGra2-Hill/Interamericana de España, S.A.U., 2002.
• Visual C# Language
http://msdn.microsoft.com/en-us/library/aa287558(v=vs.71).aspx
• ...
45
GRACIAS
46