MÉTODOS GETTER
Y SETTER
Debido a que las clases pueden ser muy complejas y que necesitamos algún
mecanismo que nos asegure que no se accederá de forma incorrecta a los
atributos, se ha establecido un convenio para acceder a los atributos de un
objeto. Este convenio indica que se debe crear un método getX() y setX()
por cada atributo que queramos que sea accesible desde fuera de nuestra clase.
Dónde X se sustituye por el nombre del atributo referenciado.
- getX(): devuelve el valor del atributo X.
- setX(): establece el valor del atributo X.
Por ejemplo en nuestro ejemplo tenemos varios métodos de este tipo:
// Getter
y setter
public String getMatricula() {
return matricula;
}
public void setMatricula(String
matricula) {
this.matricula = matricula;
}
public String getMarca() {
return marca;
}
public void setMarca(String
marca) {
this.marca
= marca;
}
PASO DE
MENSAJES
Es la forma utilizada en la Programación Orientada a Objetos
proporcionada para poder comunicar objetos entre sí. Por ejemplo si quiero
preguntarle a un objeto Coche por su información, debería de hacer algo similar
a esto:
// Mostramos sus caracteristicas
coche1.mostrarCaracteristicas();
// Cambiamos algunos datos del coche1
coche1.setMarca("Porsche");
coche1.setModelo("Gt");
coche1.setTipoCombustible("Gasolina");
En el ejemplo la clase Main.java utiliza los métodos de la clase
Coche.java para mostrar sus características y modificar sus datos (métodos
setter).
VISIBILIDAD DE
VARIABLES Y MÉTODOS
Cuando creamos una clase podemos determinar quién puede ver y utilizar
cada uno de las características de nuestra clase. Para esto existen varios
modificadores de acceso o visibilidad llamados prívate, protected, public y
default. Cada uno de estos establece una restricción sobre qué clases
externas pueden acceder a una propiedad.
- Private: sólo la propia clase puede acceder a un atributo o
método definido como privado.
- Protected: puede acceder la propia clase, las clases hijas
(heredadas o derivadas) y las clases que se encuentren en el mismo paquete.
- Default (sin modificador): puede acceder la propia clase y las
clases que se encuentren en el mismo paquete.
- Public: puede acceder cualquier clase.
De estos modificadores los más importantes son public y prívate.
El resto son una versión refinada de los dos anteriores. Por ejemplo en la
clase Vehículo el atributo matrícula es privado y esto hace que desde
otra clase (por ejemplo Main.java) no se pueda acceder directamente a él. Por
este motivo dentro de la clase Vehículo se definió los métodos getMatricula()
y setMatricula() como públicos, para permitir que otra clase
pueda acceder a este atributo de una manera segura.
public class Vehiculo {
/* ATRIBUTOS */
// Atributos de instancia
private String matricula;
.
.
.
// Getter
y setter
public String getMatricula() {
return matricula;
}
public void setMatricula(String
matricula) {
this.matricula = matricula;
}
}
public class Main {
public static void main(String[] args) {
.
.
.
Vehiculo vehiculo1 = new Vehiculo("1600RM",
"Audi", "A5", "Diesel");
// Funciona correctamente, pues el método setMatricula()
es público
vehiculo1.setMatricula("43534UM");
// Falla, pues el atributo es privado
vehiculo1.matricula = "43534UM";
.
.
.
}
}
En una clase normalmente los atributos se crean privados y luego se
definen métodos getter y setter para permitir acceso a estos atributos.
MODIFICADORES
STATIC Y FINAL
Estos modificadores nos permiten refinar el comportamiento de los
atributos y métodos de una clase.
- Static: nos indica que un atributo o
método pertenece a la clase en lugar de a una instancia (objeto) concreta de
esa clase. Los atributos que hemos visto hasta ahora son todos de instancia, lo
cual significa que cuando creamos un objeto nuevo, dentro del objeto se crea
una variable y por tanto cada objeto tiene su propia variable. Si indicamos que
un atributo es static le estaremos indicando al compilador que sólo
queremos crear una única variable y que ésta variable será compartida por todos
los objetos que creemos de esta clase.
- Final: nos indica que una clase o método no se puede
modificar o
heredar. Esto se utiliza básicamente por razones de seguridad (para que una
clase no pueda ser reemplazada por otra que la herede).
Un miembro static es único para todos los objetos que se crean.
Se puede decir que esta variable siempre está creada. Se puede acceder a él sin
necesidad de un crear un objeto. Un miembro no estático (o de instancia)
pertenece a cada objeto individual. Se puede decir que se crea junto con el
objeto.
Un ejemplo de uso de static sería mantener una variable de
clase que nos indique la cantidad de Vehículos creados en nuestra aplicación.
Si no dispusiéramos del modificador static tendríamos que implementar esto con
una variable global.
public class Vehiculo {
/* ATRIBUTOS */
// Atributos de instancia
private String matricula;
.
.
private int vehiculoNumero;
private static final int VELOCIDAD_MAX = 320;
// Atributos de clase
private static int numeroVehiculo
= 0;
/* MÉTODOS */
// Constructor de clase
public Vehiculo(String matricula,
String marca, String modelo,
String tipoCombustible)
{
this.matricula
= matricula;
this.marca
= marca;
this.modelo
= modelo;
this.tipoCombustible
= tipoCombustible;
vehiculoNumero = ++numeroVehiculo;
}
}
public class Main {
public static void main(String[] args) {
// Mostramos el número de vehículos creados actualmente
System.out.print("Número de vehículos creados: ");
Vehiculo.mostrarNumeroVehiculos();
// Creamos un coche
Vehiculo vehiculo1 = new Vehiculo("1600RM",
"Audi", "A5",
"Diesel");
Vehiculo vehiculo2 = new Vehiculo("9094BC",
"Porsche", "Gt",
"Gasolina");
// Mostramos el número de vehículos creados actualmente
System.out.print("Número de vehículos creados: ");
Vehiculo.mostrarNumeroVehiculos();
}
La salida del anterior código sería:
Número de vehículos creados: 0
Número de vehículos creados: 2
Otra función importante de estos dos modificadores la posibilidad de
definir constantes en Java. En Java a diferencia de otros lenguajes no tiene
una palabra específica para definir constantes. Por ejemplo en la clase
Vehículo podríamos definir la velocidad máxima para todos los vehículos. Por
tanto si queremos crear una variable que se comporte como una constante se
haría de la forma es la siguiente:
public static final int VELOCIDAD_MAX = 320;