Métodos y Parámetros - MiLibreta.com.mxgalvez.milibreta.com.mx/UAS/Lenguajes/C...

25
30/11/2017 1 Facultad de Informática Culiacán Programación Modular en C# UNIVERSIDAD AUTÓNOMA DE SINALOA Instructor: MC. Gerardo Gálvez Gámez Septiembre de 2017 1 [email protected] Métodos y Parámetros C#

Transcript of Métodos y Parámetros - MiLibreta.com.mxgalvez.milibreta.com.mx/UAS/Lenguajes/C...

Page 1: Métodos y Parámetros - MiLibreta.com.mxgalvez.milibreta.com.mx/UAS/Lenguajes/C sharp/10.-Programacion modular... · 30/11/2017 6 Módulos en C#• FIUAS Return con una instrucción

30/11/2017

1

Facultad de Informática Culiacán

Programación Modular en C#

UNIVERSIDAD AUTÓNOMA DE SINALOA

Instructor: MC. Gerardo Gálvez Gámez

Septiembre de 2017

1

[email protected]

Métodos y

Parámetros

C#

Page 2: Métodos y Parámetros - MiLibreta.com.mxgalvez.milibreta.com.mx/UAS/Lenguajes/C sharp/10.-Programacion modular... · 30/11/2017 6 Módulos en C#• FIUAS Return con una instrucción

30/11/2017

2

Módulos en C#• FIUAS

Notas Generales

Es recomendable descomponer la lógica delprograma en unidades funcionales, yaque facilita la reutilización del código.

1. Uso de métodos.

2. Uso de parámetros.

3. Uso de métodos sobrecargados.

Módulos en C#• FIUAS

Uso de Métodos

Uno de los principios básicos del diseño de aplicaciones esque deben estar divididas en unidades funcionales, yaque las secciones pequeñas de código son más fáciles deentender, diseñar, desarrollar y depurar.

La división de una aplicación en unidades funcionalespermite también la reutilización de componentesfuncionales en toda la aplicación.

Definición de métodos.

Llamadas a métodos.

Uso de la instrucción return.

Uso de variables locales.

Devolución de valores.

Page 3: Métodos y Parámetros - MiLibreta.com.mxgalvez.milibreta.com.mx/UAS/Lenguajes/C sharp/10.-Programacion modular... · 30/11/2017 6 Módulos en C#• FIUAS Return con una instrucción

30/11/2017

3

Módulos en C#• FIUAS

Uso de Métodos

• Una aplicación C# está estructuradaen clases que contienen bloques decódigo con nombre llamadosmétodos.

• Un método es un miembro de unaclase que lleva a cabo una acción ocalcula un valor.

• Se utilizan para estructurar el código de un programa.

Módulos en C#• FIUAS

Definición de Métodos

Un método es una serie de instrucciones C# que hansido agrupadas bajo un nombre determinado.

Ejemplo:▫ Main es un método

Para definir métodos propios se usa la siguiente sintaxis:

static void MethodName(Lista de parámetros )

{

cuerpo del método

}

Page 4: Métodos y Parámetros - MiLibreta.com.mxgalvez.milibreta.com.mx/UAS/Lenguajes/C sharp/10.-Programacion modular... · 30/11/2017 6 Módulos en C#• FIUAS Return con una instrucción

30/11/2017

4

Módulos en C#• FIUAS

Creación de Métodos

Cuando se crea un método hay que especificar lo siguiente:

▫ Nombre Un método no puede tener el mismo nombre que una variable, una

constante o cualquier otro elemento que no sea un código y hayasido declarado en la clase. El nombre del método puede ser cualquieridentificador permitido de C# y distingue entre mayúsculas yminúsculas.

▫ Lista de parámetros A continuación del nombre del método viene una lista de parámetros

para el método. Esta lista aparece entre paréntesis que deben estarpresentes aunque no hay ningún parámetro, como se ve en losejemplos de la transparencia.

▫ Cuerpo del método Después de los paréntesis viene el cuerpo del método, que debe

estar entre llaves ({ y }) aunque no contenga más que unainstrucción.

Módulos en C#• FIUAS

Llamadas a Métodos

Una vez definido un método, se puede:

▫ Llamar a un método desde dentro de la mismaclase: Se usa el nombre del método seguido de una lista de

