Java - uso de GET/SET (a manera de consulta)

 
Vista:
Imágen de perfil de Francisco gonzalez

uso de GET/SET (a manera de consulta)

Publicado por Francisco gonzalez (20 intervenciones) el 25/01/2016 17:08:34
Hola que tal gente..
como dice el titulo esto es a manera de consulta y tener conocimiento sobre el mismo.
cuando es necesario usar esos metodos (GET/SET) dentro de la clase
ya que he visto ciertos programas en los que no son utilizados y he visto muchos tutoriales en donde regularmente SI pero como dije en otros no... les agracederia me respondiecen cuando puedas.. gracias por leerme saludos
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
sin imagen de perfil
Val: 80
Ha disminuido 1 puesto en Java (en relación al último mes)
Gráfica de Java

uso de GET/SET (a manera de consulta)

Publicado por Juan R. (108 intervenciones) el 25/01/2016 18:53:29
Buenas Francisco

Voy a tratar de explicarme lo mejor posible.

Estos métodos son necesarios cuando quieres acceder a algún atributo propio de la clase, imagínate una clase coche, que tiene de atributo ruedas, pues para introducir un valor tendrías que usar el SET y para traerlo al programa el GET.

En cambio, dónde no te harían falta son en los métodos, aunque dentro de ellos sí que se suelen usar, imagínate, que tengas un método imprimeCaracterísticas() y que en el tienes para imprimir las puertas, pues en el System.out.prinln(this.getPuertas()) y se mostrarían las puertas.

No sé si más o menos me he explicado.

Un saludo y ánimo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Francisco gonzalez

uso de GET/SET (a manera de consulta)

Publicado por Francisco gonzalez (20 intervenciones) el 25/01/2016 19:00:05
quede un poco mas claro pero como dije he visto programas que no lo tienen o solo tiene el metodo Get que es lo que me da curiosidad pero lo que si me a aclarado algo es que dijiste que sin eso (aunque sea publicos los atributos de la clase) se debe usar para poder darles valores (que eso ya seria en la clase principal) y asi trabajarlos con los otros metodos que ya uno haga dependiendo de lo que este desarrollando.. si dije algo mal por favor corrigeme que estoy a aprender todo jeje y gracias por responder
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
sin imagen de perfil
Val: 10
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

uso de GET/SET (a manera de consulta)

Publicado por Marcelo (47 intervenciones) el 25/01/2016 20:27:21
Creo que hay una confusión respecto a esto.

Los get y los set son utilizados exclusivamente en la modificación de atributos si se quiere cumplir con el encapsulamiento. Concepto utilizado para por desacoplar o separar la interfaz(no me refiero a la interfaz de usuario) de la implementación.

Es normal ver, para un atributo, solo el get o solo el set. Es debido a que tu expones lo que te interesa que desde afuera, el sistema haga con tus atributos.

Por ejemplo, si a tu clase Auto no se le puede cambiar el color pero si consultarlo entonces solo harás el get para el color, dejando el set de lado. Sin embargo si para tu Auto tiene un atributo que no interesa mostrar pero si modificar, entonces harías solo el set y no el get.

Nuevamente, los get y set son utilizados por convención debido a que se consideran buenas practicas de programación. Claro esta que podrías no usarlos pero esta "mal visto".

Personalmente no utilizo los get y set dentro de la misma clase, dado que no aporta absolutamente nada y agrega overhead a las llamadas, sin embargo va en gustos también. Recorda que si utilizas los getters y setters entonces todos tus atributos deben ser privados

Cualquier duda a las ordenes
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 214
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

uso de GET/SET (a manera de consulta)

Publicado por juanki (131 intervenciones) el 25/01/2016 22:06:18
Hola

Como dice @Marcelo, suele ser por convención, aunque es una muy buena práctica. Personalmente suelo programar en C++ y me acerqué un poco a Java por el tema de Android, y una de las cosas que me llamó mucho la atención es que he visto mucho código Java y muchas librerías que he usado apenas usan los setter/getter y acceden diréctamente a los miembros de la clase, para mí, acostumbrado a hacerlo todo privado, me chocó muchísimo.

Un ejemplo para que veas su utilidad. Imagina que tienes una clase que tiene es una variable que almacena una fecha. Esa variable la haces pública y en cada parte de tu código que quieras acceder a ella o modificarla pues lo haces diréctamente.

Ahora imagina que quieres modificar el programa y añadirle una validación para que la fecha sea válida, pues te toca repasar todo el código y buscar todas las veces que accedes a la fecha y modificar lo que corresponda. Pero si hubieses hecho la variable fecha privada y usado un SET para modificarla, tan solo tendrías que modificar dicho método y listo.

Espero que te haya servido para aclarate un poco el tema.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Francisco gonzalez

uso de GET/SET (a manera de consulta)

Publicado por Francisco gonzalez (20 intervenciones) el 27/01/2016 05:50:36
que tal Juanki... leyendo lo que dices ahora me da mas sentido a el uso de los setters y getters ya que es lo unico que no comprendia de Java y he leido sobre eso pero no le hallaba el sentido a esos dos metodos pero ahora con sus aclaraciones ufff e quedado mas que bien en verdad muchas gracias :D
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
Imágen de perfil de Francisco gonzalez

