SlideShare una empresa de Scribd logo
1 de 40
Descargar para leer sin conexión
Tema 5. Métodos
Introducción a la Informática y a la Programación (IIP)
Curso 2011/12
Departamento de Sistemas Informáticos y Computación
Contenidos
1. Métodos de objeto y métodos de clase
2. Características de los métodos de objeto o
dinámicos
3. Características de los métodos de clase o
estáticos
4. La pila de llamadas
5. Sobrescritura de los métodos de Object
6. Documentación de los métodos
20/10/2011 IIP - Curso 2011/12 2
Estructura básica de una clase:
atributos y métodos
public class Circulo {
private double radio;
private String color;
private int centroX;
private int centroY;
public Circulo() {
radio = 50;color = "negro";
centroX = 100; centroY = 100;
}
public double area(){
return 3.14 * radio * radio;
}
...
}
20/10/2011 IIP - Curso 2011/12 3
Atributos: Estructura de
los objetos de la clase
Métodos: Operaciones
que se pueden hacer
cuando los objetos de la
clase
Ejemplo de clase-programa
public class ProgramaTri {
public static void main(String[] args) {
Punto p1 = new Punto(); p1.x = 2.5; p1.y = 3;
Punto p2 = new Punto(); p2.x = 2.5; p2.y = -1.2;
Punto p3 = new Punto(); p3.x = -1.5; p1.y = 1.4;
System.out.println("Triángulo de vértices: ");
System.out.println("(" + p1.x + "," + p1.y + ")");
System.out.println("(" + p2.x + "," + p2.y + ")");
System.out.println("(" + p3.x + "," + p3.y + ")");
double dx = p1.x - p2.x;
double dy = p1.y - p2.y;
double lado12 = Math.sqrt(dx*dx + dy*dy);
dx = p2.x - p3.x;
dy = p2.y - p3.y;
double lado23 = Math.sqrt(dx*dx + dy*dy);
dx = p1.x - p3.x;
dy = p1.y - p3.y;
double lado13 = Math.sqrt(dx*dx + dy*dy);
double perimetro = lado12 + lado23 + lado13;
System.out.println("Perímetro: " + perimetro);
}
}
20/10/2011 IIP - Curso 2011/12 4
Instrucciones repetidas
con distintos datos:
p1 y p2
p2 y p3
p1 y p3
Subprograma
public class ProgramaTri {
public static void main(String[] args) {
Punto p1 = new Punto(); p1.x = 2.5; p1.y = 3;
Punto p2 = new Punto(); p2.x = 2.5; p2.y = -1.2;
Punto p3 = new Punto(); p3.x = -1.5; p1.y = 1.4;
System.out.println("Triángulo de vértices: ");
System.out.println("(" + p1.x + "," + p1.y + ")");
System.out.println("(" + p2.x + "," + p2.y + ")");
System.out.println("(" + p3.x + "," + p3.y + ")");
double lado12 = distancia(p1,p2);
double lado23 = distancia(p2,p3);
double lado13 = distancia(p1,p3),
double perimetro = lado12 + lado23 + lado13;
System.out.print("Perímetro: " + perimetro);
}
/** Calcula la distancia entre dos puntos. */
static double distancia(Punto p, Punto q) {
double dx = p.x - q.x; double dy = p.y - q.y;
return Math.sqrt(dx*dx + dy*dy);
}
}
20/10/2011 IIP - Curso 2011/12 5
+ LEGIBILIDAD
+ SEGURIDAD
Métodos de objeto (dinámicos) y de clase
(estáticos)
• Los métodos de objeto o dinámicos se definen en una clase para
crear (constructores) y manipular la información de los objetos
de la clase (de instancia).
– Punto p = new Punto(); p1.x =2.5; p1.y = 3;
– double d = p.distOrigen();
Se denomina objeto en curso al objeto concreto que se crea o manipula.
• Los métodos de clase no se aplican sobre objetos, actúan
únicamente sobre sus parámetros y se pueden definir en
cualquier clase. Se deben declarar como static.
– Math.sqrt(x) es una llamada al método estático sqrt de la clase
Math
– distancia es un método de la clase ProgramaTri
20/10/2011 IIP - Curso 2011/12 6
Características de los métodos de instancia
• Definición:
[modificadores] TipoRetorno nombreMetodo ([ListaParametros]){
// instrucciones del cuerpo del método
}
20/10/2011 IIP - Curso 2011/12 7
public double distancia(Punto p)
{ double x = p.x – this.x;
double y = p.y – this.y;
return Math.sqrt(x*x + y*y);
}
parámetronombrevisibilidad tipo
cabecera
cuerpo
valor de retorno
objeto en curso
Métodos de instancia: modificadores de
visibilidad o acceso
20/10/2011 IIP - Curso 2011/12 8
Al igual que para los atributos, existen las siguientes modalidades de
acceso a los métodos de una clase:
1. private: accesible sólo dentro de la clase.
2. public: accesible en cualquier parte donde la clase sea
accesible (incluso desde fuera del paquete).
3. Sin modificador de acceso (friendly): público pero accesible
sólo dentro del paquete.
class subclass package world
private sí no no no
public sí sí sí sí
sin especificar sí no sí no
¿public o private?
20/10/2011 IIP - Curso 2011/12 9
public class Punto {
private double x; // atributo que representa la abscisa
private double y; // atributo que representa la ordenada
/** Método que permite mover un punto en el plano, cambiando
* sus coordenadas a partir de dos valores dados. */
public void mover(double px, double py) { x += px; y += py; }
/** Método privado que devuelve un valor entero aleatorio en
* el rango [0,2*Math.sqrt(x*x+y*y)]. */
private int aleatorio() {return
(int)(Math.random()*(2*distOrigen()+1)); }
/** Método que permite mover un punto en el plano, cambiando
* sus coordenadas a partir de dos valores aleatorios. */
public void moverAleat() { x += aleatorio(); y += aleatorio(); }
/** Método que calcula la distancia de un punto al origen (0,0) */
public double distOrigen() { return Math.sqrt(x*x + y*y); }
/** Método que calcula la distancia de un punto a otro punto dado */
public double distancia(Punto p) {
double x = p.x - this.x; double y = p.y - this.y;
return Math.sqrt(x*x + y*y);
}
}
¿public o private?
20/10/2011 IIP - Curso 2011/12 10
moverAleat
distOrigen
x y
aleatorio
PRIVADO
PÚBLICO
distancia
mover
Métodos de instancia: tipo de retorno
20/10/2011 IIP - Curso 2011/12 11
• Mediante el tipo de retorno se especifica el tipo del valor que el método
devuelve o se usa la palabra reservada void para indicar que el método no
devuelve ningún valor
• El tipo de cualquier valor de retorno de un método debe ser el mismo que el
tipo de retorno del método -único y definido en su cabecera
• El tipo de retorno de un método puede ser cualquier tipo de datos Java,
primitivo o referencia
• Para devolver un valor de retorno de un método se usa la instrucción
return expresión ;
• La ejecución de un método finaliza tras la ejecución una instrucción return
• Si un método no devuelve explícitamente nigún valor vía return entonces
el tipo de su resultado es void –implícitamente, se ejecuta "return ;"
como última instrucción de su cuerpo.
Métodos de instancia: parámetros
20/10/2011 IIP - Curso 2011/12 12
• Los parámetros definidos en la cabecera de un método, al
declararlo, se denominan parámetros formales pues no tienen
asociado un valor real
Sintaxis : tipo1 nomParam1, tipo2 nomParam2, ..., tipok nomParamk
¡Atención! No confundir esta sintaxis con la de declaración de variables:
tipo1 nomParam1, nomParam2, ..., nomParamk es una declaración
de parámetros ¡¡¡ incorrecta !!!!
Uso en el cuerpo del método: (sus identificadores) pueden
usarse como variables en el cuerpo del método, sin volver a
declararse. ¡Atención! su inicialización se realiza única y
exclusivamente al invocar la ejecución del método
• Se puede declarar métodos sin parámetros (nomMetodo()), i.e.
con una lista de parámetros vacía
1320/10/2011 IIP - Curso 2011/12 13
public class Punto {
private double x;
private double y;
…
public void mover(double px, double py) {
x += px; y += py;
}
public double distancia (Punto p) {
double px = p.x – x;
double py = p.x –y;
return Math.sqrt(px*px + py*py);
}
…
}
Métodos de instancia: parámetros
public class Punto {
private double x, y;
…
public void mover(double x, double y) {
this.x += x; this.y += y;
}
}
Métodos de instancia: cuerpo
20/10/2011 IIP - Curso 2011/12 14
• Bloque de código. Si el tipo de retorno no es void debe incluir
instrucción return.
• Son variables locales a un método las que se declaran en su
cuerpo, sus parámetros y el objeto en curso (this).
• Desde cualquier método se puede acceder además a los
atributos de clase y de instancia definidos en su clase (variables
globales)
• Si una variable local y una global tienen el mismo nombre
siempre se asocia a la local (principio de máxima proximidad)
1520/10/2011 IIP - Curso 2011/12 15
public class Punto {
private double x;
private double y;
…
public void mover(double px, double py) {
x += px; y += py;
}
…
}
Otro ejemplo de principio de máx.
proximidad
public double distancia (Punto p) {
double x = p.x – x;
double y = p.x –y;
return Math.sqrt(x*x + y*y);
}
public double distancia (Punto p) {
double x = p.x – this.x;
double y = p.x – this.y;
return Math.sqrt(x*x + y*y);
}
¡ ERROR
DE
COMPILACIÓN !
¡ OK !
Uso de métodos: llamada a un método de
instancia
[objetoReal.]nombreMetodo ( arg1, arg2, … , argn)
20/10/2011 IIP - Curso 2011/12 16
donde:
1. objetoReal: es el objeto al que se le aplica el método; es
opcional si la llamada se hace dentro de un método de la propia
clase y se aplica a this.
2. nombreMetodo: es el identificador del método.
3. arg1, arg2, … , argn: lista de argumentos o datos de entrada (n
es el número de parámetros formales); se llaman parámetros
reales o argumentos y deben tener un valor concreto.
Debe existir concordancia en cuanto a número, tipo y orden
de aparición entre los parámetros formales y los argumentos
17
Ejemplos de llamadas a métodos
20/10/2011 IIP - Curso 2011/12 17
Punto p = new Punto(); int x = 3;
// p es (0,0)
p.mover(x, x+1); // p es (3.0, 4.0)
double d = 3 * p.distOrigen(); // d = 15.0
Punto q = new Punto().mover(d, p.distOrigen());
// q es (15.0, 5.0)
public class Punto {
private double x;
private double y;
public void mover(double px, double py) { x += px; y += py; }
private int aleatorio() {
return (int)(Math.random()*(2*distOrigen()+1));
}
public void moverAleat() { x += aleatorio(); y += aleatorio(); }
public double distOrigen() { return Math.sqrt(x*x + y*y); }
public double distancia(Punto p) {
double x = p.x - this.x; double y = p.y - this.y;
return Math.sqrt(x*x + y*y);
}
}
18
Uso de métodos
• Un parámetro real o argumento es cualquier expresión que se
evalúe a un tipo de datos compatible con el del correspondiente
parámetro formal de la cabecera del método.
• Al evaluar un argumento el correspondiente parámetro formal
se inicializa al valor resultante (toma dicho valor).
• La llamada a un método se evalúa al resultado que éste
devuelve
• Se puede realizar la invocación a un método en cualquier
expresión que tenga un tipo compatible con el de retorno del
método
20/10/2011 IIP - Curso 2011/12 18
19
Uso de métodos: ejecución de una
llamada
• Java asocia una zona de memoria exclusiva para los datos y
cálculos del método: registro de activación.
• Si se está ejecutando el método A y se llega a una instrucción que
es una llamada a un método B:
– Se evalúan en A las expresiones que aparecen como argumentos en la
llamada
– Se reserva espacio en memoria para el registro de activación de B
– Los parámetros de B se inician (en el registro) a los valores calculados (paso
de parámetros por valor). La variable this del nuevo registro se inicia también
–Se ejecutan las instrucciones de B; el método acaba con la instrucción return
– Acabada la llamada a B, la ejecución de A prosigue desde el punto en que se
llamó a B
–El registro de activación de B se libera
20/10/2011 IIP - Curso 2011/12 19
20
Ejecución de una llamada
20/10/2011 IIP - Curso 2011/12 20
Registro de activación
de la llamada a mover
p
0.0
x 0.0
y
montículo
this
x
3
px
3.0
py
4.0
Registro de activación
de la llamada a mover
p
4.0
x 3.0
y
montículo
this
x
3
px
3.0
py
4.0
Punto p = new Punto(); int x = 3;
// p es (0,0)
p.mover(x, x+1); // p es (3.0, 4.0)
double d = 3 * p.distOrigen(); // d = 15.0
Punto q = new Punto().mover(d, p.distOrigen());
// q es (15.0, 5.0)
21
Paso de parámetros por valor: variables de
tipo primitivo y referencia
20/10/2011 IIP - Curso 2011/12 21
public void intercambio(int a, int b){
int aux = a;
a = b; b = aux;
}
…
int i = 5, j = 7;
intercambio(i,j); // i = 5 y j = 7
public void intercambio(Punto a, Punto b){
Punto aux = a; a = b; b = aux;
}
public void intercambiox(Punto a, Punto b){
double aux = a.x; a.x = b.x; b.x = aux;
}
…
//creados p=(3.0,5.0) y q=(6.0,2.0)
intercambio(p,q); // p=(3.0,5.0) y q=(6.0,2.0)
intercambiox(p,q); // p=(6.0,5.0) y q=(3.0,2.0)
Métodos constructores
• No tienen tipo de retorno
• Su nombre es el de la clase
• Se invocan con el operador new: new NombreClase(arg1, arg2, .., argn)
• Su resultado es el objeto creado
20/10/2011 IIP - Curs 2011/12 22
public NombreClase ([ListaParametros]){
// instrucciones del cuerpo del método
}
public class Punto {
…
public Punto() { x=0; y=0; }
public Punto(double abs,double ord){
x = abs; y = ord;
}
…
}
Punto p = new Punto();
Punto q = new Punto(5,10);
double dist = q.distancia(new Punto(2,6));
Llamada un método constructor
• Igual que en los métodos de instancia, una vez evaluados los
parámetros reales se crea un registro de activación y se pasa su
valor a los parámetros formales.
• Se obtiene un bloque de memoria no utilizada en el montículo, lo
suficientemente grande como para contener un objeto del tipo
especificado, que pasará a ser el objeto en curso con el que se
inicia this.
• Se inicializan las variables de instancia del objeto, con el valor que
se especifica o con el valor por defecto.
• Si hay instrucciones en el cuerpo del constructor se ejecutan.
• Se devuelve this como resultado de la llamada al constructor.
20/10/2011 IIP - Curso 2011/12 23
Métodos constructores: uso de this
public class Punto {
private double x;
private double y;
public Punto(double abs,double ord){
this.x = abs; this.y = ord;
}
public Punto() {
this(0,0);
}
public Punto(Punto p) {
this(p.x,p.y);
}
…
}
20/10/2011 IIP - Curso 2011/12 24
Sobrecarga de métodos
public class Punto {
private double x;
private double y;
public Punto(double abs,double ord){
this.x = abs; this.y = ord;
}
public Punto() { this(0,0); }
public Punto(Punto p) { this(p.x,p.y); }
…
}
20/10/2011 IIP - Curso 2011/12 25
Los métodos Java se pueden sobrecargar: pueden tener el mismo
nombre y declararse en el mismo ámbito siempre que tengan el
mismo resultado pero distintas listas de parámetros.
Métodos de clase o estáticos
• Un método de clase o método estático es un método propio de
la clase (no es un método de objeto) que da funcionalidades a
nivel de toda la clase, es decir, del conjunto de objetos creados
para dicha clase.
• Un ejemplo de método de clase es el método main y los métodos
definidos en la clase Math, clase predefinida en Java para realizar
operaciones aritméticas con expresiones numéricas.
20/10/2011 IIP - Curso 2011/12 26
// x es una variable de tipo double y positiva
double rx = Math.sqrt(x);
static double sqrt(double a)
Returns the correctly rounded positive square root of a double value.
Métodos estáticos: definición y uso
• Se definen como los métodos de instancia añadiendo en la
cabecera el modificador static.
• En el cuerpo del método no puede usarse this porque no hay
objeto en curso.
• La sintaxis para llamar a un método estático:
20/10/2011 IIP - Curso 2011/12 27
[NombreClase.]nombreMetodo ( arg1, arg2, … , argn)
Métodos estáticos: ejemplos
public class TestPunto {
/** Método principal que prueba la clase Punto. */
public static void main(String[] args) {
Punto p = new Punto(2.5,3.0);
Punto q = new Punto(4.0,5.0);
System.out.print("Dist. entre("+p.getX()+","+p.getY()+")");
System.out.print(" y ("+q.getX()+","+q.getY()+"): ");
System.out.println( distancia(p,q) );
}
/** Calcula la distancia entre dos puntos dados */
public static double distancia(Punto a, Punto b) {
double x = b.x - a.x; double y = b.y - a.y;
return Math.sqrt(x*x + y*y);
}
} 20/10/2011 IIP - Curso 2011/12 28
• Clases de utilidades: clases que no definen nuevos tipos
datos. Agrupan métodos estáticos de utilidad general sobre
tipos previamente definidos.
• No se definen atributos el constructor por defecto crea
objetos vacíos (por ello, se suele hacerlo private).
• No incluyen un método main: no se ejecutan, dan servicio a
otras clases.
• Es habitual agrupar en paquetes clases de utilidades que
presten funcionalidades relacionadas de alguna manera.
• Entre las predefinidas de Java destaca Math, del paquete
java.lang: repertorio de operaciones sobre datos numéricos
(raíz cuadrada, redondeo, funciones trigonométricas, …)
20/10/2011 IIP - Curso 2011/12 29
Métodos estáticos: clases de utilidades
Pila de llamadas
• Java sólo ejecuta un método a la vez: método activo.
• Cuando un método A invoca a un método B:
– la ejecución de A queda en suspenso,
– el estado de A estado se preserva en su registro de
activación, que no se destruye hasta que se reanude y
acabe su ejecución.
• En memoria pueden coexistir varios registros:
– el registro del método activo o registro activo,
– un registro por cada método que permanezca suspendido.
20/10/2011 IIP - Curso 2011/12 30
Pila de llamadas
• Pila de llamadas (stack): Java gestiona los registros ordenándolos por
antigüedad. Cuando A invoca a B, su registro se dispone en la cima
de la pila (1); al terminar, su registro se desapila (3).
• El método activo sólo puede acceder a las variables de la cima (2).
• Las variables de clase están aparte, y son accesibles por cualquier
método activo (siempre que sean públicas para el método).
20/10/2011 IIP - Curso 2011/12 31
main
A
B
main
A
B
main
A
B
(2)(1) (3)
Datos accesibles por
la ejecución de B
… Información estática
de las clases
pública
privada
clase B ... otras clases
Pila de llamadas
• Java usa unas variables en cada registro para facilitar sus propios cálculos
intermedios y el control de la ejecución. Entre otras, destacan:
– VR (valor de retorno): Del tipo de retorno. Es en donde se guarda el valor a
devolver por la llamada (excepto si es void).
– DR (dirección de retorno): Se guarda el punto del código en donde A invoca a B.
• Ejemplo (1). El método main de una clase Prueba invoca al método
distancia de Punto:
20/10/2011 IIP - Curso 2011/12 32
0.0x q1
nullargs q2
DR
0.0x
0.0y
3.0x
4.0y
pila montículo
public double distancia(Punto p){
double x = p.x - this.x;
double y = p.y - this.y;
return Math.sqrt(x*x + y*y);
}
public static void main(String[] args){
double x = 0.0;
Punto q1 = new Punto(3.0,4.0);
Punto q2 = new Punto();
x = q2.distancia(q1);
System.out.println(x);
}
Prueba.main
Pila de llamadas
• Ejemplo (2): El método distancia ha calculado el resultado
en la variable VR de su registro, y Java está a punto de
reanudar main por donde indica DR:
20/10/2011 IIP - Curso 2011/12 33
4.0y p
3.0xVR 5.0 this
DR
0.0x q1
nullargs q2
DR
0.0x
0.0y
3.0x
4.0y
pila montículo
Punto.distanciapublic double distancia(Punto p){
double x = p.x - this.x;
double y = p.y - this.y;
return Math.sqrt(x*x + y*y);
}
public static void main(String[] args){
double x = 0.0;
Punto q1 = new Punto(3.0,4.0);
Punto q2 = new Punto();
x = q2.distancia(q1);
System.out.println(x);
}
Prueba.main
Pila de llamadas
• Ejemplo (3). El método main ha recibido en x el resultado de
la llamada a distancia y está a punto de terminar:
20/10/2011 IIP - Curso 2011/12 34
5.0x q1
nullargs q2
DR
0.0x
0.0y
3.0x
4.0y
pila montículo
public double distancia(Punto p){
double x = p.x - this.x;
double y = p.y - this.y;
return Math.sqrt(x*x + y*y);
}
public static void main(String[] args){
double x = 0.0;
Punto q1 = new Punto(3.0,4.0);
Punto q2 = new Punto();
x = q2.distancia(q1);
System.out.println(x);
}
Prueba.main
Sobrescritura de los métodos de Object
• Object es una clase predefinida de Java que define el comportamiento
común de todos los objetos del lenguaje: tras ser creados residen en el
heap y son accesibles por referencias.
• Un Object no tiene estructura interna, es un objeto vacío.
• Cualquier objeto de Java es un caso particular de Object, de quien
heredan sus métodos, entre los que destacan:
Comprueba si el objeto y o son el mismo objeto del heap.
Devuelve una String que indica la clase del objeto y un código numérico.
20/10/2011 IIP - Curso 2011/12 35
public boolean equals(Object o)
public String toString()
Sobrescritura de los métodos de Object
IIP - Curso 2011/12 36
• Una característica primordial de los métodos heredados es que en cada
clase se pueden sobreescribir a conveniencia.
• Ejemplo. En la clase Punto:
/** Comprueba si o es un Punto y sus
* coordenadas coinciden con las del punto
*/
public boolean equals(Object o){
return o instanceof Punto
&& this.x==((Punto)o).x
&& this.y==((Punto)o).y ;
}
/** Devuelve la información del punto
* en el formato "(x,y)"
*/
public String toString(){
return "("+this.x+","+this.y+")" ;
}
El estándar recomienda
que equals compruebe
si o es de la clase
(operador instanceof),
y la coincidencia
atributo a atributo.
Sobrescritura de los métodos de Object
20/10/2011 IIP - Curso 2011/12 37
• Si Java encuentra el método sobreescrito en la clase, usa el
código interno de la clase,
• sino, usaría el código del método en Object.
Documentación de los métodos
20/10/2011 IIP - Curso 2011/12 38
La documentación de los métodos de una clase sirve para dos
fines diferentes:
• Previamente a la implementación. Especifica todas las características
del método, respecto a los datos (incluyendo casos especiales), y
cuál es el resultado deseado; la implementación debe hacerse de
acuerdo con esta especificación.
• Posterior e independientemente de la implementación. Indica cómo
usar los métodos, es decir, cuál es su perfil, qué condiciones
especiales deben cumplir los parámetros y cuál es el resultado que
se puede esperar en cada caso.
• Se debe evitar, en lo posible, incluir referencias a cómo se han
implementado. Es en el cuerpo de los métodos donde deben
comentarse los detalles de implementación.
Documentación de los métodos
20/10/2011 IIP - Curso 2011/12 39
Java tiene definido un estándar de documentación, en forma de
comentarios a incluir en el código fuente.
• Si se sigue el estándar, la herramienta de Java javadoc genera
automáticamente el documento html con un estilo definido.
• Básicamente:
/** Decripción del método, incluyendo condiciones de
* de los datos y casos especiales.
* @param parámetro1 tipo1
…… ……
* @param parámetroN tipoN
* @return tipoRetorno valor devuelto
*/
Descripción del valor devuelto (para métodos no void)
Descripción de los parámetros
Documentación de los métodos
20/10/2011 IIP - Curso 2011/12 40
En BlueJ javadoc se ejecuta
al pasar de la vista de código
a la vista de documentación