parámetros entre paréntesis.

▫ Llamar a un método que está en una clasediferente: Hay que indicar al compilador cuál es la clase que contiene

el método que se desea llamar. El método llamado se debe declararse con la palabra clave

public.

▫ Usar llamadas anidadas: Unos métodos pueden hacer llamadas a otros, que a su

vez pueden llamar a otros métodos, y así sucesivamente

Page 5: Métodos y Parámetros - MiLibreta.com.mxgalvez.milibreta.com.mx/UAS/Lenguajes/C sharp/10.-Programacion modular... · 30/11/2017 6 Módulos en C#• FIUAS Return con una instrucción

30/11/2017

5

Módulos en C#• FIUAS

Uso de la instrucción return

La instrucción return se puede emplear para hacer que unmétodo se devuelva inmediatamente al llamador. Sin unainstrucción return, lo normal es que la ejecución sedevuelva al llamador cuando se alcance la últimainstrucción del método.

• Return inmediato

• Return con una

instrucción condicional

static void ExampleMethod( )

{

int Numero;

Console.WriteLine("Hello");

if (Numero < 10)

{

return;

}

Console.WriteLine("World");

}

Módulos en C#• FIUAS

Return inmediato

Por defecto, un método es devuelto a su llamador cuandose llega al final de la última instrucción del bloque decódigo.

La instrucción return se utiliza cuando se quiere que unmétodo sea devuelto inmediatamente al llamador.

Ejemplo:

static void ExampleMethod( ){

Console.WriteLine("Hola");return;Console.WriteLine("mundo");//código inalcanzable

}

Page 6: Métodos y Parámetros - MiLibreta.com.mxgalvez.milibreta.com.mx/UAS/Lenguajes/C sharp/10.-Programacion modular... · 30/11/2017 6 Módulos en C#• FIUAS Return con una instrucción

30/11/2017

6

Módulos en C#• FIUAS

Return con una instrucción condicional

Es mucho más habitual, y mucho más útil, utilizar lainstrucción return como parte de una instruccióncondicional como if o switch.

Esto permite que un método sea devuelto al llamador si secumple cierta condición.

Ejemplo:static void ExampleMethod( )

{

int Numero;

Console.WriteLine("Hello");

if (Numero < 10)

{

return;

}

Console.WriteLine("World");

}

Módulos en C#• FIUAS

Uso de variables locales

• Variables locales:▫ Se crean cuando comienza el método.

▫ Son privadas para el método.

▫ Se destruyen a la salida.

• Variables compartidas:▫ Para compartir se utilizan variables de clase.

• Conflictos de ámbito:▫ El compilador no avisa si hay conflictos entre

nombres locales y de clase.

Page 7: Métodos y Parámetros - MiLibreta.com.mxgalvez.milibreta.com.mx/UAS/Lenguajes/C sharp/10.-Programacion modular... · 30/11/2017 6 Módulos en C#• FIUAS Return con una instrucción

30/11/2017

7

Módulos en C#• FIUAS

Variables Locales

static void MethodWithLocals( )

{

int x = 1; // Variable con valor inicial

ulong y;

string z;

...

}

Módulos en C#• FIUAS

Variables Compartidas

class CallCounter_Good{

static int nCount;

static void Init( ) {

nCount = 0;}static void CountCalls( ){

++ nCount; Console.Write("Método llamado " + nCuenta + " veces.");

} static void Main( ){

Init( );CountCalls( );CountCalls( );

} }

Page 8: Métodos y Parámetros - MiLibreta.com.mxgalvez.milibreta.com.mx/UAS/Lenguajes/C sharp/10.-Programacion modular... · 30/11/2017 6 Módulos en C#• FIUAS Return con una instrucción

30/11/2017

8

Módulos en C#• FIUAS

Devolución de valores

• El método se debe declarar con un tipo que no seavoid.

• Se añade una instrucción return con una expresióndonde:

▫ Se Fija el valor de retorno.

▫ Se devuelve al llamador.

• Los métodos que no son void deben devolver unvalor.

static int DosMasDos( ) {

int a,b;

a = 2;

b = 2;

return a + b;

}

static void Main( ) {

int x;

x = DosMasDos( );

Console.WriteLine(x);

}

Módulos en C#• FIUAS

