viernes, 23 de marzo de 2007

Java SE - Paquetes de Proposito General

Java SE - Paquetes de Propósito General
Karen Viviana Guevara Oyuela
Código: 221273103
VII semestre Ingeniería de Sistemas
Java Platform, Standard Edition o Java SE (conocido anteriormente hasta la versión 5.0 como Plataforma Java 2, Standard Edition o J2SE), es una colección de APIs del lenguaje de programación Java utiles para muchos programas de la Plataforma Java. La Plataforma Java 2, Enterprise Edition incluye todas las clases en el Java SE, además de algunas de las cuales son útiles para programas que se ejecutan en servidores sobre workstations. Comenzando con la versión J2SE 1.4 (Merlin), la plataforma Java SE ha sido desarrollada bajo la supervisión del Java Community Process. JSR 59 la especificación para J2SE 1.4 y JSR 176 especificó J2SE 5.0 (Tiger). En 2006, Java SE 6 (Mustang) está siendo desarrollada bajo el JSR 270.

Lo siguiente son descripciones de algunos de los principales paquetes Java SE. Paquetes de Propósito general

El paquete Java java.lang contiene clases fundamentales e interfaces fuertemente relacionadas con el lenguaje y el sistema runtime. Esto incluye las clases raíz que forman la jerarquía de clases, tipos relacionados con la definición del lenguaje, excepciones básicas, funciones matemáticas, Hilos, funciones de seguridad, así como también alguna información sobre el sistema nativo subyacente.
Las principales clases en java.lang son:
  • Object – la clase que es la raíz de toda la jerarquía de clases.
  • Enum – la clase base para las clases enumeration (propias de J2SE 5.0).
  • Class – la clase que es la raíz del sistema de refleccion Java.
  • Throwable – la clase que es la clase base de la jerarquía de clases de excepciones.
  • Error, Exception, y RuntimeException – las clases base de cada tipo de excepción.
  • Thread– la clase que permite operaciones con hilos.
  • String – la clase para cadenas String y literales.
  • StringBuffer y StringBuilder – clases para realizar manipulación de strings(StringBuilder como parte de J2SE 5.0).
  • Comparable – la interfaz que permite comparación genérica y ordenamiento de objetos (como parte de J2SE 1.2).
  • Iterable – la interfaz que permite iteración genérica usando el bucle for mejorado (como parte J2SE 5.0).
  • ClassLoader, Process, Runtime,SecurityManager, y System – clases que suministran "operaciones del sistema" que gestionan la enlazado dinamico de clases, creación de procesos externos, investigaciones del entorno del host tales como la hora del día, y refuerzo de políticas de seguridad.
  • Las clases Math y StrictMath – suministran funciones matemáticas básicas tales como seno, coseno, y raíz cuadrada(StrictMath forma parte de J2SE 1.3).
  • Las clases wrapper primitivas encapsulan tipos primitivos como objetos.
  • Las clases exception básicas lanzan excepciones del nivel del lenguaje y otras excepciones comunes.

Las clases de java.lang son importadas automáticamente a cada Fichero Fuente.


java.lang.ref

El paquete es importado automáticamente a cada fichero fuente. El paquete java.lang.ref suministra tipos más flexibles de Referencias que otros disponibles, permitiendo interacción limitada entre la aplicación y la recolección de basura de la Máquina virtual java (JVM) . Es un paquete importante, suficientemente céntrico al lenguaje para que los diseñadores del lenguaje le den un nombre que comience por "java.lang", pero es de propósito especial, y no usado por muchos desarrolladores. Este paquete se añadió en J2SE 1.2.
Java tiene un sistema de referencias más expresivo que la mayoría de los otros lenguajes de programación que la emplean, lo cual permite comportamiento especial para recolección de basura. Una referencia normal en Java se conoce como una referencia fuerte. El paquete java.lang.ref define otros tipos de referencias—referencias soft, weak, y fantasma. Cada tipo de referencia está diseñado para uso específico.

