Was ist der Zweck ein Paket in einer Java-Datei zu definieren?
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.
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.