lunes, 13 de febrero de 2017

Clases



¿Qué es una clase?



Las clases en Java son básicamente una plantilla que sirve para crear un objeto. Si imaginásemos las clases en el mundo en el que vivimos, podríamos decir que la clase “persona” es una plantilla sobre cómo debe ser un ser humano. Todos y cada uno de nosotros, los seres humanos, somos objetos de la clase “persona“, ya que todos somos personas. La clase “persona” contiene la definición de un ser humano, mientras que cada ser humano es una instancia u objeto de dicha clase.



Para poder comprender esto debemos verlo con ejemplos. Vamos a crear un proyecto en Netbeans al que voy a llamar JavaExamples.



clases en Java

Vemos que se crea un archivo llamado JavaExamples.java. Esta es la clase principal, la que contiene el método public static void main. Al ejecutarse un programa, lo que se encuentre establecido en el void main será lo primero en ejecutarse. La clase JavaExamples es un ejemplo de una clase, pero en ella no quedan claros los conceptos que me gustaría transmitirles, así que vamos a crear una clase a la que llamaremos “persona”.


clases en Java

clases en Java


Ahora vamos a empezar a construir la clase “persona”.  Necesitamos establecer las propiedades de la clase persona. Como personas, ¿qué propiedades poseemos?
Podríamos hablar de un nombre(s), apellido(s), una fecha en la que nacimos, nuestra edad y género. Hay muchas otras propiedades que podríamos mencionar, pero por ahora solamente tomaremos en cuenta las que hemos listado. Son simplemente características que posee todo ser humano, al menos en la mayoría de los casos.
Para establecer estas propiedades dentro de la clase creamos variables, cuidándonos de asignarle a cada propiedad el tipo de dato que le corresponde. Dicho esto, declaramos las propiedades de la clase persona:

Al establecer las propiedades como private estamos asegurando que dentro de la clase persona se pueda acceder y manipular estas propiedades, pero no así desde otra clase, a menos que el usuario así lo decida y se lleve a cabo a través de métodos públicos. Esto lo veremos un poco más adelante.

Observación: Es necesario resaltar que, en la medida de lo posible, se debe utilizar nombres en inglés para las variables. Se puede usar el idioma que sea y la estructura que nos plazca, pero se recomienda nombres en inglés y que las variables empiecen con minúscula. Si se trata de nombres compuestos de dos o más palabras se utiliza la primera palabra en minúscula y seguido la segunda palabra en mayúscula. Ejemplo: para llamar a una variable como Last Name, usamos lastName.

Una vez establecidas las propiedades de la clase creamos un constructor. El constructor es un método con el nombre de la clase donde se establecen los parámetros y las acciones a ejecutar cuando sea que se cree un nuevo objeto o instancia (objeto e instancia es básicamente lo mismo) de la clase persona. En Java las llamadas “funciones” de otros lenguajes se conocen como “métodos”.


Cuando vayamos a construir un objeto de la clase persona nos veremos obligados a establecer una serie de parámetros iniciales. Al crearse la instancia, la primera tarea que llevará a cabo la clase será asignarle los parámetros del constructor a las propiedades de la clase. Estas propiedades, como ya mencionamos, tienen un acceso privado dentro de la clase y no pueden ser modificadas desde el exterior. Sin embargo, podemos otorgarle acceso restringido desde las clases externas a las propiedades de nuestra clase “persona“. Para ello establecemos los llamados getters y setters que son métodos para obtener o modificar propiedades de una clase.

Un ejemplo sería el setter y el getter para la propiedad Nombre.



Al invocar el setter setName(String nombre) estamos cambiando la propiedad name por el parámetro que l introduzcamos, osea nombre. Este método es del tipo void, por lo que no devuelve ningún valor. Simplemente cambia la propiedad name y nada más.

Al invocar el getter getName() vamos a “llamar” a la propiedad name y obtendremos su valor. El método es tipo String, osea que devuelve una cadena de caracteres con el valor que tenga la propiedad name, de ahí que se use el comando return name.

Ahora establecemos los getters y setters para todas las propiedades. 
Entonces la estructura interna de nuestra clase “persona” debe lucir así:

                            clases en Java



Esta lista nuestra clase “personas”. Hemos creado una plantilla para “crear” personas. Pero, ¿cómo es esto?

Nos vamos a nuestra clase principal y creamos una instancia de la clase persona.


Esta persona nueva que he creado con el nombre de p1 posee como nombre “Antony”, apellidos “García González”, fecha de nacimiento “30/7/1992”, edad 22 años y sexo masculino.

El objeto p1 me representa a mi. Yo soy Antony García González, pero dentro de Java soy un objeto de nombre p1. Este objeto lo creamos siguiendo la siguiente sintaxis:

Nombre_de_la_clase nombre_de_objeto = new Nombre_de_la_clase(parámetros del constructor
).
                               clases en Java





Las clases en Java siempre se instancian de la misma manera. Instanciar es crear un objeto de una clase. Entonces este objeto que creamos, dentro de nuestra aplicación se llama p1 pero para el usuario del software tiene mi nombre, Antony.

Del objeto p1 podemos “obtener” sus propiedades o bien, “modificar” las mismas. Si escribimos en nuestro código “p1.” nos aparecerá lo siguiente:
                                              clases en Java


Vemos que el asistente de Netbeans nos presenta todos los métodos disponibles para el objeto p1. Esa es la ventaja de las clases en Java que un solo objeto contiene una gran cantidad de métodos en su interior para llevar a cabo distintos procedimientos resumidos en una sola línea de código. Por ahora hemos trabajado con sentencias cortas, solo establecer propiedades u obtener los valores de las mismas. Pero bien podríamos agregar un método que haga algo mucho más complicado y extenso e invocarlo luego de haber creado un objeto de la clase en cuestión. Hay algunos métodos que no establecimos, como equals, hashCode, etc… Estos son métodos heredados de la clase Object. El concepto de herencia lo estudiaremos en otros aportes. Por ahora basta con saber que tenemos a nuestra disposición los getters y setters que establecimos al construir nuestra clase “persona”.

Podemos construir cuantos objetos queramos.

                            clases en Java

Podemos probar los getters imprimiendo en consola la información de p2.

                            clases en Java



Al usar los getters simplemente obtenemos cadenas de caracteres con los valores de las propiedades establecidas. Estas cadenas las imprimimos en la consola con el System.out.println y en la parte inferior de la ventana vemos los resultados. En la primera impresión el nombre y demás propiedades son los que establecimos en la creación del objeto p2. Luego con los setters cambiamos algunas propiedades y al volver a imprimir vemos que cambió la información.

Espero que haya quedado claro el concepto de clases en Java, su construcción y la creación de objetos. En los siguientes días iré publicando un poco más sobre las mil y una cosas que podemos lograr con la programación orientada a objetos. 

No hay comentarios:

Publicar un comentario