Una SoftReference puede usarse para implementar una cache. Un objeto que no es recuperable por una referencia fuerte (esto es, no es recuperable fuertemente), pero que está referenciado por una referencia soft se llama recuperable softly. Un objeto recuperable softly puede ser recolectado como basura a decisión del recolector de basura. Esto generalmente significa que los objetos recuperables softly solo serán recolectados cuando la memoria libre sea baja, pero también, es la decisión del recolector de basura. Semánticamente, una referencia soft significa "manten este objeto a menos que la memoria se necesite."

Una WeakReference se usa para implementar mapas weak. Un objeto que no es recuperable fuertemente o softly, pero se referencia por una referencia weak que se llamada "recuperable weakely". Un objeto recuperable weakly será recolectado a la basura durante el siguiente ciclo de recolección. Este comportamiento se usa en la clase WeakHashMap. Un mapa weak permite al programador poner pares clave/valor en el mapa y no preocuparse que los objetos tomen memoria cuando la clave ya no sea recuperable en ningún sitio más. Semánticamente, una referencia weak significa "conseguir la liberación de este objeto cuando nada más lo referencia."

Una PhantomReference se usa para referenciar objetos que han sido marcados para recolección de basura y han sido finalizados, pero no han sido aún reclamados. Un objeto que no es recuperable fuertemente, softly o weakly, pero es referenciado por una referencia fantasma se llama recuperable fantasma. Esto permite limpieza más flexible que es posible con el mecanismo de finalización solo. Semánticamente, una referencia fantasma significa "este objeto no se necesita más y ha sido finalizado en preparación a ser recolectado." Cada uno de esos tipos de referencia extienden la clase Reference la cual suministra el método get() para devolver una referencia fuerte al objeto referido (o null si la referencia ha sido aclarada o si el tipo de referencia es fantasma), y el método clear() para limpiar la referencia. java.lang.ref también define la ReferenceQueue de clase, la cual puede usarse en cada aplicación discutida sobre mantener la pista de los objetos que han cambiado el tipo de referencia. Cuando una Reference se crea está registrado opcionalmente con una cola de referencias. La aplicación encuesta la cola de referencias para obtener referencias que han cambiado el estado de alcanzabilidad.


java.lang.reflect

Reflexión (programación) es un componente de la API Java la cual permite al código Java examinar y "reflexionar" sobre los componentes Java en tiempo de ejecución y para usar miembros reflexionados. Las Clases en este paquete, junto con java.lang.Class y java.lang.Package acomodan aplicaciones tales como depuradores, interpretes, inspectores de objetos, navegadores de clases, y servicios tales como Serialización de objetos y JavaBeans que necesitan acceso a miembros públicos del objeto objetivo (basándose en su clase runtime) o a los miembros declarados por una clase dada. Este paquete fue añadido en JDK 1.1.


La Reflexión se usa para instanciar clases e invocar métodos usando sus nombres, un concepto que permite la programación dinámica. Clases, interfaces, métodos, campos, y constructores pueden ser todos descubiertos y usados en tiempo de ejecución. Reflexión se soporta por los metadatos que la JVM posee sobre el programa. Hay dos técnicas básicas involucradas en la reflexión:

1. Descubrimiento: conlleva tomar un objeto o clase y descubrir los miembros, superclases, interfaces implementadas, y después usar posiblemente los elementos descubiertos.

2. Usar por nombre conlleva empezar con el nombre simbólico de un elemento y usar el elemento nombrado.


Descubrimiento

El Descubrimiento normalmente empieza con un objeto y llamando al método Object.getClass() para obtener la clase del objeto. El objeto Class tiene varios métodos para descubrir los contenidos de la clase, por ejemplo:

  • getMethods() – devuelve un array de objetos Method que representan los métodos publicos de la clase o interface
  • getConstructors() – devuelve un array de objetos Constructor que representan todos los constructores públicos de la clase
  • getFields() – devuelve un array de objetos java/lang/reflectField que representan todos los campos públicos de la clase o interface
  • getClasses() – devuelve un array de objetos Class representando todas las clases e interfaces públicas que son miembros de la clase o interface
  • getSuperclass() – devuelve el objeto Class que representa la superclase de la clase o interface
  • getInterfaces() – devuelve un array de objetos Class que representan todas las interfaces que se implementan por la clase o la interface

