CAPÍTULO 10: PAQUETES. EL API DE JAVA



Documentos relacionados
19. Packages o paquetes

Paquetes de java. java.applet

Curso de Java POO: Programación orientada a objetos

Programación Orientada a Objetos con Java

Ayuda para la instalación Componente Firma Digital INDICE. 1 Configuración previa Configuración Internet Explorer para ActiveX...

Departamento CERES Área de Tarjetas Inteligentes Manual de Usuario

Java Básico. Empaquetamiento y despliegue de aplicaciones. Copyright

Person IP CRM Manual MOBILE

Internet Information Server

Instalar protocolo, cliente o servicio nuevo. Seleccionar ubicación de red. Práctica - Compartir y conectar una carpeta

Toda base de datos relacional se basa en dos objetos

REDES DE ÁREA LOCAL. APLICACIONES Y SERVICIOS EN WINDOWS

Tema 1. Java: Conceptos generales

Acronis License Server. Guía del usuario

Tutorial: Primeros Pasos con Subversion

AGREGAR COMPONENTES ADICIONALES DE WINDOWS

Modelo de Objetos Distribuidos

Plataforma e-ducativa Aragonesa. Manual de Administración. Bitácora

Tema 1. Introducción a JAVA

Manual de usuario de Parda Programa de Almacenamiento y Recuperación de Datos Automático

Apéndice 5 Manual de usuario de ColeXión. ColeXión 1.0. Manual de usuario

Aviso Legal El presente libro electrónico se distribuye bajo Attribution-NonCommercial- NoDerivs 3.0 Unported

Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación. IIC1102 Introducción a la Programación

TEMA 4: EMPEZANDO A NAVEGAR ESCUELA UNIVERSITARIA DE INFORMÁTICA. Raúl Martín Martín

ENTORNO DE DESARROLLO MICROSOFT.NET 2010

V Manual de Portafirmas V.2.3.1

Java Inicial (20 horas)

Guía de instalación de la carpeta Datos de IslaWin

Introducción a la extensión de scripting en gvsig 2.0

Seminario de Java. Contenido

Instalación. Interfaz gráfico. Programación de Backups. Anexo I: Gestión de la seguridad. Manual de Usuario de Backup Online 1/21.

ÍTEMS DEL MENÚ CREACIÓN Y GESTIÓN (Última revisión: lunes, 9 de marzo de 2009)

GUÍA BÁSICA USUARIO MOODLE 2.6

El programa Minitab: breve introducción a su funcionamiento. Para mostrar la facilidad con la que se pueden realizar los gráficos y cálculos

Manual de uso de la plataforma para monitores. CENTRO DE APOYO TECNOLÓGICO A EMPRENDEDORES -bilib

JAVA EE 5. Arquitectura, conceptos y ejemplos.

Capítulo V. Implementación

Ajustes del Curso en egela (Moodle 2.5)

GUÍA PARA LA INSTALACIÓN DE MOODLE EN UN COMPUTADOR PERSONAL QUE USA EL SISTEMA OPERATIVO MS. WINDOWS

Programa de Ayuda EMCS Instalación Versión SQL Server Versión Marzo 2010

Introducción a la programación orientada a objetos

Edición de Ofertas Excel Manual de Usuario

MANUAL DE AYUDA MODULO TALLAS Y COLORES

PAQUETES. Declaración de Paquetes

DESCARGA DE CARPETAS DE MENSAJES DE CORREO DESDE EL WEBMAIL A PC S LOCALES

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

WINDOWS : COPIAS DE SEGURIDAD

Redes de área local: Aplicaciones y servicios WINDOWS

PHPMYADMIN Y MYSQL. Para gestionar la base de datos MySQL, lo haremos desde la aplicación PhpMyAdmin.

CONCEPTOS BASICOS. Febrero 2003 Página - 1/10

MANUAL COPIAS DE SEGURIDAD

LiLa Portal Guía para profesores

Manual de NetBeans y XAMPP

Año: 2008 Página 1 de 18

Manual de usuario Versión: 1.3 Edición: 05/02/2015 1

Configuración servidor Tomcat

1. El entorno de desarrollo Eclipse

COMO CREAR UNA PÁGINA WEB 2-INTRODUCCIÓN A DREAWEAVER

SERVIDOR WEB PARA ACCESO EN TIEMPO REAL A INFORMACIÓN METEOROLÓGICA DISTRIBUIDA

