introducción a la programación vii -...
Post on 17-Sep-2020
3 Views
Preview:
TRANSCRIPT
12/1/10
1
Introducción a la Programación VII
Curso de Programación en Java
San<ago Muelas Pascual smuelas@fi.upm.es
Noviembre 2010
Tipos de métodos
En Java no existen funciones
Todos son métodos Tienen que estar incluidos en una clase
Dos <pos de métodos De instancia De clase
Métodos de instancia
Tiene que exis<r un objeto para poder llamarlos Se u<liza la variable que almacena la referencia de objeto para la
invocación Ej:
scanner.nextInt(); System.out.println(2);
Pueden acceder a las variables de instancia
Se verán en el siguiente módulo
Métodos está<cos o de clase
La clase coche puede tener variables que sean comunes a todos los objetos
No necesitan que exista un objeto para poder ser llamados
Ejemplos: nº ruedas, tamaño lunas, encendidoCoche()...
Toyota Corolla
Gris Diesel 2.0
Rojo Gasolina
1.8
Métodos está<cos o de clase II
Tienen el modificador sta<c delante de la declaración del método
Pueden acceder y modificar a las variables de clase se verán más adelante
Se invocan o bien dentro de un método de la clase o por medio del iden<ficador de la clase Ej: MiClase.miMetodo(1,2,3); Math.sqrt();
Son los que vamos a u<lizar en los ejercicios
Se verán en detalle en el siguiente módulo
static tipo identificador (parámetros ...) {
sentencias
}
Método Main
Se denomina función principal (en inglés: main func<on)
Es un método de clase
Sirve de punto de inicio del programa
Cualquier clases puede tener un método main
Cuando se lanza java se especifica la clase que <ene el Main que se debe ejecutar
Si ninguna clase <ene un main, java devuelve un error
12/1/10
2
Estructura
public static void main( String[] args) {
sentencias
}
Argumentos del Main
¿Qué son los args? Un Array pero ¿Qué con<ene?
Los argumentos pasado por la línea de mandatos
Cuando ejecutamos un programa podemos pasarle argumentos Ejemplo: opciones del ejecutable, datos, ... java MiPrograma 1 2 3
En args se encuentran cada uno de los argumentos pasados en formato String
Demostración en NetBeans
Lista variable de argumentos
Se pueden crear métodos que reciban un número no especificado de argumentos
Se definiría un parámetro con el siguiente formato
int args...
Tiene que ser el úl<mo de los parámetros
Java lo que hace es conver<r los argumentos en un array es sólo una facilidad
Lista variable de argumentos
static int suma(double... valores){
int suma=0;
for (int i=0; i<valores.length; i++) {
suma += valores[i];
}
return suma;
}
int res = suma(2,3);
int res = suma(2,3,4);
int res = suma(2,3,4,5);
Recursividad Recursividad
Los métodos que hemos visto hasta ahora se llaman unos a otros de una manera jerárquica disciplinada
Para algunas problemas es ú<l el que los métodos se puedan llamar a sí mismos
El método sólo sabe como resolver un caso sencillo, el caso base
Para casos complejos, el método divide el problema: Problema más simple
el método divide el problema hasta que sea resoluble Paso de recursión
12/1/10
3
Recursividad II
Ejemplo árbol Genealógico
Descendientes ( persona )
Si la persona no <ene hijos terminar
Si <ene hijos devolver hijos + Descendientes(hijos)
Recursividad vs Iteración
static int fact(int num) {
if (num == 1)
return 1;
else
return num * fact(num-1);
}
static int fact(int num) {
int fact=1;
for(int i=num;i>1;i--) {
fact *= i;
}
return fact;
}
2! = 2 * 1 = 2 is returned
(a) Secuencia de llamdas recursivass. (b) Valores devueltos por cada llamada
Valor final = 120
5! = 5 * 24 = 120
4! = 4 * 6 = 24
3! = 3 * 2 = 6
1 returned
5!
1
4 * 3!
3 * 2!
2 * 1!
5!
1
4 * 3!
3 * 2!
2 * 1!
5 * 4! 5 * 4!
Detalle
2! = 2 * 1! = 2
Recursividad vs Iteración II
Iteración U<liza estructuras de repe<ción Termina cuando no se cumple la condición del bucle Control de la repe<ción por medio de un contador
Recursividad U<liza estructuras de selección (if, else o switch) Repe<ción por medio sucesivas llamadas a métodos Termina cuando se sa<sface el caso base Controla la repe<ción por medio de la división del problema en un
casos más sencillo
Recursividad vs Iteración III
Recursividad Más sobrecarga en cada iteración Consume más memoria Todo problema recursivo se puede resolver de manera itera<va
Algunos problemas son mucho más sencillos de plantear de manera recursiva
Menor número de líneas de código
top related