Definición de la estructura o atributos que tendrán los objetos de una clase.
Los objetos de una clase tendrán una determinada estructura, que se declara al inicio de la clase que define ese tipo de objetos.
Por ejemplo si queremos trabajar con objetos punto, de dos dimensiones, tendrán dos atributos del tipo double, x e y. A esto se le llama estructura del punto. Y requiere previamente definirlos en la clase Punto como variable atributo, en el inicio de la clase:
public class Punto {
[modificadores] double x ;
[modificadores] double y;
.....
}
Es decir se declaran sin siquiera inicializar las variables atributo, aunque se pueden inicializar a unos valores predeterminados que luego podrán modificarse. Los modificadores pueden establecer unas propiedades de los atributos.
public class Punto {
[modificadores] double x ;
[modificadores] double y;
public Punto(){ }//constructor por defecto.
public Punto(double x, double y){
this.x = x;
this.y =y;//Significa que los atributos del punto tomarán los valores x, y de los parámetros del constructor.
}
}
En toda clase existe un constructor por defecto, que ni hace falta siquiera definirlo y ni que exista. Pero como una clase puede tener un número indefinido de constructores -basta que sus parámetros sean distintos en tipo o número-, entonces si que hay que poner explícitamente el constructor por defecto si queremos utilizarlo.
El constructor se utiliza mediante la expresión new NombreClase(); de creación de un objeto e inicialización de los atributos del mismo e incluso del objeto-referencia que creamos:
Punto p1 = new Punto (5.4,7.7); p1.x =5.4, p1.y = 7.7; valores de los atributos del punto p1.
Punto p = new Punto(); p.x =0.0, p.y = 0.0; valores de los atributos del punto p.
La llamada referencia no es mas que la dirección de memoria en la que se guarda el objeto p.
•Los objetos creados de cualquier clase se disponen en una zona específica de la memoria denominada heap (montículo o montón de memoria).
•Diferentes variables referencia pueden dar acceso al mismo objeto del heap.
si hiciésemos Punto p1 = null; este objeto quedaría desreferenciado, y el garbage collector lo barrería de la memoria para limpiarla. Si pretendiésemos darles valores a los atributos de un punto p null, nos daría error de ejecución: NullPointerException
Inicializar un objeto: o inicializarlo a null;
Copia de un objeto:
Para copiar un n objeto, en un estado determinado, se debe proceder a copiar atributo a atributo.
Las variables de tipo primitivo se comparan con el operador ==, que da true o false según sean o no idénticas las variables, sus valores. Pero para comparar objetos, con == se comparan sus referencias, es decir, es el mismo objeto con dos nombres distintos. Sólo comparando atributos primitivos, podemos usar ==. Existe un método, equals, que nos compara si dos objetos tienen el mismo valor para cada uno de sus atributos. Hay que definirlo personalizado para cada clase de objetos.
Por ejemplo, para la clase Punto seria:
public boolean equals(Object o){
return o instanceof Punto && this.x ==((Punto)o).x && this.y ==((Punto)o).y;
}
Modificador de instanciabilidad static:
Los atributos x e y vistos hasta ahora, son atributos de instancia, forman parte de la estructura del objeto punto.Pero existen también atributos llamados de clase o estáticos, porque permiten tener información de TODOS los objetos de la clase: por ejemplo, saber cuantos objetos hay. Es un dato común a todos los objetos de la clase, aunque sin replicarse, y se puede acceder a través de ellos o directamente a través de la clase.
Hay también otro tipo de atributos llamados final, que se utilizan como variables en operaciones. Propiamente no forman parte de los objetos, son constantes que definimos para poder usarlas cuando sean necesario operar con ellas. Por ejemplo: private static final PI = 3.1416;
Los atributos pueden ser private, public o amistosos (si no se indica ninguno de los anteriores).
Los private se utilizan sólamente en la clase que los define.
Los public en cualquier clase de cualquier sitio.
Los amistosos en las clases que se encuentran en una misma carpeta.
Organización de clases: paquetes Java
•Las clases nuevas también se pueden agrupar en un paquete:
–Se escriben en una misma carpeta que tendrá el nombre del paquete, se declara el nombre del paquete al principio del fichero que contiene a cada una de las clases de dicho paquete.
–En las clases de un mismo paquete el acceso es amistoso (public por defecto).
–La instalación del paquete (más allá de la carpeta en la que se encuentra) consiste en incluir su ubicación en la variable de entorno CLASSPATH del sistema. Java revisa esta ubicación para buscar los paquetes importados.
–BlueJ da facilidades para automatizar la formación de paquetes y su instalación.
Comentarios
Publicar un comentario