I. Introducción a la programación orientada a objetos y al lenguaje JAVA Colegio Reuven Feuerstein Javier Navarro

Plataforma Helvia. Manual de Administración Administración General. Versión

GENERACIÓN DE TRANSFERENCIAS

SERVICIOS PARA EL DISEÑO E IMPLEMENTACIÓN DEL PROGRAMA INTEGRAL DE TRANSFORMACIÓN DIGITAL DE LA PROVINCIA DE LUGO: TRANSFORM@TIC

MANUAL DE AYUDA TAREA PROGRAMADA COPIAS DE SEGURIDAD

Curso de PHP con MySQL Gratis

Introducción a la Programación Orientada a Objetos

Explotación de Sistemas Informáticos IES Murgi PRÁCTICA 9: SERVICIO WEB Y FTP DE INTERNET INFORMATION SERVICE

Nociones básicas de Windows: Organizando: El Explorador de archivos de Windows

Propuesta de Portal de la Red de Laboratorios Virtuales y Remotos de CEA

UF0513 Gestión auxiliar de archivo en soporte convencional o informático

SENTINEL REMOTE CONTROL (S.R.C)

Herramientas CONTENIDOS. MiAulario

GVisualPDA Módulo de Almacén

1.- INTRODUCCIÓN 2.- PARÁMETROS

CÓMO CREAR UNA PÁGINA WEB

CASO PRÁCTICO. ANÁLISIS DE DATOS EN TABLAS DINÁMICAS

1. INTRODUCCIÓN Y OBJETIVOS

Guía de instalación de la carpeta Datos de ContaWin

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.

GUIA COMPLEMENTARIA PARA EL USUARIO DE AUTOAUDIT. Versión N 02 Fecha: 2011-Febrero Apartado: Archivos Anexos ARCHIVOS ANEXOS

Presentaciones. Con el estudio de esta Unidad pretendemos alcanzar los siguientes objetivos:

DOCENTES FORMADORES UGEL 03 PRIMARIA

GUÍA RÁPIDA DE TRABAJOS CON ARCHIVOS.

GUÍA DE USUARIO DEL CORREO

15 CORREO WEB CORREO WEB

COPIAS DE SEGURIDAD AUTOMÁTICAS DE DIRECCIONES CALLEÇPAÑA

Iptables, herramienta para controlar el tráfico de un servidor

INGENIERÍA EN SISTEMAS Y COMUNICACIONES

RESUMEN. Solución web usable para la gestión de dispositivos móviles en empresas

Alumna: Adriana Elizabeth Mendoza Martínez. Grupo: 303. P.S.P. Miriam De La Rosa Díaz. Carrera: PTB. en Informática 3er Semestre.

Manejo fácil de FTP con FileZilla

Paso 2 Una vez se ha completado la instalación y ejecutado el programa, veremos esto

Programación orientada a objetos

Servicio de Informática Vicerrectorado de Tecnologías de la Información y la Comunicación

Base de datos en Excel

Administrar El Usuario Mediante Windows NT

WINDOWS : TERMINAL SERVER

Transcripción:

Dpto. Electrónica y Telecomunicaciones CAPÍTULO 10: PAQUETES. EL API DE JAVA ÍNDICE 1 Introducción: qué es un paquete?...2 2 Para qué sirven?...3 3 Cómo crear un paquete?...4 4 Cómo importar un paquete?...6 4.1 La variable CLASSPATH...7 4.2 Ficheros JAR...7 5 El API de Java (JDK API o núcleo de Java). Paquetes de Java...11 5.1 java.applet...11 5.2 java.awt...11 5.3 java.io...11 5.4 java.lang...12 5.4.1 La clase Object...12 5.5 java.net...12 5.6 java.util...13 5.7 Otros paquetes...13 5.8 Ayuda del API...14 6 Ejercicios propuestos...16 7 Referencias...17 7.1 Bibliografía...17 7.2 Internet...17 Java Introducción a la programación 1