Más contenido relacionado

La actualidad más candente

La actualidad más candente (19)

Métodos y Funciones - Java - Algoritmia
Métodos y Funciones - Java - AlgoritmiaMétodos y Funciones - Java - Algoritmia
Métodos y Funciones - Java - Algoritmia
 
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
 
Tema 1: Introducción a la programación funcional.
Tema 1: Introducción a la programación funcional.Tema 1: Introducción a la programación funcional.
Tema 1: Introducción a la programación funcional.
 
Video 1 metodos y arreglos
Video 1 metodos y arreglosVideo 1 metodos y arreglos
Video 1 metodos y arreglos
 
Estructurada 7
Estructurada 7Estructurada 7
Estructurada 7
 
Programación Java
Programación JavaProgramación Java
Programación Java
 
Clases abstractas
Clases abstractasClases abstractas
Clases abstractas
 
Tema5
Tema5Tema5
Tema5
 
Poo 2009 u2_introd_a_la_poo_2
Poo 2009 u2_introd_a_la_poo_2Poo 2009 u2_introd_a_la_poo_2
Poo 2009 u2_introd_a_la_poo_2
 
Funcionesenlenguaje c
Funcionesenlenguaje cFuncionesenlenguaje c
Funcionesenlenguaje c
 
Actividad 20
Actividad 20 Actividad 20
Actividad 20
 
