Descripción de los objetos. Cómo crearlos o instanciarlos a partir de las clases y su utilización.
Lo primero que hay que hacer para utilizar un objeto es tenerlo ¿no?. Pues vamos a entender primero cómo se crean los objetos para después pasar a utilizarlos.
Instanciación de objetos:
Para instanciar un objeto el método que se utiliza es "new". "New" crea un objeto de la clase que le especifiquemos pero antes de esto se tiene que declarar la variable que contendrá ese nuevo objeto. Veámoslo en nuestra clase Tablero vista anteriormente.
Fichas estadoTablero[][];
public Tablero(){estadoTablero=new Fichas [6][7];};
En estas dos líneas se engloba todo el mecanismo de creación de un objeto. En la primera línea se declara una variable "estadoTablero" de la clase "array". La clase "array" es una clase utilitaria de Java que esta incluida en "Java.lang" y por lo tanto, como ya comenté una vez y explicaré mejor mas adelante, se encuentra disponible desde cualquier programa en Java.
En principio esta variable está vacía, no contiene ningún objeto, pero está "preparada" para contener un objeto de la clase "array".
En la segunda línea de este código hay mas miga que comentar: Se trata de la definición de un constructor sencillo para la clase "Tablero".
Cuando se ejecuta una sentencia "new" para crear un objeto de una clase, lo que realmente se hace es llamar al método constructor correspondiente a esa clase. Por ejemplo si ejecutamos esta sentencia:
Tablero miTablero = New Tablero();
Estamos llamando al método anterior:
public Tablero(){estadoTablero=new Fichas [6][7];};
Por tanto lo que conseguimos es crear la variable interna de "Tablero", que hemos llamado "estadoTablero" como un objeto "array" de dimensiones 6x7 que son las dimensiones de un tablero de "cuatro en raya". Como vemos, igual que con nuestra clase tablero y cualquier otra clase, también usamos "new" para crear el "array".
Por último, y como puedes comprobar, para definir un constructor para nuestra clase simplemente definimos un método que como peculiaridad tiene el mismo nombre de la clase en la que se define. En cuanto a su modificador de acceso lo normal es que sea "public", pero puede ser también "private" en cuyo caso solo será accesible desde un método "static" de la misma clase. Ya explicaremos esto último mejor, por ahora simplemente nos tiene que sonar.
Paso de mensajes:
Como "paso de mensajes" se entiende en programación orientada a objetos lo que siempre hemos llamado en programación tradicional: "llamada a una función". En el fondo si nos ponemos a pensar vemos básicamente que:
NombreDeLaClase.nombreDelMetodo(parámetros del método);
Los pasos de mensajes tienen una ventaja con respecto a las llamadas a función de los lenguajes tradicionales. La ventaja es que siempre llevan un parámetro implícito: El objeto al que pertenece el propio método. Lo vemos con un ejemplo muy sencillo.
Imaginamos un método y una función que simplifican una fracción pasada como parámetro. La diferencia seria la siguiente al utilizar tanto el método como la función.
Programación tradicional:
fraccion_simp = simplifica_fraccion(fraccion);
/*fraccion_simp guarda el resultado
de aplicar la función simplifica_fraccion
al parámetro fraccion*/
Programación orientada a objetos:
ObjetoFraccion.simplificaFraccion();
/*este caso lo podríamos entender como que
simplemente le decimos a la fracción que se
simplifique a ella misma "como ella sabe" */
Como vemos en Programación orientada a objetos no se pasa como parámetro la fracción a simplificar puesto que es el mismo objeto el que es la fracción y el que a su vez posee el método para simplificarla de acuerdo con sus atributos internos.
Acceso a variables internas de un objeto:
Para acceder a una variable interna de un objeto esta nos tiene que ser accesible según las normas vistas anteriormente. En caso de que si simplemente podemos acceder a ella con la siguiente sintaxis:
NombreDeLaClase.nombreDeVariableInterna;
Instanciación de objetos:
Para instanciar un objeto el método que se utiliza es "new". "New" crea un objeto de la clase que le especifiquemos pero antes de esto se tiene que declarar la variable que contendrá ese nuevo objeto. Veámoslo en nuestra clase Tablero vista anteriormente.
Fichas estadoTablero[][];
public Tablero(){estadoTablero=new Fichas [6][7];};
En estas dos líneas se engloba todo el mecanismo de creación de un objeto. En la primera línea se declara una variable "estadoTablero" de la clase "array". La clase "array" es una clase utilitaria de Java que esta incluida en "Java.lang" y por lo tanto, como ya comenté una vez y explicaré mejor mas adelante, se encuentra disponible desde cualquier programa en Java.
En principio esta variable está vacía, no contiene ningún objeto, pero está "preparada" para contener un objeto de la clase "array".
En la segunda línea de este código hay mas miga que comentar: Se trata de la definición de un constructor sencillo para la clase "Tablero".
Cuando se ejecuta una sentencia "new" para crear un objeto de una clase, lo que realmente se hace es llamar al método constructor correspondiente a esa clase. Por ejemplo si ejecutamos esta sentencia:
Tablero miTablero = New Tablero();
Estamos llamando al método anterior:
public Tablero(){estadoTablero=new Fichas [6][7];};
Por tanto lo que conseguimos es crear la variable interna de "Tablero", que hemos llamado "estadoTablero" como un objeto "array" de dimensiones 6x7 que son las dimensiones de un tablero de "cuatro en raya". Como vemos, igual que con nuestra clase tablero y cualquier otra clase, también usamos "new" para crear el "array".
Por último, y como puedes comprobar, para definir un constructor para nuestra clase simplemente definimos un método que como peculiaridad tiene el mismo nombre de la clase en la que se define. En cuanto a su modificador de acceso lo normal es que sea "public", pero puede ser también "private" en cuyo caso solo será accesible desde un método "static" de la misma clase. Ya explicaremos esto último mejor, por ahora simplemente nos tiene que sonar.
Paso de mensajes:
Como "paso de mensajes" se entiende en programación orientada a objetos lo que siempre hemos llamado en programación tradicional: "llamada a una función". En el fondo si nos ponemos a pensar vemos básicamente que:
- En primer lugar: Los programas "sobre el papel" son las clases.
- En segundo lugar: Las clases "sobre papel" se relacionan con otras clases. Por ejemplo nuestra clase Ficha utiliza para definir su parámetro "color" a la clase "String" propia de Java.
- En tercer lugar: En la "vida real", es decir, en funcionamiento, las clases se muestran como "objetos".
- Como conclusión: Son los objetos los que colaboran y se relacionan con otros objetos, y lo hacen mediante el "paso de mensajes".
NombreDeLaClase.nombreDelMetodo(parámetros del método);
Los pasos de mensajes tienen una ventaja con respecto a las llamadas a función de los lenguajes tradicionales. La ventaja es que siempre llevan un parámetro implícito: El objeto al que pertenece el propio método. Lo vemos con un ejemplo muy sencillo.
Imaginamos un método y una función que simplifican una fracción pasada como parámetro. La diferencia seria la siguiente al utilizar tanto el método como la función.
Programación tradicional:
fraccion_simp = simplifica_fraccion(fraccion);
/*fraccion_simp guarda el resultado
de aplicar la función simplifica_fraccion
al parámetro fraccion*/
Programación orientada a objetos:
ObjetoFraccion.simplificaFraccion();
/*este caso lo podríamos entender como que
simplemente le decimos a la fracción que se
simplifique a ella misma "como ella sabe" */
Como vemos en Programación orientada a objetos no se pasa como parámetro la fracción a simplificar puesto que es el mismo objeto el que es la fracción y el que a su vez posee el método para simplificarla de acuerdo con sus atributos internos.
Acceso a variables internas de un objeto:
Para acceder a una variable interna de un objeto esta nos tiene que ser accesible según las normas vistas anteriormente. En caso de que si simplemente podemos acceder a ella con la siguiente sintaxis:
NombreDeLaClase.nombreDeVariableInterna;
Victorino Blanco González
Forma parte del equipo DesarrolloWeb.com y MercadoProfesional.com