Pregunta

Soy un novato y acabo de aprender que si defino decir

package my.first.group.here;
...

entonces los archivos Java que están en este paquete se colocarán en my/first/group/here directorio.

¿Cuál es el objetivo principal de poner algunos archivos Java en un paquete?Además, si decido adoptar esto, ¿cómo debo agruparlos?

Gracias


EDITAR:Para cualquiera que pueda volver a tener la misma pregunta, acabo de encontrar este tutorial sobre paquetes del sol.

¿Fue útil?

Solución

Vamos a empezar con la definición de un "paquete de Java", tal como se describe en el artículo de Wikipedia :

  

Un paquete de Java es un mecanismo para   la organización de clases de Java en   espacios de nombres similares a los módulos de   Modula. paquetes de Java se pueden almacenar en   archivos comprimidos llamados archivos JAR,   permitiendo clases para descargar más rápido   un grupo en lugar de a uno por vez.   Los programadores también utilizan normalmente   paquetes para organizar clases de pertenencia   a la misma categoría o proporcionar   funcionalidad similar.

Así que basado en esto, paquetes en Java son simplemente un mecanismo utilizado para organizar las clases y evitar conflictos de nombres de marcas . Se les puede nombrar cualquier cosa que desee, pero Sun ha publicado algunos convenciones de nombres que debe uso al nombrar paquetes:

  

Paquetes

     

El prefijo del nombre de un paquete único es   Siempre escrito en minúsculas ASCII todo   cartas y debe ser uno de los   nombres de dominio de nivel superior, actualmente com,   edu, gov, mil, net, org, o una de las   Inglés códigos de dos letras que identifican   países como se especifica en la norma ISO   3166, 1981.

     

componentes posteriores del paquete   nombrar variar de acuerdo con una   propia nomenclatura interna de la organización   convenciones. Tales convenciones podría   especificar que cierto nombre de directorio   componentes sean división, departamento,   Los nombres de proyecto, la máquina o de inicio de sesión.

     

Ejemplos:

     
      
  • com.sun.eng

  •   
  • com.apple.quicktime.v2

  •   
  • edu.cmu.cs.bovik.cheese

  •   

Otros consejos

una aplicación de gran tamaño, que están obligados a tener dos archivos con el nombre exactamente el mismo (java.util.Date y java.sql.Date), especialmente cuando se empieza con lo que en frascos de terceros. Así que, básicamente, se puede utilizar paquetes para garantizar la unicidad.

Lo más importante, en mi opinión, el embalaje se rompe proyectos en segmentos significativos. Así que mi paquete de SQL tiene el código relacionado con SQL-y mi paquete registrador maneja el registro.

Permite que el programa se compone de varios diferentes programas / componentes / bibliotecas, de modo que sus nombres de clases no se los conflictos y los componentes son más fáciles de organizar. Ver http://java.sun.com/docs/books /tutorial/java/package/index.html

En Java se acostumbra a los paquetes de nombres como nombres de dominio inversa. Por ejemplo, si el dominio de su empresa es "initech.com" y que está haciendo un programa llamado "Gizmo", los nombres de los paquetes son típicamente el prefijo "com.initech.gizmo", con sub-paquetes para diferentes componentes del programa.

Además del espacio de nombres mencionado en otras respuestas, puede limitar el acceso a métodos y campos según el alcance declarado en ese miembro.Miembros con el público alcance son de libre acceso, para limitar el acceso normalmente los define como privado (es decir.escondido fuera de la clase).También puedes utilizar el protegido alcance para limitar el acceso al tipo y sus hijos.También está el por defecto alcance (un miembro sin calificador tiene el alcance predeterminado) que permite que los tipos secundarios y los tipos en el mismo paquete accedan al miembro.Esta puede ser una forma eficaz de compartir campos y métodos sin que estén demasiado disponibles y puede ayudar con las pruebas.

Por ejemplo, el método siguiente sería visible para todos los demás miembros del mismo paquete.

public class Foo {
    int doSomething() {
        return 1;
    }
}

Para probar el método, podría definir otro tipo en el mismo paquete (pero probablemente en una ubicación de origen diferente), ese tipo podría acceder al método.

public class FooTest {
    @Test
    int testDoSomething() {
        Foo foo = new Foo();
        assertEquals(1, foo.doSomething());
    }
}

Los paquetes son importantes para dar flexibilidad de separación de clases. Pueden ser utilizados para:

  • separando proyectos
  • módulos de separación
  • separación de capas de aplicación (negocio, web, DAO)
  • más fino grano de separación de código

Por ejemplo

com.mycompany.thisproject.thismodule.web

Podría indicar la capa de red de algún módulo.

