Métodos y Parámetros - MiLibreta.com.mxgalvez.milibreta.com.mx/UAS/Lenguajes/C...
Transcript of Métodos y Parámetros - MiLibreta.com.mxgalvez.milibreta.com.mx/UAS/Lenguajes/C...
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
Métodos y
Parámetros
C#
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.
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
}
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
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
}
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.
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( );
} }
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.
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
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);
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
}
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.
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);
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);
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.
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
}
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.
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.
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
}
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
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.
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.
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
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
30/11/2017
25
Módulos en C#• FIUAS
Preguntas?