miércoles, 7 de marzo de 2012

3.5 CREACIÓN Y USO DE PAQUETES/LIBRERIAS DEFINIDAS POR EL USUARIO

Los paquetes son grupos de clases relacionadas; ayudan a organizar su código y proporcionan otra capa encapsulamiento.
En programación, los paquetes, con frecuencia son útiles para agrupar las piezas relacionadas de un programa.
Un paquete sirve para dos propósitos: primero, suministra un mecanismo por el cual piezas relacionadas de un programa pueden ser organizadas como una unidad. Se debe tener acceso a las clases definidas dentro de un paquete a través de su nombre de paquete. Así, un paquete proporciona la manera de nombrar una colección de clases.
Segundo, un paquete participa en los mecanismos de control de acceso en java. Las clases definidas dentro de un paquete pueden hacerse privadas a ese paquete y no accesibles por código fuera del paquete. De este modo, el paquete suministra un medio por el cual las clases pueden ser encapsuladas.

DEFINIR UN PAQUETE:

Todas las clases en Java pertenecen a algún paquete. Como se mencionó anteriormente, cuando no se especifica la declaración  package se usa el paquete predeterminado (o global). Además, el paquete predeterminado no tiene nombre, lo que lo hace transparente. 
Aunque el paquete predeterminado es válido para programas de prueba cortos, es inadecuado para aplicaciones reales.

Para crear un paquete, coloque un comando package en la parte superior del archivo fuente de java.
Las clases declaradas dentro de ese archivo pertenecerán al paquete específicado. Puesto que un paquete define un espacio de nombre, los nombres de las clases que coloque dentro del archivo se convierten en parte de ese espacio del nombre del paquete.
    
La siguiente es la forma general de la declaración package:
        package pkg;
Aquí, pkg es el nombre del paquete. Por ejemplo, el siguiente enunciado crea un paquete de nombre Project1.

        package Project1;

Java usa el sistema de archivo para manejar los paquetes con cada paquete almacenado en su propio directorio. Por ejemplo, los archivos .class para las clases que usted declare sean partes de Project1 debe guardarse en un directorio llamado Project1.

Puede crear una jerarquía de paquetes. Para hacerlo, simplemente, separe cada nombre de paquete del inmediatamente anterior, por medio de un punto. A continuación, la forma general de una declaración de paquete multinivel:

     package pack1.pack2.pack3....packN;

Por supuesto, debe crear directorios que soporten la jerarquía del paquete que crea. Por ejemplo:

    paquete x.y.z;           

 Debe almacenarse en  ...../X/Y/Z, donde ... especifica la ruta a los directorios específicos.

ENCONTRAR PAQUETES Y CLASSPATH:

Como se explicó, los paquetes son reflejados por los directorios. Esto provoca una pregunta importante: ¿Cómo sabe el sistema en tiempo de ejecución  de java dónde buscar los paquetes que usted creó? La respuesta tiene dos partes. Primero, por defecto: el sistema de tiempo de ejecución de java busca en el directorio un curso como su punto de partida. Así, si sus archivos de clase están en el directorio actual, o en un subdirectorio del directorio actual, ellos se encontrarán. Segundo, puede especificar una ruta o rutas de directorios colocando la variable ambiental CLASSPATH.   
    Por ejemplo considere la siguiente especificación de paquete:

    package MyPack;

Para que un programa encuentre MyPack, una de estas opciones debe ser cierta: el programa es ejecutado desde un directorio inmediatamente anterior a MyPack, o CLASSPATH debe crearse para incluir la ruta a MyPack. La primera alternativa es la mas fácil (y no requiere un cambio a CLASSPATH), pero la segunda le permite a su programa encontrar MyPack sin importar en cual directorio esta el programa.

UN EJEMPLO BREVE DE UN PAQUETE:

Teniendo en cuenta la discusión anterior pruebe este ejemplo breve de paquete. Éste crea una base de datos simple de libro que esta contenido dentro del paquete BookPack.

//Demostración del uso de un paquete
package BookPack;
class Book{
       private String title;
       private String author;
       private int pubDate;
Book (String t, String a, int d){
         title= t;
         author= a;
         pubDate= d;
}
void show( ) {
       System.out.println (title);
       System.out.println (author);
      System.out.println (pubDate);
      System.out.println ( );
    }
}

class BookDemo {
 public static void main ( String args[ ] ){
      Book book [ ] = new Book [5];
      book[0] = new Book ("java Beginner´s Guide", "Schildt", 2001);
      book[1] = new Book ("java 2 programer´s Reference", "Schildt", 2000);
       book[2] = new Book ("HTML Programer´s Reference", "Powell and Whitworth", 1998);
      book[3] = new Book ("Red Storm Rising", "Clancy", 1986);
      book[4] = new Book ("On the Road", "Kerouac", 1955);
for (int i=0; i < book.length; i++)  book[ i ].show( );
     }
}

Llame este archivo BookDemo.java y colóquelo en un directorio de nombre BookPack.
Luego, compile el programa. Asegúrese de que el archivo resultante .class esté también en el directorio BookPack. Luego trate de ejecutar la clase, usando la siguiente linea de comando:

   java BookPack. BookDemo