1 INTRODUCCIÓN: QUÉ ES UN PAQUETE? En Java, los programas se organizan como conjuntos de paquetes (en inglés, packages). Los paquetes no son más que conjuntos de clases, interfaces y tipos, organizados de forma jerárquica, 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 código fuente Java: Applet.java, AppletContext.java, AppletStub.java, AudioClip.java contienen en su código la línea: package java.applet; Y las clases que se obtienen de la compilación 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 núcleo de Java, con todas sus librerías 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 compilación se almacenarán en el directorio por defecto, es decir, el mismo directorio en el que se encuentra el fichero fuente. Como se ha visto implícitamente en el ejemplo anterior, se pueden establecer jerarquías de paquetes, de forma que en el paquete java.applet, el paquete applet es un subpaquete del paquete principal java. Esto nos ayuda aún más a agrupar y organizar nuestro código. Java Introducción a la programación 2

2 PARA QUÉ SIRVEN? Los paquetes tienen dos finalidades diferenciadas: la primera, agrupar clases, interfaces y tipos a modo de unidades de librería, es decir, mejorar la organización de las clases y, la segunda, emplear, de forma homogénea, dichas unidades en cualquier aplicación que desarrollemos, de forma que también se facilita el intercambio de código entre los programadores. Esto es lo que hacemos, por ejemplo, al utilizar la siguiente sentencia en el código: 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 distribución estándar de Java, como ya veremos, para poder utilizar cualquiera de sus clases en nuestra aplicación. También se puede incorporar una única clase, por ejemplo, ArrayList del paquete java.util, por ejemplo: import java.util.arraylist; Aunque de esta forma no estarán disponibles ninguna de las otras clases del paquete java.util. Si no utilizáramos import, podríamos utilizar dicha clase en nuestro programa, pero deberíamos invocarla con su nombre completo java.util.arraylist. La utilidad de emplear paquetes es mayor cuando, bien se utiliza un número 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 podría parecer un problema, pero Java lo resuelve de forma que las clases dentro de un paquete son referenciadas en términos de su paquete (se podría 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 también permiten controlar la visibilidad de las clases y métodos que se definan en él. Además de los modificadores public, protected y private, que ya han sido estudiados en el tema 5, una clase o miembro de clase sin modificador perteneciente a un paquete es accesible a las clases del mismo paquete. Java Introducción a la programación 3

3 CÓMO 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 código serán miembros del paquete creado. Por tanto, miclasea y miclaseb son miembros del paquete mipaquete. Por otra parte, el siguiente código: package mipaquetea; package mipaqueteb; class miclasea {... } class miclaseb {... } Nos devolvería un error, ya que no es posible incluir más de una sentencia package por fichero, es decir, si queremos que estas dos clases pertenezcan a paquetes diferentes, deberíamos 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 quisiéramos ejecutar cualquiera de estas clases por línea de comandos, deberíamos hacerlo de esta forma: java mipaquete.miclasea De la misma manera, si queremos referenciarlas desde otras clases, deberíamos 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 podríamos haberlas declarado en ficheros distintos pero ambas incluidas en el mismo paquete, lo cual suele ser más habitual en programas con varios ficheros fuente. Por ejemplo: Java Introducción a la programación 4

Fichero miclasea.java: package mipaquete; class miclasea {... } Fichero miclaseb.java: package mipaquete; class miclaseb {... } Como ya hemos comentado anteriormente, la compilación 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 búsqueda de las clases que se pueden utilizar desde nuestros programas, incluyendo la ruta de la jerarquía de clases del núcleo del lenguaje Java, y normalmente se inicializa al instalar el propio kit de desarrollo de Java (JDK) o, en su caso, el compilador, aunque también puede modificarse manualmente para ubicar nuestras clases y paquetes en cualquier lugar del sistema de ficheros. Una vez las hayamos compilado, estas clases podrán ser utilizadas (importadas) desde otros programas, como veremos en el siguiente apartado. Java Introducción a la programación 5

4 CÓMO 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 código 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 después 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 comodín o asterisco (*). import java.date; import java.util.vector; import java.util.*; El empleo del comodín 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 número de clases del paquete a utilizar sea elevado, ya que de lo contrario puede ralentizar en exceso la compilación. En el caso de un fichero fuente Java con una clase que no pertenece a ningún 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, sólo son accesibles sus elementos declarados como públicos; sin embargo, si en nuestro programa hay clases que heredan de algunas de las declaradas en el paquete, podremos acceder también 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 núcleo del lenguaje Java, existen ciertos paquetes, como el paquete java.lang, que son importados automáticamente por el JDK y que por tanto no es necesario importar explícitamente. Java Introducción a la programación 6

4.1 La variable CLASSPATH Ya hemos dicho que lo más común es que una aplicación conste de un conjunto de clases interactuando entre sí. El código de estas clases puede pertenecer a distintos paquetes y no tiene porqué estar ubicado en un mismo directorio. La máquina virtual de Java (JVM, Java Virtual Machine) busca por defecto un fichero con el nombre de la clase y extensión.class, pero es necesario indicarle dónde (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 función de la variable de entorno CLASSPATH para la búsqueda 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 añadir 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. 4.2 Ficheros JAR Si bien no están directamente relacionados con el concepto de paquetes en Java, desde la versión 1.1 del lenguaje es muy común el empleo de ficheros JAR (Java Archives) para el intercambio de clases entre programadores o bien para la extensión del API de Java con clases avanzadas, por lo que veremos en este punto una breve introducción a estos ficheros, a su creación y a su utilización. Un fichero JAR es una forma de agrupar un grupo de archivos en un único fichero comprimido, que emplea el comúnmente conocido formato ZIP. El contenido típico de un fichero JAR son las clases y recursos adicionales (imágenes, archivos de texto, ayuda ) asociados con applets o aplicaciones. La extensión de estos ficheros es típicamente.jar, aunque no es obligatorio. La utilidad de los ficheros JAR es más clara cuando pensamos en aplicaciones a través de Internet. Antes, por ejemplo, un navegador web que quisiera visualizar un applet (una miniaplicación que se ejecuta en un navegador), tenía que realizar tantas conexiones contra el servidor como ficheros (sin comprimir) tuviera la aplicación en cuestión. Esto provocaba que muchos programadores trataran de escribir sus aplicaciones incluyendo todo el código en una única clase, con la consiguiente complejidad para entender y actualizar dicho fichero fuente. Java Introducción a la programación 7

Con la llegada del formato JAR, todos los archivos de un applet pueden agruparse en un único fichero, de forma que sólo es necesaria una petición al servidor y, además, como el fichero está comprimido, la transferencia es más rápida. Otras de las múltiples ventajas de los ficheros JAR son: Seguridad: pueden firmarse digitalmente para garantizar la autenticidad de los programas que contienen y su origen. Portabilidad: no sólo porque los contenidos de un JAR son multiplataforma, sino porque el manejo de los mismos (comando jar, entre otros) es una parte estándar del núcleo de la API de Java. Extensibilidad: los ficheros JAR permiten añadir funcionalidades al núcleo de Java (o bien a nuestras aplicaciones), mediante el empaquetado de extensiones. Por ejemplo, el paquete javax.swing, que veremos en el capítulo 12, se incorporaba a las versiones antiguas de Java como una extensión en un fichero JAR. Sellado: opcionalmente se puede obligar a que los paquetes incluidos en un fichero JAR exijan consistencia de versión, es decir, que todas las clases incluidas deban encontrarse en el mismo fichero JAR de la versión correspondiente. Información: un fichero JAR permite incorporar datos acerca de los ficheros que contiene, como el proveedor o la información de versión. La utilidad jar, contenida en el JDK de Sun, comprime automáticamente los archivos que se seleccionen, e incorpora, en caso de que el programador no lo haya hecho, archivos de declaración (manifest, en inglés) que los describen. La forma de invocar el comando jar desde la línea 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 más comunes son: c t x x fichero f Crear un archivo nuevo o vacío. Listar la tabla de contenidos. Extraer todos los archivos. Extraer el fichero indicado. Indica el nombre del fichero. En caso de no indicarlo, la entrada (o salida) empleadas serán las estándar. 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 automáticamente un archivo de declaración. Si se indica algún subdirectorio en los ficheros a añadir, se añade éste automáticamente, así como todos sus subdirectorios, y se mantiene la información acerca de las rutas (también se puede omitir con la opción C). Por ejemplo, el comando siguiente: jar cvf miejemplojar.jar *.class Java Introducción a la programación 8

Genera un fichero de nombre miejemplojar.jar que contendrá todos los archivos de clases del directorio actual y lo coloca en ese mismo directorio, ofreciéndonos información de lo que el comando va haciendo. Además, genera un fichero de declaración (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 información (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 información ofrecida al indicar la opción v sería 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 tenían en el archivo. Si no hubiésemos indicado el archivo a extraer, el comando los habría extraído todos: jar xf miotroejemplojar.jar Java Introducción a la programación 9

Finalmente, una vez visto cómo empaquetar y extraer archivos de un fichero JAR, vamos a ver cómo se utilizan los paquetes y aplicaciones contenidos en él. La forma de ejecutar código empaquetado en un fichero JAR depende del tipo de aplicación de que se trate: un applet ejecutable desde un navegador, una aplicación independiente o una extensión o driver para incorporar a nuestros programas. Cada una de estas opciones tiene sus particularidades, pero ya hemos visto que la opción 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 mayoría del software distribuido en forma de ficheros JAR contiene instrucciones sobre cómo utilizarlo: la ruta donde hay que dejar los ficheros (normalmente en el mismo directorio que la aplicación que va a hacer uso de ellos o bien en alguno de los directorios indicados por la variable CLASSPATH), si es necesario realizar alguna configuración del sistema, cómo invocar las clases o aplicaciones, etc. Por ello, la mejor recomendación para utilizar código distribuido de esta forma (como para cualquier otra aplicación software) es que se lea bien la documentación que lo acompaña en cada caso, y que suele estar contenida en ficheros simples de texto (README, Howto, Version). Java Introducción a la programación 10

5 EL API DE JAVA (JDK API O NÚCLEO DE JAVA). PAQUETES DE JAVA El núcleo 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 continuación. 5.1 java.applet Este paquete contiene clases diseñadas para usar con applets. Hay una clase Applet y tres interfaces: AppletContext, AppletStub y AudioClip. 5.2 java.awt El paquete Abstract Windowing Toolkit (awt) contiene clases para generar componentes GUI (Graphic User Interface - Interfaz Gráfico de Usuario): ventanas, botones, menús, listas, barras de desplazamiento, cuadros de diálogo, cuadros de texto, etc. Incluye, entre otras, las clases Button, Checkbox, Choice, Component, Graphics, Menu, Panel, TextArea y TextField. 5.3 java.io El paquete de entrada/salida contiene toda la gestión de entradas y salidas a ficheros o strings, que en Java se realizan en forma de flujos (streams). Algunas de sus clases más importantes son: BufferedInputStream: se trata de una clase que permite leer datos a través de un stream con un buffer intermedio. BufferedOutputStream: implementa los métodos para escribir en un stream a través 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. Java Introducción a la programación 11

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 implícitamente en todos los programas. Algunas de las clases cuyas definiciones contiene son: Object: es la clase central de Java y raíz de la jerarquía de clases. Todas las clases la heredan implícitamente. Math: es la clase que contiene las constantes E y PI y las funciones matemáticas más comunes: sin, cos, max, min, random, etc. String y StringBuffer: para el manejo de cadenas de caracteres. Thread: significa hilo y es la clase base para la programación concurrente o ejecución 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 jerarquía de las excepciones y errores de Java. Class: representa las clases en la aplicación que se está ejecutando, de forma que hay una instancia de Class para cada clase cargada. 5.4.1 La clase Object Ya hemos comentado que la clase estándar Object es la superclase de todas las demás, por lo que todos los objetos tendrán un conjunto común de métodos, heredados de esta clase y, además, una referencia a este objeto de tipo Object nos servirá para referirnos a cualquier clase de objeto. Algunos de los métodos 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 representación en forma de cadena de caracteres del objeto. Es el método al que llama el operador sobrecargado + sobre strings. protected Object clone ( ) crea un nuevo objeto duplicado, es decir, devuelve una copia del objeto. Sólo pueden duplicarse aquellas clases que implementan la interfaz cloneable, sino se devolverá una excepción 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 métodos utilizados en programación concurrente. protected void finalize ( ) se ejecuta antes de destruirse el objeto. 5.5 java.net Este paquete da soporte para la programación de aplicaciones en red. En concreto, permite trabajar con todos los elementos asociados a conexiones del protocolo TCP/IP y, además, incluye las clases Socket, URL y URLConnection para el manejo de otro tipo de conexiones de red. Java Introducción a la programación 12

5.6 java.util Este paquete es una miscelánea de clases útiles para muchas cosas en programación, como estructuras de datos dinámicas, fecha y hora, etc. Se incluyen, entre otras clases, Date (fecha), Vector (arrays o vectores dinámicos), Dictionary (diccionario), Random (números aleatorios), Stack (pila FIFO), StringTokenizer (útil para dividir cadenas de caracteres en subcadenas o tokens en función de caracteres de separación). 5.7 Otros paquetes A continuación, se describen brevemente otros paquetes del API de Java, no tan básicos como los anteriores java.beans: define componentes software utilizables en cualquier aplicación. java.math: paquete de utilidades matemáticas. Dispone de algunas funciones matemáticas adicionales, fundamentalmente la gestión de números enteros y reales muy grandes (de magnitud no limitada). java.rmi: invocación remota de métodos (RMI, Remote Method Invocation). java.security: dispone de clases relacionadas con seguridad: autenticación, firma digital, criptografía, 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 números, fechas, recorrido de strings, etc.) Y otras extensiones más avanzadas de la API son las siguientes: Java Media API: permite gestionar todo tipo de medios (gráficos, vídeo, 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 librerías que ofrecen conectividad a bases de datos y aplicaciones distribuidas: JDBC, IDL, RMI. Java Commerce API: orientada al comercio telemático (mal llamado electrónico). Java Embedded API: diseñada para dispositivos embebidos, incapaces de soportar el API completo. Contiene la funcionalidad mínima (java.lang, java.util y parte de java.io) y una serie de extensiones para comunicaciones y GUI. Java Server API: extensión que permite el desarrollo de servidores de red. Java Management API: contiene objetos y métodos para construir aplicaciones sobre una red corporativa. Java Introducción a la programación 13

5.8 Ayuda del API Como el lector habrá podido imaginar, no es posible conocer de memoria todas las clases, paquetes, métodos, etc. que hemos enumerado en los apartados anteriores. Algunos compiladores inteligentes son capaces de generar código de manera automática para crear partes de nuestra aplicación, o bien consultar directamente la ayuda del API de cada clase para proponernos métodos que podamos utilizar en un punto concreto del código que estemos escribiendo. Para los programadores que empiezan en Java, lo más común suele ser utilizar un compilador más o menos sencillo (ya que sino podría resultar más complejo aprender a manejarlo que dominar el propio lenguaje de programación) y hacer uso de la documentación que acompaña al kit de desarrollo de Java (JDK) que tengamos instalado para consultar la ayuda acerca de un paquete, clase o método 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 Como se puede observar, la ayuda aparece en formato HTML con frames (aunque también existe la posibilidad de visualizar la versión sin frames) distinguiéndose las siguientes partes: Parte izquierda: consta de dos frames. En el frame superior aparecen todos los paquetes del API en orden alfabético y, en el frame de la parte inferior, al pinchar sobre un paquete, aparecerán todos los elementos (interfaces y clases) que contiene. Java Introducción a la programación 14

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 alfabético (index), el árbol de la jerarquía (Tree), las clases deprecadas (Deprecated) y otra serie de funcionalidades. Más abajo, en caso de haber consultado una clase, veremos su jerarquía de clases, una breve explicación de su funcionamiento, sus constructores, un resumen de los métodos que contiene (propios y heredados) y cada uno de éstos explicados en detalle. También se suele disponer de ejemplos ilustrativos del funcionamiento de alguno de los métodos. Java Introducción a la programación 15

6 EJERCICIOS PROPUESTOS 1.- Crear, en un fichero de nombre Espacio.java, una clase Espacio, que tenga los atributos volumen y superficie, así como los métodos volumen( ) y superficie( ), cuyos parámetros de salida serán, 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 deberán estar en ficheros independientes, pero deben pertenecer al paquete Espacio. Los constructores de estas clases deberán definirse de forma que, al pasarles como parámetro la longitud del lado, el radio y la altura y el radio de la base, respectivamente, calculen automáticamente 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 volúmenes 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 método 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 figura para realizar estas operaciones. Java Introducción a la programación 16

7 REFERENCIAS 7.1 Bibliografía Bruce Eckel. Piensa en Java. 2ª edición. Pearson Educación - Prentice Hall. Madrid. 2002. Tema 5. Ocultar la implementación. El paquete: la unidad de biblioteca. James Gosling, Hill Joy, Guy Steele, Gilad Bracha. The Java Language Specification. 2nd edition. Addison-Wesley. California (USA). 2000. Tema 7. Packages. 7.2 Internet The Java Tutorial. URL: http://java.sun.com/docs/books/tutorial/ Creating and Using Packages. URL: http://java.sun.com/docs/books/tutorial/java/interpack/packages.html Tutorial de Java de Agustín Froufe. Paquetes. URL: http://orion.qro.itesm.mx/~java/tutorial/javatutorial/cap1/paquete.html Java Introducción a la programación 17