t10 - funciones

24
Tema – 10 Funciones o métodos

Upload: daniel-santiago-martinez

Post on 18-Dec-2014

520 views

Category:

Education


1 download

DESCRIPTION

 

TRANSCRIPT

Page 1: T10 - Funciones

Tema – 10Funciones o métodos

Page 2: T10 - Funciones

PROGRAMACIÓN – Daniel Santiago 2

10.1. Introducción

• Los programas pueden estructurarse en partes más pequeñas y sencillas llamadas funciones (o métodos).

• Modularización: técnica de programación caracterizada por agrupar el código de un programa en diversas funciones.

• La comunicación entre funciones se realiza mediante “llamadas”, que pueden realizarse desde diferentes puntos de un mismo programa. De esta forma se evita repetir código.

Page 3: T10 - Funciones

PROGRAMACIÓN – Daniel Santiago 3

10.1. Introducción

• Una función es una porción de código que se identifica mediante un nombre, y que realiza unas operaciones determinadas.

• Las operaciones que realiza una función siempre son las mismas, pero en cada llamada a la función se pueden variar los datos.

• Todo programa en Java consta de, al menos, una función: main.

Page 4: T10 - Funciones

PROGRAMACIÓN – Daniel Santiago 4

10.1. Introducción

• Al llamar a una función se ejecutan las instrucciones de ésta, y cuando finaliza, el programa vuelve al punto en que se había realizado la llamada.

• Una función puede incluir o no datos en su llamada, los parámetros, y puede devolver o no un valor mediante la instrucción return.

Page 5: T10 - Funciones

PROGRAMACIÓN – Daniel Santiago 5

10.2. Declaración

[modificadores] tipo_dato nombre_funcion (parámetros){

declaración de variables locales;instrucciones;return;

}

Page 6: T10 - Funciones

PROGRAMACIÓN – Daniel Santiago 6

10.2. Declaración

• Los modificadores especifican cómo puede llamarse al método. Hay varios que se verán en el tema siguiente (public, private, static, etc.).

• tipo_dato: indica el tipo de valor que devuelve la llamada a la función (int, char, double…).– Las funciones que no devuelven ningún dato son de tipo

void.• Los parámetros introducen información para la

ejecución de la función. Si no existen parámetros explícitos se dejan los paréntesis vacíos.

Page 7: T10 - Funciones

PROGRAMACIÓN – Daniel Santiago 7

10.2. Declaración

• Ejemplos de cabecera de función:public static void main(String [] args)public static void imprimir_menu()public double media_notas (double notas[10])

Page 8: T10 - Funciones

PROGRAMACIÓN – Daniel Santiago 8

10.3. Llamadas

• Una función se puede llamar varias veces, aunque sólo se declare una vez.

• La llamada a una función se realiza mediante el nombre de ésta y todos sus parámetros, si los tiene, ordenados.

• En Java, a diferencia de otros lenguajes de programación, para poder llamar a una función no hace falta que ésta esté previamente declarada. Puede declararse más abajo.

Page 9: T10 - Funciones

PROGRAMACIÓN – Daniel Santiago 9

10.4. Devolución de valores

• Las funciones que no se declaran como void devuelven un valor. Estas funciones terminarán con la instrucción return.

• Al terminar de ejecutarse la función, el programa vuelve al punto en que se llamó. El valor devuelto por la función puede ser utilizado en las siguientes instrucciones del programa, fuera de la función.

Page 10: T10 - Funciones

PROGRAMACIÓN – Daniel Santiago 10

10.4. Devolución de valores• Ejemplo:

public class Funciones{public static void main(String [] args) throws Exception{

int a = 5, b = 6;int max = mayor(a, b);System.out.println("El mayor es " + max);

}

public static int mayor(int a, int b){if(a<b){ return b;}else{ return a;}

}}

Page 11: T10 - Funciones

PROGRAMACIÓN – Daniel Santiago 11

10.5. Ámbito de las variables

• Las variables de un programa pueden clasificarse según el ámbito en el que son conocidas y accesibles. El ámbito de una variable dependerá de dónde se declare.

• En Java tendremos dos tipos de variables:– Variables miembro de una clase: se definen dentro de una

clase, fuera de los métodos. Se verán más adelante.– Variables locales: se definen dentro de un método. La

variables desaparecen una vez finalizada la ejecución del método. No son visibles ni accesibles desde otros métodos.

Page 12: T10 - Funciones

PROGRAMACIÓN – Daniel Santiago 12

10.6. Paso de parámetros

• El paso de parámetros se puede entender como darle valor a los parámetros de la función.

• El paso de parámetros en Java se hace por valor. Esto significa que cuando una variable se pasa a una función como parámetro, ésta recibe una copia del valor original. Si la función modifica el parámetro, sólo cambia la copia y el valor original permanece intacto.

Page 13: T10 - Funciones

PROGRAMACIÓN – Daniel Santiago 13

10.7. Parámetros en la función main

• El método main tiene un único parámetro: un vector de cadenas de caracteres.

