22 marzo, 2010

Setters & Getters

Setters & Getters
Los Setters & Getters son métodos de acceso lo que indica que son siempre declarados públicos, y nos sirven para dos cosas:

Setters: Del Inglés Set, que significa establecer, pues nos sirve para asignar un valor inicial a un atributo, pero de forma explícita, además el Setter nunca retorna nada (Siempre es void), y solo nos permite dar acceso público a ciertos atributos que deseemos el usuario pueda modificar.

Getters: Del Inglés Get, que significa obtener, pues nos sirve para obtener (recuperar o acceder) el valor ya asignado a un atributo y utilizarlo para cierto método.

Entonces veamos en un ejemplo, si tenemos una Clase de nombre Estudiante, cómo serían sus Setters & sus Getters?

public class Estudiante
{
        private String nombre;
        private String apellido;
        private String correo;

        public String getNombre()
        {
                return nombre;
        }
        public void setNombre(String nombre)
        {
                this.nombre = nombre;
        }

        public String getApellido()
        {
                return apellido;
        }
        public void setApellido(String apellido)
        {
                this.apellido = apellido;
        }

        public String getCorreo()
        {
                return correo;
        }
        public void setCorreo(String correo)
        {
                this.correo = correo;
        }
}

Y en el main la implementación sería:

public class Principal
{
        public static void main(String args[])
        {
                Estudiante estudiante1 = new Estudiante();
                // Ingreso los datos con los Setter a la nueva instancia de
                // Estudiante, estos datos pueden ingresarse desde teclado
                // o a través de una GUI
                estudiante1.setNombre("María");
                estudiante1.setApellido("Paucar");
                estudiante1.setCorreo("maria.paucar@epn.edu.ec");

                // Para obtener los datos uso los Getter
                // y los podemos imprimir en Consola o a una GUI
                System.out.println(estudiante1.getNombre());
                System.out.println(estudiante1.getApellido());
                System.out.println(estudiante1.getCorreo());
        }
}

