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());
        }
}

56 comentarios:

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

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

    ResponderEliminar
  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 ???

    ResponderEliminar
  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. :)

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

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

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

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

      Saludos! =)

      Eliminar
  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 ....

    ResponderEliminar
    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!!

      Eliminar
    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

      Eliminar
    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!

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

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

      Saludos! =)

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

    ResponderEliminar
    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! =)

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

    ResponderEliminar
    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! =)

      Eliminar
  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?

    ResponderEliminar
    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! =)

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

    ResponderEliminar
    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! =)

      Eliminar
  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.

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

      Saludos! =)

      Eliminar
  14. 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! =)

      Eliminar
  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! =)

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

      Saludos! =)

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

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

      Saludos! =)

      Eliminar
  18. como puedo utilizar Setters and Getters con vectores

    ResponderEliminar
    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! =)

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

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

      Saludos! =)

      Eliminar
  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.!!

    ResponderEliminar
    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!! =)

      Eliminar
  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.

    ResponderEliminar
    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! =)

      Eliminar
  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.

    ResponderEliminar
    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! =)

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

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

      Saludos! =)

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

      Saludos! =)

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

    ResponderEliminar
    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!! =)

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

      Eliminar
    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! =)

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

    ResponderEliminar
    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! =)

      Eliminar
  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.

    ResponderEliminar
    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!! =)

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

      Saludos!! =)

      Eliminar