Documentos de Académico
Documentos de Profesional
Documentos de Cultura
user_4333106
Programación
Estudios España
Curso 2020-2021
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Contenidos
• Métodos en Java. Definición. Tipo devuelto. Terminación. Paso de
parámetros. Sobrecarga.
• Variables locales. Duración y alcance. Variables de instancia y
automáticas. La referencia this.
• Abstracción funcional en los lenguajes de programación. Funciones y
procedimientos. Tipos de parámetros.
• Recursión. Definición. Ejemplos. Recursión frente a iteración.
Al final de este capítulo debe ser capaz de escribir métodos en el contexto de las
clases Java utilizando los tipos primitivos del lenguaje y conocerá la recursión como
una herramienta para encontrar soluciones a problemas complejos.
Abstracción funcional 2
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
• Definición de métodos.
• Tipo devuelto por un método.
• Terminación de métodos: return.
• Parámetros de un método.
• Sobrecarga de métodos. Firma y prototipo de un método.
Abstracción funcional 3
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
Sintaxis:
[Modificadores] tipoDevuelto identificadorMetodo([argumentos])
{
// cuerpo del método
}
Abstracción funcional 4
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
Abstracción funcional 5
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Métodos en Java: ¿Dónde se declaran?
En Java no existen métodos fuera de las clases
→ Todos los métodos se definen en el interior de una clase.
No es posible definir métodos dentro de métodos.
Abstracción funcional 6
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
Abstracción funcional 7
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
Abstracción funcional 8
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
Abstracción funcional 9
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Lista de parámetros de un método
La lista de parámetros (argumentos) es una lista de las declaraciones
de parámetros que se pasan al método para su ejecución.
Abstracción funcional 10
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
Abstracción funcional 11
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
Abstracción funcional 12
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
Abstracción funcional 13
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Parámetros por valor y por referencia
Los parámetros de los métodos se pueden pasar por valor o por referencia.
Abstracción funcional 14
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
Abstracción funcional 15
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
Abstracción funcional 16
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
• El nombre del array es en realidad una referencia a un objeto que contiene los
elementos del array.
Abstracción funcional 17
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Paso de arrays como parámetros.
cla ss Paso_Ar rays_1 {
Abstracción funcional 18
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
Abstracción funcional 19
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
• Puesto que los métodos sobrecargados tienen el mismo nombre, los métodos
sobrecargados se diferencian por el número, tipo y orden de los argumentos en su lista de
parámetros.
Abstracción funcional 20
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
• Variables locales.
• Duración y alcance de las variables.
• Variables de instancia y automáticas.
• Referencia this.
Abstracción funcional 21
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Variables locales en los métodos
Declaración de variables locales
[mod ificador] tipoValorD evuelto no mbre([argu mentos]){
/ / declarac ión de var iables loc ales
/ / enunciad os
}
Un método puede usar variables locales y aquellas definidas fuera del método. Puede
haber coincidencia de nombres. ¿Cómo distinguirlas?.
→ La respuesta viene dada por la duración y alcance de las variables.
Abstracción funcional 22
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
Abstracción funcional 23
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
Abstracción funcional 24
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
int total;
No obstante, no es, en general, una buena
public void suma_array(int a[]) {
práctica dar los mismos nombres a variables
int subtotal = 0;
de instancia y variables locales.
for (int i = 0; i < a.length; i++)
Lo mismo ocurre si consideramos bloques. subtotal += a[i][j];
Abstracción funcional 25
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Un ejemplo de alcance de variables
public class Alcance {
int x = 10;
private static int f1(int x){
x = 1;
return x *= 2;
}
private static void f2(){
Cuestión 1: Solución
x -= 1;
} x = 2
public static void main (String [] args){ x = 10
int x = 5; x = 2
x = f1(x); x = 9
System.out.println("x = " + x );
System.out.println("x = " + this.x);
x = 2
f2(); x = 2
x = f1(this.x);
System.out.println("x = " + x );
System.out.println("x = " + this.x);
this.x = f1(x);
System.out.println("x = " + x );
System.out.println("x = " + this.x);
}
}
Abstracción funcional 26
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
Abstracción funcional 27
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
Abstracción funcional 28
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
Abstracción funcional 29
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Las funciones cómo mecanismo de abstracción
La abstracción funcional permite llevar a cabo el concepto de modularidad:
– Una función agrupa a un conjunto de instrucciones altamente cohesionadas
– Una función realiza una tarea específica.
– Para usar una función no es necesario conocer su implementación.
Abstracción funcional 30
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
Una función bien definida no modifica los Los procedimientos actúan sobre el entorno y
parámetros de entrada. pueden modificar los parámetros de entrada
(efectos colaterales → side effects).
Se utilizan en expresiones.
Los procedimientos pueden verse como una forma de extender las sentencias del lenguaje,
mientras que las funciones pueden verse como una extensión de los operadores:
Cuando se invoca una función se obtiene un valor a través de un valor de retorno.
Cuando se invoca un procedimiento el efecto es una modificación del entorno del
llamante, de la cual éste es advertido a través de los valores de los parámetros de salida.
Abstracción funcional 31
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
.. . crece
Datos dinámicos
Montículo (heap)
Otr os datos
Có digo
Abstracción funcional 32
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
Obsérvese que para las funciones sólo tienen sentido los parámetros de
entrada:
• Un usuario de una función quiere un resultado, no la modificación de sus datos.
• Sería bueno que el lenguaje de programación no ppeerrm
miittiieerraa oottrrooss ttiip
pooss de parámetros
para las funciones para evitar efectos laterales.
• Sin embargo, la mayor parte de los lenguajes de programación no imponen
ninguna restricción.
Abstracción funcional 33
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Recursión
• Definición.
• Ejemplos.
• Recursión frente a iteración.
Abstracción funcional 34
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
Abstracción funcional 35
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
1. Existe un caso base que tiene solución no recursiva (el caso del cero).
0! = 1, por definición.
Si el método recursivo ha llegado al caso base devuelve un resultado:
if(numero == 0) return 1;
3. Los problemas pequeños en los que se va diviendo el más grande deben converger
(como las series matemáticas) al caso base, si no, será infinita su ejecución.
Abstracción funcional 36
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
Abstracción funcional 37
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Recursión: serie de Fibonacci
La serie de Fibonacci comienza en 0 y 1 y tiene la propiedad de que cada número de
Fibonacci es la suma de los dos números de Fibonacci previos.
Cada llamada recursiva particiona el problema de tamaño n en dos de tamaño menor que
convergen al caso base pues n-1, n-2, n-3, ... ccoonnvveerrggeenn a 1 y a 0.
Abstracción funcional 38
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
return f(1f
f(2)) + f(0) return 1
(2)
return 1 return 0
Abstracción funcional 39
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
Abstracción funcional 40
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
Abstracción funcional 41
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9687077
Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.