Pergunta

Eu sou um novato e apenas aprendi que se eu definir dizer

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

, em seguida, os arquivos Java que estão neste pacote será colocado sob o diretório my/first/group/here.

O que é o principal objetivo de colocar alguns arquivos Java em um pacote? Além disso, se eu optar por adotar isto, como eu deveria agrupá-los?

Obrigado


EDIT: Para quem pode ter a mesma pergunta novamente, eu só encontrei este tutorial sobre pacotes da Sun.

Foi útil?

Solução

Vamos começar com a definição de um "pacote Java", conforme descrito no Wikipedia artigo :

Um pacote Java é um mecanismo para organização de classes Java para namespaces semelhantes aos módulos de Modula. pacotes Java podem ser armazenados em arquivos compactados chamados arquivos JAR, permitindo aulas para download mais rápido como um grupo em vez de um de cada vez. Os programadores também tipicamente utilizar pacotes para organizar as classes pertencentes para a mesma categoria ou fornecendo funcionalidade semelhante.

Assim, com base nisso, Pacotes em Java são simplesmente um mecanismo usado para organizar aulas e evitar colisões de nomes de classe . Você pode nomeá-los qualquer coisa que você desejar, mas Sun publicou algumas convenções nomeação que você deve uso ao nomear pacotes:

Pacotes

O prefixo do nome de um pacote único é sempre escrito em todos os minúsculas ASCII letras e deve ser um dos nomes de domínio de nível superior, atualmente com, edu, gov, mil, net, org, ou um dos Inglês códigos de duas letras que identificam países como especificado na norma ISO 3166 de 1981.

componentes subsequentes do pacote nome variar de acordo com um própria nomenclatura interna da organização convenções. Tais convenções poder especificar que determinado nome de diretório componentes haver divisão, departamento, nomes projeto, máquina, ou login.

Exemplos:

  • com.sun.eng

  • com.apple.quicktime.v2

  • edu.cmu.cs.bovik.cheese

Outras dicas

Eu um aplicativo grande, você é obrigado a ter dois arquivos chamados exatamente o mesmo (java.util.Date e java.sql.Date), especialmente quando você começar a trazer em frascos de terceiros. Então, basicamente, você pode usar pacotes para garantir a exclusividade.

O mais importante, na minha opinião, embalagem divide projetos em segmentos significativos. Então, meu pacote de SQL tem o código sql-relacionada, e meu logger logging alças do pacote.

Ele permite que o programa a ser composta de vários diferentes programas / componentes / bibliotecas, para que seus nomes de classe não irá conflito e os componentes são mais fáceis de organizar. Consulte http://java.sun.com/docs/books /tutorial/java/package/index.html

Em Java é costume nomear pacotes como nomes de domínio reverso. Por exemplo, se o domínio da sua empresa é "initech.com" e você está fazendo um programa chamado "Gizmo", os nomes dos pacotes são tipicamente o prefixo "com.initech.gizmo", com subpacotes para diferentes componentes do programa.

Além do namespacing mencionado em outras respostas, você pode limitar o acesso a métodos e campos com base no escopo declarado no referido membro. Membros com o público escopo são de livre acesso, para limitar o acesso que normalmente defini-los como privada (ou seja escondido fora da classe). Você também pode usar o protegido escopo para limitar o acesso ao tipo e seus filhos. Há também o padrão escopo (um membro sem qualificador tem o escopo padrão), que permite tipos criança e tipos na mesma acesso de pacote para o membro. Esta pode ser uma forma eficaz de partilha campos e métodos sem fazê-los também amplamente disponível, e pode ajudar com os testes.

Por exemplo, o método abaixo seria visível a todos os outros membros do mesmo pacote.

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

Para testar o método que você poderia definir um outro tipo no mesmo pacote (mas provavelmente um local de origem diferente), que tipo seria capaz de acessar o método.

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

Pacotes são importantes para dar flexibilidade da separação classes. Eles podem ser usados ??para:

  • separando projetos
  • separação módulos
  • separando camadas de aplicação (negócio, web, dao)
  • ainda mais refinado separação de código

Por exemplo

com.mycompany.thisproject.thismodule.web

poderia indicar a camada web de algum módulo.

Em última análise, existem 3 razões principais que queremos usar pacotes em Java.

1) Manutenção mais fácil

