Frage

Ich bin ein Neuling und gerade gelernt, dass, wenn ich definiere sagen

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

dann die Java-Dateien, die in diesem Paket sind, werden unter my/first/group/here Verzeichnis platziert werden.

Was ist der Hauptzweck einiger Java-Dateien in einem Paket von Putten? wenn ich auch wählen, dies zu übernehmen, wie soll ich gruppieren?

Danke


EDIT: Für alle, die die gleiche Frage wieder haben könnte, ich habe gerade gefunden dieses Tutorial auf Pakete von Sun.

War es hilfreich?

Lösung

Lassen Sie sich mit der Definition eines „Java-Paket“ starten, wie in der Wikipedia-Artikel beschrieben :

  

Ein Java-Paket ist ein Mechanismus für   Organisation von Java-Klassen in   Namespaces ähnlich den Modulen   Modula. Java-Pakete können in gespeichert werden   komprimierte Dateien JAR-Dateien genannt,   so dass Klassen zum Download schneller als   eine Gruppe anstatt einen nach dem anderen.   Programmierer auch in der Regel verwenden   Pakete zu organisieren Klassen gehören,   zu der gleichen Kategorie oder die Bereitstellung   eine ähnliche Funktionalität.

auf dem So basiert, Pakete in Java sind einfach ein Mechanismus Klassen zu organisieren und Klassennamen Kollisionen zu verhindern. Sie können sie einen beliebigen Namen geben wollen, aber Sun einige Namenskonventionen veröffentlicht dass Sie sollte verwenden, wenn Pakete zu benennen:

  

Packages

     

Das Präfix eines einzigartigen Paketname ist   in all-Klein ASCII immer geschrieben   Buchstaben und sollte eine der sein   Top-Level-Domain-Namen, die derzeit com,   edu, gov, mil, net, org, oder eine der   Englisch aus zwei Buchstaben bestehenden Codes zu identifizieren   Länder wie in der ISO-Norm spezifiziert   3166, 1981.

     

Im Anschluss Komponente des Pakets   Namen ändern sich je nach einem   organisationseigenen interner Name   Konventionen. Solche Konventionen könnte   festlegen, dass bestimmte Verzeichnisnamen   Komponenten Division, Abteilung sein,   Projekt, eine Maschine oder Login-Name.

     

Beispiele:

     
      
  • com.sun.eng

  •   
  • com.apple.quicktime.v2

  •   
  • edu.cmu.cs.bovik.cheese

  •   

Andere Tipps

ich eine große Anwendung, sind Sie verpflichtet, zwei Dateien genau das gleiche (java.util.Date und java.sql.Date) genannt haben, vor allem, wenn Sie in Dritten Gläser zu bringen beginnen. Also im Grunde können Sie Pakete verwenden, um Eindeutigkeit zu gewährleisten.

Am wichtigsten ist, meiner Meinung nach, brechen Verpackungsprojekte in sinnvolle Segmente nach unten. Also mein SQL-Paket hat SQL-bezogenen Code, und mein Logger Paket behandelt Protokollierung.

Es ermöglicht das Programm von mehreren verschiedenen Programmen / Komponenten / Bibliotheken zusammengesetzt werden, so dass ihre Klassennamen wird nicht Konflikt und die Komponenten sind leichter zu organisieren. Siehe http://java.sun.com/docs/books /tutorial/java/package/index.html

In Java ist es üblich, Namen Pakete als Reverse-Domain-Namen. Zum Beispiel, wenn Ihr Unternehmen die Domain „initech.com“ ist und Sie machen ein Programm namens „Gizmo“, werden die Paketnamen normalerweise mit dem Präfix „com.initech.gizmo“, mit Subpackages für verschiedene Komponenten des Programms.

Neben der Namespacing in anderen Antworten erwähnt, können Sie den Zugriff auf Methoden beschränken und Felder auf der Grundlage des an diesem Mitglied erklärt Umfang. Mitglieder mit dem öffentlich Umfang frei zugänglich sind, den Zugang zu beschränken, die Sie normalerweise definieren sie als privat (das heißt außerhalb der Klasse versteckt). Sie können auch die geschützt verwenden Umfang Zugriff auf die Art und seine Kinder zu begrenzen. Es besteht auch der default Rahmen (Mitglied ohne Qualifier hat den Standardbereich), die mit dem Elemente Kind Typen und Arten im gleichen Paket-Zugang ermöglicht. Dies kann eine effektive Art und Weise des Teilens Felder und Methoden sein, ohne sie zu weit verfügbar zu machen, und kann mit der Prüfung helfen.

Zum Beispiel das Verfahren unten würde zu allen anderen Mitgliedern des gleichen Pakets sichtbar sein.

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

, um die Methode testen Sie eine andere Art im selben Paket definieren könnte (aber wahrscheinlich einen anderen Quellenort), wäre in der Lage diese Art der Methode zuzugreifen.

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

Pakete sind wichtig für die Flexibilität der Klassen Trennung geben. Sie können verwendet werden:

  • Trennen Projekte
  • Trennmodule
  • Trennen Anwendungsschichten (Business, Web, dao)
  • weiter feinkörnige Code Trennung

Zum Beispiel

com.mycompany.thisproject.thismodule.web

Könnte die Web-Schicht aus einem Modul an.

Schließlich gibt es 3 Hauptgründe wir Pakete in Java verwenden möchten.

1) Einfachere Wartung

classes in packages Organisation folgt die Trennung von Bedenken Prinzip durch Verkapselung und ermöglicht eine bessere Kohäsion in dem Gesamtsystementwurf. Bewegen sie sich weiter, Verpackungs-by-Funktion ermöglicht es Teams von Entwicklern für die Änderungen relevante Klassen und Schnittstellen zu finden, die Unterstützung mit vertikalen Schneidtechniken für skalierte Ansätze in der agilen Methodik verwendet. Weitere Informationen finden Sie Blogeintrag: verpacken Klassen von Funktion und nicht durch Schichten und Codierung:. Verpackung durch vertikale Scheibe

2) Stellen Sie Paket Sicherheit

Pakete ermöglichen den externen Zugriff auf nur public Zugriffsmodifikatoren auf Methoden in Klassen enthalten sind. Unter Verwendung der protected oder Schlüssel nicht nur auf Klassen im gleichen Paket zugänglich sein. Weitere Informationen finden Sie Beitrag: Welche Java Zugriffsmodifikator ermöglicht ein Mitglied nur durch die Unterklassen in anderem Paket zugegriffen werden?

3) Vermeiden Sie ähnliche Namensgebung

ähnlich wie bei dem Namespace von .NET-Klassennamen werden im Rahmen ihres enthalten Paket enthalten ist. Das bedeutet, dass zwei sich gegenseitig ausschließende Pakete Klassen mit dem gleichen Namen enthalten. Dies liegt daran, dass die Pakete selbst unterschiedliche Namen haben und daher sind die voll qualifizierten Namen unterscheiden. Weitere Informationen finden Sie Tutorial [Benennen eines Paket: Die Java-Tutorials] [3].

Aus Wikipedia Seite zum Thema:

"Ein Java-Paket ist ein Mechanismus für die Organisation von Java-Klassen in Namespaces ähnlich wie die Module von Modula. Java-Paketen kann genannt JAR-Dateien in komprimierten Dateien gespeichert werden, so dass Klassen schneller als Gruppe zum Download statt einen nach dem anderen. Programmierer typischerweise auch Pakete verwenden Klassen zu organisieren, um die gleiche Kategorie gehören, oder eine ähnliche Funktionalität bieten. "

  

Auch, wenn ich wählen, diese zu übernehmen, wie   sollte ich gruppieren?

Dies hängt weitgehend von den Entwurfsmustern (s) werden Sie in Ihrem Projekt verwenden. Für den größten Teil (vor allem, wenn Sie ganz neu sind) Sie gruppieren wollen, dass sie durch Funktionalität oder eine andere logische Ähnlichkeit.

Andere Leute haben sehr Java-spezifische Antworten zur Verfügung gestellt, die in Ordnung sind, aber hier ist eine Analogie: Warum organisieren Sie Dateien in Verzeichnisse auf der Festplatte? Warum nicht einfach ein Flat-File-System mit allem, was in einem Verzeichnis haben?

Die Antwort ist natürlich, dass die Pakete Organisation zur Verfügung stellen. Der Teil des Programms, das mit der Datenbank-Schnittstellen ist anders als der Teil des Programms, das eine Benutzeroberfläche für den Benutzer angezeigt wird, so werden sie in verschiedenen Paketen sein.

Wie Verzeichnisse, sondern bietet auch einen Weg, um Namenskonflikte zu lösen. Sie können eine temp.txt in ein paar verschiedenen Verzeichnissen in der gleichen Art und Weise haben, dass Sie zwei Klassen haben könnten, die in verschiedenen Paketen erscheinen. Das wird wichtig (1), wenn Sie beginnen Code mit anderen Menschen kombinieren da draußen auf dem Internet oder (2) sogar erkennen, wie Java Classloading funktioniert.

Eine weitere wichtige Sache zu Paketen ist die geschützt Mitglied für die Zutrittskontrolle.

Geschützter ist irgendwo zwischen öffentlichen (jeder kann Zugriff) und private (nur Klasse Doseninnenzugriff). Dinge als geschützt markiert ist, können aus dem gleichen Paket oder von Unterklassen zugegriffen werden. Dies bedeutet, dass für einen begrenzten Zugriff Sie müssen nicht alles in der gleichen Klasse setzen.

Java ist sehr genau in ihrer Umsetzung. Es ist nicht wirklich Raum verlassen für frisieren.

Wenn jeder das gleiche Paket verwenden, würden sie einig „World Wide“ Weg, um sicherzustellen, dass keine zwei Klassennamen immer kollidierte finden müssen.

Auf diese Weise kann jede einzelne Klasse jemals paßt in seinen eigenen „Platz“ geschrieben, die Sie müssen in nicht aussehen, wenn Sie nicht wollen.

Sie haben möglicherweise andere „Punkt“ Objekte in 4 verschiedenen Orten auf dem System definiert, aber Ihre Klasse nur verwenden, das Sie erwarten (weil Sie importieren, dass man).

Die Art, wie sie dafür sorgen, dass jeder seinen eigenen Platz hat, ist Ihre Reverse Domain zu verwenden, so ist mein „tv.kress.bill“. Ich besitze diese Domäne - Eigentlich ich es mit meinem Bruder „tv.kress.doug“ teilen und auch wenn wir die gleiche Domain haben, können wir nicht eine Kollision haben

.

Wenn hundert Abteilungen in Ihrem Unternehmen in Java jeweils entwickeln, können sie so ohne Kollision tun und genau zu wissen, wie es zu teilen.

Systeme, die diese Art der Trennung nicht tun scheinen mir jetzt wirklich schuppig. Ich könnte sie benutzen, um ein Skript für etwas persönliches zu hacken zusammen, aber ich würde sich unbehaglich fühlen etwas zu entwickeln groß ohne einige strenge Verpackung geht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top