3/15/11
1
Introducción a la Programación VI
Curso de Programación en Java
San<ago Muelas Pascual [email protected]
Métodos
Introducción
La mayor parte de los programas que resuelven problemas reales con<enen un alto número de líneas de código Cientos de miles de líneas
La experiencia ha demostrado que la mejor manera para desarrollar y mantener programas de cierta complejidad es el construirlos a par<r de piezas pequeñas o módulos Técnica divide y vencerás
Módulos
En Java hay tres <pos de módulos: Métodos Clases Paquetes
El API (Applica<on Programming Interface) de Java ofrece varios módulos
Objetos y Métodos Un objeto está compuesto de:
Estado: variables de instancia variables de clase
compar<das (ya se verán)
Métodos de instancia de clase
Introducción I
Los métodos describen los mecanismos para realizar las acciones/tareas de los objetos
Aísla al usuario (del objeto) de las tareas complejas que realiza
En otros lenguajes: funciones y procedimientos
3/15/11
2
Introducción II
Para promocionar la reusabilidad cada método debería estar limitado a realizar un tarea muy concreta El nombre de esa tarea <ene que expresar claramente la acción
del método
Un método que realiza una única tarea es más sencillo de comprobar y de depurar que uno que realice varias
Introducción III
Permiten modularizar un programa separando sus tareas en unidades auto contenidas
Ventajas: Divide y vencerás Reu<lización Evitar duplicidad
Facilita la depuración y el mantenimiento
En Java todo método <ene que pertenecer a una clase El programa principal main es un método de una clase
Introducción IV
Como ya se vio en el capítulo de introducción, los objetos interactúan por medio de mensajes
Un objeto le pide a otro que realice una acción (ejecuta el método X)
El objeto llamado realiza la acción pudiendo devolver un resultado puede no devolver nada
El objeto llamante no conoce los detalles de cómo se lleva a cabo la acción
¿Como funciona un programa orientado a objetos?
Cocina
No hay café
Tienda
Comprar café
Café
Buscar el café
Esquema general
Método(a1, ..., an)
a1 a2 an
...
resultado
Argumentos
Método
Valor de retorno Puede no
devolver un resultado
Declaración
(static) tipo identificador (parámetros ...) {
...
sentencias
...
}
Normalmente, se suelen u<lizar nombres compuestos de varias palabras y se escribe en mayúsculas la primera letra de cada palabra exceptuando la primera Ej: preguntarNombreUsuario
3/15/11
3
Uso de un método
Se invoca proporcionando valores a los argumentos de llamada
El valor de retorno se devuelve por medio de un return
Se admiten métodos que no devuelvan nada <po void como <po de retorno
Sólo con este <po no es obligatorio usar la sentencia return
Los métodos admiten recursividad
Ejemplo
//Declaración
static int suma(int a, int b) {
int resultado;
resultado = a+b;
return resultado;
}
static void imprimeHola() {
System.out.println(“hola”);
}
// Llamadas int resultado = suma(2,3); int d=4, f=5; suma(d,f); imprimeHola();
Paso de parámetros
Paso por valor: La función trabaja con una copia del valor del argumento Se considera un parámetro de entrada
Las operaciones dentro de la función no afectan a las variables de entrada
Para los que hayáis visto C++ No hay paso por referencia
Hay paso por valor de las referencias
Ejemplo
static int incremento (int a) {
a = a + 1;
return a;
}
public static void main(String[] args) {
int b = 0;
incremento(b); //Cuánto vale b una vez se ejecute el método
}
Ejemplo
static int incremento (int a) {
a = a + 1;
return a;
}
public static void main(String[] args) {
int a = 0, b=1;
incremento(a); //Cuánto vale a una vez se ejecute el método
}
0
0 1
Ejemplo
static int incremento (int a) {
a = a + 1;
return a;
}
public static void main(String[] args) {
int a = 0, b=1;
incremento(a); //Cuánto vale a una vez se ejecute el método
}
1
0 1
3/15/11
4
Bloque
Un conjunto de sentencias contenidas dentro de un par de llaves
Ya hemos visto varios:
int suma(int a, int b) { int resultado; resultado = a+b; return resultado; }
if (condicion) { ... }
while(condicion) { ... }
for(int i=0; i<10; i++) { ... }
Variables locales
Las variables declaradas dentro de un método
Su ámbito es la región del método que va desde su declaración al final del bloque No pueden usarse antes de haber sido declaradas
Se crean cuando el programa llega a su declaración
Las variables de <pos básicos se destruyen al finalizar el bloque
No se inicializan por defecto Si se intentan usar sin haber sido inicializadas ‐> ERROR
Ejemplos
static void imprime(int c) {
System.out.println(c);
}
public static void main(String[] args) {
imprime(a);
int a = 0, b=1;
if (a==0) {
int c=2;
imprime(a);
}
c=4;
}
Arrays como parámetros
Recordatorio: ¿Qué es un array? ¿Qué almacena una variable del <po array?
¿Qué se copiará al pasarlo como parámetro?
¿Qué pasa con un array creado en una función y devuelto como valor de retorno?
¿Qué es un array?
10 20 30 40
4
50 60 70 80
4
int[] valores1 = {10,20,30,40};
int[] valores2 = {50,60,70,80};
valores1 = valores2;
Arrays como parámetros II
Recordatorio: ¿Qué es un array? ¿Qué almacena una variable del <po array?
¿Qué se copiará al pasarlo como parámetro?
¿Qué pasa con un array creado en una función y devuelto como valor de retorno?
3/15/11
5
Arrays como parámetros III
Lo que se copia es la referencia no el objeto
Permite que se puedan modificar en métodos dis<ntos a donde hayan sido declarados Los objetos no son <pos básicos y no se destruyen cuando finaliza
su ámbito sólo cuando no pueden ser referenciados
recolector de basura
El parámetro se declara igual que una variable local <po[] nombre
Ejemplo static void modifica(int[] unarray) {
unarray[0] = 1;
}
public static void main(String[] args) {
int[] valores1 = {10,20,30,40};
modifica(valores1);
}
10 20 30 40
4
Ejemplo static void modifica(int[] unarray) {
unarray[0] = 1;
}
public static void main(String[] args) {
int[] valores1 = {10,20,30,40};
modifica(valores1);
}
1 20 30 40
4
Ejemplo static int[] creaArray() {
int[] unarray = {10,20,30,40};
return unarray;
}
public static void main(String[] args) {
int[] valores1 = creaArray();
}
10 20 30 40
4
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 exis4r 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
tipo identificador (parámetros ...) {
...
sentencias
...
}
3/15/11
6
Ejemplo public class Perro{
String nombre;
Perro(String nom) {
this.nombre = nom;
}
void ladrar() {
System.out.println(“Guau!”);
}
}
public static void main(String[] args) {
Perro miPerro = new Perro(“Pancho”);
miPerro.ladrar();
}
Métodos está<cos o de clase
No necesitan que exista un objeto para poder ser llamados
Pueden acceder a variables de clase Variables comunes a todos los objetos
Clase Coche Toyota Corolla Nº ventanas, dimensiones, ...
Tienen el modificador sta<c delante de la declaración del método
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();
Ejemplos
class Operaciones {
static int suma(int a, int b) {
return a + b;
}
public static void main(String[] args) {
System.out.println(suma(2,3));
System.out.println(Operaciones.suma(2,3));
}
}