Está en la página 1de 0

10-1

Mdulo 10:
JERARQUA DE CLASES.
PAQUETES JAVA. EL API DE
JAVA




Mariv Higuero y Alejandro Muoz 10-2



NDICE

J ERARQU A DE CLASES. PAQUETES J AVA. EL API DE J AVA ___________ 1
NDICE ____________________________________________________________ 2
10.1 INTRODUCCIN: QU ES UN PAQUETE? ______________________ 4
10.2 PARA QU SIRVEN LOS PAQUETES?__________________________ 5
10.3 CMO CREAR UN PAQUETE? ________________________________ 6
10.4 CMO IMPORTAR UN PAQUETE? ____________________________ 8
10.4.1 La variable CLASSPATH______________________________________________ 9
10.4.2 La variable CLASSPATH______________________________________________ 9
10.5 EL API DE JAVA (JDK API O NCLEO DE JAVA). PAQUETES DE JAVA
13
10.5.1 java.applet ________________________________________________________ 13
10.5.2 java.awt __________________________________________________________ 13
10.5.3 java.io____________________________________________________________ 13
10.5.4 java.lang __________________________________________________________ 14
10.5.4.1 La clase Object ___________________________________________________ 14
10.5.5 java.net ___________________________________________________________ 14
10.5.6 java.util___________________________________________________________ 15
10.5.7 Otros paquetes _____________________________________________________ 15
10.5.8 Ayuda del API _____________________________________________________ 16
10.6 EJERCICIOS PROPUESTOS __________________________________ 18
10.7 BIBLIOGRAFA ____________________________________________ 19
10.7.1 Referencias de Internet _______________________________________________ 19




Mariv Higuero y Alejandro Muoz 10-3



Mariv Higuero y Alejandro Muoz 10-4

10.1 INTRODUCCIN: QU ES UN PAQUETE?

En Java, los programas se organizan como conjuntos de paquetes (en ingls, packages). Los paquetes
no son ms que conjuntos de clases, interfaces y tipos, organizados de forma jerrquica, y almacenados
bien en un sistema de ficheros o bien en una base de datos.

La palabra clave package permite agrupar clases e interfaces. Los nombres de los paquetes son
palabras separadas por puntos y se almacenan en directorios que coinciden con esos nombres.

Por ejemplo, los ficheros siguientes, que contienen cdigo fuente Java:

Applet.java, AppletContext.java, AppletStub.java, AudioClip.java

contienen en su cdigo la lnea:

package java.applet;

Y las clases que se obtienen de la compilacin de los ficheros anteriores, se encuentran con el nombre
nombre_de_clase.class, en el directorio:

java/applet o bien java\applet, dependiendo del sistema operativo.

El propio ncleo de Java, con todas sus libreras de clases, hace uso de los paquetes para clasificarlas.
hAlgunos de los paquetes que proporciona el lenguaje y que posteriormente veremos en detalle son:

java.applet
java.awt
java.io
java.lang
java.util

Toda clase debe pertenecer a un paquete. Si se omite la sentencia package, se considera que el fichero
pertenece al paquete por defecto, es decir, un paquete sin nombre, y los ficheros que se obtengan de su
compilacin se almacenarn en el directorio por defecto, es decir, el mismo directorio en el que se
encuentra el fichero fuente.

Como se ha visto implcitamente en el ejemplo anterior, se pueden establecer jerarquas de paquetes, de
forma que en el paquete java.applet, el paquete applet es un subpaquete del paquete principal java.
Esto nos ayuda an ms a agrupar y organizar nuestro cdigo.


Mariv Higuero y Alejandro Muoz 10-5
10.2 PARA QU SIRVEN LOS PAQUETES?

Los paquetes tienen dos finalidades diferenciadas: la primera, agrupar clases, interfaces y tipos a modo
de unidades de librera, es decir, mejorar la organizacin de las clases y, la segunda, emplear, de forma
homognea, dichas unidades en cualquier aplicacin que desarrollemos, de forma que tambin se facilita
el intercambio de cdigo entre los programadores. Esto es lo que hacemos, por ejemplo, al utilizar la
siguiente sentencia en el cdigo:

import java.util.*;

