Clases (VI) – Objetos
Definición e Inicialización de Objetos•
Una vez definida una clase se podrán crear objetos de esta clase con distintos datos para cada uno de ellos. La creación de objetos se lleva a cabo de la misma forma que la definición de una variable, pero en este caso, el tipo de datos es el nombre de la clase a la que va a pertenecer.
private Tiempo t1, t2, t3
La inicialización del método se llevará a cabo mediante una llamada al constructor que hemos definido
t1 = new Tiempo ();
Los constructores garantizan que todo objeto iniciará su existencia en un estado consistente
Sobrecarga de constructores
Los métodos de una clase pueden estar sobrecargados, es decir, que en función del número de parámetros con que se llame a una función se ejecute de una forma u otra.
public Tiempo (int ho, int mi, int se) { //Constructor sobrecargado (2)
setTiempo (ho, mi, se);
}
t2 = new Tiempo (20, 56, 14); //Se llama al constructor (2)
Acceso a variables y métodos de un objeto
El acceso a las variables y a los métodos correspondientes a un determinado objeto se lleva a cabo mediante el operador punto (.)
public Tiempo t1;
t1.hora = 12; //Accedo directamente a la variable (*)
t1.setTiempo (12, 35, 46); //Se invoca al método setTiempo sobre el
//objeto t1 • Definición y empleo de métodos set y get
Las variables de una clase conviene que se declaren como private para mantener su integridad, ya que de esta forma únicamente podrán ser accedidas directamente por los métodos de esa clase.
Para proporcionar acceso a estos datos, se deben implementar accesores(métodos get) y modificadores (métodos set) como métodos públicos y que permitan controlar el formateo y exhibición de los datos, y validar que el dato introducido es apropiado para esa variable.
Si hora fuera public t1.hora = 59; //Correcto
t1.setHora (59); //Comprueba que hora es >24
// y devuelve mensaje
Si hora fuera private t1.hora = 59; //NO ES POSIBLE
t1.setHora (59); //Comprueba que hora es >24
// y devuelve mensaje
Sobrecarga de Métodos
Java diferencia los métodos algo más que por su nombre, utiliza lo que se llama caracterización por completo , esto es incluye su nombre, su clase y sus argumentos.
De esta forma, dos métodos pueden tener a la vez el mismo nombre tanto entre clases distintas:
class Radio {
void Encender () { ……. }
}
class Television {
void Encender () { ……. }
} // En este caso el número de argumentos es igual
o tener incluso el mismo nombre dentro de una misma clase:
class CuentaBancaria {
double m_dInteresActual;
double m_dSaldo;
double CalculaInteres () { //Se aplica el interés actual por defecto
return (m_dSaldo * m_dInteresActual)/365;
}
double CalculaInteres (double d_NuevoInteres) {
return (m_dSaldo * d_NuevoInteres)/365;
} //Se aplica el interés pasado como parámetro
}
el método CalculaInteres ha sido sobrecargado para ejecutar dos operaciones relacionadas, y se diferencian en base a sus argumentos