En última instancia, hay 3 razones principales que queremos usar paquetes en Java.

1) Más fácil mantenimiento

La organización de classes en packages sigue a la separación de las preocupaciones principales de encapsulación y permite una mejor cohesión en el diseño general del sistema. Pero avanzar más, envasado por característica permite a los equipos de desarrolladores para encontrar las clases y las interfaces correspondientes para realizar los cambios, el apoyo a las técnicas verticales sobre el tramo de enfoques a escala utilizados en la metodología ágil. Para obtener más información, consulte la entrada de blog: empaquetar sus clases de funciones y no por capas y Codificación:. Embalaje a corte vertical

2) Proporcionar seguridad Paquete

Paquetes permiten el acceso externo a sólo modificadores de acceso public en métodos in clases contenidas. Utilizando el protected o ningún modificador sólo será accesible a las clases dentro del mismo paquete. Para obtener más información, ver post: Qué modificador de acceso de Java permite a un miembro a acceder sólo por las subclases en otro paquete?

3) evitar nombrar similares

Similar a los espacios de nombres de .NET, nombres de clase están contenidas dentro del alcance de su paquete que contiene. Esto significa que dos paquetes mutuamente excluyentes pueden contener clases con el mismo nombre. Esto se debe a los propios paquetes tienen nombres diferentes y por lo tanto, los nombres completos son diferentes. Para obtener más información, véase el tutorial [El nombramiento de un paquete: The Java tutoriales]. [3]

Desde la página del Wikipedia sobre el tema:

"Un paquete de Java es un mecanismo para la organización de clases de Java en espacios de nombres similares a los módulos de paquetes Modula. Java pueden ser almacenados en archivos comprimidos llamados archivos JAR, permitiendo clases para descargar más rápido como un grupo en lugar de a uno por vez. los programadores también utilizan normalmente paquetes de organizar clases pertenecientes a la misma categoría o que proporcionan una funcionalidad similar ".

  

También, si decido adoptar esto, ¿cómo   ¿Debo grupo de ellos?

Esto depende en gran medida del modelo (s) de diseño va a emplear en el proyecto. En su mayor parte (sobre todo, si usted es bastante nuevo) querrá agruparlos por funcionalidad o alguna otra similitud lógico.

Otras personas han dado respuestas muy específicas Java que están bien, pero aquí es una analogía: ¿por qué se organizan los archivos en directorios en el disco duro? ¿Por qué no acaba de tener un sistema de archivos planos con todo en un directorio?

La respuesta, por supuesto, es que los paquetes proporcionan organización. La parte del programa que se conecta con la base de datos es diferente de la parte del programa que muestra una interfaz de usuario para el usuario, por lo que estará en diferentes paquetes.

Al igual que los directorios, sino que también proporciona una manera de resolver conflictos de nombre. Puede tener un temp.txt en un par de directorios diferentes de la misma manera que usted podría tener dos clases que aparecen en diferentes paquetes. Esto es importante (1) cuando se inicia la combinación de código con otras personas que hay en el internet o (2) se dan cuenta de cómo funciona la carga de clase de Java.

Otra cosa importante acerca de los paquetes es el protegido miembro para control de acceso.

Protegida está en algún lugar entre lo público (todo el mundo puede acceder a) y (acceso interno lata única clase) privado. Las cosas marcadas como protegidas se puede acceder desde dentro del mismo paquete o de subclases. Esto significa que para el acceso limitado que no tiene que poner todo en la misma clase.

Java es muy exacta en su aplicación. En realidad, no deja espacio para esquivar.

Si todos fueran a utilizar el mismo paquete, tendrían que encontrar alguna manera de "World Wide" para asegurarse de que no hay dos nombres de clase cada vez colisionaron.

Esto permite que cada clase sola vez en forma escrita en su propio "lugar" que no tiene que mirar si usted no desea.

Es posible que tenga diferentes objetos "punto" definidos en 4 lugares diferentes en su sistema, pero su clase sólo va a utilizar el que usted espera (porque se importa que uno).

La forma en que garantizar que cada uno tiene su propio espacio es utilizar su dominio inverso, por lo que el mío es "tv.kress.bill". Soy dueño de ese dominio - En realidad lo comparto con mi hermano "tv.kress.doug" ya pesar de que comparten el mismo dominio, no podemos tener una colisión

.

Si un centenar de divisiones en su empresa cada desarrollan en Java, pueden hacerlo sin colisión y saber exactamente cómo dividir a él.

Los sistemas que no hacen este tipo de división parecen muy escamosa a mí ahora. Yo podría utilizarlos para cortar juntos un guión de algo personal, pero me siento incómoda desarrollar nada grande sin algunos envases estricta pasando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top