¿Cuál es el propósito de definir un paquete en un archivo Java?
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.
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.