64 comentarios:

  1. Estoy en temas de Java y esto me ayuda a tener un poco mas de luz jejej gracias por tu aportacion

    ResponderBorrar
  2. Por nada, espero que te sirva, y gracias por comentar :)

    ResponderBorrar
  3. muchas gracias amigo por su aporte la verdad me ayuda de mucho, pero tambien quiero saber como insertar registro a una base de datos con metodos getters y setters y actualizar tambien logicamente haciendo referencia a esa clase que tiene los metodos getters y setters????? me podrias ayudar ???

    ResponderBorrar
  4. Saludos, gracias por comentar, me alegra que te haya sido de ayuda, y con respecto a tus dudas te recomiendo lo siguiente:
    - Utiliza setters & getters para establecer los valores de los atributos de un objeto.
    - Utiliza un método distinto para realizar la inserción en la Base de datos, así tu código será más limpio e independiente.

    Un pequeño ejemplo rápido de lo que te digo sería algo así:

    //Instancia de Estudiante donde con setters y getters llenamos los valores de sus atributos.
    Estudiante es1 = new Estudiante();
    es1.setNombre("Julia");
    es1.setEdad("19");

    //Instancia de Operador, clase que contendrá los métodos para hacer consultas, inserciones, actualizaciones y eliminaciones de la BDD.
    Operador op = new Operador();
    //Insertamos en la BDD la información de es1
    op.insertar(es1);

    Pero que tendría el método insertar de la Clase Operador?, Algo como esto:

    Statement st = conexion.createStatement();

    st.executeUpdate("INSERT INTO estudiantes (nombre, edad) VALUES ('"+es1.getNombre()+"',"+es1.getEdad()+")");

    Espero que te haya quedado más claro lo que me preguntabas. Si tienes dudas escríbeme no más. :)

    ResponderBorrar
  5. Muy bien explicado y con ejemplo.. gracias

    ResponderBorrar
    Respuestas
    1. De nada, espero que te haya sido útil, cualquier inquietud que tengas, no dudes en avisarme, que haré lo posible por ayudarte ^_^

      Borrar
  6. Gracias compi excelente aporte ..:D el profe lo pinto algo enrredoso :D ajjaja

    ResponderBorrar
    Respuestas
    1. Hola, gracias por comentar, me alegra que te haya sido de ayuda la explicación.

      Saludos! =)

      Borrar
  7. super gracias solo lo ultimo no me qdo claro
    ehmm bueno me llega otra pregunta sabes quiero hacer una calculadora con Setters & Getters como lo haria ???
    ayuda porfa me llego esa duda como mando por decirles 2 valores (a y b ) y q estos los sume en Setters y los pida en el Getters ....

    ResponderBorrar
    Respuestas
    1. Hola Alfredo, gracias por comentar, me gustaría saber de lo último que es lo que no te quedo claro.

      Con respecto a tu otra duda, los Setters y Getters son el principio de la Encapsulamiento en la Programación Orientada a Objetos, este principio determina que los atributos de los objetos deben ser siempre privados: no deben ser accesibles desde fuera del objeto, sino que solo el objeto tiene la potestad de para escribirlos o leerlos. Por tal razón se crean métodos públicos que sustituyan una u otra operación, o ambas, cada vez que la situación lo requiera. Estos métodos se denominan "Setters" y "Getters".

      Por tanto si tu quieres un método que sume a y b, con Setters y Getters también para ambos números, sería algo así:

      public Class OperacionSuma
      {
      private int numero1;
      private int numero2;
      private int suma;

      public int getNumero1()
      {
      return numero1;
      }
      public void setNumero1(int numero1)
      {
      this.numero1 = numero1;
      }

      public int getNumero2()
      {
      return numero2;
      }
      public void setNumero2(int numero2)
      {
      this.numero2 = numero2;
      }

      public int getSuma()
      {
      return suma;
      }
      public void setSuma(int numero1, int numero2)
      {
      this.suma = numero1 + numero2;
      }
      }

      Espero te sirva, saludos!!

      Borrar
    2. y como funcionaria en el main?, por ejemplo yo quiero que el usuario decida si quiere sumar o restar introduciendo los caracteres con el teclado

      Borrar
    3. Hola Crimson,

      Gracias por comentar, con respecto a tu pregunta, en realidad ahí solo debes validar que luego de leído el caracter por teclado se ejecute una determinada función la cuál puede ser suma o resta, no afecta en nada a los Setters y Getters, espero te sirva.

      Saludos!

      Borrar
  8. Amigo buen aporte tendras alguna pagina????

    ResponderBorrar
    Respuestas
    1. Hola César, alguna página personal te refieres, porque sobre Java publico todo acá.

      Saludos! =)

      Borrar
  9. hola buenas tardes y si quisiera que los datos del setter fueran introducidos por el usuario

    ResponderBorrar
    Respuestas
    1. Hola Eugenio, gracias por comentar, respondí una pregunta similar en este enlace: https://gl-epn-programacion-ii.blogspot.com/2010/03/setters-getters.html?showComment=1503554060188#c7068899172242203640

      Espero que te sirva y siento la demora, no revisaba el blog hace mucho tiempo.

      Saludos! =)

      Borrar
  10. Hola Galo Latorre me ayudo mucho tu programa, pero tengo algunos problemas para apicar los getters con arrays, algun consejo?? saludos!!

    ResponderBorrar
    Respuestas
    1. Hola, gracias por comentar, el principio es el mismo, pero debes iterar sobre los elementos del array tanto para leer como para modificar los datos del mismo, espero que te sirva, disculpa la tardanza pero hace tiempos que no revisaba el blog.

      Saludos! =)

      Borrar
  11. cual seria la necesidad basica de generar un metod setter and getter..ya que se puede sustitituir con un metodo normal...esa es mi pregunta?

    ResponderBorrar
    Respuestas
    1. Hola Sebastián, gracias por comentar, con respecto a tu duda, normalmente se hace esto por estándares y buenas prácticas de programación, es cierto que puedes reemplazar con cualquier método pero no es la solución óptima, espero que te sirva, y siento la demora, no he revisado el blog hace tiempos.

      Saludos! =)

      Borrar
  12. Muchas gracias, me sirvio mucho, para entender un poco el uso correcto del get y set, gracias! :D

    ResponderBorrar
    Respuestas
    1. Hola Luis, de nada, me alegra que te haya servido bastante, igualmente te agradezco por haber dedicado tiempo para comentar al respecto.

      Saludos! =)

      Borrar
  13. Esta buenísimo, entendí a la primera, lo has abstraído al modo más práctico para entender la idea detrás de set y get. Gracias.

    ResponderBorrar
    Respuestas
    1. Hola, gracias por comentar, me alegro que te haya sido útil.

      Saludos! =)

      Borrar
  14. Y cómo quedaría el main de la suma?

    ResponderBorrar
    Respuestas
    1. Hola, gracias por comentar, sobre tu pregunta, el ejemplo está indicado en los comentarios superiores y la clase Main quedaría exactamente igual al ejemplo del post, siento mucho la demora pero no reviso el blog desde hace un buen tiempo.

      Saludos! =)

      Borrar
  15. Respuestas
    1. Hola Ernesto, de nada, me alegra que te haya servido bastante, igualmente te agradezco por haber dedicado tiempo para comentar al respecto.

      Saludos! =)

      Borrar
  16. Respuestas
    1. Hola, Gracias por comentar, me alegra que te haya servido.

      Saludos! =)

      Borrar
  17. Me sirvió mucho para aprender la estructura de Getters&Setters. Tenía mucha duda al respecto.
    Saludos

    ResponderBorrar
    Respuestas
    1. Hola Kevin, gracias por comentar, me alegra que te haya sido de ayuda la explicación.

      Saludos! =)

      Borrar
  18. como puedo utilizar Setters and Getters con vectores

    ResponderBorrar
    Respuestas
    1. Hola, gracias por comentar, sobre tu pregunta la lógica inicial es la misma, solo que deberías iterar sobre ese vector para ir asignando o leyendo los valores almacenados, suerte y perdona la tardanza, pero hace tiempo que no revisaba el blog.

      Saludos! =)

      Borrar
  19. Muy bien explicado. Voy entendiendo poco a poco esto de los objetos y metodos. Me ha sido de gran ayuda la lectura. Gracias.

    ResponderBorrar
    Respuestas
    1. Hola, gracias por comentar, me alegra que te haya sido de ayuda la explicación.

      Saludos! =)

      Borrar
  20. Hola, un muy buen aporte amigo, la verdad el profe lo explico y parecia algo dificil, pero ya vi que no, me fue muy util tu aportacion....
    Gracias.!!

    ResponderBorrar
    Respuestas
    1. Hola, gracias por dedicar tu tiempo a comentar, me alegra que te haya servido este artículo, creo te va a gustar el mundo de la Programación.

      Mucha Suerte!! =)

      Borrar
  21. Hola, gracias por tu trabajo, me fue de mucha ayuda. Estoy estudiando para mi examen y con tu aporte pude entender mejor el uso de los Setters y Getters.

    ResponderBorrar
    Respuestas
    1. Hola Ainek, gracias por comentar, me alegra que te haya sido de ayuda la explicación, espero que te haya ido bien en el examen.

      Saludos! =)

      Borrar
  22. no entiendo si es necesario poner set y get
    es decír, puedo hacerlo de una forma en la que set no sea necesaria :(
    por favor explícame.

    ResponderBorrar
    Respuestas
    1. Hola, con respecto a tu duda, dentro de las buenas prácticas de programación se recomienda el uso de Setters y Getters, estos métodos pueden tener cualquier nombre, pero por estándar se recomienda lo que está descrito en el ejemplo.

      El uso de estos métodos facilita el acceso a los datos tanto para consultarlos como para modificarlos, por tal razón es recomendado su uso en la Programación.

      Espero que te sirva.

      Saludos! =)

      Borrar
  23. Mil gracias por tu ejemplo, llevaba varios días logrando entender esto, y al fin lo pude comprender en cuestión de minutos.

    ResponderBorrar
    Respuestas
    1. Hola Le blue, muchas gracias por comentar, me alegra que te haya sido de bastante ayuda la explicación.

      Saludos! =)

      Borrar
  24. Respuestas
    1. Hola, gracias por comentar, me alegra que te haya sido de ayuda la explicación.

      Saludos! =)

      Borrar
  25. hola como puedo usar estos metodos.. en caso de que los datos los ingrese por teclado

    ResponderBorrar
    Respuestas
    1. Hola, con respecto a tu pregunta solo debes crear una clase donde haya un método que reciba los datos por teclado, te recomiendo este post para tal fin: https://gl-epn-programacion-ii.blogspot.com/2010/11/lectura-de-datos-por-consola.html

      En el ejemplo que te adjunto aquí, la clase creada con el post anterior se llamará "Lector.java" y el método será "leer()", en la clase Principal o Main iría algo como esto:

      public class Main {
      public static void main(String args[]) {
      Estudiante estudiante1 = new Estudiante();

      Lector teclado = new Lector();
      estudiante1.setNombre(teclado.leer());
      estudiante1.setApellido(teclado.leer());
      estudiante1.setCorreo(teclado.leer());

      System.out.println(estudiante1.getNombre());
      System.out.println(estudiante1.getApellido());
      System.out.println(estudiante1.getCorreo());
      }
      }

      Eso sería todo, suerte!! =)

      Borrar
    2. buenas mira tengo una pregunta y si tiene que leer datos de varios usuarios como seria en el set

      Borrar
    3. Hola Andrés, con respecto a tu pregunta, el Setter no cambiaría, lo que podrías hacer es en el programa principal crear un Arreglo de Objetos de tipo Usuario y hacer la lectura de datos a través de un loop, por ejemplo un for o un while, espero que te sirva.

      Saludos! =)

      Borrar
  26. Muchisimas gracias por este muy buen aporte, me ha servido y mas aparte con esos ejemplos es mas facil de entender, Gracias ;)

    ResponderBorrar
    Respuestas
    1. Hola Alejan98, gracias por comentar, me alegra que te haya servido, te invito a ver el resto del blog y sugerir un tema o post específico que creas que pueda ayudar a más gente a comprender la programación en Java.

      Saludos! =)

      Borrar
  27. Me parece que a tu código le falta el constructor de la clase Estudiantes por ende es imposible crear una instancia de dicha clase. saludos.

    ResponderBorrar
    Respuestas
    1. Hola Jules, gracias por tu comentario, con respecto al Constructor que mencionas, no es necesario si no estás utilizando una "Sobrecarga de Constructores", la razón es que en Java esta definición de Constructor vacío se realiza por debajo y es transparente al usuario, sin embargo, si utilizas varios Constructores, ahí es indispensable declararlo de manera explícita.

      Te recomiendo que revises este enlace a un post sobre el tema en más detalle:
      https://gl-epn-programacion-ii.blogspot.com/2010/03/constructor-y-destructor.html

      Y sobre el código, es totalmente factible crear una instancia de dicha clase, para tal fin te adjunto una captura de pantalla del código adjunto en este post totalmente funcionando, puedes probarlo en tu PC y nos cuentas cómo te fue: https://goo.gl/YW7h6f

      Saludos!! =)

      Borrar
  28. Respuestas
    1. Hola Bleach717, gracias por comentar, me alegra que haya sido de utilidad para ti este post.

      Saludos!! =)

      Borrar
  29. Eres un heroe, llevas desde 2012 contestando a la gente. Vaya locura. Mañana tengo examen y tu ejemplo ha hecho que aprenda un poco mas sobre los getters y setters, genial dedicacion y aporte.

    ResponderBorrar
    Respuestas
    1. Hola RE(accions), muchas gracias por tus palabras, comentarios así me motivan a continuar adelante cada día con este tipo de aportes, aunque últimamente no he tenido tanto tiempo para hacer nuevos posts.

      Espero que te vaya bien en tu examen y que te haya servido el contenido del post para el tema de Setters y Getters.

      Suerte y gracias por todo!! =)

      Borrar
  30. Ese Galo que buena actitud en responder te felicito!

    ResponderBorrar
    Respuestas
    1. Muchas gracias Alain, se hace lo que se puede para contribuir a la Comunidad. Han sido tiempos difíciles y si ha sido más complicado responder pronto. Pero justo ahora que tengo tiempo revisé los comentarios.

      Gracias por tu felicitación!!

      Un saludo!

      Borrar
  31. Que buena actitud al contestar, te felicito!

    ResponderBorrar
    Respuestas
    1. Muchas gracias Alain, se hace lo que se puede para contribuir a la Comunidad. Han sido tiempos difíciles y si ha sido más complicado responder pronto. Pero justo ahora que tengo tiempo revisé los comentarios.

      Gracias por tu felicitación!!

      Un saludo!

      Borrar
  32. Gracias excelente explicación

    ResponderBorrar
    Respuestas
    1. Muchas gracias por tu comentario!! =D

      Me alegra que te haya servido.

      Saludos!

      Borrar