• Podemos pasar parámetros a la función main desde la línea de comandos del SO, cuando ejecutamos el programa.

• Hay que tener en cuenta que los parámetros que le pasemos a la función main son de tipo String. Para hacer cálculos tendremos que transformarlos al tipo de dato deseado.

Page 14: T10 - Funciones

PROGRAMACIÓN – Daniel Santiago 14

10.7. Parámetro en la función main

• Ejemplo:class alumnos{

public static void main (String alumnos[]){ System.out.println(“Hola ” + alumnos[0]); System.out.println(“Hola ” + alumnos[1]);}

}Ejecutamos: java alumnos Paco Pepe

Page 15: T10 - Funciones

PROGRAMACIÓN – Daniel Santiago 15

10.8. Recursividad

• La recursividad es un proceso en que una función se llama a sí misma repetidamente hasta que satisface cierta condición.

• Se usa para cálculos repetitivos en los que el resultado de cada iteración se determina a partir del resultado de alguna iteración anterior.

• Normalmente un problema puede resolverse de forma recursiva e iterativa.

Page 16: T10 - Funciones

PROGRAMACIÓN – Daniel Santiago 16

10.8. Recursividad

• Ejemplo: factorialpublic class Factorial{

public static void main (String [] args){System.out.println(“Factorial de 10 es ” + fact(10));

}public static long fact(int x){

if(x<=1) return 1;else return x*fact(x-1);

}

Page 17: T10 - Funciones

PROGRAMACIÓN – Daniel Santiago 17

10.9. Sobrecarga de funciones

• Java permite asignar el mismo identificador a distintas funciones, cuya diferencia reside en el tipo o número de parámetros que utilicen.

• La sobrecarga (overloading) de las funciones puede resultar muy útil al efectuar llamadas a un método, ya que en lugar de tener que recordar identificadores de métodos distintos, basta con recordar uno sólo.

Page 18: T10 - Funciones

PROGRAMACIÓN – Daniel Santiago 18

10.9. Sobrecarga de funciones• Ejemplo:

public class Funciones {public static void main (String[] args) {int a=3;int b=2;int c=1;System.out.println("El mayor de " + a + " y " + b + " es: " + mayor(a,b));System.out.println("El mayor de " + a + ", " + b + " y " + c + " es: " + mayor(a,b,c));}public static int mayor (int a, int b) {return a>b ? a : b;}public static int mayor (int a, int b, int c) {return mayor(mayor(a,b),c);}}

Page 19: T10 - Funciones

PROGRAMACIÓN – Daniel Santiago 19

10.10. Propagación de excepciones

• Cuando se produce una excepción dentro de un método, se puede capturar dentro de éste y tratarlo. De no hacerse, la excepción se propaga automáticamente al método que lo llamó, y así sucesivamente hasta que un método captura la excepción o llegamos al main.

• IMPORTANTE: los errores de la clase Exception no se propagan.

Page 20: T10 - Funciones

PROGRAMACIÓN – Daniel Santiago 20

10.10. Propagación de excepciones

• Observaremos en el siguiente ejemplo qué ocurre cuando se produce un error de tipo NumberFormatException y no lo capturamos en el método leerNumero.– Saldrá el mensaje de error que tenemos en el

bloque catch en el main.

Page 21: T10 - Funciones

PROGRAMACIÓN – Daniel Santiago 21

10.10. Propagación de excepcionespublic static void main(String[] args) { int num; try{ System.out.println("Introduce un número: "); num = leerNumero(); System.out.println("El número es " + num); } catch(NumberFormatException e){ System.out.println("Has insertado letras en vez de números"); }}static int leerNumero(){ int numero = 0; InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); try{ numero = Integer.parseInt(br.readLine()); } catch(IOException e){ System.out.println("ERROR"); } return numero;}

Page 22: T10 - Funciones

PROGRAMACIÓN – Daniel Santiago 22

10.10. Propagación de excepciones

• ¿Qué ocurrirá ahora si capturamos la excepción en el método leerNumero?– Ahora no debe ejecutarse el bloque catch del

main.

Page 23: T10 - Funciones

PROGRAMACIÓN – Daniel Santiago 23

10.10. Propagación de excepcionespublic static void main(String[] args) { int num; try{ System.out.println("Introduce un número: "); num = leerNumero(); System.out.println("El número es " + num); } catch(NumberFormatException e){ System.out.println("Has insertado letras en vez de números"); }}static int leerNumero(){ int numero = 0; InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); try{ numero = Integer.parseInt(br.readLine()); } catch(Exception e){ //CAPTURAMOS EN ESTA FUNCIÓN CUALQUIER TIPO DE EXCEPCIÓN System.out.println("ERROR"); } return numero;}

Page 24: T10 - Funciones

PROGRAMACIÓN – Daniel Santiago 24

10.10. Propagación de excepciones

• Con estos ejemplos vemos la utilidad de no capturar el error dentro del método donde se produce, sino dejarlo que se propague, debido a la necesidad de tener que controlarlo fuera.