Question

Je suis un débutant et juste appris que si je dis définir

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

alors les fichiers Java qui sont dans ce package seront placés sous le répertoire my/first/group/here.

Quel est le but principal de mettre des fichiers Java dans un package? En outre, si je choisis d'adopter ce, comment dois-je les regrouper?

Merci


EDIT: Pour toute personne qui pourrait avoir à nouveau la même question, je viens de trouver ce tutoriel sur les paquets de Sun.

Était-ce utile?

La solution

Commençons par la définition d'un « package Java », comme décrit dans la Wikipedia article :

  

Un paquet Java est un mécanisme de   l'organisation des classes Java en   des espaces de noms similaires aux modules de   Modula. Les paquetages Java peuvent être stockés dans   fichiers compressés appelés fichiers JAR,   permettant de télécharger des cours plus vite que   un groupe plutôt que d'une à la fois.   Les programmeurs utilisent aussi généralement   packages pour organiser des classes appartenant   à la même catégorie ou de fournir   des fonctionnalités similaires.

sur cette base, les paquets en Java sont tout simplement un mécanisme utilisé pour organiser des cours et de prévenir les collisions de noms de classe . Vous pouvez les nommer tout ce que vous voulez, mais Sun a publié une les conventions de nommage que vous devrait utiliser lorsque les paquets de nommage:

  

Paquets

     

Le préfixe d'un nom de package unique est   toujours écrit en tout minuscule ASCII   lettres et devrait être l'un des   Les noms de domaine de premier niveau, actuellement com,   edu, gov, mil, net, org, ou l'un des   Anglais codes à deux lettres   pays comme spécifié dans la norme ISO   3166, 1981.

     

composantes suivantes du paquet   nom varier en fonction d'un   propre dénomination interne de l'organisation   conventions. De telles conventions pourraient   préciser que certains nom du répertoire   composants soient division, département,   projet, machine ou noms de connexion.

     

Exemples:

     
      
  • com.sun.eng

  •   
  • com.apple.quicktime.v2

  •   
  • edu.cmu.cs.bovik.cheese

  •   

Autres conseils

une grande application, vous êtes tenu d'avoir deux fichiers nommés exactement le même (java.util.Date et java.sql.Date), surtout quand vous commencez à mettre dans des bocaux de tiers. Donc, fondamentalement, vous pouvez utiliser des packages pour garantir l'unicité.

Le plus important, à mon avis, les pauses emballage les projets en segments significatifs. Donc, mon paquet SQL a le code lié sql, et mon paquet enregistreur gère l'enregistrement.

Il permet au programme d'être composé de plusieurs différents programmes / composants / bibliothèques, de sorte que leurs noms de classe ne seront pas les conflits et les composants sont plus faciles à organiser. Voir http://java.sun.com/docs/books /tutorial/java/package/index.html

En Java, il est de coutume de paquets de noms comme noms de domaine inverse. Par exemple, si le domaine de votre entreprise est « initech.com » et vous faites un programme appelé « Gizmo », les noms de paquets sont généralement préfixées « com.initech.gizmo », avec sous-paquetages pour différentes composantes du programme.

En plus de l'espace de nommage mentionné dans d'autres réponses, vous pouvez limiter l'accès aux méthodes et champs en fonction de la portée déclarée sur ce membre. Membres avec le publique portée sont librement accessibles, pour limiter l'accès que vous les définissez normalement comme private (à savoir caché en dehors de la classe). Vous pouvez également utiliser la protégé portée de limiter l'accès au type et à ses enfants. Il y a aussi la default portée (membre sans qualification a la portée par défaut) qui permet les types d'enfants et de types dans le même accès paquet au membre. Cela peut être un moyen efficace de partager les champs et les méthodes sans les rendre trop largement disponible, et peut aider à tester.

Par exemple, la méthode ci-dessous serait visible à tous les autres membres du même paquet.

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

Pour tester la méthode que vous pouvez définir un autre type dans le même package (mais probablement un emplacement autre source), ce type serait en mesure d'accéder à la méthode.

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

Les paquets sont importants pour donner la flexibilité de la séparation des classes. Ils peuvent être utilisés pour:

  • séparation de projets
  • modules de séparation
  • séparant les couches applicatives (entreprise, web, DAO)
  • autre séparation plus fine de code à grain

Par exemple

com.mycompany.thisproject.thismodule.web

peut-elle indiquer la couche web de certains modules.

En fin de compte, il y a 3 raisons fondamentales que nous voulons utiliser des packages Java.

1) Plus facile d'entretien

L'organisation classes dans packages fait suite à la séparation des préoccupations principales par encapsulation et permet une meilleure cohésion dans la conception globale du système. Aller plus loin, l'emballage par fonction permet aux équipes de développeurs de trouver des classes et interfaces pertinentes pour faire des changements, les techniques de mise-tranchage verticale pour les approches mises à l'échelle utilisés dans la méthodologie agile. Pour plus d'informations, voir le post de blog: Emballez vos classes en fonction et non par des couches et codage:. Conditionnement par tranche verticale

2) Assurer la sécurité Paquet

Packages permettent l'accès externe aux modificateurs uniquement d'accès public sur les méthodes dans les classes contenues. Utilisation de la protected ou aucun modificateur ne sera accessible aux classes dans le même paquet. Pour plus d'informations, voir le post: Quel modificateur Java d'accès permet à un membre à accéder que par les sous-classes dans d'autres package?

3) Évitez de nommage similaires

Comme pour les espaces de noms de .NET, les noms de classe sont contenus dans le cadre de leur paquet contenant. Cela signifie que deux peuvent contenir des paquets mutuellement exclusifs cours avec le même nom. En effet, les paquets eux-mêmes ont des noms différents et, par conséquent, les noms qualifiés sont différents. Pour plus d'informations, voir le tutoriel [Nommer un package: Java Tutorials]. [3]

  

aussi, si je décide d'adopter ce, comment   devrais-je les regrouper?

Cela dépend en grande partie du modèle de conception (s) que vous emploierez dans votre projet. Pour la plupart (en particulier si vous êtes tout à fait nouveau) vous voulez regrouper par fonctionnalité ou une autre similitude logique.

D'autres personnes ont fourni des réponses très spécifiques à Java qui sont très bien, mais voici une analogie: pourquoi organisez-vous des fichiers dans des répertoires sur votre disque dur? Pourquoi ne pas avoir juste un système de fichiers plat tout dans un répertoire?

La réponse, bien sûr, est que les paquets fournissent organisation. La partie du programme qui interface avec la base de données est différente de la partie du programme qui affiche une interface utilisateur à l'utilisateur, donc ils vont être dans des emballages différents.

Comme les répertoires, il fournit également un moyen de résoudre les conflits de noms. Vous pouvez avoir un temp.txt dans deux répertoires différents de la même manière que vous pourriez avoir deux classes qui apparaissent dans des emballages différents. Cela devient important (1) lorsque vous commencez à combiner le code avec d'autres personnes là-bas sur Internet ou (2) réalisent même comment le classloading Java fonctionne.

Une autre chose importante sur les paquets est protégé membre pour le contrôle d'accès.

Protégé est quelque part entre le public (tout le monde peut accéder) et privés (uniquement accès interne peut de classe). Les choses marquées comme protégées sont accessibles à partir dans le même emballage ou de sous-classes. Cela signifie que pour un accès limité, vous n'avez pas à tout mettre dans la même classe.

Java est très exacte dans sa mise en œuvre. Il ne laisse pas vraiment de place pour éludée.

Si tout le monde d'utiliser le même package, ils doivent trouver un « World Wide » façon de vous assurer que deux noms de classes sont entrés en collision.

Cela permet dans sa propre « lieu » chaque classe jamais écrit que bon vous n'avez pas à regarder si vous ne voulez pas.

Vous pouvez avoir plusieurs objets « Point » définis dans 4 endroits différents sur votre système, mais votre classe n'utiliserez celui que vous attendez (parce que vous importez celui-là).

La façon dont ils faire en sorte que tout le monde a son propre espace est d'utiliser votre domaine inverse, si le mien est « tv.kress.bill ». Je possède ce domaine - En fait, je partage avec mon frère « tv.kress.doug » et même si nous partageons le même domaine, nous ne pouvons pas avoir une collision

.

Si une centaine de divisions dans votre entreprise se développent chacun en Java, ils peuvent le faire sans risque de collision et de savoir exactement comment diviser.

Les systèmes qui ne font pas ce genre de division semblent vraiment squameuse à moi maintenant. Je pourrais les utiliser pour pirater ensemble un script pour quelque chose de personnel, mais je me sentirais mal à l'aise tout développement grand sans un emballage strict passe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top