Domanda

Sono un principiante e ho appena imparato che se definisco dico

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

quindi i file Java presenti in questo pacchetto verranno inseriti in my/first/group/here directory.

Qual è lo scopo principale di inserire alcuni file Java in un pacchetto?Inoltre, se scelgo di adottarlo, come dovrei raggrupparli?

Grazie


MODIFICARE:Per chiunque possa avere di nuovo la stessa domanda, ho appena trovato questo tutorial sui pacchetti da sole.

È stato utile?

Soluzione

Cominciamo con la definizione di un "pacchetto Java", come descritto nella Wikipedia articolo :

  

Un pacchetto Java è un meccanismo per   l'organizzazione di classi Java in   namespace simili ai moduli   Modula. pacchetti Java possono essere memorizzati in   file compressi chiamati file JAR,   le classi che consentono di scaricare più velocemente come   un gruppo piuttosto che uno alla volta.   I programmatori utilizzano in genere anche   pacchetti per organizzare classi appartenenza   alla stessa categoria o fornire   una funzionalità simile.

Quindi, sulla base di tale, pacchetti in Java sono semplicemente un meccanismo utilizzato per organizzare corsi e prevenire le collisioni nome classe . È possibile assegnare loro un nome tutto quello che vuoi, ma Sun ha pubblicato alcuni convenzioni di denominazione che dovrebbe uso per la denominazione dei pacchetti:

  

pacchetti

     

Il prefisso di un nome di un pacchetto unico è   sempre scritto in minuscolo all-ASCII   lettere e dovrebbe essere uno dei   i nomi di dominio di primo livello, attualmente com,   edu, gov, mil, net, org, o uno dei   Inglese codici a due lettere che identificano   Paesi come specificato nella norma ISO   3166, 1981.

     

componenti successivi del pacchetto   nome variare secondo un   propria denominazione interna dell'organizzazione   convegni. Tali convenzioni potrebbero   specificare che certo nome della directory   componenti siano divisione, dipartimento,   i nomi di progetto, delle macchine, o connettere.

     

Esempi:

     
      
  • com.sun.eng

  •   
  • com.apple.quicktime.v2

  •   
  • edu.cmu.cs.bovik.cheese

  •   

Altri suggerimenti

Ho una grande applicazione, si sono tenuti ad avere due file denominati esattamente lo stesso (java.util.Date e java.sql.Date), soprattutto quando si inizia a portare in vasetti di terze parti. Quindi, in pratica, è possibile utilizzare i pacchetti per garantire l'unicità.

La cosa più importante, a mio parere, l'imballaggio rompe progetti in segmenti significativi. Quindi il mio pacchetto di SQL ha il codice sql-correlati, e il mio pacchetto logger gestisce la registrazione.

E 'permette al programma di essere composto da più diversi programmi / componenti / librerie, in modo che i loro nomi di classe non sarà conflitto e le componenti sono più facili da organizzare. Vedere http://java.sun.com/docs/books /tutorial/java/package/index.html

In Java è consuetudine per i pacchetti di nomi come nomi di dominio inversa. Per esempio, se il dominio della società è "initech.com" e si stanno facendo un programma chiamato "Gizmo", i nomi dei pacchetti sono in genere preceduti "com.initech.gizmo", con sottopacchetti per i diversi componenti del programma.

Oltre allo spazio dei nomi menzionato in altre risposte, puoi limitare l'accesso a metodi e campi in base all'ambito dichiarato su quel membro.Membri con il pubblico gli ambiti sono liberamente accessibili, per limitare l'accesso normalmente li definisci come privato (cioè.nascosti fuori dalla classe).Puoi anche usare il protetto ambito per limitare l'accesso al tipo e ai relativi figli.C'è anche il predefinito scope (un membro senza qualificatore ha l'ambito predefinito) che consente ai tipi figlio e ai tipi nello stesso pacchetto di accedere al membro.Questo può essere un modo efficace per condividere campi e metodi senza renderli troppo ampiamente disponibili e può aiutare con i test.

Ad esempio, il metodo seguente sarebbe visibile a tutti gli altri membri dello stesso pacchetto.

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

Per testare il metodo potresti definire un altro tipo nello stesso pacchetto (ma probabilmente in una posizione di origine diversa), quel tipo sarebbe in grado di accedere al metodo.

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

I pacchetti sono importanti per dare la flessibilità della separazione classi. Essi possono essere utilizzati per:

  • separazione progetti
  • moduli separano
  • separazione livelli applicativi (business, web, dao)
  • presentata a grana più fine separazione codice

Ad esempio

com.mycompany.thisproject.thismodule.web

Potrebbe indicare il livello di rete di qualche modulo.

In definitiva, ci sono 3 motivi principali che vogliamo utilizzare pacchetti di in Java.

1) Più facile manutenzione

