Mas sobre definicion de Atributos  

Posted by Danny in

Es decir, en java las variables de tipo básico son el nombre de una zona de memoria en la cuál podemos almacenar valores, pero que en cambio, las variables de tipo objeto son en realidad referencias (punteros o alias) de objetos.

Una variable de tipo objeto no es un objeto completo, sino tan solo almacena la situación del objeto en la memoria del equipo. Esto es muy similar a lo que ocurre con las casas y las direcciones de dichas casas: la dirección calle Alcalá 950 es una dirección válida, pero no podemos mandar cartas a dicha dirección porque es...un descampado!!!

Lo mismo sucede con los objetos, podemos tener una variable para referirnos a objetos, pero la variable puede que no apunte a ningún objeto y por tanto no la puedo emplear para intentar acceder a un método o a un atributo del objeto referenciado por la variable, sencillamente porque no existe el objeto referenciado.

Una variable que no apunta a un objeto se asume que tiene un valor especial llamado null, e incluso podemos asignar el valor null a la variable:

Thread t = null;

Es por ello que se deben construir objetos y asignárselos a las referencias, usando la palabra clave new. new permite crear un objeto a partir de la descripción de la clase que le pasamos como argumento, por ejempo:

new Persona()

Conseguimos crear un objeto de la clase Persona, los paréntesis permiten especificar qué constructor estamos llamando al crear el objeto (veremos constructores más adelante).

Pero al crear un objeto persona como en el código anterior lo estamos creando como un objeto anónimo, es decir sin asignar el objeto a una variable de tipo referencia, desde la cuál poder referirnos al objeto y poder llamar a sus métodos y atributo, por ello lo más habitual será asignar el objeto a una variable como en:

Persona p = new Persona();

y así poder acceder al objeto Persona recien creado:

p.nombre = "Alberto";

Características específicas del atributo  

Posted by Danny in

modifAtributos son características específicas del atributo, son:

static: El atributo pertenece a la clase, no a los objetos creados a partir de ella.

final: El atributo es una constante, en ese caso debe de tener valor inicial obligatoriamente. Por convenio en java las constantes se escriben en mayúsculas.

transient: Marca al atributo como transitorio, para no ser serializado. Lo emplearemos en java beans.

volatile: es un atributo accedido de forma asíncrona mediante hilos, con este atributo se lo notificamos a java.

En java definir un atributo de un tipo básico o tipo String significa que podemos acceder a dichas variables de forma directa (ejemplo PruebaVariable1.java):

int a = 25;

a = 34;

en cambio intentemos definir y emplear una variable del tipo, por ejemplo, Thread:

Socket c=null;

c.close();

si tratamos de compilarlo (fichero PruebaVariable2.java) todo irá bien, pero al ejecutarlo aparecerá un error:

Exception in thread "main" java.lang.NullPointerException

esto nos quiere indicar que hemos intentado emplear una variable que no apuntaba a un objeto válido, sino a null, y hemos intentado llamar a una función del objeto inexistente.

Tipos de Datos en los Atributos  

Posted by Danny in

Veamos ahora que tipos de datos básicos existen en el lenguaje y sus características:

Tipo Tamaño/Formato Descripción

(Números enteros)

byte 8-bit complemento a 2 Entero de un Byte.

short 16-bit complemento a 2 Entero corto.

int 32-bit complemento a 2 Entero.

long 64-bit complemento a 2 Entero largo.

(Números reales)

float 32-bit IEEE 754 Coma flotante de precisión simple.

double 64-bit IEEE 754 Coma flotante de precisión doble.

(otros tipos)

char 16-bit Carácter Un sólo carácter (Unicote).

boolean true o false Un valor booleano (verdadero o falso).

Tenemos un ejemplo del uso de los tipos de datos en Tipos.java

modifVisibilidad indica desde que parte del código se puede acceder a la variable:

public: indica que es un atributo accesible a través de una instancia del objeto.

private: indica que a través de una instancia no es accesible el atributo. Al heredar el atributo se convierte en inaccesible.

protected: indica que a través de una instancia no es accesible el atributo. Al heredar si se puede usar desde la clase derivada.

Sin especificar: indica visibilidad de paquete, se puede acceder a través de una instancia, pero sólo desde clases que se encuentren en el mismo paquete.

valorInicial permite inicializar la variable con un valor.

Se permite definir más de una variable, separándolas por coma, por ejemplo:

public int a = 5, b, c = 4;

Definicion de Atributos  

Posted by Danny in

Los atributos de una clase se definen según esta sintaxis:

[modifVisibilidad] [modifAtributo] tipo nombreVariable [= valorInicial] ;

Donde nombreVariable es el nombre que daremos a la variable, siendo un nombre válido según las normas del lenguaje: por convención, en Java, los nombres de las variables empiezan con una letra minúscula (los nombres de las clases empiezan con una letra mayúscula).