Programación funcional
Programación funcionalProgramación funcional
Programación funcional
 
Introducción a dr racket
Introducción a dr racketIntroducción a dr racket
Introducción a dr racket
 
.NET UY Meetup 6 - Integrando con C/C++ por medio de P/Invoke by Juan Ramirez
.NET UY Meetup 6 - Integrando con C/C++ por medio de P/Invoke by Juan Ramirez.NET UY Meetup 6 - Integrando con C/C++ por medio de P/Invoke by Juan Ramirez
.NET UY Meetup 6 - Integrando con C/C++ por medio de P/Invoke by Juan Ramirez
 
Tutorial jared
Tutorial jaredTutorial jared
Tutorial jared
 
11 Funciones
11 Funciones11 Funciones
11 Funciones
 
Programación Funcional con Scheme
Programación Funcional con SchemeProgramación Funcional con Scheme
Programación Funcional con Scheme
 
123507620 que-es-la-evaluacion-perezosa-docx
123507620 que-es-la-evaluacion-perezosa-docx123507620 que-es-la-evaluacion-perezosa-docx
123507620 que-es-la-evaluacion-perezosa-docx
 
Métodos en programacion
Métodos en  programacionMétodos en  programacion
Métodos en programacion
 

Destacado

Introducción a la programación y la informática. Tema 4
Introducción a la programación y la informática. Tema 4Introducción a la programación y la informática. Tema 4
Introducción a la programación y la informática. Tema 4Andres Garcia Garcia
 
Introducción a la programación y la informática. Tema 8
Introducción a la programación y la informática. Tema 8Introducción a la programación y la informática. Tema 8
Introducción a la programación y la informática. Tema 8Andres Garcia Garcia
 
Introducción a la programación y la informática. Tema 6
Introducción a la programación y la informática. Tema 6Introducción a la programación y la informática. Tema 6
Introducción a la programación y la informática. Tema 6Andres Garcia Garcia
 
Introducción a la programación y la informática. Tema 9
Introducción a la programación y la informática. Tema 9Introducción a la programación y la informática. Tema 9
Introducción a la programación y la informática. Tema 9Andres Garcia Garcia
 
Introducción a la programación y la informática. Tema 7
Introducción a la programación y la informática. Tema 7Introducción a la programación y la informática. Tema 7
Introducción a la programación y la informática. Tema 7Andres Garcia Garcia
 
Introducción a la programación y la informática. Tema 2
Introducción a la programación y la informática. Tema 2Introducción a la programación y la informática. Tema 2
Introducción a la programación y la informática. Tema 2Andres Garcia Garcia
 
Introducción a la programación y la informática. Tema 3
Introducción a la programación y la informática. Tema 3Introducción a la programación y la informática. Tema 3
Introducción a la programación y la informática. Tema 3Andres Garcia Garcia
 
Introducción a la programación y la informática. Tema 1
Introducción a la programación y la informática. Tema 1Introducción a la programación y la informática. Tema 1
Introducción a la programación y la informática. Tema 1Andres Garcia Garcia
 
User Interface Testing | Best Practices
User Interface Testing | Best Practices User Interface Testing | Best Practices
User Interface Testing | Best Practices David Tzemach
 
UI Testing Best Practices - An Expected Journey
UI Testing Best Practices - An Expected JourneyUI Testing Best Practices - An Expected Journey
UI Testing Best Practices - An Expected JourneyOren Farhi
 
Introducción a la programación y la informática. Tema 10
Introducción a la programación y la informática. Tema 10Introducción a la programación y la informática. Tema 10
Introducción a la programación y la informática. Tema 10Andres Garcia Garcia
 

Destacado (12)

Introducción a la programación y la informática. Tema 4
Introducción a la programación y la informática. Tema 4Introducción a la programación y la informática. Tema 4
Introducción a la programación y la informática. Tema 4
 
Introducción a la programación y la informática. Tema 8
Introducción a la programación y la informática. Tema 8Introducción a la programación y la informática. Tema 8
Introducción a la programación y la informática. Tema 8
 
Introducción a la programación y la informática. Tema 6
Introducción a la programación y la informática. Tema 6Introducción a la programación y la informática. Tema 6
Introducción a la programación y la informática. Tema 6
 
Introducción a la programación y la informática. Tema 9
Introducción a la programación y la informática. Tema 9Introducción a la programación y la informática. Tema 9
Introducción a la programación y la informática. Tema 9
 
Introducción a la programación y la informática. Tema 7
Introducción a la programación y la informática. Tema 7Introducción a la programación y la informática. Tema 7
Introducción a la programación y la informática. Tema 7
 
Introducción a la programación y la informática. Tema 2
Introducción a la programación y la informática. Tema 2Introducción a la programación y la informática. Tema 2
Introducción a la programación y la informática. Tema 2
 
Introducción a la programación y la informática. Tema 3
Introducción a la programación y la informática. Tema 3Introducción a la programación y la informática. Tema 3
Introducción a la programación y la informática. Tema 3
 
Introducción a la programación y la informática. Tema 1
Introducción a la programación y la informática. Tema 1Introducción a la programación y la informática. Tema 1
Introducción a la programación y la informática. Tema 1
 
User Interface Testing | Best Practices
User Interface Testing | Best Practices User Interface Testing | Best Practices
User Interface Testing | Best Practices
 
UI Testing Best Practices - An Expected Journey
UI Testing Best Practices - An Expected JourneyUI Testing Best Practices - An Expected Journey
UI Testing Best Practices - An Expected Journey
 
Introducción a la programación y la informática. Tema 10
Introducción a la programación y la informática. Tema 10Introducción a la programación y la informática. Tema 10
Introducción a la programación y la informática. Tema 10
 
Presentacion 1.10
Presentacion 1.10Presentacion 1.10
Presentacion 1.10
 

Similar a MétodosObjetoClase (20)

4 manejo de_metodos
4 manejo de_metodos4 manejo de_metodos
4 manejo de_metodos
 
Tema3 p2%20
Tema3 p2%20Tema3 p2%20
Tema3 p2%20
 
Introduccio al Java
Introduccio al JavaIntroduccio al Java
Introduccio al Java
 
MéTodos
MéTodosMéTodos
MéTodos
 
MéTodos
MéTodosMéTodos
MéTodos
 
MéTodos
MéTodosMéTodos
MéTodos
 
Java2-Clases.ppt
Java2-Clases.pptJava2-Clases.ppt
Java2-Clases.ppt
 
Java2-Clases.ppt
Java2-Clases.pptJava2-Clases.ppt
Java2-Clases.ppt
 
Metodos Java
Metodos JavaMetodos Java
Metodos Java
 
JAVA_BASICO_modo_consola_introduccion.pptx
JAVA_BASICO_modo_consola_introduccion.pptxJAVA_BASICO_modo_consola_introduccion.pptx
JAVA_BASICO_modo_consola_introduccion.pptx
 
Taller 1 6
Taller 1 6Taller 1 6
Taller 1 6
 
Taller 1 6
Taller 1 6Taller 1 6
Taller 1 6
 
Clases metodos y atributos
Clases metodos y atributosClases metodos y atributos
Clases metodos y atributos
 
Constructores con el parámetro this
Constructores con el parámetro thisConstructores con el parámetro this
Constructores con el parámetro this
 
Sobrecarga de Métodos y Constructores.pdf
Sobrecarga de Métodos y Constructores.pdfSobrecarga de Métodos y Constructores.pdf
Sobrecarga de Métodos y Constructores.pdf
 
Adentrándonos a PHP 5
Adentrándonos a PHP 5Adentrándonos a PHP 5
Adentrándonos a PHP 5
 
Polimorfismo en Java
Polimorfismo en JavaPolimorfismo en Java
Polimorfismo en Java
 
Programa 9
Programa 9Programa 9
Programa 9
 
Métodos
MétodosMétodos
Métodos
 
Introducción a la programación en Python (día 2)
Introducción a la programación en Python (día 2)Introducción a la programación en Python (día 2)
Introducción a la programación en Python (día 2)
 

Último

TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSTEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSjlorentemartos
 
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Lourdes Feria
 
texto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticostexto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticosisabeltrejoros
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMarjorie Burga
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónLourdes Feria
 
Heinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoHeinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoFundación YOD YOD
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxlclcarmen
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIACarlos Campaña Montenegro
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxlclcarmen
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadAlejandrino Halire Ccahuana
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFAROJosé Luis Palma
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADauxsoporte
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptELENA GALLARDO PAÚLS
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.amayarogel
 
Manual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfManual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfMaryRotonda1
 
2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdfBaker Publishing Company
 

Último (20)

TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSTEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
 
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 2do Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 2do Grado Educacion Primaria 2024 Ccesa007.pdf
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...
 
texto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticostexto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticos
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grande
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcción
 
Heinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativoHeinsohn Privacidad y Ciberseguridad para el sector educativo
Heinsohn Privacidad y Ciberseguridad para el sector educativo
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
 
Power Point: "Defendamos la verdad".pptx
Power Point: "Defendamos la verdad".pptxPower Point: "Defendamos la verdad".pptx
Power Point: "Defendamos la verdad".pptx
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdad
 
Presentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza MultigradoPresentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza Multigrado
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDAD
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.
 
Manual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfManual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdf
 
Repaso Pruebas CRECE PR 2024. Ciencia General
Repaso Pruebas CRECE PR 2024. Ciencia GeneralRepaso Pruebas CRECE PR 2024. Ciencia General
Repaso Pruebas CRECE PR 2024. Ciencia General
 
2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf
 

MétodosObjetoClase

  • 1. Tema 5. Métodos Introducción a la Informática y a la Programación (IIP) Curso 2011/12 Departamento de Sistemas Informáticos y Computación
  • 2. Contenidos 1. Métodos de objeto y métodos de clase 2. Características de los métodos de objeto o dinámicos 3. Características de los métodos de clase o estáticos 4. La pila de llamadas 5. Sobrescritura de los métodos de Object 6. Documentación de los métodos 20/10/2011 IIP - Curso 2011/12 2
  • 3. Estructura básica de una clase: atributos y métodos public class Circulo { private double radio; private String color; private int centroX; private int centroY; public Circulo() { radio = 50;color = "negro"; centroX = 100; centroY = 100; } public double area(){ return 3.14 * radio * radio; } ... } 20/10/2011 IIP - Curso 2011/12 3 Atributos: Estructura de los objetos de la clase Métodos: Operaciones que se pueden hacer cuando los objetos de la clase
  • 4. Ejemplo de clase-programa public class ProgramaTri { public static void main(String[] args) { Punto p1 = new Punto(); p1.x = 2.5; p1.y = 3; Punto p2 = new Punto(); p2.x = 2.5; p2.y = -1.2; Punto p3 = new Punto(); p3.x = -1.5; p1.y = 1.4; System.out.println("Triángulo de vértices: "); System.out.println("(" + p1.x + "," + p1.y + ")"); System.out.println("(" + p2.x + "," + p2.y + ")"); System.out.println("(" + p3.x + "," + p3.y + ")"); double dx = p1.x - p2.x; double dy = p1.y - p2.y; double lado12 = Math.sqrt(dx*dx + dy*dy); dx = p2.x - p3.x; dy = p2.y - p3.y; double lado23 = Math.sqrt(dx*dx + dy*dy); dx = p1.x - p3.x; dy = p1.y - p3.y; double lado13 = Math.sqrt(dx*dx + dy*dy); double perimetro = lado12 + lado23 + lado13; System.out.println("Perímetro: " + perimetro); } } 20/10/2011 IIP - Curso 2011/12 4 Instrucciones repetidas con distintos datos: p1 y p2 p2 y p3 p1 y p3
  • 5. Subprograma public class ProgramaTri { public static void main(String[] args) { Punto p1 = new Punto(); p1.x = 2.5; p1.y = 3; Punto p2 = new Punto(); p2.x = 2.5; p2.y = -1.2; Punto p3 = new Punto(); p3.x = -1.5; p1.y = 1.4; System.out.println("Triángulo de vértices: "); System.out.println("(" + p1.x + "," + p1.y + ")"); System.out.println("(" + p2.x + "," + p2.y + ")"); System.out.println("(" + p3.x + "," + p3.y + ")"); double lado12 = distancia(p1,p2); double lado23 = distancia(p2,p3); double lado13 = distancia(p1,p3), double perimetro = lado12 + lado23 + lado13; System.out.print("Perímetro: " + perimetro); } /** Calcula la distancia entre dos puntos. */ static double distancia(Punto p, Punto q) { double dx = p.x - q.x; double dy = p.y - q.y; return Math.sqrt(dx*dx + dy*dy); } } 20/10/2011 IIP - Curso 2011/12 5 + LEGIBILIDAD + SEGURIDAD
  • 6. Métodos de objeto (dinámicos) y de clase (estáticos) • Los métodos de objeto o dinámicos se definen en una clase para crear (constructores) y manipular la información de los objetos de la clase (de instancia). – Punto p = new Punto(); p1.x =2.5; p1.y = 3; – double d = p.distOrigen(); Se denomina objeto en curso al objeto concreto que se crea o manipula. • Los métodos de clase no se aplican sobre objetos, actúan únicamente sobre sus parámetros y se pueden definir en cualquier clase. Se deben declarar como static. – Math.sqrt(x) es una llamada al método estático sqrt de la clase Math – distancia es un método de la clase ProgramaTri 20/10/2011 IIP - Curso 2011/12 6
  • 7. Características de los métodos de instancia • Definición: [modificadores] TipoRetorno nombreMetodo ([ListaParametros]){ // instrucciones del cuerpo del método } 20/10/2011 IIP - Curso 2011/12 7 public double distancia(Punto p) { double x = p.x – this.x; double y = p.y – this.y; return Math.sqrt(x*x + y*y); } parámetronombrevisibilidad tipo cabecera cuerpo valor de retorno objeto en curso
  • 8. Métodos de instancia: modificadores de visibilidad o acceso 20/10/2011 IIP - Curso 2011/12 8 Al igual que para los atributos, existen las siguientes modalidades de acceso a los métodos de una clase: 1. private: accesible sólo dentro de la clase. 2. public: accesible en cualquier parte donde la clase sea accesible (incluso desde fuera del paquete). 3. Sin modificador de acceso (friendly): público pero accesible sólo dentro del paquete. class subclass package world private sí no no no public sí sí sí sí sin especificar sí no sí no
  • 9. ¿public o private? 20/10/2011 IIP - Curso 2011/12 9 public class Punto { private double x; // atributo que representa la abscisa private double y; // atributo que representa la ordenada /** Método que permite mover un punto en el plano, cambiando * sus coordenadas a partir de dos valores dados. */ public void mover(double px, double py) { x += px; y += py; } /** Método privado que devuelve un valor entero aleatorio en * el rango [0,2*Math.sqrt(x*x+y*y)]. */ private int aleatorio() {return (int)(Math.random()*(2*distOrigen()+1)); } /** Método que permite mover un punto en el plano, cambiando * sus coordenadas a partir de dos valores aleatorios. */ public void moverAleat() { x += aleatorio(); y += aleatorio(); } /** Método que calcula la distancia de un punto al origen (0,0) */ public double distOrigen() { return Math.sqrt(x*x + y*y); } /** Método que calcula la distancia de un punto a otro punto dado */ public double distancia(Punto p) { double x = p.x - this.x; double y = p.y - this.y; return Math.sqrt(x*x + y*y); } }
  • 10. ¿public o private? 20/10/2011 IIP - Curso 2011/12 10 moverAleat distOrigen x y aleatorio PRIVADO PÚBLICO distancia mover
  • 11. Métodos de instancia: tipo de retorno 20/10/2011 IIP - Curso 2011/12 11 • Mediante el tipo de retorno se especifica el tipo del valor que el método devuelve o se usa la palabra reservada void para indicar que el método no devuelve ningún valor • El tipo de cualquier valor de retorno de un método debe ser el mismo que el tipo de retorno del método -único y definido en su cabecera • El tipo de retorno de un método puede ser cualquier tipo de datos Java, primitivo o referencia • Para devolver un valor de retorno de un método se usa la instrucción return expresión ; • La ejecución de un método finaliza tras la ejecución una instrucción return • Si un método no devuelve explícitamente nigún valor vía return entonces el tipo de su resultado es void –implícitamente, se ejecuta "return ;" como última instrucción de su cuerpo.
  • 12. Métodos de instancia: parámetros 20/10/2011 IIP - Curso 2011/12 12 • Los parámetros definidos en la cabecera de un método, al declararlo, se denominan parámetros formales pues no tienen asociado un valor real Sintaxis : tipo1 nomParam1, tipo2 nomParam2, ..., tipok nomParamk ¡Atención! No confundir esta sintaxis con la de declaración de variables: tipo1 nomParam1, nomParam2, ..., nomParamk es una declaración de parámetros ¡¡¡ incorrecta !!!! Uso en el cuerpo del método: (sus identificadores) pueden usarse como variables en el cuerpo del método, sin volver a declararse. ¡Atención! su inicialización se realiza única y exclusivamente al invocar la ejecución del método • Se puede declarar métodos sin parámetros (nomMetodo()), i.e. con una lista de parámetros vacía
  • 13. 1320/10/2011 IIP - Curso 2011/12 13 public class Punto { private double x; private double y; … public void mover(double px, double py) { x += px; y += py; } public double distancia (Punto p) { double px = p.x – x; double py = p.x –y; return Math.sqrt(px*px + py*py); } … } Métodos de instancia: parámetros
  • 14. public class Punto { private double x, y; … public void mover(double x, double y) { this.x += x; this.y += y; } } Métodos de instancia: cuerpo 20/10/2011 IIP - Curso 2011/12 14 • Bloque de código. Si el tipo de retorno no es void debe incluir instrucción return. • Son variables locales a un método las que se declaran en su cuerpo, sus parámetros y el objeto en curso (this). • Desde cualquier método se puede acceder además a los atributos de clase y de instancia definidos en su clase (variables globales) • Si una variable local y una global tienen el mismo nombre siempre se asocia a la local (principio de máxima proximidad)
  • 15. 1520/10/2011 IIP - Curso 2011/12 15 public class Punto { private double x; private double y; … public void mover(double px, double py) { x += px; y += py; } … } Otro ejemplo de principio de máx. proximidad public double distancia (Punto p) { double x = p.x – x; double y = p.x –y; return Math.sqrt(x*x + y*y); } public double distancia (Punto p) { double x = p.x – this.x; double y = p.x – this.y; return Math.sqrt(x*x + y*y); } ¡ ERROR DE COMPILACIÓN ! ¡ OK !
  • 16. Uso de métodos: llamada a un método de instancia [objetoReal.]nombreMetodo ( arg1, arg2, … , argn) 20/10/2011 IIP - Curso 2011/12 16 donde: 1. objetoReal: es el objeto al que se le aplica el método; es opcional si la llamada se hace dentro de un método de la propia clase y se aplica a this. 2. nombreMetodo: es el identificador del método. 3. arg1, arg2, … , argn: lista de argumentos o datos de entrada (n es el número de parámetros formales); se llaman parámetros reales o argumentos y deben tener un valor concreto. Debe existir concordancia en cuanto a número, tipo y orden de aparición entre los parámetros formales y los argumentos
  • 17. 17 Ejemplos de llamadas a métodos 20/10/2011 IIP - Curso 2011/12 17 Punto p = new Punto(); int x = 3; // p es (0,0) p.mover(x, x+1); // p es (3.0, 4.0) double d = 3 * p.distOrigen(); // d = 15.0 Punto q = new Punto().mover(d, p.distOrigen()); // q es (15.0, 5.0) public class Punto { private double x; private double y; public void mover(double px, double py) { x += px; y += py; } private int aleatorio() { return (int)(Math.random()*(2*distOrigen()+1)); } public void moverAleat() { x += aleatorio(); y += aleatorio(); } public double distOrigen() { return Math.sqrt(x*x + y*y); } public double distancia(Punto p) { double x = p.x - this.x; double y = p.y - this.y; return Math.sqrt(x*x + y*y); } }
  • 18. 18 Uso de métodos • Un parámetro real o argumento es cualquier expresión que se evalúe a un tipo de datos compatible con el del correspondiente parámetro formal de la cabecera del método. • Al evaluar un argumento el correspondiente parámetro formal se inicializa al valor resultante (toma dicho valor). • La llamada a un método se evalúa al resultado que éste devuelve • Se puede realizar la invocación a un método en cualquier expresión que tenga un tipo compatible con el de retorno del método 20/10/2011 IIP - Curso 2011/12 18
  • 19. 19 Uso de métodos: ejecución de una llamada • Java asocia una zona de memoria exclusiva para los datos y cálculos del método: registro de activación. • Si se está ejecutando el método A y se llega a una instrucción que es una llamada a un método B: – Se evalúan en A las expresiones que aparecen como argumentos en la llamada – Se reserva espacio en memoria para el registro de activación de B – Los parámetros de B se inician (en el registro) a los valores calculados (paso de parámetros por valor). La variable this del nuevo registro se inicia también –Se ejecutan las instrucciones de B; el método acaba con la instrucción return – Acabada la llamada a B, la ejecución de A prosigue desde el punto en que se llamó a B –El registro de activación de B se libera 20/10/2011 IIP - Curso 2011/12 19
  • 20. 20 Ejecución de una llamada 20/10/2011 IIP - Curso 2011/12 20 Registro de activación de la llamada a mover p 0.0 x 0.0 y montículo this x 3 px 3.0 py 4.0 Registro de activación de la llamada a mover p 4.0 x 3.0 y montículo this x 3 px 3.0 py 4.0 Punto p = new Punto(); int x = 3; // p es (0,0) p.mover(x, x+1); // p es (3.0, 4.0) double d = 3 * p.distOrigen(); // d = 15.0 Punto q = new Punto().mover(d, p.distOrigen()); // q es (15.0, 5.0)
  • 21. 21 Paso de parámetros por valor: variables de tipo primitivo y referencia 20/10/2011 IIP - Curso 2011/12 21 public void intercambio(int a, int b){ int aux = a; a = b; b = aux; } … int i = 5, j = 7; intercambio(i,j); // i = 5 y j = 7 public void intercambio(Punto a, Punto b){ Punto aux = a; a = b; b = aux; } public void intercambiox(Punto a, Punto b){ double aux = a.x; a.x = b.x; b.x = aux; } … //creados p=(3.0,5.0) y q=(6.0,2.0) intercambio(p,q); // p=(3.0,5.0) y q=(6.0,2.0) intercambiox(p,q); // p=(6.0,5.0) y q=(3.0,2.0)
  • 22. Métodos constructores • No tienen tipo de retorno • Su nombre es el de la clase • Se invocan con el operador new: new NombreClase(arg1, arg2, .., argn) • Su resultado es el objeto creado 20/10/2011 IIP - Curs 2011/12 22 public NombreClase ([ListaParametros]){ // instrucciones del cuerpo del método } public class Punto { … public Punto() { x=0; y=0; } public Punto(double abs,double ord){ x = abs; y = ord; } … } Punto p = new Punto(); Punto q = new Punto(5,10); double dist = q.distancia(new Punto(2,6));
  • 23. Llamada un método constructor • Igual que en los métodos de instancia, una vez evaluados los parámetros reales se crea un registro de activación y se pasa su valor a los parámetros formales. • Se obtiene un bloque de memoria no utilizada en el montículo, lo suficientemente grande como para contener un objeto del tipo especificado, que pasará a ser el objeto en curso con el que se inicia this. • Se inicializan las variables de instancia del objeto, con el valor que se especifica o con el valor por defecto. • Si hay instrucciones en el cuerpo del constructor se ejecutan. • Se devuelve this como resultado de la llamada al constructor. 20/10/2011 IIP - Curso 2011/12 23
  • 24. Métodos constructores: uso de this public class Punto { private double x; private double y; public Punto(double abs,double ord){ this.x = abs; this.y = ord; } public Punto() { this(0,0); } public Punto(Punto p) { this(p.x,p.y); } … } 20/10/2011 IIP - Curso 2011/12 24
  • 25. Sobrecarga de métodos public class Punto { private double x; private double y; public Punto(double abs,double ord){ this.x = abs; this.y = ord; } public Punto() { this(0,0); } public Punto(Punto p) { this(p.x,p.y); } … } 20/10/2011 IIP - Curso 2011/12 25 Los métodos Java se pueden sobrecargar: pueden tener el mismo nombre y declararse en el mismo ámbito siempre que tengan el mismo resultado pero distintas listas de parámetros.
  • 26. Métodos de clase o estáticos • Un método de clase o método estático es un método propio de la clase (no es un método de objeto) que da funcionalidades a nivel de toda la clase, es decir, del conjunto de objetos creados para dicha clase. • Un ejemplo de método de clase es el método main y los métodos definidos en la clase Math, clase predefinida en Java para realizar operaciones aritméticas con expresiones numéricas. 20/10/2011 IIP - Curso 2011/12 26 // x es una variable de tipo double y positiva double rx = Math.sqrt(x); static double sqrt(double a) Returns the correctly rounded positive square root of a double value.
  • 27. Métodos estáticos: definición y uso • Se definen como los métodos de instancia añadiendo en la cabecera el modificador static. • En el cuerpo del método no puede usarse this porque no hay objeto en curso. • La sintaxis para llamar a un método estático: 20/10/2011 IIP - Curso 2011/12 27 [NombreClase.]nombreMetodo ( arg1, arg2, … , argn)
  • 28. Métodos estáticos: ejemplos public class TestPunto { /** Método principal que prueba la clase Punto. */ public static void main(String[] args) { Punto p = new Punto(2.5,3.0); Punto q = new Punto(4.0,5.0); System.out.print("Dist. entre("+p.getX()+","+p.getY()+")"); System.out.print(" y ("+q.getX()+","+q.getY()+"): "); System.out.println( distancia(p,q) ); } /** Calcula la distancia entre dos puntos dados */ public static double distancia(Punto a, Punto b) { double x = b.x - a.x; double y = b.y - a.y; return Math.sqrt(x*x + y*y); } } 20/10/2011 IIP - Curso 2011/12 28
  • 29. • Clases de utilidades: clases que no definen nuevos tipos datos. Agrupan métodos estáticos de utilidad general sobre tipos previamente definidos. • No se definen atributos el constructor por defecto crea objetos vacíos (por ello, se suele hacerlo private). • No incluyen un método main: no se ejecutan, dan servicio a otras clases. • Es habitual agrupar en paquetes clases de utilidades que presten funcionalidades relacionadas de alguna manera. • Entre las predefinidas de Java destaca Math, del paquete java.lang: repertorio de operaciones sobre datos numéricos (raíz cuadrada, redondeo, funciones trigonométricas, …) 20/10/2011 IIP - Curso 2011/12 29 Métodos estáticos: clases de utilidades
  • 30. Pila de llamadas • Java sólo ejecuta un método a la vez: método activo. • Cuando un método A invoca a un método B: – la ejecución de A queda en suspenso, – el estado de A estado se preserva en su registro de activación, que no se destruye hasta que se reanude y acabe su ejecución. • En memoria pueden coexistir varios registros: – el registro del método activo o registro activo, – un registro por cada método que permanezca suspendido. 20/10/2011 IIP - Curso 2011/12 30
  • 31. Pila de llamadas • Pila de llamadas (stack): Java gestiona los registros ordenándolos por antigüedad. Cuando A invoca a B, su registro se dispone en la cima de la pila (1); al terminar, su registro se desapila (3). • El método activo sólo puede acceder a las variables de la cima (2). • Las variables de clase están aparte, y son accesibles por cualquier método activo (siempre que sean públicas para el método). 20/10/2011 IIP - Curso 2011/12 31 main A B main A B main A B (2)(1) (3) Datos accesibles por la ejecución de B … Información estática de las clases pública privada clase B ... otras clases
  • 32. Pila de llamadas • Java usa unas variables en cada registro para facilitar sus propios cálculos intermedios y el control de la ejecución. Entre otras, destacan: – VR (valor de retorno): Del tipo de retorno. Es en donde se guarda el valor a devolver por la llamada (excepto si es void). – DR (dirección de retorno): Se guarda el punto del código en donde A invoca a B. • Ejemplo (1). El método main de una clase Prueba invoca al método distancia de Punto: 20/10/2011 IIP - Curso 2011/12 32 0.0x q1 nullargs q2 DR 0.0x 0.0y 3.0x 4.0y pila montículo public double distancia(Punto p){ double x = p.x - this.x; double y = p.y - this.y; return Math.sqrt(x*x + y*y); } public static void main(String[] args){ double x = 0.0; Punto q1 = new Punto(3.0,4.0); Punto q2 = new Punto(); x = q2.distancia(q1); System.out.println(x); } Prueba.main
  • 33. Pila de llamadas • Ejemplo (2): El método distancia ha calculado el resultado en la variable VR de su registro, y Java está a punto de reanudar main por donde indica DR: 20/10/2011 IIP - Curso 2011/12 33 4.0y p 3.0xVR 5.0 this DR 0.0x q1 nullargs q2 DR 0.0x 0.0y 3.0x 4.0y pila montículo Punto.distanciapublic double distancia(Punto p){ double x = p.x - this.x; double y = p.y - this.y; return Math.sqrt(x*x + y*y); } public static void main(String[] args){ double x = 0.0; Punto q1 = new Punto(3.0,4.0); Punto q2 = new Punto(); x = q2.distancia(q1); System.out.println(x); } Prueba.main
  • 34. Pila de llamadas • Ejemplo (3). El método main ha recibido en x el resultado de la llamada a distancia y está a punto de terminar: 20/10/2011 IIP - Curso 2011/12 34 5.0x q1 nullargs q2 DR 0.0x 0.0y 3.0x 4.0y pila montículo public double distancia(Punto p){ double x = p.x - this.x; double y = p.y - this.y; return Math.sqrt(x*x + y*y); } public static void main(String[] args){ double x = 0.0; Punto q1 = new Punto(3.0,4.0); Punto q2 = new Punto(); x = q2.distancia(q1); System.out.println(x); } Prueba.main
  • 35. Sobrescritura de los métodos de Object • Object es una clase predefinida de Java que define el comportamiento común de todos los objetos del lenguaje: tras ser creados residen en el heap y son accesibles por referencias. • Un Object no tiene estructura interna, es un objeto vacío. • Cualquier objeto de Java es un caso particular de Object, de quien heredan sus métodos, entre los que destacan: Comprueba si el objeto y o son el mismo objeto del heap. Devuelve una String que indica la clase del objeto y un código numérico. 20/10/2011 IIP - Curso 2011/12 35 public boolean equals(Object o) public String toString()
  • 36. Sobrescritura de los métodos de Object IIP - Curso 2011/12 36 • Una característica primordial de los métodos heredados es que en cada clase se pueden sobreescribir a conveniencia. • Ejemplo. En la clase Punto: /** Comprueba si o es un Punto y sus * coordenadas coinciden con las del punto */ public boolean equals(Object o){ return o instanceof Punto && this.x==((Punto)o).x && this.y==((Punto)o).y ; } /** Devuelve la información del punto * en el formato "(x,y)" */ public String toString(){ return "("+this.x+","+this.y+")" ; } El estándar recomienda que equals compruebe si o es de la clase (operador instanceof), y la coincidencia atributo a atributo.
  • 37. Sobrescritura de los métodos de Object 20/10/2011 IIP - Curso 2011/12 37 • Si Java encuentra el método sobreescrito en la clase, usa el código interno de la clase, • sino, usaría el código del método en Object.
  • 38. Documentación de los métodos 20/10/2011 IIP - Curso 2011/12 38 La documentación de los métodos de una clase sirve para dos fines diferentes: • Previamente a la implementación. Especifica todas las características del método, respecto a los datos (incluyendo casos especiales), y cuál es el resultado deseado; la implementación debe hacerse de acuerdo con esta especificación. • Posterior e independientemente de la implementación. Indica cómo usar los métodos, es decir, cuál es su perfil, qué condiciones especiales deben cumplir los parámetros y cuál es el resultado que se puede esperar en cada caso. • Se debe evitar, en lo posible, incluir referencias a cómo se han implementado. Es en el cuerpo de los métodos donde deben comentarse los detalles de implementación.
  • 39. Documentación de los métodos 20/10/2011 IIP - Curso 2011/12 39 Java tiene definido un estándar de documentación, en forma de comentarios a incluir en el código fuente. • Si se sigue el estándar, la herramienta de Java javadoc genera automáticamente el documento html con un estilo definido. • Básicamente: /** Decripción del método, incluyendo condiciones de * de los datos y casos especiales. * @param parámetro1 tipo1 …… …… * @param parámetroN tipoN * @return tipoRetorno valor devuelto */ Descripción del valor devuelto (para métodos no void) Descripción de los parámetros
  • 40. Documentación de los métodos 20/10/2011 IIP - Curso 2011/12 40 En BlueJ javadoc se ejecuta al pasar de la vista de código a la vista de documentación