Organizzazione classes in packages segue la separazione dei problemi principali da incapsulamento e permette una migliore coesione nel disegno complessivo del sistema. Spostandosi più, confezionamento-by-funzione consente ai team di sviluppatori per trovare le classi e le interfacce rilevanti per apportare modifiche, sostenendo le tecniche verticale-slicing per gli approcci utilizzati in scala metodologia agile. Per ulteriori informazioni, vedere post del blog: Presenta i tuoi classi da Feature e non da strati e Codifica:. Packaging per fetta verticale

2) Fornire sicurezza Package

I pacchetti consentono l'accesso esterno ai soli modificatori di accesso public sui metodi in classi contenute. Utilizzando la protected o nessun modificatore sarà accessibile solo alle classi all'interno dello stesso pacchetto. Per ulteriori informazioni, vedi post: Quale modificatore di accesso Java consente un membro per accedere solo sottoclassi in altro pacchetto?

3) Evitare di denominazione simile

Simile a spazi dei nomi di .NET, i nomi delle classi sono contenuti nell'ambito del loro pacchetto contenente. Questo significa che due pacchetti mutuamente esclusivi possono contenere classi con lo stesso nome. Questo perché i pacchetti stessi hanno nomi diversi e, quindi, i nomi completi sono diversi. Per ulteriori informazioni, vedere un'esercitazione [Denominazione di un pacchetto: Java Tutorial]. [3]

Dalla pagina Wikipedia sul tema:

"Un pacchetto Java è un meccanismo per l'organizzazione di classi Java in spazi dei nomi simili ai moduli di pacchetti Modula. Java possono essere memorizzati in file compressi denominati file JAR, che consente classi di scaricare più velocemente come un gruppo piuttosto che uno alla volta. programmatori solitamente utilizzano pacchetti di organizzare classi appartenenti alla stessa categoria o che forniscono la funzionalità simile ".

  

Inoltre, se scelgo di adottare questo, come   dovrebbero i raggrupparli?

Questo dipende in gran parte il modello di progettazione (s) si impiegano nel progetto. Per la maggior parte (in particolare, se si è abbastanza nuovo) ti consigliamo di raggrupparli per la funzionalità o qualche altra similitudine logica.

Altre persone hanno fornito risposte molto specifiche Java che vanno bene, ma ecco un'analogia: il motivo per cui si fa a organizzare i file in directory sul disco rigido? Perché non basta avere un file system piatta con tutto ciò che in una directory?

La risposta, naturalmente, è che i pacchetti forniscono organizzazione. La parte del programma che si interfaccia con il database è diverso rispetto alla parte del programma che visualizza un'interfaccia utente per l'utente, in modo da essere in diversi pacchetti.

Come le directory, ma fornisce anche un modo per risolvere conflitti di nome. Si può avere un temp.txt in un paio di diverse directory nello stesso modo in cui si potrebbe avere due classi che compaiono in diversi pacchetti. Questo diventa importante (1) quando si inizia la combinazione di codice con altre persone là fuori su internet o (2) nemmeno conto come funziona classloading di Java.

Un'altra cosa importante sui pacchetti è la protetto membro per il controllo accessi.

protetta è da qualche parte tra pubblico (tutti possono accedere) e (solo classe di accesso può interna) privato. Le cose contrassegnate come protetto potrebbe essere accessibile dall'interno della stessa pacchetto o da sottoclassi. Ciò significa che per un accesso limitato non c'è bisogno di mettere tutto nella stessa classe.

Java è molto preciso nella sua attuazione. Realmente non lascia spazio a fudging.

Se tutti fossero di utilizzare lo stesso pacchetto, avrebbero dovuto trovare il modo "World Wide" per garantire che non ci sono due nomi di classe mai in collisione.

In questo modo, ogni singola classe in forma sia mai stato scritto in un proprio "luogo" che non si deve guardare a se non si desidera.

Si possono avere diverse "punto" oggetti definiti in 4 luoghi diversi sul vostro sistema, ma la classe si utilizza solo quello che ci si aspetta (perché si importa che uno).

Il modo in cui garantire che ognuno ha il proprio spazio è quello di utilizzare il dominio inverso, quindi il mio è "tv.kress.bill". Ho proprio quel dominio - A dire il vero lo condivido con mio fratello "tv.kress.doug" e, anche se condividiamo lo stesso dominio, non possiamo avere una collisione

.

Se un centinaio di divisioni nella vostra azienda ogni sviluppano in Java, possono farlo senza collisione e sapere esattamente come dividere esso.

I sistemi che non fanno questo tipo di divisione sembrano davvero traballante per me ora. Potrei usare loro di incidere insieme uno script per qualcosa di personale, ma mi sentirei a disagio sviluppare qualcosa di grande senza qualche confezione rigida in corso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top