Classes

Introdução

Classes

Em Java, uma classe é como um molde ou receita para criar objetos que representam coisas ou conceitos do mundo real. A linguagem já traz muitas classes prontas, cada uma feita para um propósito específico, e você também pode criar suas próprias classes para desenvolver soluções, definindo os dados e comportamentos que fazem sentido para o problema que quer resolver.

Não é nenhuma surpresa que a linguagem Java é composta exclusivamente por classes que se tornarão objetos mediante o recurso de instanciação (criação de objetos).

Imagina agora, você precisar realizar a manutenção de um veículo sem saber quais são as ferramentas e aonde estariam localizadas, seria uma loucura, não? 🤪

Nesta jornada iremos conhecer as classes mais relevantes e o que elas podem oferecer ao longo de sua jornada em desenvolvimento.

Documentação

A linguagem Java contém um arsenal poderosíssimo no que se refere a documentação de suas classes que compõem todo o seu ecossistema.

O que devemos compreender é que a cada versão, novas classes surgirão além de novos recursos nas classes já existentes. Então, você deve estar ciente de qual versão do Java você irá utilizar em seus projetos.

Pacotes java

Pacotes na linguagem Java

O que são pacotes

Pacotes (packages) são mecanismos de organização da linguagem Java utilizados para agrupar classes e interfaces relacionadas dentro de um mesmo namespace.
Eles funcionam de forma semelhante a pastas em um sistema de arquivos, ajudando a estruturar e organizar o código-fonte.

Cada classe em Java pertence a um pacote, que define seu contexto e evita conflitos de nomes entre classes com a mesma denominação.

Importância do uso de pacotes

O uso de pacotes traz diversos benefícios:

  • Organização do código: facilita a navegação e manutenção de projetos grandes
  • Reutilização: permite compartilhar bibliotecas e módulos de forma estruturada
  • Evita conflitos de nomes: classes com o mesmo nome podem existir em pacotes diferentes
  • Controle de acesso: influencia a visibilidade de classes, métodos e atributos
  • Padronização: favorece convenções e boas práticas da linguagem

Estrutura de pacotes na plataforma Java

A própria plataforma Java é organizada em pacotes bem definidos, cada um com responsabilidades específicas.

Exemplo de pacotes nativos do Java:

PacoteDescrição
java.langPacote que contém as principais classes da linguagem, como Object, String, Long e etc
java.ioPacote que centraliza todas as classes relacionadas a trabalhar com leitura e escrita de arquivos
java.timePacote introduzido recentemente para provê recursos de manipulação de datas e horas na linguagem
java.utilPacote onde podemos encontrar classes úteis em sua maioria com recursos estáticos

Ilustração da hierarquia de pacotes

A hierarquia de pacotes segue uma estrutura em árvore:

java
 ├── lang
 │    ├── String
 │    ├── System
 │    └── Math
 ├── util
 │    ├── List
 │    ├── Map
 │    └── Scanner
 └── time
      └── LocalDate

Pacotes de fornecedores adicionais

Além dos pacotes nativos, é comum utilizar bibliotecas de terceiros, que seguem convenções próprias de organização.

Exemplos de pacotes de fornecedores:

org.springframework
 ├── context
 ├── web
 └── data

com.fasterxml.jackson
 ├── core
 └── databind

org.apache.commons
 ├── lang3
 └── io

Esses pacotes indicam:

  • A origem da biblioteca (organização ou empresa)
  • O domínio funcional das classes
  • A separação clara entre módulos

Convenção de nomenclatura de pacotes

A convenção mais comum é utilizar o domínio da empresa invertido, seguido da estrutura do projeto:

com.empresa.projeto.modulo

Exemplo:

com.exemplo.sistema.usuario

Considerações

Pacotes são essenciais para manter aplicações Java organizadas, escaláveis e fáceis de manter. Identificar corretamente os pacotes e compreender sua hierarquia ajuda o desenvolvedor a entender rapidamente a origem, responsabilidade e uso das classes dentro de um projeto ou biblioteca.

A melhor maneira para você dominar uma linguagem Java, é explorando recorrentemente os recursos que cada classe pode oferecer associando à requisitos do dia-a-dia. Tire um tempo e explore um pouco mais os recursos oferecidos em cada classe apresentada 🚀

Claro 🙂 vamos direto ao ponto, no mesmo tom conceitual do seu material.

Nome qualificado

Em Java, o nome qualificado (fully qualified name) é o nome completo de uma classe, incluindo todo o caminho do pacote ao qual ela pertence.

Ele identifica uma classe de forma única dentro da aplicação ou da plataforma Java.

Estrutura do nome qualificado

A estrutura de um nome qualificado é composta por:

pacote.subpacote.Classe

Exemplo:

java.lang.String
java.util.List
java.time.LocalDate

Importância do nome qualificado

O uso do nome qualificado é importante porque:

  • Elimina ambiguidades entre classes com o mesmo nome
  • Permite ao compilador localizar exatamente qual classe deve ser utilizada
  • Torna explícita a origem da classe
  • Facilita a leitura e compreensão do código em cenários específicos

Conflito de nomes

Quando duas classes possuem o mesmo nome simples, mas pertencem a pacotes diferentes, o nome qualificado resolve o conflito.

Exemplo:

java.util.Date
java.sql.Date

Uso explícito:

java.util.Date dataUtil = new java.util.Date();
java.sql.Date dataSql = new java.sql.Date(System.currentTimeMillis());

Relação com o import

Ao utilizar a instrução import, é possível referenciar a classe pelo nome simples, evitando o uso constante do nome qualificado.

import java.util.List;

List<String> nomes = new ArrayList<>();

Sem import, o nome qualificado deve ser usado:

java.util.List<String> nomes = new java.util.ArrayList<>();

Considerações finais

O nome qualificado garante a identificação única de uma classe dentro do ecossistema Java. Compreender esse conceito é essencial para trabalhar com múltiplos pacotes, bibliotecas externas e projetos de grande porte.

Classes com o mesmo nome em pacotes diferentes

Nome da ClassePacoteFinalidade principal
Datejava.util.DateRepresentação geral de data e hora
Datejava.sql.DateRepresentação de data para uso com bancos de dados
Listjava.util.ListInterface para listas ordenadas
Listjava.awt.ListComponente gráfico de lista (AWT)
Timerjava.util.TimerAgendamento de tarefas
Timerjavax.swing.TimerTemporizador para interfaces gráficas
Filejava.io.FileRepresentação de arquivos e diretórios
Filejava.awt.FileDialog*Diálogo gráfico para seleção de arquivos
Apesar de nomes semelhantes, pertencem a contextos e propósitos diferentes.