uso de GET/SET (a manera de consulta)

Publicado por Francisco gonzalez (20 intervenciones) el 27/01/2016 05:49:02
Que tal Marcelo.. fijate que me has aclarado muchisimo ya que como bien dije antes que veia codigos en los que no se usaban ni uno de los dos se me hacia extraño pero ahora con tu explicacion me a quedado claro el uso de los mismo jejeje :D en verdad muchas gracias y con respecto al "overhead" que dijste... a que especificamente te referias.... a que el programa demorara en cargar o es otra cosa?? saludos
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
sin imagen de perfil
Val: 10
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

uso de GET/SET (a manera de consulta)

Publicado por Marcelo (47 intervenciones) el 27/01/2016 13:24:49
Que tal Fancisco?

Con overhead me refiero al contenido que se genera en el stack de llamada que hacen los métodos. (Cuando un método llama a otro, el primero se almacena en lo que se denomina stack o pila de llamadas, para que cuando finalice de procesar el método llamado pueda volver al método invocador).

Entonces, cuando tu llamas un get o set dentro de la clase que tienes los atributos, lo que haces es forzar al sistema a colocar un elemento mas en el stack de ejecución(así al terminar de ejecutar el get o el set, el sistema sabe desde que método fue llamado y así continuar con las instrucciones), si tu llamas directo al atributo en lugar de sus set o get, entonces no estas poniendo un nuevo elemento en el stack, lo que hace que tu sistema tenga un mejor rendimiento. Si bien esto no va a hacer una grand diferencia, si empezás a juntar pequeñas mejoras por aquí y por allá, a la larga logras un par de valiosos segundos (Recuerda que los usuarios generalmente no tienen paciencia y mientras mas demores mas estress les generará tu aplicación, lo cual dará lugar a que la remplacen fácilmente por otra mas rápida).

Espero haberme explicado
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
Imágen de perfil de Francisco gonzalez

uso de GET/SET (a manera de consulta)

Publicado por Francisco gonzalez (20 intervenciones) el 27/01/2016 07:15:39
que onda Marcelo.. espero no molestarte con eso pero quisiera saber como puedo mandarlos los valores al arreglo que esta en mi clase desde la clase principal ya que quiero hacerlo (y no se si este bien como lo este haciendo) por medio de el SET Y GET (como decia el titutlo de mi duda) este es el codigo.. solo quiero rellenarlo y ver los valores para asi saber como usar esos metodos ya mencionados

ESTA ES LA CLASE PRINCIPAL

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
package usando_set_get;
 
/**
 *
 * @author Francisco Gonzalez
 */
import java.util.Scanner;
public class Usando_Set_Get {
 
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
 
        int numero, tam;
        System.out.println("ingrese tamanio del arreglo");
        tam = sc.nextInt();
        Class_Set_Get clst = new Class_Set_Get(tam);
        System.out.println("ingrese los numeros");
        numero = sc.nextInt();
        clst.Llenar_Arreglo(numero);
    }
 
}


ESTA ES LA CLASE

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package usando_set_get;
 
 
public class Class_Set_Get {
    private int caja_arreglo [];
    private int suma;
    private int maximo_caja;
 
    public Class_Set_Get(int max){
        maximo_caja = max;
        caja_arreglo = new int [maximo_caja];
        suma =0;
    }
 
    public void Llenar_Arreglo(int dato){
        for (int i = 0; i < caja_arreglo.length; i++) {
            caja_arreglo[i] = dato;
           mostrarinfo();
        }
    }
 
    int  getMaximo_caja(){
        return maximo_caja;
    }
 
    void setMaximo_caja(int date){
        this.maximo_caja = date;
    }
 
    int getCaja_arreglo(){
        return caja_arreglo[maximo_caja];
    }
 
    void setCaja_arreglo(int valor){
        this.caja_arreglo[maximo_caja] = valor;
    }
 
    void mostrarinfo(){
        System.out.println("listado de datos");
          for (int i = 0; i < caja_arreglo.length; i++) {
              System.out.println(caja_arreglo[i]);
        }
 
    }
}

puede que este haciendo algo mal... espero me puedas ayudar ya que entendi el concepto que me dijiste pero lo que quiero hacer tengo mi duda
Saludos :D
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
sin imagen de perfil
Val: 10
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

uso de GET/SET (a manera de consulta)

Publicado por Marcelo (47 intervenciones) el 27/01/2016 14:09:32
Estimo que lo que estas intentando hacer es pedir un numero n y luego solicitar n valores para cargar el array creado, estoy en lo cierto?

Sin embargo no me queda del todo claro porque si necesitas n números, al arreglo le cargas solo el primer dato a en todas sus posiciones, por lo que voy a modificar el codigo para reflejar lo que comente arriba (y asi tenes mas ejemplos para tener en cuenta)

