Publicado el 20 de Enero del 2019
611 visualizaciones desde el 20 de Enero del 2019
2,8 MB
33 paginas
Programación
Tema 4: Métodos
Programación DIT-UPM
1
Contenidos
! 1. El concepto de método
! 2. Definición: cabecera
! 3. Definición: cuerpo
! 4. Uso de métodos
! 5. Métodos útiles
Programación DIT-UPM
2
Métodos
! Un método es un bloque de código con una
misión:
" Puede utilizar unos argumentos de entrada para
producir un resultado
" Puede manipular atributos de un objeto
(setters/getters)
! Un conjunto de métodos define una abstracción
que nos facilita resolver nuestro problema
usando nuestros propios conceptos
Programación DIT-UPM
3
Definición de métodos
! Cabecera
acceso tipo nombre (parametros ...) excepciones
! Cuerpo
" bloque
" secuencia de instrucciones
" declaración de variables automáticas
" los parámetros se comportan como variables
! Colocación
" Dentro de las clases, el orden de los métodos no importa
" NO dentro de otro método ni fuera de una clase
Programación DIT-UPM
4
Acceso
Tipo de
resultado Nombre Parámetros
Excepciones
Anatomía
public double distancia (Punto q) throws Exceptions
{
Variables
locales
}
double dx= this.x – q.getX();
double dy= this.y – q.getY();
return Math.sqrt(dx*dx + dy*dy);
Cabecera
Cuerpo
Resultado
Programación DIT-UPM
5
Signatura
! La signatura de un método está compuesta por
" <clase, nombre, <tiposDeLosParámetros> >
! No forman parte ni el tipo de retorno ni las
excepciones (si hay)
! No puede haber 2 métodos con igual
signatura
" Java no sabría a cual nos referimos
" Si hay varias signaturas, decimos que hay sobrecarga
<Punto, distancia, <Punto> >
<Punto, distancia, <double, double>
Programación DIT-UPM
6
Accesibilidad
! private
" sólo es accesible desde el texto de la propia clase
# this.metodo ( parametros )
# metodo ( parametros )
! no se dice nada
" es accesible por cualquier clase del mismo paquete
# objeto.metodo ( parametros )
! public
" es accesible por cualquiera
# objeto.metodo ( parametros )
! aplicable a atributos y métodos
Programación DIT-UPM
7
Parámetros
! Parámetro formal: el nombre asignado a los
parámetros al definir el método
" public void mueve (double nuevox, double nuevoy)
! Parámetro real: valores con los que se llama al
{ ... }
método
" p.mueve (3.15, Math.sqrt(22.11*x)+9);
! Deben ser compatibles en posición, número y
tipo
Programación DIT-UPM
8
Parámetros
! Se crean variables nuevas internas al método
cada vez que se llama, cuyo valor es una
copia del valor que se pasa como parámetro
" Si son de tipos primitivos: por valor
# se hace una copia del valor
" Si son de tipos referenciados: por referencia
(nombreDelObjeto)
# Se hace una copia de la referencia (se comparte el objeto
referenciado, pero no se duplica el objeto)
Programación DIT-UPM
9
Paso del valor
! tipos primitivos
" enteros, reales, boolean, caracteres
" se hace una copia
" las modificaciones no se notan fuera
void m (int x) {
x*= 2;
}
int n= 5;
System.out.println(n);
n=5
Programación DIT-UPM
10
Paso del valor
" enteros, reales, boolean, caracteres
! se hace una copia
! las modificaciones no se notan fuera
! void m (int x) {
! tipos primitivos
x*= 2;
}
x=5
x=10
! int n= 5;
System.out.println(n);
m(n);
n=5
Programación DIT-UPM
11
Paso del valor
" enteros, reales, boolean, caracteres
! se hace una copia
! las modificaciones no se notan fuera
! void m (int x) {
! tipos primitivos
x*= 2;
}
! int n= 5;
System.out.println(n);
m(n);
System.out.println(n);
n=5
Programación DIT-UPM
12
Paso de la referencia
! Objetos creados por el programador
" tras un new (...)
" y también los array
! Se comparte el objeto
! Si el método llamado modifica el objeto, éste
queda modificado
" efecto colateral
! Es a la vez cómodo...
y peligroso
Programación DIT-UPM
13
Paso la referencia
class Punto {
int x, y;
Punto (int _x, int _y) { x= _x; y= _y; }
void escala (int s) { x*= s; y*= s; }
void print () {
System.out.println(“x= “ + x);
System.out.println(“y= “ + y);
} //fin print
void doble (Punto p) {
2
p.escala(2);
3
} // fin doble
} // fin clase Punto
3 4
1
a
Punto a= new Punto(3, 4);
1
a.print();
doble(a);
2
a.print();
4
2
a
3
a
4
a
p
p
3 4
6 8
6 8
Programación DIT-UPM
14
Bloque
! Secuencia de instrucciones entre llaves
! Tamaño ideal inferior a una pantalla / hoja
" Debe ser íntegro, puede tener tamaño 0 (sin cuerpo)
! Un método -> un concepto
! Se pueden declarar variables automáticas
! Se ejecuta hasta } o hasta encontrar un return
" Puede haber return donde haga falta
! Los parámetros formales
" Se cargan con los valores de los reales
" Se comportan como variables
" Se eliminan al acabar el bloque
Programación DIT-UPM
15
return
! Los métodos pueden devolver valores
" void: No devuelve nada
# efectos tendrán que ser colaterales
public static void main (String[] args) { ... }
double s= Math.sqrt(2.0);
" Un valor de un tipo primitivo
" Un objeto de una clase definida
! sintaxis: return expresion;
! el compilador de Java comprueba que:
Punto q= p.desplaza(3, 4);
" el tipo de la expresión coincide con el declarado en el método
" en métodos que no devuelven nada (void) se puede usar sin
expresión (return ;)
# útil si no hay nada que ejecutar antes de llegar al final del método
Programación DIT-UPM
16
Ámbitos
! Ámbito estático: accesibilidad
" determina dónde puede referirse
# a un componente de un objeto (atributo o método)
# a una variable de un método (formal o automática)
! Ámbito dinámico: vida
" determina cuándo nace y muere un atributo o una
variable
" cuando un contenedor muere, se pierde su valor y
habrá que volver a inicializarlo
Programación DIT-UPM
17
Atributos de una clase
! Nacen con la construcción del objeto
" Objeto x= new Objeto(...);
! Viven hasta que el objeto es inaccesible
" se queda sin referencias, referencia -> null
! Regla:
" Todos los atributos deben ser private
# Para controlar todos los accesos mediante métodos
# Si un día queremos cambiar el valor de los atributos
bastará con ajustar los métodos
# Un método puede acceder a TODOS los campos de un
objeto (atributos u otros métodos) porque está DENTRO,
incluido los private
Programación DIT-UPM
18
Métodos de una clase
! Nacen al invocar un método
" Objeto.metodo(parametros);
! Viven hasta un return o }
Programación DIT-UPM
19
Variables automáticas
! El cuerpo de un método es un bloque
" se pueden declarar variables (automáticas)
! Las variables del bloque class
" pueden usarse aunque textualmente aparezcan
después
" “Viven” mientras “viva” el objeto
! Las variables del bloque método
" pueden usarse sólo después de definirse
# textualmente debe aparecer primero la definición y luego
el uso
" Viven sólo dentro del bloque de instrucciones
Programación DIT-UPM
20
y
e
x
e
d
o
t
i
f
f
i
d
x
e
d
o
t
i
f
f
i
d
y
e
d
o
t
i
p
e
d
o
t
i
b
m
Á
b
m
Á
b
m
Á
b
m
Á
Ámbito de variables
class Punto {
public double dameDistancia (Punto p) {
double xdiff = this.x - p.x;
double ydiff = this.y - p.y;
return Math.sqrt (xdiff*xdiff + ydiff*ydiff);
}
private double x;
private double y;
}
Programación DIT-UPM
21
Ámbito dinámico
! Al llamar a un método, se crea un ámbito
dinámico
" se generan todas las variables-parámetros
" se generan las variables automáticas
! Al salir del método
" desaparecen dichas variables
! El ámbito dinámico existe (está activo) mientras
estemos ejecutando el método
" incluso si se llaman nuevos métodos desde este
Programación DIT-UPM
22
¿Cómo se usa un método?
! Llamada a un método
1. en el punto del programa en el que se llama
se calculan los valores de los parámetros reales
2. se salta al comienzo del método
3. se cargan los parám. formales con los parám. reales
4. se ejecuta el bloque hasta que se alcanza return o }
5. se sustituye la llamada por el valor que devuelve el método
6. se continúa la ejecución a continuación del punto en el que
se llamó el método
! Método especial main
" el intérprete de Java lo llama cuando ejecutamos un
programa
Programación DIT-UPM
23
Perímetro de un método
! Llamada:
" objeto.metodo (parametros)
" clase.metodo (parametros)
" dentro de la misma clase basta poner el nombre
# metodo (parametros)
! Retorno:
" Pueden devolver un valor de cualquier tipo o clase
# se antepone el nombre del tipo o clase a devolver
" o no devolver nada
# se antepone la palabra void
Programación DIT-UPM
24
class EjemploPunto {
... main (String[] args) {
Punto p= new Punto(),
Punto q= new Punto();
double x;
.
.
.
x= p.distancia(q);
}
}
Ejemplo (V)
Aparece args
Son distintos p!
Aparece p
Aparece q
Aparece x
Aparece p
Aparece xdiff
Aparece ydiff
Desaparecen p,
xdiff, ydiff
Desaparecen args, p, q, x
Programación DIT-UPM
25
¿Cuándo definir un método?
! Método = concepto distinto y detallado
" debe hacer una sola cosa
! Aumento de la legibilidad
" su nombre debe indicar lo que hace (verbo)
" añadir comentarios
! No debe ser muy largo
" que quepa en una pantalla
! No debe tener muchos parámetros
Programación DIT-UPM
26
¿Cómo definir un método?
! Escribir su cabecera completa
" Darle nombre informativo
" Indicar el tipo de retorno
" Indicar los parámetros (los menos posibles)
! Escribir el cuerpo
" Primeras s
Comentarios de: Tema 4: Métodos (0)
No hay comentarios