Los métodos que no son void

Deben devolver valores:

1. Si se declara un método con un tipo distinto devoid, es obligatorio añadir al menos una instrucciónreturn.

El compilador intenta comprobar que cada uno de estosmétodos devuelve siempre un valor al método dellamada.

2. Si detecta que un método que no es void no incluyeninguna instrucción return, el compilador mostraráel siguiente mensaje de error: “No todas las rutasde código devuelven un valor.”

Este mensaje también aparecerá si el compilador detectaque es posible ejecutar un método que no es void sindevolver un valor.

Page 9: Métodos y Parámetros - MiLibreta.com.mxgalvez.milibreta.com.mx/UAS/Lenguajes/C sharp/10.-Programacion modular... · 30/11/2017 6 Módulos en C#• FIUAS Return con una instrucción

30/11/2017

9

Módulos en C#• FIUAS

Codificación de

Algoritmos al

Lenguaje.

• Elabore un algoritmo que solicite alusuario dos números reales, calcule lasuma e imprima el resultado en pantalla,utilice variables compartidas y métodospara leer, calcular e imprimir.

Módulos en C#• FIUAS

Uso de parámetros

• Declaración y llamadas a parámetros

• Mecanismos de paso de parámetros

• Paso por valor

• Paso por referencia

• Parámetros de salida

• Uso de listas de parámetros de longitud variable

• Normas para el paso de parámetros

• Uso de métodos recursivos

Page 10: Métodos y Parámetros - MiLibreta.com.mxgalvez.milibreta.com.mx/UAS/Lenguajes/C sharp/10.-Programacion modular... · 30/11/2017 6 Módulos en C#• FIUAS Return con una instrucción

30/11/2017

10

Módulos en C#• FIUAS

Declaración y llamadas a parámetros

• Declaración de parámetros:▫ Se ponen entre paréntesis después del nombre

del método

▫ Se definen el tipo y el nombre de cada parámetro

• Llamadas a métodos con parámetros:▫ Un valor para cada parámetro

static void MethodWithParameters(int n, string y)

{ ... }

MethodWithParameters(2, "Hola, mundo");

Módulos en C#• FIUAS

Llamadas a métodos con parámetros

El código de llamada debe indicar los valoresde los parámetros en la llamada al método.

Ejemplos:

MethodWithParameters(2, "Hola, mundo");

int p = 7;

string s = "Mensaje de prueba";

MethodWithParameters(p, s);

Page 11: Métodos y Parámetros - MiLibreta.com.mxgalvez.milibreta.com.mx/UAS/Lenguajes/C sharp/10.-Programacion modular... · 30/11/2017 6 Módulos en C#• FIUAS Return con una instrucción

30/11/2017

11

Módulos en C#• FIUAS

Mecanismos de paso de parámetros

Tres maneras de pasar parámetros:

entrada Paso por valor

entrada

salidaPaso por referencia

salida Parámetros de salida

Módulos en C#• FIUAS

Paso por valor

Mecanismo predeterminado para el paso deparámetros:

▫ Se copia el valor del parámetro.

▫ Se puede cambiar la variable dentro del método.

▫ No afecta al valor fuera del método.

▫ El parámetro debe ser de un tipo igual ocompatible.

static void SumaUno(int x)

{

x++; // Incrementar x

}

static void Main( )

{

int k = 6;

SumaUno(k);

Console.WriteLine(k); // Muestra el valor 6, no 7

}

Page 12: Métodos y Parámetros - MiLibreta.com.mxgalvez.milibreta.com.mx/UAS/Lenguajes/C sharp/10.-Programacion modular... · 30/11/2017 6 Módulos en C#• FIUAS Return con una instrucción

30/11/2017

12

Módulos en C#• FIUAS

Paso por referencia

• ¿Qué son los parámetros referencia?

▫ Una referencia a una posición de memoria.

▫ A diferencia de un parámetro valor, unparámetro referencia no crea una nuevaubicación de almacenamiento. Por elcontrario, un parámetro referenciarepresenta la misma posición de memoriaque la variable indicada en la llamada almétodo.

Módulos en C#• FIUAS

Paso por referencia

• Uso de parámetros referencia.

▫ Se usa la palabra clave ref en la declaracióny las llamadas al método.

