6
3/15/11 1 Introducción a la Programación VI Curso de Programación en Java San<ago Muelas Pascual smuelas@fi.upm.es 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

Introducción a la Programación VI Métodoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/... · Dos pos de métodos De instancia De clase Métodos de instancia que exisr un

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Introducción a la Programación VI Métodoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/... · Dos pos de métodos De instancia De clase Métodos de instancia que exisr un

3/15/11 

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 

Page 2: Introducción a la Programación VI Métodoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/... · Dos pos de métodos De instancia De clase Métodos de instancia que exisr un

3/15/11 

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 

Page 3: Introducción a la Programación VI Métodoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/... · Dos pos de métodos De instancia De clase Métodos de instancia que exisr un

3/15/11 

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  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

}

0  1 

Page 4: Introducción a la Programación VI Métodoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/... · Dos pos de métodos De instancia De clase Métodos de instancia que exisr un

3/15/11 

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 

50 60 70 80 

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? 

Page 5: Introducción a la Programación VI Métodoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/... · Dos pos de métodos De instancia De clase Métodos de instancia que exisr un

3/15/11 

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 

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 

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 

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

...

}

Page 6: Introducción a la Programación VI Métodoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/... · Dos pos de métodos De instancia De clase Métodos de instancia que exisr un

3/15/11 

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));

}

}