Organizar classes em packages segue a separação de interesses princípio pelo encapsulamento e permite uma melhor coesão na concepção geral do sistema. Avançando, embalagem-a-recurso permite que equipes de desenvolvedores para encontrar classes e interfaces relevantes para fazer alterações, apoiando técnicas vertical-slicing para escalado abordagens utilizadas na metodologia ágil. Para mais informações, consulte postagem no blog: empacotar suas classes de recurso e não por camadas e Codificação:. Packaging por fatia vertical

2) Fornecer segurança Package

Pacotes de permitir o acesso externo a apenas modificadores de acesso public em métodos em classes contidas. Usando o protected ou nenhum modificador só será acessível a classes dentro do mesmo pacote. Para mais informações, ver post: Qual Java modificador de acesso permite que um usuário para poder ser acessado apenas pelos subclasses em outro pacote?

3) Evite nomenclatura semelhante

Assim como os espaços de nomes de .NET, nomes de classe estão contidos no âmbito do seu pacote contendo. Isto significa que dois pacotes mutuamente exclusivos pode conter classes com o mesmo nome. Isso ocorre porque os próprios pacotes têm nomes diferentes e, portanto, os nomes totalmente qualificados são diferentes. Para mais informações, consulte tutorial [Naming um pacote: os tutoriais de Java]. [3]

A partir da página do Wikipedia sobre o tema:

"pacote Um Java é um mecanismo para organizar classes Java em namespaces semelhantes aos módulos de pacotes Modula. Java podem ser armazenados em arquivos compactados chamados arquivos JAR, permitindo que classes para download mais rápido, como um grupo, em vez de um de cada vez. os programadores também normalmente usam pacotes para organizar as classes pertencentes à mesma categoria ou fornecer funcionalidade semelhante ".

Além disso, se eu optar por adotar isto, como deve i agrupá-los?

Isso depende em grande parte do padrão de projeto (s) que você vai empregar em seu projeto. Para a maior parte (particularmente, se você é muito novo), você vai querer agrupá-los por funcionalidade ou alguma outra semelhança lógico.

Outras pessoas têm fornecido próprias respostas específicas em Java que são bons, mas aqui está uma analogia: por que você organizar arquivos em diretórios em seu disco rígido? Porque não basta ter um sistema de arquivo simples com tudo em um diretório?

A resposta, claro, é que os pacotes fornecem organização. A parte do programa que interage com o banco de dados é diferente do que a parte do programa que exibe uma interface do usuário para o usuário, para que eles vão estar em diferentes pacotes.

Como diretórios, ele também fornece uma maneira de resolver conflitos de nome. Você pode ter um temp.txt em um par de diretórios diferentes da mesma maneira que você poderia ter duas classes que aparecem em diferentes pacotes. Isto torna-se importante (1) quando você começar a combinar código com outras pessoas lá fora, na internet ou (2) mesmo perceber como funciona classloading do Java.

Outra coisa importante sobre os pacotes é o protegidos membro para controle de acesso.

Protegido está em algum lugar entre o público (todos acesso lata) e (só o acesso lata interna classe) privado. Coisas marcados como protegidos podem ser acessados ??de dentro do mesmo pacote ou a partir de subclasses. Isto significa que para o acesso limitado que você não tem que colocar tudo na mesma classe.

Java é muito exato na sua implementação. Realmente não deixar espaço para falsificação.

Se todos fossem para usar o mesmo pacote, eles teriam que encontrar alguma "World Wide" maneira de garantir que não há dois nomes de classe já colidiram.

Isso permite que cada classe já escrito ajuste em seu próprio "lugar" que você não tem que olhar para se você não quiser.

Você pode ter diferentes "Point" objetos definidos em 4 locais diferentes em seu sistema, mas sua classe só vai usar o que você espera (porque você importar que um).

A forma como eles garantir que todos tenham seu próprio espaço é usar seu domínio inverso, então o meu é "tv.kress.bill". Eu possuo esse domínio - Na verdade eu compartilhá-lo com o meu irmão "tv.kress.doug" e mesmo que nós compartilham o mesmo domínio, não podemos ter uma colisão

.

Se uma centena de divisões de sua empresa cada desenvolver em Java, eles podem fazê-lo sem colisão e saber exatamente como dividi-lo.

Os sistemas que não fazem este tipo de divisão parece realmente esquisito para mim agora. Eu poderia usá-los para cortar juntos um script para algo pessoal, mas eu me sentiria desconfortável desenvolver algo grande sem alguma embalagem rigorosa acontecendo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top