Lo que estamos haciendo con la palabra clave import es cargar la biblioteca de utilidades, que en este
caso es parte de la distribucin estndar de Java, como ya veremos, para poder utilizar cualquiera de sus
clases en nuestra aplicacin.

Tambin se puede incorporar una nica clase, por ejemplo, ArrayList del paquete java.util,
por ejemplo:

import java.util.ArrayList;

Aunque de esta forma no estarn disponibles ninguna de las otras clases del paquete java.util. Si
no utilizramos import, podramos utilizar dicha clase en nuestro programa, pero deberamos invocarla
con su nombre completo java.util.ArrayList.

La utilidad de emplear paquetes es mayor cuando, bien se utiliza un nmero elevado de clases en un
programa (decenas, cientos), o bien incorporamos a nuestros programas clases desarrolladas por otros
programadores, que puede que coincidan en nombre con algunas de las nuestras. Esto ltimo podra
parecer un problema, pero Java lo resuelve de forma que las clases dentro de un paquete son
referenciadas en trminos de su paquete (se podra decir que cada paquete tiene un nuevo espacio de
nombres). De esta forma, los paquetes nos permiten evitar conflictos entre nombres de clases.

Los paquetes tambin permiten controlar la visibilidad de las clases y mtodos que se definan en l.
Adems de los modificadores public, protected y private, una clase o miembro de clase sin
modificador perteneciente a un paquete es accesible a las clases del mismo paquete.





Mariv Higuero y Alejandro Muoz 10-6
10.3 CMO CREAR UN PAQUETE?

Como ya hemos comentado, la palabra clave package nos permite indicar que una clase pertenece a un
paquete, de la siguiente forma:

package mipaquete;

class miclaseA {
. . .
}
class miclaseB {
. . .
}

En este fichero, se crea un paquete llamado mipaquete y todas las clases definidas en ese cdigo sern
miembros del paquete creado. Por tanto, miclaseA y miclaseB son miembros del paquete
mipaquete.

Por otra parte, el siguiente cdigo:

package mipaqueteA;
package mipaqueteB;

class miclaseA {
. . .
}
class miclaseB {
. . .
}

Nos devolvera un error, ya que no es posible incluir ms de una sentencia package por fichero, es
decir, si queremos que estas dos clases pertenezcan a paquetes diferentes, deberamos declararlas en
ficheros independientes, con su sentencia package correspondiente.

El nombre completo de una clase incluye como prefijo el paquete al que pertenece. Por tanto, en el
ejemplo anterior el nombre completo de las clases no ser miclaseA y miclaseB, sino
mipaquete.miclaseA y mipaquete.miclaseB.

De este modo, si quisiramos ejecutar cualquiera de estas clases por lnea de comandos, deberamos
hacerlo de esta forma:

java mipaquete.miclaseA

De la misma manera, si queremos referenciarlas desde otras clases, deberamos indicar su nombre
completo:

mipaquete.miclaseA

En este ejemplo, hemos declarado dos clases dentro de un mismo fichero y ambas se han incluido en el
mismo paquete, si bien podramos haberlas declarado en ficheros distintos pero ambas incluidas en el
mismo paquete, lo cual suele ser ms habitual en programas con varios ficheros fuente. Por ejemplo:


Mariv Higuero y Alejandro Muoz 10-7
Fichero miclaseA.java:

package mipaquete;

class miclaseA {
. . .
}

Fichero miclaseB.java:

package mipaquete;

class miclaseB {
. . .
}

Como ya hemos comentado anteriormente, la compilacin de estos ficheros generar dos ficheros .class
(miclaseA.class y miclaseB.class) en el directorio mipaquete, coincidente con el nombre del paquete
al que pertenecen. Normalmente, esta estructura se generar bien en el directorio de trabajo actual
(indicado por el propio compilador) o bien en el directorio indicado por la variable de entorno
CLASSPATH. Esta variable contiene las rutas de bsqueda de las clases que se pueden utilizar desde
nuestros programas, incluyendo la ruta de la jerarqua de clases del ncleo del lenguaje Java, y
normalmente se inicializa al instalar el propio kit de desarrollo de Java (JDK) o, en su caso, el compilador,
aunque tambin puede modificarse manualmente para ubicar nuestras clases y paquetes en cualquier
lugar del sistema de ficheros.

