Title: Cap
1Capítulo 2Subprogramas/Funciones - Arreglos
2Programas extensos y complejos
- Un programa puede volverse complejo, esta
complejidad puede ser abordada en tareas más
simples, pequeñas y por lo tanto más manejables - Enfocándonos en nuestro objetivo, procedemos a
dividir nuestro problema en tarea más simples
llamados subprogramas/funciones.
Divide et impera - Divide y Conquista (Julio
César)
3Subprogramas/Funciones
- Un elemento clave para diseñar programas es la
creación de subprogramas/funciones - Permiten
- Organizar de mejor manera el código
- Reducir la cantidad de código redundante en un
programa. Reutilizar código - Solucionar problemas grandes de una forma más
fácil - Sentencias que se ejecutan muchas veces y que no
están contenidas en un ciclo, por lo general se
definen como un subprograma/función
4Subprogramas/funciones en Java
- Uno de los mecanismos de Java para implementar
funciones o subprogramas es a través de los
métodos estáticos
5Propiedades de los métodos estáticos
- Parámetros Se pueden usar en cualquier lugar del
código del cuerpo de la función de la misma forma
que se usan las variables locales. La diferencia
es que los parámetros se inicializan con el valor
de los argumentos provistos por la llamada. - Alcance El conjunto de sentencias que se pueden
referir al nombre de las variables. El alcance de
las variables en un método estático está limitado
para el cuerpo del método (variables locales).
Por lo tanto, no se puede referir a una variable
en un método estático que esta declarado en otro.
6Propiedades de los métodos estáticos
- Múltiples métodos. Se pueden definir todos los
métodos estáticos que se necesiten. Estos métodos
son independientes, excepto aquellos que pueden
interactuar a través de llamadas. - Llamando a otros métodos estáticos Los métodos
estáticos definidos en un archivo .java pueden
llamar a algún otro método estático en el mismo
archivo o algún método estático en la biblioteca
Java como Math. - Múltiples parámetros Como las funciones
matemáticas, un método estático en Java puede
tomar más de un argumento (o parámetros). Por
ejemplo para calcular la hipotenusa de un
triángulo con lados a y b
public static double calcularHipotenusa(double a,
double b) double auxiliarMath.sqrt(a a b
b) return auxiliar
7Usando y definiendo métodos estáticos
- Ya se ha utilizado la Java Math library, que
contiene métodos estáticos fáciles de entender. - Por ejemplo, cuando escribimos Math.abs(a-b) en
un programa, el efecto es como si se reemplazara
el código por el valor computado por el método
Java Math.abs() cuando se presenta con el valor
a-b. - Para crear este efecto, lo que se realiza es
cambiar el flujo de control del programa.
8Llamado de métodos
9Ejemplo
- Implemente un programa que utilice un
procedimiento que despliega un menú por pantalla - Entrada
- Opción del menú escogida
- Salida
- Mostrar por pantalla la opción que se escogió
10Ámbito de las variables
- Las variables definidas en los programas se
clasifican en - Variables Locales
- Declaradas y definidas dentro de un método
- Es visible solamente dentro de el método donde
fue definida - Es distinta de otras con el mismo nombre
- Puede ser declarada en cualquier parte del
programa - Variables Globales
- Es aquella que esta declarada en el programa
principal fuera de todo método y con la palabra
static para poder utilizarla desde el main. - Es visible en todo el programa
- Si se declara una variable local con el mismo
nombre, la variable local oculta a la global
11Ejemplo
public class Hipotenusa //z variable
global static double z //a b
parametros public static double
calcularHipotenusa(double a, double b) //
auxiliar variable local double
auxiliarMath.sqrt(a a b b) return
auxiliar public static void main(String
args) // x y variables locales double
x,y StdOut.println("Ingrese cateto
X") xStdIn.readDouble() StdOut.println("Ingrese
cateto Y") yStdIn.readDouble() zcalcularHipo
tenusa(x,y) StdOut.println("La hipotenusa vale"
z)
12Ámbito de las variables
- Se aconseja programar en base a variables locales
- Hace a los métodos independientes
- Es más fácil la reutilización de código
- La comunicación entre métodos y programa
principal, se realiza en base a los parámetros - Para utilizar un método solo se debe saber lo que
este hace, no se debe uno preocupar de cómo este
fue diseñado
13Parámetros
- Una lista de parámetros, o datos de entrada,
puede ser incluida como parte del método. - Esta lista de parámetros permite que ciertos
datos sean transferidos al método desde el
sub-programa que lo llama (mensaje).
14Ejemplo
- Implemente un programa que calcule el i-esimo
número de Fibonacci - Entrada El valor de i
- Salida Mostrar por pantalla el i-esimo número de
Fibonacci
15Ejemplo Fibonacci
public class FiboFunction public static int
fibo(int posicion) int aux 0, x1 1, x2
1 if (posicion 1 posicion 2) return
1 else for (int i 3 i lt posicion i) aux
x2 x1 x1 x2 x2 aux return
aux public static void main(String args)
StdOut.println(fibo(6))
- Todo método termina su ejecución cuando encuentra
un return, el cual debe devolver el tipo de dato
acorde a lo declarado.
16Paso de parámetros
- Los métodos pueden recibir datos de entrada de
dos formas - Con Variables Globales, lo que no es recomendable
pero se puede realizar - Para un mayor control del flujo del programa y el
valor de las variables se recomienta utilizar el
Paso de parámetros
17Paso de parámetros
- Existen dos formas de pasar parámetros a un
método - Paso de parámetros por valor
- Para las variables de tipo primitivos
- Paso de parámetros por referencia
- Para objetos (como los arreglos).
18Por valor
- Es lo que hemos visto hasta ahora
- El método trabaja con una copia de la variable o
valor original - El valor de la variable original que es pasada
como parámetro no se altera dentro del método - El método puede modificar la copia, pero no
altera a la variable original
19Paso por referencia
- Una manera para que los métodos trabajen con la
variable original, en vez de utilizar una copia
de estas, se le llama paso paso por referencia - Para pasar un parámetro por referencia se debe
utilizar objetos (como los arreglos). - objetos se profundizan en C3
20Paso por referencia
- Se crea un enlace entre el variable pasada como
parámetro y la variable recibida en el método - Toda modificación que se haga a la variable
dentro del método se refleja en la variable
original pasada como parámetro
21Ejemplo por Valor
public class Valor public static void
llenarEntero(int i) i100 public static
void main(String args) int numero0 llenarEnt
ero(numero) StdOut.println("Tenemos "
numero)
22Ejemplo Referencia
public class Referencia public static void
llenarEntero(int i) i0100 public
static void main(String args) int
numeronew int1 numero00 llenarEntero(numer
o) StdOut.println("Tenemos " numero0)
23Retorno de una Función
- Una función retorna al método que lo llamo
cuando - Se encuentra la llave que cierra la función
- O cuando la sentencia de return es ejecutada
- Puede ser usada con o sin un valor asociado
- Si el método fue declarado como aquella que
retorna un valor de un cierto tipo, entonces debe
retornar un valor. - Solo funciones declaradas con tipo void pueden no
usar el return
24Fin