PDF de programación - 08b.- Delegados - Programación Orientada a Objetos en C#

Imágen de pdf 08b.- Delegados - Programación Orientada a Objetos en C#

08b.- Delegados - Programación Orientada a Objetos en C#gráfica de visualizaciones

Publicado el 17 de Febrero del 2019
468 visualizaciones desde el 17 de Febrero del 2019
643,2 KB
16 paginas
Creado hace 1a (15/08/2018)
Programación Orientada a Objetos en C# .NET

CAPÍTULO 8
DELEGADOS

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 un delegado? ¿Para qué sirve?
¿En qué circunstancias se recomienda implementar

delegados?

¿Qué es un método anónimo? ¿Para qué sirve?
¿Qué es una expresión lambda?
¿Cuándo se recomienda implementar una expresión

lambda?

3

DELEGADOS
• Es un nuevo tipo que hace referencia a un método
• Es muy semejante a un apuntador de C++
• Permiten pasar los métodos como parámetros

Sintaxis
modificador

delegate tipo nombre(parámetros);

Modificadores:

• private
• protected
• public
• internal

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

2

Programación Orientada a Objetos en C# .NET

¿Para qué sirve un delegado?

• Si un delegado es un tipo, entonces se pueden

declarar variables de dicho tipo.

• Un delegado es una referencia a un método.
• Una variable creada de un tipo delegado

representa a un método determinado.

Los delegados se utilizan para

enviar métodos como parámetros

a otros métodos.

Un delegado

es un tipo

Ejemplo de delegados

public delegate bool TipoOrdenamiento(double x, double y);

• Cualquier método puede asignarse a un delegado.
• Deben coincidir…

• El prototipo del delegado
• Parámetros
• Tipo de dato del valor devuelto

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

3

Programación Orientada a Objetos en C# .NET

Cuando utilizar delegados en lugar
de interfaces
• Tanto los delegados como las

interfaces
permiten a un diseñador de clases separar las
declaraciones y la implementación de tipos.

• Cualquier objeto puede utilizar una referencia
de
interfase o un delegado sin tener
conocimiento alguno sobre la clase que
implementa
interfase o
delegado.

el método de

Utilice un delegado cuando …

• Se utilice un modelo de diseño de eventos.
• Se prefiere a la hora de encapsular un método

estático.

• El autor de las llamadas no tiene ninguna
otras
necesidad
propiedades, métodos o interfaces en el objeto
que implementa el método.

obtener

de

acceso

a

• Se desea conseguir una composición sencilla.
• Una clase puede necesitar más de una

implementación del método.

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

4

Programación Orientada a Objetos en C# .NET

Utilice una interfase cuando …

• Haya un grupo de métodos relacionados a los

que se pueda llamar.

• Una clase sólo necesita una implementación

del método.

• La clase que utiliza la interfase deseará
convertir esa interfase en otra interfase o tipos
de clase.

• El método que se va a implementar está
vinculado al tipo o identidad de la clase; por
ejemplo, métodos de comparación.

¿Cómo se declara una variable de
un tipo delegado?

• Los delegados se declaran como cualquier otro

objeto en .NET

• Para asignar un delegado, no se asigna un

“valor”, sino un método.

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

5

Programación Orientada a Objetos en C# .NET

Ejemplo de aplicación

• Utilizar un delegado
para seleccionar el
tipo de cálculo a
realizar

Diagrama de clase en UML

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

6

Programación Orientada a Objetos en C# .NET

Diseño de la forma

Diagrama de flujo

Circunferencia.Calcular(Operacion miOperacion) : double

Declarar

dblResultado : double

dblResultado = miOperacion( )

return( dblResultado )

13

14

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

7

Programación Orientada a Objetos en C# .NET

Codificación de la clase