▫ Los tipos y valores de variables debencoincidir.

▫ Los cambios hechos en el método afectan alllamador.

▫ Hay que asignar un valor al parámetroantes de la llamada al método.

Page 13: Métodos y Parámetros - MiLibreta.com.mxgalvez.milibreta.com.mx/UAS/Lenguajes/C sharp/10.-Programacion modular... · 30/11/2017 6 Módulos en C#• FIUAS Return con una instrucción

30/11/2017

13

Módulos en C#• FIUAS

Ejemplo

static void ShowReference(ref int nId, ref long nCount) {

// ... }

La palabra clave ref afecta únicamente al parámetro al queantecede, no a toda la lista de parámetros. En el siguientemétodo, nId se pasa por referencia pero longVar se pasa porvalor:

static void OneRefOneVal(ref int nId, long longVar){

//...

}

Módulos en C#• FIUAS

En la llamada a un método

Los parámetros referencia se indican utilizando lapalabra clave ref seguida de una variable.

El valor indicado en la llamada al método debe serexactamente igual al tipo en la definición delmétodo, y además debe ser una variable, no unaconstante ni una expresión calculada.

Ejemplo:

int x;long q;ShowReference(ref x, ref q);

Page 14: Métodos y Parámetros - MiLibreta.com.mxgalvez.milibreta.com.mx/UAS/Lenguajes/C sharp/10.-Programacion modular... · 30/11/2017 6 Módulos en C#• FIUAS Return con una instrucción

30/11/2017

14

Módulos en C#• FIUAS

Codificación de

Algoritmos al

Lenguaje.

• Elabore un algoritmo que solicite alusuario dos números reales, calcule lasuma e imprima el resultado en pantalla,utilice métodos que reciban comoparámetros por referencia los datos a leery por valor los datos a calcular e imprimir.

Módulos en C#• FIUAS

Parámetros de salida

• ¿Qué son los parámetros de salida?▫ Pasan valores hacia fuera, pero no hacia dentro

• Uso de parámetros de salida▫ Como ref, pero no se pasan valores al método

▫ Se usa la palabra clave out en la declaración y las llamadas al método

static void OutDemo(out int p)

{

// ...

}

int n;

OutDemo(out n);

Page 15: Métodos y Parámetros - MiLibreta.com.mxgalvez.milibreta.com.mx/UAS/Lenguajes/C sharp/10.-Programacion modular... · 30/11/2017 6 Módulos en C#• FIUAS Return con una instrucción

30/11/2017

15

Módulos en C#• FIUAS

Parámetros de salida

Transfieren datos fuera del método en lugar de al método.

Al igual que u parámetro referencia, un parámetro desalida es una referencia a una ubicación dealmacenamiento indicada por el llamador.

Sin embargo, no es necesario asignar un valor a lavariable indicada para el parámetro out antes de hacerla llamada, y el método asume que el parámetro no hasido inicializado.

Los parámetros de salida son útiles cuando se quieredevolver valores de un método por medio de unparámetro sin tener que asignar a éste un valor inicial.

Módulos en C#• FIUAS

Codificación de

Algoritmos al

Lenguaje.

• Elabore un algoritmo que solicite alusuario dos números reales, calcule lasuma e imprima el resultado en pantalla,utilice métodos que reciban comoparámetros de salida los datos a leer ypor valor los datos a calcular e imprimir.

Page 16: Métodos y Parámetros - MiLibreta.com.mxgalvez.milibreta.com.mx/UAS/Lenguajes/C sharp/10.-Programacion modular... · 30/11/2017 6 Módulos en C#• FIUAS Return con una instrucción

30/11/2017

16

Módulos en C#• FIUAS

Uso de listas de parámetros de longitud

variable

• Se usa la palabra clave params.

• Se declara como tabla al final de la lista de parámetros.

• Siempre paso por valor.

static void Main( )

{

long x = Sumador(63,21,84);

}

static long Sumador(params long[ ] Datos)

{

long Total, i;

for (i = 0, Total = 0; i < Datos.Length; i++)

total += Datos[i];

return Total;

}

Módulos en C#• FIUAS

Paso de valores

Hay dos maneras de pasar valores al parámetro params cuandose hace una llamada a un método con un parámetro delongitud variable:

▫ Como una lista de elementos separados por comas (la lista puedeestar vacía)

▫ Como una tabla Ambas técnicas se muestran en el siguientecódigo.

El compilador trata las dos técnicas de la misma forma.

static void Main( ){

long x;x = Sumador (63, 21, 84); // Listax = Sumador (new long[ ]{ 63, 21, 84 }); // Tabla

}

Page 17: Métodos y Parámetros - MiLibreta.com.mxgalvez.milibreta.com.mx/UAS/Lenguajes/C sharp/10.-Programacion modular... · 30/11/2017 6 Módulos en C#• FIUAS Return con una instrucción

30/11/2017

17

Módulos en C#• FIUAS

Normas para el paso de parámetros

• Mecanismos :▫ El paso por valor es el más habitual.

▫ El valor de retorno del método es útil para un solovalor.

▫ ref y/o out son útiles para más de un valor deretorno.

▫ ref sólo se usa si los datos se pasan en ambossentidos.

• Eficiencia:▫ El paso por valor suele ser el más eficaz.

Módulos en C#• FIUAS

Uso de métodos recursivos

• Es un método que puede hacer unallamada a sí mismo.

▫ Directamente.

▫ Indirectamente.

• Útil para resolver ciertos problemas

▫ Árboles.

▫ Listas.

Page 18: Métodos y Parámetros - MiLibreta.com.mxgalvez.milibreta.com.mx/UAS/Lenguajes/C sharp/10.-Programacion modular... · 30/11/2017 6 Módulos en C#• FIUAS Return con una instrucción

30/11/2017

18

Módulos en C#• FIUAS

Recursividad

• Poderosa herramienta de programación comoalternativa a algoritmos iterativos.

• Soluciones elegantes a problemas difíciles deresolver de otro modo (forma iterativa)

• Un método es recursivo si contieneinvocaciones a sí mismo

• Una llamada a un método recursivo puedegenerar una o más invocaciones al mismométodo, que a su vez genera otras, …

Módulos en C#• FIUAS

Cuando utilizar Recursividad

• En general, las soluciones recursivas son menoseficientes que las iterativas (costo mayor entiempo y memoria).

• Consejos:▫ Los algoritmos que por naturaleza son

recursivos y donde la solución iterativa escomplicada y debe manejarse explícitamenteuna pila para emular las llamadas recursivas,deben resolverse por métodos recursivos.

▫ Cuando haya una solución obvia al problemapor iteración, debe evitarse la recursividad.

Page 19: Métodos y Parámetros - MiLibreta.com.mxgalvez.milibreta.com.mx/UAS/Lenguajes/C sharp/10.-Programacion modular... · 30/11/2017 6 Módulos en C#• FIUAS Return con una instrucción

30/11/2017

19

Módulos en C#• FIUAS

Plantilla solución de Izq-Der

TipoDato NombreMetodo (parametros)

{

//definición de variables locales

//declaración del caso base

//Trabajo

//Llamada recursiva

}

Módulos en C#• FIUAS

Plantilla solución de Der - Izq

TipoDato NombreMetodo (parametros)

{

//definición de variables locales

//declaración del caso base

//Llamada recursiva

//Trabajo

}

Page 20: Métodos y Parámetros - MiLibreta.com.mxgalvez.milibreta.com.mx/UAS/Lenguajes/C sharp/10.-Programacion modular... · 30/11/2017 6 Módulos en C#• FIUAS Return con una instrucción

30/11/2017

20

Módulos en C#• FIUAS

Codificación de

Algoritmos al

Lenguaje.

• Elabore un algoritmo que solicite alusuario un número entero, calcule la sumade los números secuenciales desde cerohasta ese número.

Módulos en C#• FIUAS

Uso de métodos sobrecargados

Los métodos no pueden tener el mismo nombre queotros elementos en una clase.

Sin embargo, dos o más métodos en una clase sípueden compartir el mismo nombre. A esto se le da elnombre de sobrecarga.

• Declaración de métodos sobrecargados• Signaturas de métodos• Uso de métodos sobrecargados

Page 21: Métodos y Parámetros - MiLibreta.com.mxgalvez.milibreta.com.mx/UAS/Lenguajes/C sharp/10.-Programacion modular... · 30/11/2017 6 Módulos en C#• FIUAS Return con una instrucción

30/11/2017

21

Módulos en C#• FIUAS

Declaración de métodos sobrecargados

• Métodos que comparten un nombre en una clase

▫ Se distinguen examinando la lista de parámetros

class OverloadingExample

{

static int Suma(int a, int b)

{

return a + b;

}

static int Suma(int a, int b, int c)

{

return a + b + c;

}

static void Main( )

{

Console.WriteLine(Suma(1,2) + Suma(1,2,3));

}

}

Módulos en C#• FIUAS

Declaración de métodos sobrecargados

Los métodos sobrecargados son métodos quetienen el mismo nombre dentro de una clase.

El compilador de C# distingue métodossobrecargados comparando las listas deparámetros.

Page 22: Métodos y Parámetros - MiLibreta.com.mxgalvez.milibreta.com.mx/UAS/Lenguajes/C sharp/10.-Programacion modular... · 30/11/2017 6 Módulos en C#• FIUAS Return con una instrucción

30/11/2017

22

Módulos en C#• FIUAS

Signaturas de métodos

• Las signaturas de métodos deben ser únicasdentro de una clase.

• Definición de signatura.

Nombre del método

Tipo de parámetro

Modificador

Forman la definición

de la signatura Nombre de

parámetro

Tipo de retorno de método

No afectan a lasignatura

Módulos en C#• FIUAS

Uso de métodos sobrecargados

• Conviene usar métodos sobrecargados si:▫ Hay métodos similares que requieren parámetros

diferentes.

▫ Se quiere añadir funcionalidad al código existente.

• No hay que abusar, ya que:▫ Son difíciles de depurar.

▫ Son difíciles de mantener.

Page 23: Métodos y Parámetros - MiLibreta.com.mxgalvez.milibreta.com.mx/UAS/Lenguajes/C sharp/10.-Programacion modular... · 30/11/2017 6 Módulos en C#• FIUAS Return con una instrucción

30/11/2017

23

Módulos en C#• FIUAS

Codificación de

Algoritmos al

Lenguaje.

• Elabore un algoritmo que pueda sumardos números reales, enteros o cadenassegún lo indique el usuario(métodos

sobrecargados), emplee métodos y el tipo deparámetro apropiado.

Módulos en C#• FIUAS

Actividad #1 Extraclase

• Descripción:

▫ Codificar el siguientepseudocódigo que calcula eimprime:

El área de un triangulo (Base *Altura /2), y

Page 24: Métodos y Parámetros - MiLibreta.com.mxgalvez.milibreta.com.mx/UAS/Lenguajes/C sharp/10.-Programacion modular... · 30/11/2017 6 Módulos en C#• FIUAS Return con una instrucción

30/11/2017

24

Módulos en C#• FIUAS

Propuesta Algoritmo Modular//Objetivo: Calcular el área de un Triangulo

//Programador: MC. Gálvez

//Fecha: ___de Septiembre de 2015

INICIO//Definición de Constantes y Variables Globales

PRINCIPAL ()

INICIO

//Definición de Constantes y Variables Locales

REAL Area, Base, Altura

LecturaDatos(Altura,Base)

Area= CalcularArea(Altura, Base)

ImprimirArea(Area)

FIN

SINVALOR LecturaDatosTriangulo(REAL Altura, REAL Base)

INICIO

IMPRIMIR “Proporciona el valor de la Base: ”

LEER Base

IMPRIMIR “Proporciona el valor de la Altura: ”

LEER Altura

IMPRIMIR “Fin de lectura…”

FIN 47

Módulos en C#• FIUAS

Continuación …

REAL CalcularArea(REAL Altura, REAL Base)

INICIO

//Definición de Constantes y Variables Locales

REAL Area

///Proceso, calcular el área

Area=Base * Altura / 2

//Regresar el resultado obtenido

REGRESAR Area

FIN

SINVALOR ImprimirArea(REAL Area)

INICIO

IMPRIMIR “El Área es: ”, Area

FIN

FIN

48

Page 25: Métodos y Parámetros - MiLibreta.com.mxgalvez.milibreta.com.mx/UAS/Lenguajes/C sharp/10.-Programacion modular... · 30/11/2017 6 Módulos en C#• FIUAS Return con una instrucción

30/11/2017

25

Módulos en C#• FIUAS

Preguntas?