T10 - Funciones

  • 510 views
Uploaded on

 

More in: Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
510
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
5
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Tema – 10 Funciones o métodos
  • 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. PROGRAMACIÓN – Daniel Santiago 2
  • 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. PROGRAMACIÓN – Daniel Santiago 3
  • 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. PROGRAMACIÓN – Daniel Santiago 4
  • 5. 10.2. Declaración [modificadores] tipo_dato nombre_funcion (parámetros){ declaración de variables locales; instrucciones; return; } PROGRAMACIÓN – Daniel Santiago 5
  • 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. PROGRAMACIÓN – Daniel Santiago 6
  • 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]) PROGRAMACIÓN – Daniel Santiago 7
  • 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. PROGRAMACIÓN – Daniel Santiago 8
  • 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. PROGRAMACIÓN – Daniel Santiago 9
  • 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; } } } PROGRAMACIÓN – Daniel Santiago 10
  • 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. PROGRAMACIÓN – Daniel Santiago 11
  • 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. PROGRAMACIÓN – Daniel Santiago 12
  • 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. PROGRAMACIÓN – Daniel Santiago 13
  • 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 PROGRAMACIÓN – Daniel Santiago 14
  • 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. PROGRAMACIÓN – Daniel Santiago 15
  • 16. 10.8. Recursividad • Ejemplo: factorial public 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); } PROGRAMACIÓN – Daniel Santiago 16
  • 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. PROGRAMACIÓN – Daniel Santiago 17
  • 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); } } PROGRAMACIÓN – Daniel Santiago 18
  • 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. PROGRAMACIÓN – Daniel Santiago 19
  • 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. PROGRAMACIÓN – Daniel Santiago 20
  • 21. 10.10. Propagación de excepciones public 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; } PROGRAMACIÓN – Daniel Santiago 21
  • 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. PROGRAMACIÓN – Daniel Santiago 22
  • 23. 10.10. Propagación de excepciones public 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; } PROGRAMACIÓN – Daniel Santiago 23
  • 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. PROGRAMACIÓN – Daniel Santiago 24