class Circunferencia
{

//Atributo privado
private double _dblRadio;

// Propiedad pública
public double Radio
{

get
{

}

set
{

return _dblRadio;

_dblRadio = value;
if (_dblRadio < 0)
{

_dblRadio = 0;
throw new Exception("No se

permite un valor negativo");

}

}

}

// Método para calcular el área
public double CalcularArea()
{

return Math.PI * Math.Pow(Radio, 2);

}

// Método para calcular el Perímetro
public double CalcularPerimetro()
{

return Math.PI * Radio * 2;

}

// Delegado público
public delegate double Operacion();

// Método que recibe como parámetro el

método que desea invocar (del tipo del
delegado)

public double Calcular(Operacion

miOperacion)

{

}

}

double dblResultado = miOperacion();
return dblResultado;

Utilización del delegado para
invocar al método

private void btnCalcular_Click(object sender, EventArgs e)
{

Circunferencia miCircunferencia = new Circunferencia();

try
{

miCircunferencia.Radio = double.Parse(txtRadio.Text);

}
catch (Exception x)
{

MessageBox.Show(x.Message);
txtRadio.Text = "";
txtRadio.Focus();
return;

}

if (radCalcularArea.Checked)

MessageBox.Show("Área = " + miCircunferencia.Calcular(miCircunferencia.CalcularArea));

if (radCalcularPerimetro.Checked)

MessageBox.Show("Perímetro = " + miCircunferencia.Calcular(miCircunferencia.CalcularPerimetro));

}

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

8

Programación Orientada a Objetos en C# .NET

Métodos anónimos

• Hasta ahora, se han revisado los delegados
generados a partir de métodos con un nombre

• Son estrategias para crear objetos de un
delegado e inmediatamente definir el bloque
de sentencias de código que ejecutará cuando
se invoque

¿Para qué sirve un método
anónimo?

• Pasa directamente un bloque de sentencias de

código como parámetro a un delegado.

• Reduce con esto la sobrecarga de codificación

al momento de crear objetos de delegados

• Evita definir un método independiente.

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

9

Programación Orientada a Objetos en C# .NET

¿Cómo se invoca un método
anónimo?

• El método anónimo no tiene nombre,

entonces ¿cómo puede invocarse?

• La respuesta es a través de delegados.

Expresiones lambda

• Es un método anónimo que se utiliza para

crear delegados

• Permite

implementar

se
pueden enviar como parámetro o devolver un
valor producto de su llamada.

funciones que

• Puede ser un procedimiento o una función

• Puede o no tener parámetros

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

10

Programación Orientada a Objetos en C# .NET

Sintaxis de expresiones lambda

(parámetros de entrada) => expresión | bloque de sentencias

() => Console.Write(“Hola”) // Expresión lambda sin parámetros

x => x + 3 // Expresión lambda con un parámetro (no requiere paréntesis)

(Precio, Descuento) => Precio – (Precio * Descuento / 100.0)

(string Nombre, int Longitud) => Nombre.Length > Longitud

¿Cómo implementar expresiones
lambda?

• Con delegados

programador

define

• El

un
delegado que coincida con los parámetros y tipo
de valor devuelto de la expresión lambda

explícitamente

• Con delegados genéricos integrados

• Se utilizan los delegados genéricos integrados en
la librería de clase base (BCL) con la intención de
obviar la escritura de código extra para un
delegado y un método

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

11

Programación Orientada a Objetos en C# .NET

¿Cómo implementar expresiones
lambda?

// Delegado definido por el programador
delegate double Delegado(int x, double y);

// Delegado definido por el programador con expresión lambda
Delegado miDelegado = (x, y) => x * y;

// Delegado genérico con expresión lambda
System.Func<int, double, double> miDelegadoGenerico = (x, y) => x * y;

Ejemplo de aplicación con una
expresión lambda

• Calcular el descuento de un artículo

• Variables

• dblPrecio
• dblPorcentajeDescuento

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

12

Programación Orientada a Objetos en C# .NET

Expresión lambda que calcula el
descuento con delegado creado por
el programador

// Definición de un delegado

delegate double Calcular(double _dblPrecio, double
_dblPorcentajeDescuento);

// Delegado con expresión lambda

Calcular CalcularDescuento = (Precio, Descuento) => Precio - (Precio *
Descuento / 100.0);

// Ejecución de la expresión lambda

Console.WriteLine("El precio del artículo (con el descuento aplicado)
es "+CalcularDescuento(dblPrecio,
dblPorcentajeDescuento).ToString("C"));

Expresión lambda que calcula el
descuento con delegado genérico
integrado

// Delegado genérico con expresión lambda

System.Func<double, double, double>
CalcularDescuentoGenerico = (Precio, Descuento) =>
Precio - (Precio * Descuento / 100.0);

Console.WriteLine("El precio del artículo (con el
descuento aplicado) es " +
CalcularDescuentoGenerico(dblPrecio,
dblDescuento).ToString("C"));

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

13

Programación Orientada a Objetos en C# .NET

Otro ejemplo de aplicación de una
expresión lambda

• Utilizar

una
lambda
expresión
para determinar el
tipo de cálculo a
realizar

Diagrama de clase en UML

«delegate»

Operacion

• Nótese que no se
implementan los
métodos para calcular
el área ni el perímetro

Circunferencia

• El método

- _dblRadio: double

+ Radio { get; set; } : double

+ Calcular(miOperacion: Operacion) : double

Calcular() utiliza
un delegado para
realizar ambos cálculos

Ing. Bruno López Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas

14

Programación Orientada a Objetos en C# .NET

Codificación de la clase

class Circunferencia

{

private double _dblRadio;

public double Radio
{

get { return _dblRadio; }
set { _dblRadio = value; }

}

// Delegado
public delegate double Operacion();

// Método que recibe como parámetro el código
// a ejecutar enviado a través de una
// expresión lambda
public double Calcular(Operacion miOperacion)
{

return miOperacion();

}

}

private void btnCalcular_Click(object sender, EventArgs e)
{

Circunferencia miCircunferencia = new Circunferencia();

try {

miCircunferencia.Radio = double.Parse(txt
  • Links de descarga
http://lwp-l.com/pdf15253

Comentarios de: 08b.- Delegados - Programación Orientada a Objetos en C# (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad