TutorJava Nivel Básico

Una vez que se ha creado un objeto, probablemente querr�s hacer algo con �l. Sup�n, por ejemplo, que despu�s de crear un nuevo rect�ngulo, quieres moverlo a una posici�n diferente (es decir, el rect�ngulo es un objeto en un programa de dibujo y el usuario quiere moverlo a otra posici�n de la p�gina).

La clase Rectangle proporciona dos formas equivalentes de mover el rect�ngulo.

  1. Manipular directamente las variables x e y del objeto.
  2. Llamar el m�todo move().

La opci�n 2 se considera "m�s orientada a objetos" y m�s segura porque se manipulan las variables del objeto indirectamente a trav�s de una capa protectora de m�todos, en vez de manejarlas directamente. Manipular directamente las variables de un objeto se considera propenso a errores; se podr�a colocar el objeto en un estado de inconsistencia.

Sin embargo, una clase no podr�a (y no deber�a) hacer que sus variables estuvieran disponibles para la manipulaci�n directa por otros objetos, si fuera posible que esas manipulaciones situaran el objeto en un estado de inconsistencia. Java proporciona un mecanismo mediante el que las clases pueden restringir o permitir el acceso a sus variables y m�todos a otros objetos de otros tipos.

Esta secci�n explica la llamada a m�todos y la manipulaci�n de variables que se han hecho accesibles a otras clases. Para aprender m�s sobre el control de acceso a miembros puedes ir Controlar el Acceso a Miembros de una Clase.

Las variables x e y de Rectangle son accesibles desde otras clases. Por eso podemos asumir que la manipulaci�n directa de estas variables es segura.

.�Referenciar Variables de un Objeto

Primero, enfoquemos c�mo inspeccionar y modificar la posici�n del rect�ngulo mediante la manipulaci�n directa de las variables x e y. La siguiente secci�n mostrar� como mover el rect�ngulo llamando al m�todo move().

Para acceder a las variables de un objeto, s�lo se tiene que a�adir el nombre de la variable al del objeto referenciado introduciendo un punto en el medio ('.').

objetoReferenciado.variable

Sup�n que tienes un rect�ngulo llamado rect en tu programa. puedes acceder a las variables x e y con rect.x y rect.y, respectivamente.

Ahora que ya tienes un nombre para las variables de rect, puedes utilizar ese nombre en sentencias y expresiones Java como si fueran nombres de variables "normales". As�, para mover el rect�ngulo a una nueva posici�n podr�as escribir.

rect.x = 15;        // cambia la posici�n x
rect.y = 37;        // cambia la posici�n y

La clase Rectangle tiene otras dos variables--width y height--que son accesibles para objetos fuera de Rectangle. Se puede utilizar la misma notaci�n con ellas: rect.width y rect.height. Entonces se puede calcular el �rea del rect�ngulo utilizando esta sentencia.

area = rect.height * rect.width;

Cuando se accede a una variable a trav�s de un objeto, se est� refiriendo a las variables de un objeto particular. Si cubo fuera tambi�n un rect�ngulo con una altura y anchura diferentes de rect, esta instrucci�n.

area = cubo.height * cubo.width;

calcula el �rea de un rect�ngulo llamado cubo y dar� un resultado diferente que la instrucci�n anterior (que calculaba el �rea de un rect�ngulo llamado rect).

Observa que la primera parte del nombre de una variable de un objeto (el objetoReferenciado en objetoReferenciado.variable) debe ser una referencia a un objeto. Como se puede utilizar un nombre de variable aqu�, tambi�n se puede utilizar en cualquier expresi�n que devuelva una referencia a un objeto. Recuerda que el operador new devuelve una referencia a un objeto. Por eso, se puede utilizar el valor devuelto por new para acceder a las variables del nuevo objeto.

height = new Rectangle().height;

.�Llamar a M�todos de un Objeto

Llamar a un m�todo de un objeto es similar a obtener una variable del objeto. Para llamar a un m�todo del objeto, simplemente se a�ade al nombre del objeto referenciado el nombre del m�todo, separados por un punto ('.'), y se proporcionan los argumentos del m�todo entre par�ntesis. Si el m�todo no necesita argumentos, se utilizan los par�ntesis vacios.

objetoReferenciado.nombreM�todo(listaArgumentos);
   o
objetoReferenciado.nombreM�todo();

Veamos que significa esto en t�rminos de movimiento del rect�ngulo. Para mover rect a una nueva posici�n utilizando el m�todo move() escribe esto.

rect.move(15, 37);

Esta sentencia Java llama al m�todo move() de rect con dos par�metros enteros, 15 y 37. Esta sentencia tiene el efecto de mover el objeto rect igual que se hizo en las sentencias anteriores en las que se moficaban directamente los valores x e y del objeto.

rect.x = 15;
rect.y = 37;

Si se quiere mover un rect�ngulo diferente, uno llamado cubo, la nueva posici�n se podr�a escribir.

cubo.move(244, 47);

Como se ha visto en estos ejemplos, las llamadas a m�todos se hacen directamente a un objeto espec�fico; el objeto especificado en la llamada al m�todo es el que responde a la instrucci�n.

Las llamadas a m�todos tambi�n se conocen como mensajes.

Como en la vida real, los mensajes se deben dirigir a un receptor particular.

Se pueden obtener distintos resultados dependiendo del receptor de su mensaje.

En el ejemplo anterior, se ha enviado el mensaje move() al objeto llamado rect para que �ste mueva su posici�n.

Cuando se env�a el mensaje move() al objeto llamado cubo, el que se mueve es cubo. Son resultados muy distintos.

Una llamada a un m�todo es una expresi�n (puedes ver Expresiones para m�s informaci�n) y eval�a a alg�n valor. El valor de una llamada a un m�todo es su valor de retorno, si tiene alguno.

Normalmente se asignar� el valor de retorno de un m�todo a una variable o se utilizar� la llamada al m�todo dentro del �mbito de otra expresi�n o sentencia.

El m�todo move() no devuelve ning�n valor (est� declarado como void). Sin embargo, el m�todo inside() de Rectangle si lo hace. Este m�todo toma dos coordendas x e y, y devuelte true si este punto est� dentro del rect�ngulo.

Se puede utilizar el m�todo inside() para hacer algo especial en alg�n punto, como decir la posici�n del rat�n cuando est� dentro del rectangulo.

if (rect.inside(mouse.x, mouse.y)) {
    . . .
        // rat�n dentro del rect�ngulo
    . . .
} else {
    . . .
        // rat�n fuera del rect�ngulo
    . . .
}

Recuerda que una llamada a un m�todo es un mensaje al objeto nombrado. En este caso, el objeto nombrado es rect. Entonces.

rect.inside(mouse.x, mouse.y)

le pregunta a rect si la posici�n del cursor del rat�n se encuentra entre las coordenadas mouse.x y mouse.y. Se podr�a obtener una respuesta diferente si env�a el mismo mensaje a cubo.

Como se explic� anteriormente, el objetoReferenciado en la llamada al m�todo objetoReferenciado.metodo() debe ser una referencia a un objeto. Como se puede utilizar un nombre de variable aqu�, tambi�n se puede utilizar en cualquier expresi�n que devuelva una referencia a un objeto. Recuerda que el operador new devuelve una referencia a un objeto. Por eso, se puede utilizar el valor devuelto por new para acceder a las variables del nuevo objeto.

new Rectangle(0, 0, 100, 50).equals(anotherRect)

La expresi�n new Rectangle(0, 0, 100, 50) eval�a a una referencia a un objeto que se refiere a un objeto Rectangle.

Entonces, como ver�s, se puede utilizar la notaci�n de punto ('.') para llamar al m�todo equals() del nuevo objeto Rectangle para determinar si el rectang�lo nuevo es igual al especificado en la lista de argumentos de equals().

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP