509 artículos, 3.651 opiniones y 2.444 usuarios desde 2006
Por francisco | 05 de Octubre del 2007
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:
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:
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:
El resultado debe ser similar a este:
Para evitar que cualquier pueda acceder a los atributos con el operador punto, NuevoLibro.Autor, pondremos delante de los atributos la palabra PRIVATE.
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:
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.
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:
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:
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.
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:
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.
¿Te ha gustado? Recibe lo más interesante sobre informática en tu email:
Artículos relacionados
Opiniones
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.
hola quisiera saber como se colocan las variable
globales para que a utilizada en ventanas
Comparte tu opinión
Tu opinión es importante para todos nosotros.
Temas relacionados