Un nombre de variable Java: debe ser un identificador legal de Java comprendido en una serie de caracteres Unicode. Unicode es un sistema de codificación que soporta texto escrito en distintos lenguajes humanos. Unicode permite la codificación de 34.168 caracteres. Esto le permite utilizar en sus programas Java varios alfabetos como el Japonés, el Griego, el Ruso o el Hebreo. Esto es importante para que los programadores pueden escribir código en su lenguaje nativo.

No puede ser el mismo que una palabra clave

No deben tener el mismo nombre que otras variables cuyas declaraciones aparezcan en el mismo ámbito.

tipo es el tipo de la variable, pudiendo ser un tipo básico o un objeto de una clase o de un interfaz. También puede ser una matriz o vector.

Definicion de una Clase  

Posted by Danny in

Aquí tenemos la sintaxis para definir una clase:

modifAcceso modifClase class nombreClase [extends nombreBase] [implements listaInterfaces]

{

Atributo 1

Atributo N

método 1

método N

}

Donde nombreClase es el nombre de la clase, cualquier nombre, pero respetando las reglas de nomenclatura del lenguaje.

modifAcceso puede ser uno de los siguientes valores:

public: indica que la clase es pública, y por tanto que puede ser utilizada desde cualquier otra clase, con independencia de si están en el mismo paquete o no.

Sin especificar: indica que la clase tiene visibilidad de paquete, es decir, sólo la pueden usar las clases que se encuentren en el mismo paquete que dicha clase.

modifClase indica características específicas de la clase que estamos construyendo, los posibles valores son:

abstract: indica que a la clase le falta, al menos uno, el código de algún método. Posee el método (abstracto), pero no tiene el código de ese método, siendo responsabilidad de las clases derivadas proporcionar el código de dicha clase. Una clase abstracta no se puede instanciar.

final: se emplea para evitar que esta clase pueda ser derivada.

extends se utiliza para indicar que la clase hereda de nombreBase, en java sólo se permite heredar de una única clase base. En caso de no incluir la cláusula extends, se asumirá que se está heredando directamente de la clase java.lang.Object

implements indica que esta clase es de los tipos de interfaz indicados por listaInterfaces, pudiendo existir tantos como queramos separados por comas. Esta cláusula es opcional.

Estructura de un fichero java  

Posted by Danny in

En java, a la hora de crear una clase, primero se debe de crear un fichero con extensión java, la estructura de este fichero es:

[package nombrePaquete;]

[import nombreAImportar 1;]

...

[import nombreAImportar N;]

clase 1

...

[clase N]

Como podemos apreciar en el fichero java, puede aparecer una instrucción package, dicha instrucción lo que hace es indicar que la/s clase/s definida/s en este fichero estarán situadas en la carpeta (paquete), indicado por nombrePaquete. Si nombrePaquete es util.compresor significa que la clase estará dentro de una carpeta llamada compresor, que a su vez estará dentro de una carpeta llamada util.

La instrucción import lo que indica es la intención de utilizar dentro de este fichero java, un recurso llamado nombreAImportar, donde nombreAImportar puede ser:

El nombre completo de una clase o interfaz (como java.net.Socket): se usará dicha clase dentro del fichero java.

El nombre de un paquete finalizado en .* (como java.net.*): se usarán todas las clases e interfaces que hay dentro del paquete, pero no las de las subcarpetas que haya dentro del paquete, es decir java.awt.* no incluye las clases que haya dentro de java.awt.event.

Podemos tener tantos import como consideremos necesario.

Después de las instrucciones import, aparecen las definiciones de las clases que estemos construyendo, pero con las siguientes características:

Tiene que haber definida al menos una clase o un interfaz.

Puede haber tantas clases como queramos, pero sólo puede haber una de ellas con el modificador public (lo veremos más adelante).

En caso de haber una clase definida public, esta clase debe llamarse obligatoriamente igual que el nombre del fichero, respetando mayúsculas y minúsculas, pero sin la extensión del fichero.

Objetos y clases  

Posted by Danny in

Objetos y clases

Java es un lenguaje totalmente orientado a objetos, esto representa que posee instrucciones y sintaxis específicas para la programación orientada a objetos. Además, en java existe el concepto de jerarquía de herencia , es decir, que todas las clases deben de heredar de otra clase para formar todas ellas un árbol invertido. La clase raíz de este árbol es la clase java.lang.Object y todas las clases heredan de ella directa o indirectamente. Adicionalmente las clases son colocadas en carpetas para facilitar su ordenación y el trabajo con ellas, dichas carpetas (paquetes es el término más exacto) formarán parte del nombre de la propia clase, por ejemplo, java.lang.Object significa que existe una carpeta llamada lang, dentro de la cuál existe otra carpeta llamada lang, dentro de la cuál existe una clase llamada Object.

Estructura de un fichero java

Antes de ver la estructura de un fichero, veamos primero como se realizan comentarios que no se compilan, en este lenguaje hay dos tipos: hasta fin de línea (precedido por //) y el comentario de bloque (comienza por /* y acaba por */).

//Un comentario hasta fin de línea

/* Un comentario

en varias

líneas */