Foro de elhacker.net

Programación => Java => Mensaje iniciado por: HastatusXXI en 15 Agosto 2016, 17:30 pm



Título: Duda getters
Publicado por: HastatusXXI en 15 Agosto 2016, 17:30 pm
Hola.

Tengo una pequeña duda con un código de un libro que estoy leyendo de desarrollo de Android, pero el problema que tengo es simplemente de Java. El código es el siguiente:

Código
  1. public class Workout {
  2.    private String name;
  3.    private String description;
  4.  
  5.    public static final Workout[] workouts = {
  6.            new Workout("The Limb Loosener",
  7.                    "5 Handstand push-ups\n10 1-legged squats\n15 Pull-ups"),
  8.            new Workout("Core Agony",
  9.                    "100 Pull-ups\n100 Push-ups\n100 Sit-ups\n100Squats"),
  10.            new Workout("The Wimp Special",
  11.                    "5 Pull-ups\n10 Push-ups\n15 Squats"),
  12.            new Workout("Strength and Length",
  13.                    "500 meter run\n21 x 1.5 pood kettleball swing\n21 x pull-ups")
  14.    };
  15.  
  16.    //Each workout has a name and a description
  17.    private Workout(String name, String description) {
  18.        this.name = name;
  19.        this.description = description;
  20.    }
  21.  
  22.    public String getDescription() {
  23.        return description;
  24.    }
  25.  
  26.    public String getName() {
  27.        return name;
  28.    }
  29.  
  30.    public String toString() {
  31.        return this.name;
  32.    }
  33. }
  34.  

Mi duda está en la diferencia entre el método getName() y el método toString(). Según lo que tenía entendido hasta ahora, el toString daría el nombre de un objeto Workout ya instanciado (por el this) ¿Alguien me puede aclarar esto?


Título: Re: Duda getters
Publicado por: engel lex en 15 Agosto 2016, 18:35 pm
(si funciona como c)

name te dará como retorno el valor de una variable global llamada name... this.name te dará el valor de la variable name en esta clase... lo que no tenga "this" referenciará a globales, cualquier interno necesita el this para se llamado


Título: Re: Duda getters
Publicado por: + 1 Oculto(s) en 15 Agosto 2016, 18:48 pm
si estas programando en POO entonces no deberas abusar de setter y getters

http://stackoverflow.com/questions/9416245/how-to-avoid-getters-and-setters


Título: Re: Duda getters
Publicado por: HastatusXXI en 15 Agosto 2016, 20:31 pm
(si funciona como c)

name te dará como retorno el valor de una variable global llamada name... this.name te dará el valor de la variable name en esta clase... lo que no tenga "this" referenciará a globales, cualquier interno necesita el this para se llamado

Entiendo que al decir variable global name te refieres a una definida fuera de la clase. El caso es que el getter (sin this) devuelve el valor del atributo name del array de tipo Workout indicado, por ejemplo:
println(workouts[0].getName()) imprimiría por pantalla "TheLimbLoosener". Cabe decir que en el libro se define el método toString() (con el this), pero, al menos de momento, no se ha usado. De todos modos, mi duda sigue siendo respecto al uso o no del this.


Título: Re: Duda getters
Publicado por: HastatusXXI en 15 Agosto 2016, 20:32 pm
si estas programando en POO entonces no deberas abusar de setter y getters

http://stackoverflow.com/questions/9416245/how-to-avoid-getters-and-setters

Grosso modo según he visto más o menos es por tema de seguridad, ¿no? Pero no todo el mundo los desaconseja, por lo que veo, si no que hay que distinguir bien en qué situaciones hay que usar uno de los dos, ambos, o ninguno, no poner sistemáticamente setter y getter a todas las clases, ¿no?


Título: Re: Duda getters
Publicado por: + 1 Oculto(s) en 15 Agosto 2016, 21:45 pm
 :-X :-X :-X

por ahi lei pero no encuentro donde...... ;D ;D que los setters y getters contradicen a alguno de los principios de SOLID

aca una lectura de solid...... ;-) ;-)
https://scotch.io/bar-talk/s-o-l-i-d-the-first-five-principles-of-object-oriented-design


saludos ::)


Título: Re: Duda getters
Publicado por: Juanfernandez0032 en 17 Agosto 2016, 21:44 pm
Hola, yo mas que respuestas tengo dudas  ;D ;D ;D ;D

La siguiente linea no seria el constructor de la clase ???

 private Workout(String name, String description)


un constructor puede ser private ?



Título: Re: Duda getters
Publicado por: Juanfernandez0032 en 17 Agosto 2016, 21:53 pm
Listo, no se gasten, si, pueden ser privados

http://www.lawebdelprogramador.com/foros/Java/1076310-contructores-privados-en-java.html

 :silbar: :silbar: :silbar: :silbar: :silbar:


Título: Re: Duda getters
Publicado por: HastatusXXI en 18 Agosto 2016, 16:52 pm
:-X :-X :-X

por ahi lei pero no encuentro donde...... ;D ;D que los setters y getters contradicen a alguno de los principios de SOLID

aca una lectura de solid...... ;-) ;-)
https://scotch.io/bar-talk/s-o-l-i-d-the-first-five-principles-of-object-oriented-design


saludos ::)

Ni siquiera conocía SOLID. Nunca he programado en POO, solo aprendí un poco con Python y Java solo lo he trabajado en el paradigma imperativo. Me veo forzado a utilizar POO para aprender a desarrollar para Android. Gracias  :D


Título: Re: Duda getters
Publicado por: + 1 Oculto(s) en 18 Agosto 2016, 23:04 pm
hola acabo de leer tu mensaje, si entiendes solid de a poco estaras programando en POO, yo personalmente solo aplique S.O y D los otros 2 principios no les entendi muy bien,  :P :P :P


Título: Re: Duda getters
Publicado por: Chuidiang en 20 Agosto 2016, 16:39 pm
Hola:

En tu pregunta original, no hay ninguna diferencia entre toString() y getName(), ambos devuelven el atributo name de la clase. En el ejemplo que pones, el this. es opcional, lo pongas o no, se referencia a name de la clase.

Si hubiera otra variable name accesible a los métodos, entonces igual sí es necesario poner this para distiguiir cual quieres usar. Por ejemplo, en un setter, puedes poner

Código:
public class UnaClase {
   ...
   private String name;
   ...
   public void setName (String name) {
      this.name = name;
   }
}

Hay dos name accesibles, el atributo de la clase y la varialble del parámetro. La variable del parámetro "oculta" a la de la clase, por lo que poner sólo name, referencia a la del parámetro. Si quieres usar el atributo de la clase, aquí sí es obligatorio usar this.name, porque si no, referenciarias al parámetro.

No hay variables globales en java, así que name a secas no referencia a una variable global.

Se bueno.