Una vez las hayamos compilado, estas clases podrn ser utilizadas (importadas) desde otros programas,
como veremos en el siguiente apartado.


Mariv Higuero y Alejandro Muoz 10-8
10.4 CMO IMPORTAR UN PAQUETE?

Cuando queremos acceder en nuestro programa a clases que no pertenecen a nuestro mismo paquete,
debemos referirnos a ellas utilizando su nombre completo. Por ejemplo, si queremos acceder a la clase
Rectangle y Circle o a la clase Vector del paquete java.util debemos hacerlo de la siguiente manera:

package miotroPaquete;

class MiOtraClase{
...
graphics.Circle c = new graphics.Circle( );
graphics.Rectangle r = new graphics.Rectangle( );
java.util.Vector v = new java.util.Vector( );
...
}

Sin embargo, para acortar el cdigo y poder utilizar las clases de un paquete o bien un paquete entero, se
utiliza la palabra clave import, especificando el nombre de paquete como ruta y nombre de clase (es lo
mismo que la palabra clave #include de C/C++). La sentencia import se debe incluir despus de la
sentencia package y antes de las definiciones de clases. Se pueden cargar todas las clases de un
paquete (no los subpaquetes), utilizando el comodn o asterisco (*).

import java.Date;
import java.util.Vector;
import java.util.*;

El empleo del comodn obliga al compilador a cargar en memoria todas las clases de un determinado
paquete, por lo que se recomienda emplearlo en aquellos casos en que el nmero de clases del paquete
a utilizar sea elevado, ya que de lo contrario puede ralentizar en exceso la compilacin.

En el caso de un fichero fuente Java con una clase que no pertenece a ningn paquete, sta puede ser
cargada con la sentencia import, ya que se coloca en el paquete por defecto sin nombre.

import miClase;

Al importar un paquete, slo son accesibles sus elementos declarados como pblicos; sin embargo, si en
nuestro programa hay clases que heredan de algunas de las declaradas en el paquete, podremos
acceder tambin a los elementos protegidos de la superclase.

Si tratamos de utilizar en nuestro programa una clase de un paquete que no ha sido importado, el
compilador nos devolver un mensaje de error similar a ste:

prueba.java:9: Class Vector not found in type declaration.
Vector v = new Vector();
^

Como veremos al hablar de los paquetes del ncleo del lenguaje Java, existen ciertos paquetes, como el
paquete java.lang, que son importados automticamente por el JDK y que por tanto no es necesario
importar explcitamente.


Mariv Higuero y Alejandro Muoz 10-9
10.4.1 La variable CLASSPATH

Ya hemos dicho que lo ms comn es que una aplicacin conste de un conjunto de clases interactuando
entre s. El cdigo de estas clases puede pertenecer a distintos paquetes y no tiene porqu estar ubicado
en un mismo directorio. La mquina virtual de Java (JVM, Java Virtual Machine) busca por defecto un
fichero con el nombre de la clase y extensin .class, pero es necesario indicarle dnde (en qu
directorios) debe buscarlos.

Sabemos que nuestro sistema, cuando tratamos de acceder a un comando o fichero ejecutable, dispone
de una lista de directorios en los que se encuentran estos comandos. Esta lista se almacena en la
variable de entorno PATH que, por ejemplo, contiene los directorios /bin, /usr/bin, /usr/sbin, etc. en el caso
de un sistema Linux. Esa es la funcin de la variable de entorno CLASSPATH para la bsqueda de clases
Java.

La variable CLASSPATH contiene una lista de localizaciones (directorios o rutas de ficheros JAR) donde
se deben buscar las clases compiladas. Por ejemplo, para un sistema MS-DOS, Windows:

CLASSPATH=.;C:\JDK1.4.0\LIB;C:\MISCLASES\FICHERO.JAR

Aunque el propio kit de desarrollo de Java (JDK) o bien el compilador que instalemos suelen configurar
por defecto el valor de esta variable, es posible modificarlo mediante comandos del sistema, como set,
para aadir rutas de paquetes o ficheros empleados por nosotros. Por ejemplo:

set CLASSPATH=C:\EJEMPLOS;C:\TEMP\CLASSES.JAR

Debemos tener en cuenta en estos casos que el valor de la variable habr que configurarlo siempre para
que apunte al directorio anterior a donde comienza una estructura de directorios de un paquete que
queremos utilizar. Por ejemplo, la estructura correspondiente al paquete mipaquete.misubpaquete se
encuentra en el directorio c:\ejemplos, de ah que hayamos incluido este directorio en el CLASSPATH del
sistema.

10.4.2 La variable CLASSPATH

Si bien no estn directamente relacionados con el concepto de paquetes en Java, desde la versin 1.1
del lenguaje es muy comn el empleo de ficheros JAR (Java Archives) para el intercambio de clases
entre programadores o bien para la extensin del API de Java con clases avanzadas, por lo que veremos
en este punto una breve introduccin a estos ficheros, a su creacin y a su utilizacin.

Un fichero JAR es una forma de agrupar un grupo de archivos en un nico fichero comprimido, que
emplea el comnmente conocido formato ZIP. El contenido tpico de un fichero JAR son las clases y
recursos adicionales (imgenes, archivos de texto, ayuda) asociados con applets o aplicaciones. La
extensin de estos ficheros es tpicamente .jar, aunque no es obligatorio.

La utilidad de los ficheros JAR es ms clara cuando pensamos en aplicaciones a travs de Internet.
Antes, por ejemplo, un navegador web que quisiera visualizar un applet (una miniaplicacin que se
ejecuta en un navegador), tena que realizar tantas conexiones contra el servidor como ficheros (sin
comprimir) tuviera la aplicacin en cuestin. Esto provocaba que muchos programadores trataran de
escribir sus aplicaciones incluyendo todo el cdigo en una nica clase, con la consiguiente complejidad
para entender y actualizar dicho fichero fuente.

Con la llegada del formato JAR, todos los archivos de un applet pueden agruparse en un nico fichero, de
forma que slo es necesaria una peticin al servidor y, adems, como el fichero est comprimido, la
transferencia es ms rpida.

Mariv Higuero y Alejandro Muoz 10-10
Otras de las mltiples ventajas de los ficheros JAR son:

Seguridad: pueden firmarse digitalmente para garantizar la autenticidad de los
programas que contienen y su origen.
Portabilidad: no slo porque los contenidos de un JAR son multiplataforma, sino porque
el manejo de los mismos (comando jar, entre otros) es una parte estndar del ncleo de
la API de Java.
Extensibilidad: los ficheros JAR permiten aadir funcionalidades al ncleo de Java (o
bien a nuestras aplicaciones), mediante el empaquetado de extensiones. Por ejemplo, el
paquete javax.swing, que veremos en el captulo de gestin de eventos, se incorporaba a
las versiones antiguas de Java como una extensin en un fichero JAR.
Sellado: opcionalmente se puede obligar a que los paquetes incluidos en un fichero JAR
exijan consistencia de versin, es decir, que todas las clases incluidas deban encontrarse
en el mismo fichero JAR de la versin correspondiente.
Informacin: un fichero JAR permite incorporar datos acerca de los ficheros que
contiene, como el proveedor o la informacin de versin.

La utilidad jar, contenida en el JDK de Sun, comprime automticamente los archivos que se seleccionen,
e incorpora, en caso de que el programador no lo haya hecho, archivos de declaracin (manifest, en
ingls) que los describen. La forma de invocar el comando jar desde la lnea de comandos es la siguiente:

jar [opciones] destino [declaracion] archivo/s de entrada

Las opciones son una serie de letras que se asemejan a las opciones del comando tar de Linux. Algunas
de las opciones ms comunes son:

c Crear un archivo nuevo o vaco.
t Listar la tabla de contenidos.
x Extraer todos los archivos.
x fichero Extraer el fichero indicado.
f Indica el nombre del fichero. En caso de no indicarlo, la
entrada (o salida) empleadas sern las estndar.
v Generar una salida que describa lo que va haciendo el
comando jar.
0 (cero) Almacenar archivos, sin comprimir. Se emplea para crear
ficheros JAR que puedan ponerse en el CLASSPATH
M No crear automticamente un archivo de declaracin.

Si se indica algn subdirectorio en los ficheros a aadir, se aade ste automticamente, as como todos
sus subdirectorios, y se mantiene la informacin acerca de las rutas (tambin se puede omitir con la
opcin C).

Por ejemplo, el comando siguiente:

jar cvf miEjemploJar.jar *.class


Mariv Higuero y Alejandro Muoz 10-11
Genera un fichero de nombre miEjemploJar.jar que contendr todos los archivos de clases del directorio
actual y lo coloca en ese mismo directorio, ofrecindonos informacin de lo que el comando va haciendo.
Adems, genera un fichero de declaracin (en la ruta META-INF/MANIFEST.MF). Este fichero permite
que los ficheros JAR soporten el firmado digital, el control de versiones y otras funcionalidades que ya
hemos comentado. Se trata de un fichero especial, que contiene informacin (nombres, rutas de acceso y
firmas digitales) sobre los archivos empaquetados, por ejemplo:

Manifest-Version: 1.0

Name: java/math/BigDecimal.class
SHA1-Digest: TD1GZt8G11dXY2p4olSZPc5Rj64=
MD5-Digest: z6z8xPj2AW/Q9AkRSPF0cg==

Name: java/math/BigInteger.class
SHA1-Digest: oBmrvIkBnSxdNZzPh5iLyF0S+bE=
MD5-Digest: wFymhDKjNreNZ4AzDWWg1Q==

Cocoon-Libs: avalon-excalibur-4.1.jar commons-httpclient-
20011012.jar commons-collections-1.0.jar xml-apis.jar
xercesImpl-2.0.0.jar
Cocoon-Lib-avalon-excalibur-4_1_jar: 1017127213000
Cocoon-Lib-commons-httpclient-20011012_jar: 1017127213000
Cocoon-Lib-commons-collections-1_0_jar: 1017127214000
Cocoon-Lib-xml-apis_jar: 1017127214000
Cocoon-Lib-xercesImpl-2_0_0_jar: 1017127215000

Siguiendo con jar, en este otro ejemplo:

jar cvf miOtroEjemploJar.jar classes sonido imagenes

Genera un fichero de nombre miOtroEjemploJar.jar que contendr todos los archivos y subdirectorios de
los directorios classes, sonido e imagen. La informacin ofrecida al indicar la opcin v sera algo similar a
lo siguiente:

adding: classes/claseA.class (in=3825) (out=2222) (deflated
41%)
adding: sonido/ (in=0) (out=0) (stored 0%)
adding: sonido/be.au (in=4032) (out=3572) (deflated 11%)
adding: sonido/di.au (in=2566) (out=2055) (deflated 19%)
adding: sonido/ren.au (in=6558) (out=4401) (deflated 32%)
adding: sonido/ya1.au (in=7834) (out=6985) (deflated 10%)
adding: sonidoo/ya2.au (in=7463) (out=4607) (deflated 38%)
adding: imagenes/ (in=0) (out=0) (stored 0%)
adding: imagenes/cruz.gif (in=157) (out=160) (deflated -1%)
adding: imageness/no.gif (in=158) (out=161) (deflated -1%)

En el siguiente ejemplo:

jar xf miOtroEjemploJar.jar classes/claseA.class

El comando jar realiza una copia de el/los archivo/s indicado/s, creando, si es necesario, la estructura de
directorios que tenan en el archivo. Si no hubisemos indicado el archivo a extraer, el comando los
habra extrado todos:

jar xf miOtroEjemploJar.jar

Mariv Higuero y Alejandro Muoz 10-12

Finalmente, una vez visto cmo empaquetar y extraer archivos de un fichero JAR, vamos a ver cmo se
utilizan los paquetes y aplicaciones contenidos en l.

La forma de ejecutar cdigo empaquetado en un fichero JAR depende del tipo de aplicacin de que se
trate: un applet ejecutable desde un navegador, una aplicacin independiente o una extensin o driver
para incorporar a nuestros programas. Cada una de estas opciones tiene sus particularidades, pero ya
hemos visto que la opcin O permite crear ficheros JAR sin comprimir, de forma que podemos dejarlos en
el CLASSPATH de nuestro sistema y el propio compilador podr buscar archivos de clases en ellos.

En realidad, la mayora del software distribuido en forma de ficheros JAR contiene instrucciones sobre
cmo utilizarlo: la ruta donde hay que dejar los ficheros (normalmente en el mismo directorio que la
aplicacin que va a hacer uso de ellos o bien en alguno de los directorios indicados por la variable
CLASSPATH), si es necesario realizar alguna configuracin del sistema, cmo invocar las clases o
aplicaciones, etc. Por ello, la mejor recomendacin para utilizar cdigo distribuido de esta forma (como
para cualquier otra aplicacin software) es que se lea bien la documentacin que lo acompaa en cada
caso, y que suele estar contenida en ficheros simples de texto (README, Howto, Version).


Mariv Higuero y Alejandro Muoz 10-13
10.5 EL API DE J AVA (J DK API O NCLEO DE J AVA). PAQUETES DE J AVA

El ncleo del lenguaje Java proporciona una serie de paquetes que incluyen ventanas, utilidades, un
sistema de entrada/salida general, herramientas y comunicaciones. Los paquetes Java que se incluyen
son java.applet, java.awt, java.io, java.lang, java.net, java.util. Vamos a describir cada uno de ellos
brevemente a continuacin.

10.5.1 java.applet

Este paquete contiene clases diseadas para usar con applets. Hay una clase Applet y tres interfaces:
AppletContext, AppletStub y AudioClip.

10.5.2 java.awt

El paquete Abstract Windowing Toolkit (awt) contiene clases para generar componentes GUI (Graphic
User Interface - Interfaz Grfico de Usuario): ventanas, botones, mens, listas, barras de desplazamiento,
cuadros de dilogo, cuadros de texto, etc. Incluye, entre otras, las clases Button, Checkbox, Choice,
Component, Graphics, Menu, Panel, TextArea y TextField.

10.5.3 java.io

El paquete de entrada/salida contiene toda la gestin de entradas y salidas a ficheros o strings, que en
Java se realizan en forma de flujos (streams). Algunas de sus clases ms importantes son:

BufferedInputStream: se trata de una clase que permite leer datos a travs de un stream con
un buffer intermedio.
BufferedOutputStream: implementa los mtodos para escribir en un stream a travs de un
buffer.
File: representa los pathname de ficheros y directorios.
FileInputStream: permite leer bytes de un fichero.
FileOutputStream: permite escribir bytes en un fichero o descriptor.
RandomAccessFile: las instancias de esta clase permiten leer o escribir en ficheros de acceso
aleatorio.
StreamTokenizer: esta clase recibe un stream de entrada y lo divide (parsea) en diversos
pedazos (tokens), permitiendo leer uno en cada momento.
StringReader: es un stream de caracteres cuya fuente es una cadena de caracteres o string.
StringWriter: es un stream de caracteres cuya salida es un buffer de cadena de caracteres, que
puede utilizarse para construir un string.


Mariv Higuero y Alejandro Muoz 10-14
10.5.4 java.lang

Se puede decir que es el paquete central de Java. Incluye las clases del lenguaje Java propiamente dicho
(por ejemplo, Integer, Long, Float, Double) y es importado implcitamente en todos los programas.
Algunas de las clases cuyas definiciones contiene son:

Object: es la clase central de Java y raz de la jerarqua de clases. Todas las clases la heredan
implcitamente.
Math: es la clase que contiene las constantes E y PI y las funciones matemticas ms comunes:
sin, cos, max, min, random, etc.
Stringy StringBuffer: para el manejo de cadenas de caracteres.
Thread: significa hilo y es la clase base para la programacin concurrente o ejecucin
multiproceso (en Java, multi-hilo), es decir, la posibilidad de que un programa realice varias
acciones al mismo tiempo.
Throwable: es la superclase de la jerarqua de las excepciones y errores de Java.
Class: representa las clases en la aplicacin que se est ejecutando, de forma que hay una
instancia de Class para cada clase cargada.


10.5.4.1 La clase Object

Ya hemos comentado que la clase estndar Object es la superclase de todas las dems, por lo que todos
los objetos tendrn un conjunto comn de mtodos, heredados de esta clase y, adems, una referencia a
este objeto de tipo Object nos servir para referirnos a cualquier clase de objeto.

Algunos de los mtodos de la clase Object, heredados por cualquier objeto, son:

public String toString ( ) permite que todos los objetos sean representables en forma de
cadena de caracteres. devuelve una representacin en forma de cadena de caracteres del
objeto. Es el mtodo al que llama el operador sobrecargado + sobre strings.
protected Object clone ( ) crea un nuevo objeto duplicado, es decir, devuelve una copia del
objeto. Slo pueden duplicarse aquellas clases que implementan la interfaz cloneable, sino se
devolver una excepcin de tipo CloneNotSupportedException.
public boolean equals (Object obj) indica si un objeto es igual a otro.
public final Class getClass ( ) devuelve la clase (objeto Class) de un objeto.
public final void wait (), public final void notify ( ), public final void notifyAll ( ) son
mtodos utilizados en programacin concurrente.
protected void finalize ( ) se ejecuta antes de destruirse el objeto.

10.5.5 java.net

Este paquete da soporte para la programacin de aplicaciones en red. En concreto, permite trabajar con
todos los elementos asociados a conexiones del protocolo TCP/IP y, adems, incluye las clases Socket,
URL y URLConnection para el manejo de otro tipo de conexiones de red.


Mariv Higuero y Alejandro Muoz 10-15
10.5.6 java.util

Este paquete es una miscelnea de clases tiles para muchas cosas en programacin, como estructuras
de datos dinmicas, fecha y hora, etc. Se incluyen, entre otras clases, Date (fecha), Vector (arrays o
vectores dinmicos), Dictionary (diccionario), Random (nmeros aleatorios), Stack (pila FIFO),
StringTokenizer (til para dividir cadenas de caracteres en subcadenas o tokens en funcin de
caracteres de separacin).


10.5.7 Otros paquetes

A continuacin, se describen brevemente otros paquetes del API de Java, no tan bsicos como los
anteriores

java.beans: define componentes software utilizables en cualquier aplicacin.
java.math: paquete de utilidades matemticas. Dispone de algunas funciones matemticas
adicionales, fundamentalmente la gestin de nmeros enteros y reales muy grandes (de
magnitud no limitada).
java.rmi: invocacin remota de mtodos (RMI, Remote Method Invocation).
java.security: dispone de clases relacionadas con seguridad: autenticacin, firma digital,
criptografa, etc.
java.sql: contiene clases para el manejo de bases de datos SQL (Structured Query Language)
desde aplicaciones Java (JDBC, Java Database Conectivity).
java.text: dispone de utilidades relacionadas con texto (formato de nmeros, fechas, recorrido
de strings, etc.)

Y otras extensiones ms avanzadas de la API son las siguientes:

Java Media API: permite gestionar todo tipo de medios (grficos, vdeo, sonido) definidos en
seis reas: Java 2D, Java 3D, Java Media Framework, Java Telephony, Java Share, Java
Animation.
Java Enterprise API: consta de una serie de libreras que ofrecen conectividad a bases de
datos y aplicaciones distribuidas: JDBC, IDL, RMI.
Java Commerce API: orientada al comercio telemtico (mal llamado electrnico).
Java Embedded API: diseada para dispositivos embebidos, incapaces de soportar el API
completo. Contiene la funcionalidad mnima (java.lang, java.util y parte de java.io) y una serie de
extensiones para comunicaciones y GUI.
Java Server API: extensin que permite el desarrollo de servidores de red.
Java Management API: contiene objetos y mtodos para construir aplicaciones sobre una red
corporativa.



Mariv Higuero y Alejandro Muoz 10-16
10.5.8 Ayuda del API

Como el lector habr podido imaginar, no es posible conocer de memoria todas las clases, paquetes,
mtodos, etc. que hemos enumerado en los apartados anteriores. Algunos compiladores inteligentes son
capaces de generar cdigo de manera automtica para crear partes de nuestra aplicacin, o bien
consultar directamente la ayuda del API de cada clase para proponernos mtodos que podamos utilizar
en un punto concreto del cdigo que estemos escribiendo.

Para los programadores que empiezan en Java, lo ms comn suele ser utilizar un compilador ms o
menos sencillo (ya que sino podra resultar ms complejo aprender a manejarlo que dominar el propio
lenguaje de programacin) y hacer uso de la documentacin que acompaa al kit de desarrollo de Java
(JDK) que tengamos instalado para consultar la ayuda acerca de un paquete, clase o mtodo que
desconocemos.

En general, podremos acceder a la ayuda del JDK que tengamos instalado en
C:\<Directorio_JDK>\docs\api\index.html

La apariencia de la interfaz de ayuda de la API se presenta en la siguiente figura:



Figura 1. Interfaz de ayuda del API Java 1.4.0


Mariv Higuero y Alejandro Muoz 10-17
Como se puede observar, la ayuda aparece en formato HTML con frames (aunque tambin existe la
posibilidad de visualizar la versin sin frames) distinguindose las siguientes partes:

Parte izquierda: consta de dos frames. En el frame superior aparecen todos los paquetes del
API en orden alfabtico y, en el frame de la parte inferior, al pinchar sobre un paquete,
aparecern todos los elementos (interfaces y clases) que contiene.
Parte derecha: consta de un nico frame en el que aparecer la ayuda acerca del elemento
seleccionado. En la parte superior del mismo, disponemos de un men para ver un ndice
alfabtico (index), el rbol de la jerarqua (Tree), las clases deprecadas (Deprecated) y otra serie
de funcionalidades. Ms abajo, en caso de haber consultado una clase, veremos su jerarqua de
clases, una breve explicacin de su funcionamiento, sus constructores, un resumen de los
mtodos que contiene (propios y heredados) y cada uno de stos explicados en detalle. Tambin
se suele disponer de ejemplos ilustrativos del funcionamiento de alguno de los mtodos.


Mariv Higuero y Alejandro Muoz 10-18
10.6 EJ ERCICIOS PROPUESTOS

1.- Crear, en un fichero de nombre Espacio.java, una clase Espacio, que tenga los atributos
volumen y superficie, as como los mtodos volumen( ) y superficie( ), cuyos
parmetros de salida sern, tal y como indican sus nombres, el volumen y la superficie de ese espacio.


2.- Crear tres clases derivadas de Espacio: Cubo, Esfera y Cilindro. Estas clases debern
estar en ficheros independientes, pero deben pertenecer al paquete Espacio. Los constructores de
estas clases debern definirse de forma que, al pasarles como parmetro la longitud del lado, el radio y la
altura y el radio de la base, respectivamente, calculen automticamente el volumen y la superficie.


3.- Cada una de las clases deber tener un atributo de clase volumenTotal, que guarde el volumen
total de todos los objetos creados de esa clase; as, el atributo de clase volumenTotal para la clase
Espacio debe sumar los volmenes totales de todas las instancias de sus subclases (no se debe
instanciar la clase Espacio como tal).


4.- Finalmente, crear una clase testEspacio (que no est en el mismo paquete), cuyo mtodo
principal (main) realice las siguientes operaciones: inicializar un Cubo de lado 7, una Esfera de radio 5,
y un Cilindro de radio de la base 3 y altura 6, visualizar el volumen de los mismos a medida que se van
creando, as como el volumen total. La clase testEspacio debe hacer uso del paquete Espacio para
realizar estas operaciones.

Mariv Higuero y Alejandro Muoz 10-19
10.7 BIBLIOGRAFA

[1] Bruce Eckel. Piensa en Java. 2 edicin. Pearson Educacin - Prentice Hall. Madrid.
2002.
Tema 5. Ocultar la implementacin. El paquete: la unidad de biblioteca.

[2] James Gosling, Hill Joy, Guy Steele, Gilad Bracha. The Java Language Specification.
2nd edition. Addison-Wesley. California (USA). 2000.
Chapter 7. Packages.

10.7.1 Referencias de Internet

[3] The Java Tutorial,
http://java.sun.com/docs/books/tutorial
Creating and Using Packages.
URL: http://java.sun.com/docs/books/tutorial/java/interpack/packages.html

[4] Tutorial de Java de Agustn Froufe, paquetes.
URL: http://orion.qro.itesm.mx/~java/tutorial/JavaTutorial/Cap1/paquete.html