Guia para pacotes Java

Guia para pacotes Java

1. Introdução

Neste tutorial rápido, cobriremos os fundamentos dos pacotes em Java. Veremos como criar pacotes e acessar os tipos que colocamos dentro deles.

Também discutiremos as convenções de nomenclatura e como isso se relaciona com a estrutura de diretório subjacente.

Finalmente, vamos compilar e executar nossas classes Java empacotadas.

2. Visão Geral dos Pacotes Java

Em Java, nósuse packages to group related classes, interfaces and sub-packages.

Os principais benefícios de fazer isso são:

  • Facilitando a localização de tipos relacionados - os pacotes geralmente contêm tipos logicamente relacionados

  • Evitando conflitos de nomenclatura - um pacote nos ajudará a identificar exclusivamente uma classe; por exemplo, poderíamos ter classescom.example.Application,, bem comocom.example.Application

  • Controle de acesso - podemos controlar a visibilidade e o acesso aos tipos combinando pacotes eaccess modifiers

A seguir, vamos ver como podemos criar e usar pacotes Java.

3. Criando um pacote

Para criar um pacote,we have to use the package statement by adding it as the very first line of code in a file.

Vamos colocar um tipo em um pacote chamadocom.example.packages:

package com.example.packages;

It’s highly recommended to add each new type in a package. Se definirmos os tipos e não os colocarmos em um pacote, eles irão paradefault ou pacote sem nome. Nisso, perdemos os benefícios de usar a estrutura do pacote e não devemos acessar esses tipos de outros pacotes.

3.1. Convenções de nomenclatura

Para evitar pacotes com o mesmo nome, seguimos algumas convenções de nomenclatura:

  • nós definimos nosso pacotenames in all lower case

  • os nomes dos pacotes são delimitados por período

  • nomes também são determinados porthe company or organization that creates them

Para determinar o nome do pacote com base em uma organização, normalmente começaremos invertendo o URL da empresa. Depois disso, a convenção de nomenclatura é definida pela empresa e pode incluir nomes de divisão e nomes de projetos.

Por exemplo, para fazer um pacote dewww.example.com, vamos revertê-lo:

com.example

Podemos então definir subpacotes deste, comocom.example.packages oucom.example.packages.domain.

3.2. Estrutura de Diretórios

Pacotes em Java correspondem a uma estrutura de diretórios.

Each package and subpackage has its own directory. Portanto, para o pacotecom.example.packages, devemos ter uma estrutura de diretório decom → example → packages.

A maioria dos IDE ajudará na criação dessa estrutura de diretório com base nos nomes de nossos pacotes, portanto, não precisamos criá-los manualmente.

4. Usando membros do pacote

Vamos começar definindo uma classeTodoItem em um subpacote denominadodomain:

package com.example.packages.domain;

public class TodoItem {
    private Long id;
    private String description;

    // standard getters and setters
}

4.1. Importações

Para usar nossa classeTodoItem de uma classe em outro pacote, precisamos importá-la. Depois de importado, podemos acessá-lo por nome.

Podemos importar um único tipo de um pacote ou usar um asterisco para importar todos os tipos de um pacote.

Vamos importar todo o subpacotedomain:

import com.example.packages.domain.*;

Agora, vamos importar apenas a classeTodoItem:

import com.example.packages.domain.TodoItem;

O JDK e outras bibliotecas Java também vêm com seus próprios pacotes. We can import pre-existing classes that we want to use in our project in the same manner.

Por exemplo, vamos importar a interfaceList do núcleo Java e a classeArrayList:

import java.util.ArrayList;import java.util.List;

Podemos então usar esses tipos em nosso aplicativo simplesmente usando seus nomes:

public class TodoList {
    private List todoItems;

    public void addTodoItem(TodoItem todoItem) {
        if (todoItems == null) {
            todoItems = new ArrayList();
        }
        todoItems.add(todoItem);
    }
}

Aqui, usamos nossas novas classes junto com as classes principais do Java, para criar umList deToDoItems.

4.2. Nome Totalmente Qualificado

Às vezes, podemos estar usando duas classes com o mesmo nome de pacotes diferentes. Por exemplo, podemos estar usandojava.sql.Date ejava.util.Date. When we run into naming conflicts, we need to use a fully qualified class name for at least one of the classes.

Vamos usarTodoItem com um nome totalmente qualificado:

public class TodoList {
    private List todoItems;

    public void addTodoItem(com.example.packages.domain.TodoItem todoItem) {
        if (todoItems == null) {
            todoItems = new ArrayList();
        }todoItems.add(todoItem);
    }

    // standard getters and setters
}

5. Compilando comjavac

Quando é hora de compilar nossas classes empacotadas, precisamos lembrar nossa estrutura de diretório. Começando na pasta de origem, precisamos dizer ajavac onde encontrar nossos arquivos.

Precisamos compilar nossa classeTodoItem primeiro porque nossa classeTodoList depende disso.

Vamos começar abrindo uma linha de comando ou terminal e navegando até nosso diretório de origem.

Agora, vamos compilar nossa classecom.example.packages.domain.TodoItem:

> javac com/example/packages/domain/TodoItem.java

Se nossa classe compilar de forma limpa, não veremos mensagens de erro e um arquivoTodoItem.class deve aparecer em nosso diretóriocom/example/packages/domain.

Para tipos que fazem referência a tipos em outros pacotes, devemos usar o sinalizador-classpath para dizer ao comandojavac onde encontrar as outras classes compiladas.

Agora que nossa classeTodoItem foi compilada, podemos compilar nossas classesTodoListeTodoApp:

>javac -classpath . com/example/packages/*.java

Novamente, não devemos ver nenhuma mensagem de erro e devemos encontrar dois arquivos de classe em nosso diretóriocom/example/packages.

Vamos executar nosso aplicativo usando o nome totalmente qualificado de nossa classeTodoApp:

>java com.example.packages.TodoApp

Nossa saída deve ficar assim:

image

6. Conclusão

Neste breve artigo, aprendemos o que é um pacote e por que devemos usá-lo.

Discutimos convenções de nomenclatura e como os pacotes se relacionam com a estrutura de diretórios. Também vimos como criar e usar pacotes.

Finalmente, vimos como compilar e executar um aplicativo com pacotes usando os comandosjavacejava.

O código de exemplo completo está disponívelover on GitHub.