Recuerde, necesitará estar en el directorio anterior de BookPack cuando ejecute este comando o hacer que su variable ambiental CLASSPATH, este configurada apropiadamente.
Como se dijo, BookDemo y Book ahora son parte del paquete BookPack. Esto quiere decir que BookDemo no puede ser ejecutado por sí mismo. Es decir, usted no puede usar esta línea de comando.

   java BookDemo

En cambio, BookDemo debe calificar con su nombre de paquete.

PAQUETES Y ACCESO A MIEMBROS

La visibilidad de un elemento está determinada por su especificación de accesos, private, public. protected o por defecto, y el paquete en el que éste resida.De este modo, la visibilidad de un elemento está determinada por su visibilidad dentro de la clase y su visibilidad dentro del paquete.
Si un miembro de una clase no tiene especificador de acceso explícito, entonces éste sería visible desde dentro de su paquete pero no por fuera de él. Por esto debe usar como la especificación de acceso por defecto para los elementos que quiera mantener como privados en un paquete, pero |público| dentro de ese paquete.
Los miembros declarados public explícitamente son visibles en todas partes, incluidas en clases y paquetes diferentes. No hay restricción en su uso o acceso.

La siguiente tabla resume los variados niveles de acceso a miembros.




Un miembro private es accesible sólo para otro miembro de su clase y no es afectado por su afiliación a un paquete.
Un miembro especificado como protected es accesible dentro de su paquete y a todas las subclases. incluidos. subclases en otros paquetes.
Una clase tiene sólo dos posibles niveles de acceso : por defecto y público. Cuando una clase se declare como prublic, ésta es accesible por cualquier otro código. Si una clase tiene acceso por defecto, puede tener acceso a ella sólo por otro código dentro de su mismo paquete. También, una clse que se declare public debe residir en un archivo del mismo nombre.


IMPORTAR PAQUETES:

 Cuando use una clase de otro paquete, puede calificar completamente el nombre de la clase cuete.on el nombre de su paquete. Sin embargo, tal aproximación puede fácilmente llegar a ser aburrida y complicada, si las clases que está calificando son profundamente anidadas en la jerarquía del paquete.
Usando import puede traer uno o más miembros de un paquete a la vista. Esto le permite usar directamente aquellos miembros, sin hacer explícita las calificaciones del paquete.
A continuación, la forma general de la declaración import:

    import pkg.nombre de clase; 

Donde pkg es el nombre del paquete, que puede incluir su ruta (path) completa y nombre de clase  el de la clase importada. Si desea importar todo el contenido de un paquete, use un asterisco (*) para el nombre de clase. A continuación, ejemplos de las dos formas:

      import MyPack.MyClass
      import MyPack.*;           

En el primer caso, la clase MyClass es importada de MyPack. En el segundo,todas las clases en MyPack son importadas. En un archivo fuente de java, las declaraciones import ocurren en seguida de la declaración package (si existe) y antes de cualquier definición de clase.
    Usted puede usar import para traer el paquete BookPack a la vista, de modo que la clase Book pueda usarse sin calificación. Para hacer esto, sólo adicione la declaración import sobre cualquier archivo que use Book.

    import BookPack,*;

Por ejemplo, a continuación está la clase UseBook recodificada para usar import


//muestra la senctencia import
package BookPack;
import BookPack;

//uso del book desde BookPack
class UseBook {
  public static void main ( String args []) {
 
  Book book [] =new Book [5];
  book[0] = new Book ("Java Beginners Guide", "Schildt", 2001);
  book[1] = new Book ("Java 2 programmer Reference", "Schildt", 2000);
  book[2] = new Book ("HTML Programmer Reference", "Pawell and Whitworth", 1998);
  book[3] = new Book ("Red Storm Rising ", "Clancy", 1986);
         book[4] = new Book ("On the Road", "Kerouac", 1955);
           for (int i=0; i < book.length; i++) book[i].show();        
  }
}

LA LIBRERIA DE  CLASE JAVA ESTA CONTENIDA EN PAQUETES:

Esta libreria de clase con frecuencia se refiere a la Interfaz de Programación de Aplicaciones de java (Java API, Application Programming Interface). La Java API se almacena en paquetes. En la parte superior de la jerarquía del paquete está java
Descendiendo desde java hay varios subpaquetes, incluidos estos:
   
java.lang:  contiene un gran número de clases de propósito general
java.io:     contiene las clases de E/S
java.net:   contiene aquellas clases que soportan redes
java.applet: contiene clases para crear applets
java.awt:     contiene clases que soportan las herramientas abstractas para trabajar con ventanas de java

El paquete java.lang es único porque es importado automáticamente dentro de cada programa java.  



BIBLIOGRAFIA:
Fundamentos de programacion en Java2
Herbert Schildt



INTEGRANTES DEL EQUIPO:
Hernandez Jardines Viviana Anahi
Espinoza Cruz Luis Enrique
Carrasco Reyes Erwin Jovany
Cruz Hernandez Luis Fernando
Alvarado Gonzalez Cesar Alejandro







No hay comentarios:

Publicar un comentario