Aprendiendo JAVA (II)


java.jpg

Al terminar el ejercicio anterior teníamos un objeto NuevoLibro creado e inicializado gracias al constructor con parámetros.

Si posteriormente queremos variar alguno de esto valores podríamos utilizar el operador (.) punto, de la manera: NuevoLibro.(lo que sea). Esto nos mostrara los métodos y los atributos del objeto, tal y como se muestra en la imagen:

java operador punto.JPG

De esta forma podríamos seleccionar el atributo autor, por ejemplo y cambiarle el nombre: NuevoLibro.Autor="Nombre"; Normalmente estos atributos los utilizaremos para almacenar valores que son importantes para el objeto, valores con los que posteriormente trabajaremos en los métodos, etc.

Esto nos obliga a no permitir que cualquiera pueda poner el valor que desee en un atributo. Imaginemos que tenemos la clase Calendario y tenemos los atributos año, mes y día y todos son valores numéricos. Si alguien hiciera lo siguiente: MiCalendario.mes=13; comprometería la integridad del objeto. Lo recomendable en estos casos es usar métodos que nos permitan gestionar estos posibles problemas. Estos métodos se denominan Set y Get. Utilizaremos Set para dar valor a un atributo y Get para recuperar el valor de un atributo, es decir Set será para escritura y Get será para lectura.

Para añadir los set y los get a nuestro programa realizaremos la siguiente operación. Seleccionaremos la clase libro y haremos clic en la opción de menú Source-> Generate Getters and Setters y se nos mostrara un formulario como el siguiente:

java seters y geters.JPG

En este formulario seleccionaremos los setters y getters que queremos que se generen de forma automática. Si seleccionamos de un atributo solo el set crearemos un atributo de solo escritura y si seleccionamos solo el get crearemos un atributo de solo lectura. Nosotros seleccionaremos todos los setters y getters y pulsaremos OK. A partir de este momento para dar un valor a un atributo o para recuperarlo utilizaremos un de estos métodos. En la clase MiLibro añadiremos el siguiente código:

  • NuevoLibro.setAutor("Nombre"); Le damos a autor un nuevo nombre
  • NuevoLibro.getAutor(); Recuperamos el nombre del autor
  • System.out.println(NuevoLibro.Autor); Lo mostramos por la consola.

El resultado debe ser similar a este:

java set y get modificacion.JPG

Para evitar que cualquier pueda acceder a los atributos con el operador punto, NuevoLibro.Autor, pondremos delante de los atributos la palabra PRIVATE.

  1. private String Titulo;
  2. private String Autor;
  3. private int NumPag;
  4. private double Precio;
  5. private String ISBN;
  6. private String Editor;

De este modo si realizamos NuevoLibro.Autor nos dará un error y la aplicación no se compilara. No obstante seguimos teniendo el mismo problema: la comprobación y aprobación de los datos que se introducen en los atributos. Para solucionar este problema podemos utilizar sentencias condicionales:

  1. public void setTitulo(String titulo) {
  2. if (titulo!=""){
  3. Titulo= titulo;
  4. }
  5. }

En este caso si titulo no esta vacío pasaremos el valor a Titulo, si esta vacío no haremos nada. Con autor, ISBN y editor haremos lo mismo.

  1. public void setAutor(String autor) {
  2. if(autor!=""){
  3. Autor = autor;
  4. }
  5. public void setISBN(String isbn) {
  6. if(isbn!=""){
  7. ISBN = isbn;
  8. }
  9. }
  10. public void setEditor(String editor) {
  11. if(editor!=""){
  12. Editor = editor;
  13. }
  14. }

En cambio con los atributos de tipo numérico comprobaremos si lo que viene en la variable es un valor integer o double y si cumple ciertos requisitos que queremos para todos nuestros libros. Como requisito queremos que el precio sea superior a 100,00 y que el número de páginas sea inferior de 800. Si no cumple nuestros requisitos devolveremos unos valores por defecto. Lo primero que nos encontramos es que Java no tiene una función tipo IsNumeric como la tiene Visual Basic por ejemplo. Así que implementaremos nuestra función a medida para comprobar los valores que nos pasan por medio del método Set. La función será básicamente como esta:

  1. private String IsNumeric(String Numero, int Indice){
  2. String ValorDevuelto="";
  3. switch ( Indice ) {
  4. case 1:
  5. try {Integer.parseInt(Numero);
  6. ValorDevuelto="Integer";}
  7. catch (NumberFormatException nfe){
  8. ValorDevuelto="No Integer";}
  9. break;
  10. case 2:
  11. try {Double.parseDouble(Numero);
  12. ValorDevuelto="Double";}
  13. catch (NumberFormatException nfe){
  14. ValorDevuelto="No Double";}
  15. break;
  16. default:
  17. ValorDevuelto="Vacio";
  18. }
  19. return ValorDevuelto;
  20. }

Hemos marcado como private este procedimiento porque solo lo utilizaremos para realizar funciones dentro de la propia clase. Podemos observar que recibe dos parámetros. Un string con el número que nos pasan y un número de índice que utilizaremos en función del tipo de valor que nos pasen: integer, double, float, etc. El trabajo del método es muy sencillo. En base al numero del índice que nos llegue utilizaremos uno de los case del switch y devolveremos el valor que nos interesa. En el método Set comprobaremos ese valor y actuaremos en consecuencia. La estructura try{---} catch (tipo nombre_variable){---} es la gestión de control de errores que podemos implementar en Java. El código que se encuentra en try siempre se ejecutara y si es correcto el programa seguirá después del bloque catch. Si por lo contrario es erróneo se ejecutaran las sentencias que se encuentra en el bloque catch. Más tarde veremos más ejemplos. Los métodos Set de los valores numéricos quedaran:

  1. public void setPrecio(double precio) {
  2. String Cambio="" + precio;
  3. String Resultado=IsNumeric(Cambio, 2);
  4. if(Resultado=="Double" && precio>100){
  5. Precio = precio;
  6. }else{
  7. Precio = 00.00;
  8. }
  9. }
  10. public void setNumPag(int numPag){
  11. String Cambio="" + numPag;
  12. String Resultado=IsNumeric(Cambio, 1);
  13. if(Resultado=="Integer" && numPag<800){
  14. NumPag = numPag;
  15. }else{
  16. NumPag = 0000;
  17. }
  18. }

Ahora podemos dar por terminada nuestra clase libro. Para probar esta clase deberemos modificar la clase MiLibro. Quedara más o menos como se muestra en la imagen.

java clasemilibro.JPG

El texto que aparece entre /** y */ es texto comentado. Lo que hacemos es pasar un valor correcto a número de páginas y a precio y mostrarlo por la consola. Después pasamos dos valores erróneos y comprobamos que nos devuelve en la consola. Una vez ejecutado el programa debería darnos estos resultados:

  1. Nombre
  2. 305
  3. 115.42
  4. 0
  5. 0.0

Uno de los aspectos más interesante de todo lo expuesto es que: tal y como podemos comprobar ahora nuestra clase libro es mucho mas opaca al exterior y cumple uno de los requisitos de la programación orientada a objetos: la encapsulación.

Enlaces interesantes

  • ¿Qué te ha parecido el artículo?

  • Compartir

    Comparte tu opinión ahora


Relacionados con Aprendiendo JAVA (II)

Temas sobre Aprendiendo JAVA (II)

Opiniones sobre Aprendiendo JAVA (II)

Hace 6 años y 6 meses

Hemos comprobado que el formato automático del código cortaba partes de las líneas de mismo, creando un código incorrecto.
Ya hemos solucionado el problema y se ha repasado todo el código publicado, esperamos que de ahora en adelante se formatee de forma correcta. De todos modos si alguien observar algo extraño agradecemos siempre los avisos. Gracias a todos y disculpar las molestias.


Hace 5 años y 11 meses

hola quisiera saber como se colocan las variable
globales para que a utilizada en ventanas


Opina sobre Aprendiendo JAVA (II)

Nombre:

Tu email:

Página web (si tienes):

Opinar:

Escoge el recuadro negro: para evitar spam