Usar por nombre

El objeto Class puede obtenerse a través de descubrimiento, usando la clase literal (e.g. MyClass.class) o usando el nombre de la clase( e.g. String) Class.forName("mypackage.MyClass")) ). Con un objeto Class, Method miembro, Constructor, u objetos Field pueden obtenerse usando el nombre simbólico del miembro. Por ejemplo:

  • java.lang.Class...) getMethod("methodName", Class...) – devuelve el objeto Method que representa el método público con el nombre "methodName" de la clase o interface que acepta los parámetros especificados por los parámetros Class... parameters.
  • getConstructor(Class...) – devuelve el objeto Constructor que representa el constructor público de la clase que acepta los parámetros especificados por la Class....
  • String) getField("fieldName") – devuelve el objeto Field que representa el campo público con el nombre "fieldName" de la clase o la interface.

Los Objetos Method, Constructor, y Field pueden usarse para acceder dinámicamente al miembro representado de la clase. Por ejemplo:

  • Object) Field.get(Object) – devuelve un Object que contiene el valor del campo desde la instancia del objeto pasado a get().
  • java.lang.Object...) Method.invoke(Object, Object...) – devuelve un Object que contiene el resultado de invocar el método para la instancia del primer parámetro Object pasado a invoke(). Los parámetros Object... restantes son pasados al método.
  • Constructor.newInstance(Object...) – devuelve la nueva instancia Object invocando al constructor. Los parámetros Object... son pasados al constructor. (Date cuente de que el constructor sin parámetros para una clase puede también ser invocado llamando a newInstance()).


Arrays y proxies


El paquete java.lang.reflect también suministra una clase Array que contiene métodos estáticos para crear y manipular objetos array, y desde J2SE 1.3, una clase Proxy que suministra creación dinámica de clases proxy que implementan las interfaces especificadas.

La implementación de una clase Proxy se suministra por un objeto dado que implementa la interface InvocationHandler. El método invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[]) de InvocationHandler es llamado por cada método invocado en el objeto proxy—el primer parámetro es el objeto proxy, el segundo parámetro es el objeto Method que representa el método desde el que la interface implementó al proxy, y el tercer parámetro es el array de parámetros pasado al método interface. El método invoke() devuelve un resultado Object que contiene el resultado devuelto al código que llamó al método interface proxy.

java.io

El paquete java.io contiene clases que soportan entrada/salida. Las clases del paquete son principalmente streams; sin embargo, se incluye una clase para ficheros de acceso aleatorio. Las clases centrales del paquete son InputStream y OutputStream las cuales son clases abstractas base para leer de y escribir a streams de bytes, respectivamente. Las clases relacionadas Reader y Writer son clases abstractas base para leer de y escribir a streams de caracteres, respectivamente. El paquete también tiene unas pocas clases misceláneas para soportar la interacción con el Sistema de ficheros del computador.


Streams

Las clases stream siguen el patrón decorator extendiendo la subclase base para añadir características a las clases stream. Las Subclases de las clases base stream son nombradas típicamente por uno de los siguientes atributos:

  • la fuente/destino de los datos del stream
  • el tipo de los datos escritos a/leidos del stream
  • procesamiento adicional o filtrado realizado en los datos del stream


Las subclases stream son nombradas usando el patrón naming XxxStreamType donde Xxx es el nombre que describe la característica y StreamType es uno de InputStream, OutputStream, Reader, o Writer.

La siguiente tabla muestra las fuentes/destinos soportados directamente por el paquete java.io:

http://img113.imageshack.us/img113/4184/cuadrofuentedestinoda5.png


Otros paquetes de librería estándar suministran implementaciones de stream para otros destinos, tales como el InputStream devuelto por el método SocketgetInputStream() o la clase Java EE javax/servletServletOutputStream.

El manejo y procesamiento de tipos de datos o filtrado de los datos de stream se realiza a través de filtros de stream. Las clases filter aceptan otros objetos de stream compatibles como parámetro para el constructor y decoran el stream contenido con características adicionales. Los Filtros se crean extendiendo una de las clases base filter FilterInputStream, FilterOutputStream, FilterReader, o FilterWriter.

Las clases Reader y Writer son justamente streams de bytes con procesamiento adicional realizado en el stream de datos para convertir los bytes a caracteres. Utilizan la codificación de caracteres por defecto para la plataforma, la cual desde J2SE 5.0 se representa por el Charset devuelto por el método estático java/nio/charsetCharsetdefaultCharset(). La clase java/ioInputStreamReader convierte un InputStream a un Reader y la clase java/ioOutputStreamWriter convierte un OutputStream a un Writer. Ambas clases tienen constructores que permiten la codificación de caracteres que sea especificada—si no se especifica ninguna codificación entonces se usa la codificación por defecto para la plataforma.

La siguiente tabla muestra los otros procesos y filtros soportados directamente por el paquete java.io. Todas esas clases extienden la clase Filter correspondiente.

http://img252.imageshack.us/img252/5650/operacionnombrezf1.png

Acceso aleatorio

La clase RandomAccessFile soporta lectura y escritura de acceso aleatorio de ficheros. La clase usa un puntero a fichero que representa un byte-offset dentro del fichero para la siguiente operación de lectura o escritura. El puntero a fichero se mueve implícitamente leyendo o escribiendo y explícitamente llamando a los métodos java/ioRandomAccessFileseek(long) o java/ioRandomAccessFileskipBytes(int). La posición actual del puntero de fichero se devuelve por el método java/ioRandomAccessFilegetFilePointer().

Sistema de Ficheros

La clase java/ioFile representa un path de fichero o directorio en un Sistema de ficheros. Los objetos File soportan la creación, borrado y renombrado de ficheros y directorios y la manipulación de atributos de ficheros tales como solo lectura y tiempo de última vez modificado. Los objetos File que representan directorios pueden usarse para obtener una lista de todos los ficheros y directorios contenidos. La clase java/ioFileDescriptor}} es un descriptor de ficheros que representan una fuente o sumidero (destino) de bytes. Normalmente esto es un fichero, pero puede también ser una consola o un socket de red. Los objetos FileDescriptor se usan para crear streams de File. Se obtienen desde streams File y sockets java.net y sockets de datagrama.


java.nio

En J2SE 1.4, el paquete java.nio (NIO o Nueva I/O) fue añadido para soportar I/O mapeada en memoria, facilitando las operaciones I/O cercanas al hardware subyacente con mejor rendimiento. El paquete java.nio suministra soporte para varios tipos de buffer. El subpaquete java/nio/charset suministra soporte para distintas codificaciones de caracteres para datos de tipo carácter. El subpaquete java/nio/channels suministra soporte para channels, las cuales representan conexiones a entidades que son capaces de realizar operaciones I/O, tales como ficheros y sockets. El paquete java.nio.channels también suministra soporte para bloqueo de grano fino de los ficheros.

java.math

El paquete java.math soporta aritmética multiprecision (incluyendo operaciones aritméticas modulares) y suministra generadores de números primos multiprecision usados para la generación de claves criptográficas. Las clases principales de este paquete son:

  • BigDecimal – suministra números decimales con signo de precisión arbitraria. BigDecimal da al usuario el control sobre el comportamiento de redondeo a través de RoundingMode.
  • BigInteger – suministra enteros de precisión arbitraria. Las Operaciones con BigInteger no producen overflow o perdida de precisión. Además de las operaciones aritméticas estándar, suministra aritmética modular, calculo de mínimo común múltiplo, pruebas de números primos, generación de números primos, manipulación de bits, y otras operaciones misceláneas.
  • MathContext – encapsula las configuraciones de contexto las cuales describen ciertas reglas para operadores numéricos.
  • RoundingMode – una enumeración que suministra ocho comportamientos de redondeo.


java.net


El paquete java.net suminista rutinas especiales IO para redes, permitiendo las peticiones HTTP, así como también otras transacciones comunes.


java.text

El paquete java.text implementa rutinas de parseo para strings y soporta varios lenguajes legibles por el hombre y parseado específico de la localización.


java.util

Las estructuras de datos que agregan objetos son el foco del paquete java.util. En el paquete está incluida la API Collections, una jerarquía organizada de estructura de datos influenciada fuertemente por considereaciones de patrones de diseño.


Paquetes de propósito especial

java.applet

Creado para soportar la creación de applet Java, el paquete java.applet permite a las aplicaciones ser descargadas sobre una red y ejecutarse dentro de una sandbox. Las restricciones de seguridad son impuestas fácilmente en la sandbox. Un desarrollador, por ejemplo, puede aplicar una firma digital a un applet, en consecuencia etiquetándola como segura. Haciéndolo permite al usuario conceder permiso al applet para realizar operaciones restringidas (tales como acceder al disco duro local), y elimina alguna o todas las restricciones de la sandbox. Los certificados digitales son emitidos por agencias como Thawte o Entrust.


java.beans

Incluidos en el paquete java.beans hay varias clases para desarrollar y manipular beans, componentes reutilizables definidos por la arquitectura JavaBeans. La arquitectura suministra mecanismos para manipular propiedades de componentes y lanzar eventos cuando esas propiedades cambian. La mayoría de las APIs en java.beans están pensadas para su uso po runa herramienta de edición de beans, en la cual los beans puedan combinarse, personalizarse y manipularse. Un tipo de editor bean es el diseñador GUI en un entorno de desarrollo integrado(IDE).

java.awt

La Abstract Window Toolkit contiene rutinas para soportar operaciones básicas GUI y utiliza ventanas básicas desde el sistema nativo subyacente. Muchas implementaciones independientes de la API Java implementan todo excepto AWT, el cual no es usado por la mayoría de las aplicaciones de lado de servidor. Este paquete también contiene la API de gráficos Java 2D.


java.rmi

El paquete java.rmi suministra invocación a métodos remotos Java para soportar llamadas a procedimientos remotos entre dos aplicaciones Java que se ejecutna en diferentes JVM. java.security Soporte para seguridad, incluyendo el algoritmo de resumen de mensaje, está incluido en el paquete java.security.


java.sql

Una implementación de la API JDBC (usada para acceder a bases de datos SQL) se agrupa en el paquete java.sql.


javax.rmi

suministra el soporte para la comunicación remota entre aplicaciones, usando el protocolo RMI sobre IIOP. Este protocolo combina características de RMI y CORBA.

org.omg.CORBA

Suministra el soporte para comunicación remota entre aplicaciones usando general inter ORB protocol y soporta otras características de common object request broker architecture. Igual que RMI y RMI-IIOP, este paquete es para llamar métodos remotos de objetos en otras máquinas virtuales (normalmente por la red). De todas las posibilidades de comunicación CORBA es la más portable entre varios lenguajes. Sin embargo es también un poco difícil de comprender.

javax.swing

Swing es una colección de rutinas que se construyen sobre java.awt para suministrar un toolkit de widgets independiente de plataforma. Swing usa las rutinas de dibujado 2D para renderizar los componentes de interfaz de usuario en lugar de confiar en el soporte GUI nativo subyacente del Sistema operativo.

Swing es un sistema muy rico por sí mismo, soportando pluggable looks and feels (PLAFs) para que los controles(widgets) en la GUI puedan imitar a aquellos del sistema nativo subyacente. Los patrones de diseño impregnan el sistema, especialmente una modificación del patrón modelo-vista-controlador, el cual afloja el acoplamiento entre función y apariencia. Una inconsistencia es que (para J2SE 1.3) las fuentes son dibujadas por el sistema nativo subyacente, limitando la portabilidad de texto. Mejoras, tales como usar fuentes de mapas de bits, existen. En general, las layouts(disposiciones de elementos) se usan y mantienen los elementos dentro de una GUI consistente a través de distintas plataformas.

javax.swing.text.html.parser

Suministra el parser de HTML tolerante a errores que se usa para escribir varios navegadores web y web bots.

Karen Viviana Guevara Oyuela
Código: 221273103
VII semestre Ingeniería de Sistemas

Tomado de Wikipedia, la enciclopedia libre

No hay comentarios: