Java - Duda con declaracion de metodo

   
Vista:

Duda con declaracion de metodo

Publicado por Juanillo (14 intervenciones) el 30/07/2014 21:34:23
Un saludo a todos,me estoy iniciando en Java y siguiendo un curso a base de videotutoriales.
Mi experiencia de programacion viene del viejo gw-basic,pascal(programacion lineal),de entonces ahora no he tocado ningun tipo de lenguaje.bueno al caso.
entiendo las clases,las instancias,objetos,variables primitivas,etc..pero me tiene mosca esta declaracion de metodo.ejemplo;

class Circulo{
private int x,y,r;
//el tipo de metodo en cuestion

Circulo puntos(int x,int y,int r) {
this.x=x;
this.y=y;
this.r=r;
return this;
}
}
que me devuelve este metodo?
se que estoy dandole los valores de los parametros a las variables de la clase,pero no entiendo lo que me devuelve
y por que el tipo de metodo esta declarado con el nombre de la clase?

no se si me expresado bien,espero que se entienda que que soy un puro pipiolo,gracias a todos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Borja

Duda con declaracion de metodo

Publicado por Borja (23 intervenciones) el 30/07/2014 22:32:46
Buenas, básicamente lo que te devuelve esa función es un circulo.
De la misma manera que puedes hacer una función que devuelva un int, para poder devolver un circulo (cualquier otra clase) tienes que indicarlo delante de la declaración de la función.

Por otro lado, esa función no es muy correcta, desde el punto de vista de las convenciones de la buena programación (al menos para mi), ya que puede llevar a confusiones y que es bastante innecesario. Me explico:

Típicamente para hacer lo mismo que en esa función hariamos lo siguiente.

class Circulo{
private int x,y,r;
//el tipo de metodo en cuestion

void puntos(int x,int y,int r) {
this.x=x;
this.y=y;
this.r=r;
}
}

Y luego en el main (o donde sea que se use la clase) hariamos:

...
Circulo c1, c2;
c1 = c2.puntos(a, b, c);
...

Con estamos creando dos círculos ? No, estamos creando solo uno, pero hay dos variables que te llevan a él, puesto que en java todo son punteros (excepto tipos básico: Int, double, char)
Cualquiera podría pensar que c1 y c2 tienes los mismos valores, pero son entidades diferentes, pero no es así, lo que le hagamos a uno se aplicara al otro.

Si lo que queremos es que la función puntos nos cree círculos nuevos cada vez tendremos que decírselo, además que para ello se suele usar static.

class Circulo{
private int x,y,r;
//el tipo de metodo en cuestion

static Circulo puntos(int x,int y,int r) {
Circulo ret = new Circulo();
ret.x=x;
ret.y=y;
ret.r=r;
return ret;
}
}
(no estoy del todo seguro si así funcionaria, pero la idea es esta)
De esta forma puntos pasa a ser una función de clase, o sea que es independiente de la instancia o objeto que tengamos. Se usaria así:

...
Circulo c;
c = Circulo.puntos(a,b,c);
...

El problema que hacer esto es un poco tonto, para eso están los constructores de las clases.

En fin, nada mas, perdón por el tocho.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda con declaracion de metodo

Publicado por Juanillo (14 intervenciones) el 31/07/2014 17:05:58
Muchas gracias a todos,todo esto lo sabia mas o menos,lo que no veia es ese tipo de declaracion.gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda con declaracion de metodo

Publicado por Tom (912 intervenciones) el 31/07/2014 10:03:44
Los métodos que retornan la referencia al mismo objeto (this) se suelen usar para "encadenar" invocaciones.

Por ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Circulo{
private int x,y,r;
//el tipo de metodo en cuestion
 
Circulo puntos(int x,int y,int r) {
this.x=x;
this.y=y;
this.r=r;
return this;
}
 
double getArea() {
  // return r * r * Math.PI;
}
}
 
...
 
Circulo c = new Circulo();
double area = c.puntos(3, 3, 15).getArea();
 
...
 
double area = new Circulo().puntos(8, 100, 20).getArea();
...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar