0

Java paso a paso: Capítulo 3º – Control de Visibilidad, Tipos y Objetos

 

Como bien vimos en el capítulo anterior, definimos una clase Punto y a través de un programa main hacíamos uso de esa clase instanciando un nuevo objeto para poder modificarlo a nuestro antojo.

 

Si nos fijamos en la clase punto que creamos, en la cabecera de la misma definimos nuestras variables y constantes que representan a nuestro objeto, a esto le llamamos variables de instancias, las variables de instancia se acceden etiquetándolas con el nombre o la referencia de la instancia, pero en este caso las modificamos a través de sus métodos de instancias y eso es debido a un control de visibilidad que estableceremos a la hora de modificar nuestras variables.

 

Las variables de instancias para nuestra clase Punto eran las siguientes:

private double x,y;

Cuando queremos mostrar o modificar nuestras variables no podríamos hacerlo solamente de la siguiente forma:

Punto punto1 = new Punto(1.0, 2.0);

punto1.x = 5.0;

 

Esto nos lanzaría un error de compilación diciéndonos que la variable no es visible, si vemos al declarar nuestras variables en la clase su prefijo viene declarado como private, esto quiere decir que las variables sólo pueden ser observadas y modificadas dentro de nuestra clase y de aquí viene el porque aplicamos métodos para modificar/mostrar nuestras variables de instancias con su respectivo prefijo public, estos elementos se le llaman controles de visibilidad o accesores el porque del uso de este tipo de estructuras la gran mayoría de veces es usado para respetar la integridad de los datos, esto a grandes rasgos y en un sentido amplio de la programación se entiende mejor a la hora de usar librerías o paquetes los cuales a su vez usan otras librerías accediendo a los distintos métodos o variables respetando estas jerarquías, a continuación hablaré de los distintos tipos de accesos que usa Java en este ámbito:

 

 

  • Private: sólo pueden ser vistos y modificados en la misma clase, esto no incluye subclases dentro del mismo fichero de la clase en un mismo paquete o paquete distinto.
  • Protected: sólo puede ser accesado por otro miembro en su mismo paquete, pero tambien por una subclase derivada de si mismo en otro paquete, esto quiere decir que ha de heredar de la clase donde se encuentra dicho modificador protected, más tarde hablaré del concepto de clases heredadas.
  • Public: todos los elementos así como variables y métodos pueden ser accesados por cualquier otro paquete.
  • Package: los paquetes son los que engloban a las clases y por omisión este paquete puede acceder a todo su contenido pero no a otro paquete si no es importado en su cabecera al comienzo del archivo de clases con la claúsula package <nombre paquete>

 

Aquí os dejo una tabla que resume lo dicho:

 

 

Ahora comentemos brevemente los tipos y valores que se usan en Java, esto es sólo orientativo y a modo de repaso, lo único que puede diferir es a la hora de declarar según que tipos primitivos:

 

 

  • byte: entero codificado en 8 bits en complemento a 2, abarca los valores desde -128 hasta 127.
  • short: entero codificado en 16 bits en complemento a 2, abarca los valores desde -32,768 hasta 32,767.
  • int: entero codificado en 32 bits en complemento a 2, abarca los valores desde  -2,147,483,648 hasta 2,147,483,647, es el más común usado para almacenar enteros.
  • long: entero codificado en 64 bits en complemento a 2, abarca los valores desde -9,223,372,036,854,775,808 hasta 9,223,372,036,854,775,807, comúnmente usado para calcular grandes distancias por ejemplo distancias astronómicas.
  • float: para almacenar decimales codificados en 32 bits, aportan una precisión simple a la hora de estimar resultados, al contrario que double, suele ser usado para reservar espacio en memoria.
  • double: al igual que float pero esta vez codificados en 64 bits, aportan el doble de precisión que su antecesor, más usado para cálculos matemáticos.
  • boolean: tipo que admite dos valores, false(falso) o true(verdadero), usado para evaluar expresiones booleanas.
  • char: usado para almacenar un carácter de 16 bits en formato Unicode.
  • string: tipo no primitivo usado para almacenar cadenas de carácteres, al contrario que en C++ ó C#, Java no lo almacena como un array de caracteres, para ello habría que usar el StringBuilder.

 

Como bien vimos en capítulos anteriores, un objeto no es más que la instancia de una clase, al crearlo reservamos un espacio en memoria destinado a almacenar nuestro objeto con su estado inicial que pasamos como argumentos a un constructor de la siguiente forma:

new&lt;constructor&gt;(&lt;lista args&gt;)

El operador new retorna una referencia al objeto creado en ese mismo instante, esta referencia se puede asignar a una variable del objeto o se puede utilizar directamente en alguna expresión que requiera de un objeto de la misma clase correspondiente, como puede ser el caso de “copiar” un objeto (que no instanciar uno nuevo) ya que ambos apuntarán a la misma referencia de la memoria donde se aloja nuestro objeto, es lo que denominaríamos método por asignación. Un ejemplo de asignación sería el siguiente:

 

class Segmento {

private Punto origen, extremo;

public Segmento(Punto pto1, Punto pto2) {

origen = pto1;

extremo = pto2;

}

 

Por otro lado, si queremos realizar una copia con todas las de la ley, tendríamos que proceder a duplicar nuestro objeto, simplemente lo contrario a asignar, instanciar un nuevo objeto del objeto que se nos pasa por referencia, lo que llamaríamos método por duplicación. Un ejemplo de duplicación sería el siguiente:

 

class Segmento {

private Punto origen, extremo;

public Segmento(Punto pto1, Punto pto2) {

origen = newPunto(pto1.x(), pto1.y());

extremo = newPunto(pto2.x(), pto2.y());

}

 

Recordemos nuevamente que a la hora de crear nuestro objeto debemos definir la clase a la cual pertenece de la forma <nombre clase> <nombre de nuestro objeto> ejemplo:

Punto pto

 

Ya lo único que nos quedaría sería inicializar nuestro objeto pasándole nuestros argumentos ya que por defecto no apunta a ninguna referencia siendo esta por defecto null, la claúsula a la hora de crear nuestro objeto es la siguiente:

<nombre de nuestro objeto> = new<nombre clase>(<lista argumentos>)

 

pto = new Punto(1.0,2.0);

 

También a la hora de definir nuestro objeto podemos inicializarlo.

 

Punto pto = new Punto(1.0,2.0);

 

Una vez creado nuestro objeto, podemos manipularlo a través de los métodos que definimos en nuestra clase de la siguiente forma:

<nombre de nuestro objeto>.<nombre del método o variable>

 

pto.x = 1.0;

distancia = pto.modulo();

 

Recordemos al principio de este capítulo que dependiendo del control de visibilidad podremos o no invocar nuestras variables, es por eso que a la hora de programar usaremos métodos para modificar el comportamiento de nuestros objetos si no recibiremos un error a la hora de compilar.

 

A la hora de eliminar nuestros objetos, Java lo hace de forma automática a la medida que vamos perdiendo referencias a ese objeto en sí, de todas formas si por alguna razón necesitamos eliminar el objeto porque ya ha cumplido su cometido o simplemente para desalojar espacio en memoria solamente debemos de asignar el valor null a nuestro objeto:

 

 pto = null;

 

Y aquí concluye el capítulo de hoy, en el siguiente y los próximos empezaremos a hablar de los tipos de clases.

Tone

Ingeniero del Software y procrastinador sin remedio, interesado en todo lo que tenga que ver con el mundo del desarrollo web y la inteligencia artificial, no sé si seré el responsable de la creación de Skynet algún día pero se intenta.

ESCRIBIR UN COMENTARIO
  • (will not be published)

XHTML: Puedes usar estas etiquetas: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>