Tu código esta bastante bien, aunque tiene algunos ajustes para hacer como
1
caja_arreglo[maximo_caja]
. Tu definiste el array con el largo maximo_caja, por lo tanto tus posiciones validas del arreglo van desde 0 hasta maximo_caja-1 (dado que la primera posición del array es 0), lo que llevara a un IndexOutOfBoundsException (No estas solicitando una posición valida del arreglo).

Asumo que algo asi seria mas del estilo que te comento


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
26
27
28
29
30
31
32
33
34
package usando_set_get;
 
/**
 *
 * @author Francisco Gonzalez
 */
import java.util.Scanner;
public class Usando_Set_Get {
 
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
 
        int numero, tam;
        System.out.println("ingrese tamanio del arreglo");
        tam = sc.nextInt();
        Class_Set_Get clst = new Class_Set_Get(tam);
        int cantidadNumeros = 0;
        while(cantidadNumeros < tam){
             System.out.println("ingrese los numeros");
             numero = sc.nextInt();
             clst.Llenar_Arreglo(numero);
             cantidadNumeros++; //Esta linea significa que le sumo 1 al valor actual de cantidadNumeros
 
        }
 
        for(int i =0; i < tam; i ++){
             System.out.println(String.valueOf(clst.elementAt(i)));
        }
    }
 
}



Y tu clase Llenar_Arreglos podria ser:

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package usando_set_get;
 
 
public class Class_Set_Get {
    private int caja_arreglo [];
    private int suma;
    private int maximo_caja;
    private int proximo_Elemento;
 
    public Class_Set_Get(int max){
        maximo_caja = max;
        caja_arreglo = new int [maximo_caja];
        suma =0;
        proximo_Elemento = 0;
    }
 
    public void Llenar_Arreglo(int dato){
       if(proximo_Elemento < maximo_caja){
               caja_arreglo[proximo_Elemento] = dato;
               proximo_Elemento++;
       }
    }
 
    public int  getMaximo_caja(){
        return maximo_caja;
    }
 
    public void setMaximo_caja(int date){
        this.maximo_caja = date;
    }
 
    public int elementAt(int indice){
        if(indice >= 0 && indice < maximo_caja){
             return caja_arreglo[indice];
        }
    }
 
    }
}

Algo que no me gusta nada es que se imprima desde una clase del dominio (solo deberías imprimir o mostrar información desde clases destinada a ello y no desde una clase que podrías reutilizar si el día de mañana cambiaras la consola por una ventana).

Espero te sirva el código (no lo probé por lo que cualquier duda que encuentres me avisas).

Saludos y a las ordenes
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Francisco gonzalez

uso de GET/SET (a manera de consulta)

Publicado por Francisco gonzalez (20 intervenciones) el 27/01/2016 17:42:22
Que onda Marcelo..
Tu codigo funciona a la perfeccion jajaja en verdad me has ayudado bastante y dado una idea para muchas cosas y claro ya sali de la duda de los Set/Get
no se como agradecerte
solo una ultima cosa... que me aconsejas para poner tener una buena logica. estoy batallando con eso... claro sigo practicando pero veo que tienes mucha experiencia y por te pregunto... saludos desde panama :D
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
sin imagen de perfil
Val: 10
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

uso de GET/SET (a manera de consulta)

Publicado por Marcelo (47 intervenciones) el 27/01/2016 18:11:21
Puedes hacer todas las preguntas que gustes, no hay problema

No se que tanta practica tienes exactamente (si estas comenzando con java o ya tienes experiencia en otro lenguaje orientado a objectos)

El criterio de buena lógica siempre es un tema de largas y constantes discusiones, para resumirte un poco la cosa... todo depende del contexto en el que te encuentres y que características arquitectónicas quieras priorizar (con características arquitectónicas me refiero a eficiencia, mantenibilidad, escalabilidad, seguridad, entre otras).

Sin embargo hay una división fuerte que personalmente siempre me gusta ver, la cual es la separación de la interfaz y el dominio.

Donde las clases del dominio son todas aquellas que te permiten resolver todos los pedidos que tu sistema necesita hacer, mientras que las clases de interfaz son aquellas que tienen como destino desplegar información en pantalla (ya sea imprimir por consola, ventanas o cualquier otro de despliegue de información) o solicitarla. La razón principal de esto es para que, si en el día de mañana vas a cambiar la interfaz de tu sistema(ejemplo, de consola a Ventanas) los cambios que tengas que hacer en las clases del dominio tiendan a ninguno.

Otro consejo no menor, es intentar extraer lógica en métodos para que no quede todo en un método gigante (tampoco irse al otro extremo y tener 2000 métodos con 2 lineas cada uno).

Nuevamente recalco que no hay una receta para seguir, pero con el tiempo vas a irlo viendo

A las ordenes
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Francisco gonzalez

uso de GET/SET (a manera de consulta)

Publicado por Francisco gonzalez (20 intervenciones) el 28/01/2016 04:22:17
bueno me toca seguir... ya llego un año en Java (y es un mundo) pero sigo.. seguire tu consejo y en verdad gracias :D por loda la informacion y tiempo en que dedicaste a responde mis dudas
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