Primeiras aulas do curso Java parte 5: Pacotes e java.lang

Java parte 5: Pacotes e java.lang

Organizando as classes com Pacotes - Introdução

Bem-vindo aluno!

Neste treinamento falaremos sobre a linguagem, seus pacotes como java.lang. Se você já assistiu aos cursos de orientação ao objeto, herança, interface e polimorfismo, você está no lugar certo e pode avançar nos seus conhecimentos assistindo estas aulas.

Organizaremos melhor nosso código por meio dos pacotes. Feito isso, poderemos pensar em como distribuir e documentar o que escrevemos.

Já que estamos falando sobre pacotes, veremos o primeiro fundamental da linguagem Java, o java.lang, e dentro dele as duas classes String do java.object.Veremos os detalhes sobre essas classes que fazem parte do dia a dia do desenvolvedor Java.

Portanto, se você quer avançar na plataforma Java, criar uma base cada vez mais madura para seus projetos te convido a assistir as próximas aulas deste curso.

Vamos lá?

Organizando as classes com Pacotes - Criação de pacotes

Antes de trabalharmos no código propriamente, iremos preparar nosso ambiente.

Temos o Java instalado e na linha de comando escreveremos version e veremos que o Java executado está na versão 9.0.4.

Last login: Thu Mar 8 13:50:45 on console
Aluras-iMac:~ alura$ java -version
java version "9.0.4"
Java(TM) SE Runtime Environment (build 9.0.4+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.4+11, mixed mode)
Aluras-iMac:~ alura$

Da mesma forma, as outras ferramentas que estão juntas ao development kit também estão na versão 9.0.4.

Last login: Thu Mar 8 13:50:45 on console
Aluras-iMac:~ alura$ java -version
java version "9.0.4"
Java(TM) SE Runtime Environment (build 9.0.4+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.4+11, mixed mode)
Aluras-iMac:~ alura$ javac - version
javac 9.0.4
Alura-iMac: ~ alura$

A linha de comando está configurada, o Eclipse também está instalado e iremos inicializa-lo. Estamos utilizando a versão Oxygen, mas uma versão anterior poderia ser utilizada sem problemas. No caso do Java, para nosso projeto, bastaria a versão 1.7 ou 1.8.

No Package Explorer temos os projetos que foram desenvolvidos nas outras partes do curso. Você pode fazer download dos arquivos do projeto.

Estamos com o ambiente preparado e podemos iniciar.

Você já possui uma base sólida em Java, mas ainda existem alguns pontos que podemos conhecer melhor. Na área do Package Explorer, selecionaremos o projeto bytebank-herdado-conta e veremos que existem onze arquivos .java de código fonte.

onze códigos fonte

Em um projeto real teríamos facilmente por volta de quinhentos arquivos, mas podemos chegar no ponto da discussão apenas com estes onze arquivos.

Queremos organizar melhor esses arquivos, e agrupa-los todos em uma única pasta não é uma boa solução. Em nosso exemplo, podemos identificar pelo menos dois tipos de classes: reparem que temos os testes (TesteContas, TesteSaca e TesteTributaveis) e todas as outras fazem parte do nosso domínio.

Iremos separar esses dois tipos de classes; faremos isso organizando as classes em diretórios específicos. Em um primeiro momento, esse procedimento será feito da forma mais custosa, para depois aprendermos a fazer uso de todas as facilidades disponibilizadas pelo Eclipse.

Estamos utilizando a visualização do Package Explorer, deixaremos de fazer isso neste momento.

Na parte superior esquerda, teremos um buscador e procuraremos por outra view conhecida por "Navigator". Selecionaremos a opção correspondente e ela se tornará visível ao lado esquerdo da tela.

Navigator visível

O Navigator opera como um explorer do Windows, exibe as pastas do nosso interesse de forma mais completa. Já o Package Explorer oculta alguns conteúdos a fim de simplificar a visualização, focando nos itens mais importantes. Percebam que no Navigator a pasta bin é exibida, diferentemente do Package Explorer.

Nosso objetivo é separar nossas classes em diretórios diferentes, como já foi dito. Em src, clicaremos com o botão direito e selecionaremos a opção "New > Folder". O primeiro diretório se chamará modelo, e dentro dessa pasta colocaremos todos os arquivos que não são de teste, como CalculadorDeImposto, Cliente, Conta e assim por diante.

nova pasta modelo

Criaremos uma segunda pasta que chamaremos de teste, em que, claramente, guardaremos os arquivos de teste. Com isso temos as duas classes divididas entre diretórios específicos, visualizados no Navigator.

diretórios modelo e teste

Ao clicarmos no visualizador Package Explorer reparem que há ocorrência de erros que podem ser vistos através da mudança na visualização dos diretórios que criamos, há um pequeno alerta vermelho.

erro no package explorer

Pastas e diretórios possuem um nome especial dentro do mundo Java: são os pacotes, ou em inglês packages. Esses pacotes existem para organizarmos melhor o nosso código. No entanto, quando colocamos uma classe dentro de um pacote, essa ação precisa ser evidenciada no código fonte.

Vamos entender melhor como se dá esse processo.

Abriremos o arquivo CalculadorDeImposto, localizado no diretório modelo. Percebemos que o Eclipse já aponta erros de compilação quando abrimos esta classe, afinal, ela faz parte do pacote modelo e isso precisa ser definido no código fonte, e deve ser a primeira declaração do código.

Por isso, inseriremos a palavra chave package e inseriremos o nome da pasta, no caso, modelo.

package modelo;

public class CalculadorDeImposto {

    private double totalImposto;

    public void registra(Tributavel t) { 
        double valor = t.getValorImposto();
        this.totalImposto += valor;
    }

Com essa declaração, o código já está sendo compilado normalmente. O nome da pasta que deve ser escrito após o uso da palavra chave package deve sempre partir do diretório src, o local em que está armazenado o código fonte e para onde o compilador do Eclipse olhará.

Esse mesmo processo deve ser feito para todos os arquivos, por isso copiaremos a declaração package modelo por meio do atalho "Ctrl + C" e colaremos em todos as classes. Para as classes na pasta teste a declaração será package teste. Esse é o jeito mais trabalhoso de executar essa ação, mas depois aprenderemos outra forma.

Os erros de declaração do pacote não existem mais, no entanto, são apresentadas outras falhas pelo Eclipse.

Separamos nossos arquivos e eles se encontram em pacotes separados. Observamos o código da classe testeTributaveis:

package teste;

public class TesteTributaveis { 

    public static void main(String[] args) {
        ContaCorrente cc = new ContaCorrente(222, 333);
        cc.deposita(100.0);

        SeguroDeVida seguro = new SeguroDeVida();

        CalculadorDeImposto calc = new CalculadorDeImposto();
        calc.registra(cc);
        calc.registra(seguro);

        System.out.println(calc.getTotalImposto());
    }

A classe faz referência à ContaCorrente, e é justamente nesse ponto em que surgem problemas, pois essa classe está no diretório modelo, e não em teste. O package não é apenas um diretório simples, ele passa a fazer parte do nome da classe, portanto a classe ContaCorrente não possui mais essa nomeação, passa a ser modelo.ContaCorrente. Portanto, para que o código seja compilado, devemos atualizar os nomes simples das classes que se encontram no pacote modelo em todos os arquivos de teste.

package teste;

public class TesteTributaveis { 

    public static void main(String[] args) {
        modelo.ContaCorrente cc = new modelo.ContaCorrente(222, 333);
        cc.deposita(100.0);

        modelo.SeguroDeVida seguro = new modelo.SeguroDeVida();

        modelo.CalculadorDeImposto calc = new modelo.CalculadorDeImposto();
        calc.registra(cc);
        calc.registra(seguro);

        System.out.println(calc.getTotalImposto());        
    }

Esse nome completo da classe que contém o nome de seu diretório é conhecido como Full Qualified Name ou FQN.

Organizando as classes com Pacotes - Importando pacotes

Começamos anteriormente, a discutir a questão dos pacotes. Vimos como o Package Explorer atua na visualização simplificada dos arquivos, mas por hora continuaremos fazendo uso do Navigator que exibe mais conteúdos.

Criamos os pacotes modelo e teste para separarmos as classes. Observamos que essa informação de armazenamento deve constar no código fonte usando a palavra chave package, e que o nome da classe se modifica ao realizarmos a reorganização dos arquivos. Esse nome completo da classe é conhecido por full qualified name; internamente a máquina sempre utilizará esse nome completo para fazer a identificação das classes.

No entanto, podemos perceber que a nossa nomenclatura ainda é frágil, olhemos para a classe CalculadorDeImposto, por exemplo: o Java é uma linguagem muito popular no Brasil, imaginem quantas classes chamadas CalculadorDeImposto não existem no país? Além disso, o nome do pacote modelo também é muito comum, algumas pessoas utilizam o nome dominio.

Como esses nomes são bem comuns, é muito provável que já tenham os utilizado em outro projeto, isso é um problema no momento em que precisamos utilizar um código escrito por outra pessoa e a mesma nomenclatura foi utilizada em seu próprio projeto.

A ideia geral é: como podemos aproveitar classes com o mesmo nome em um outro projeto, sem precisar renomear nenhuma delas?

No sistema operacional, ao abrimos uma pasta, sabemos que dentro dela não podem ser criados dois arquivos com o mesmo nome, o mesmo vale para o mundo Java.

Em src criaremos uma pasta com o nome do projeto, ou seja, banco. Dentro dessa pasta colocaremos todas as classes de modelo; para isso, selecionamos modelo no visualizador Navigator e o arrastados para dentro da pasta banco. Faremos o mesmo procedimento com teste.

nova pasta banco com os arquivos "modelo" e "teste"

Veremos que assim que fizemos essa modificação, os erros novamente surgem, afinal o pacote não é reconhecido apenas por modelo, pois incluímos esta pasta dentro de outra denominada banco. Precisaremos fazer a seguinte modificação para que os códigos compilem corretamente:

package banco.modelo;

public class CalculadorDeImposto { 

    private double totalImposto;

    public void registra(Tributabel t) {
        double valor = t.getValorImposto();
        this.totalImposto += valor;
    }

Estamos utilizando o nome do projeto na nomenclatura das classes banco.modelo, adotando o nome mais específico. No entanto, a comunidade Java ainda considera essa nomeação frágil, e conflitos ainda podem ocorrer no desenvolvimento de um projeto.

Iremos incluir outra pasta que terá o nome da empresa, que por sua vez guardará todas as pastas e classes específicas.

O nome da nossa pasta será bytebank, e ela conterá pastabanco, que por sua vez contém modelo e teste. Mesmo assim, a comunidade Java não está satisfeita, a nomenclatura pode ainda gerar confusões já que podem existir duas ou mais empresas no mundo com o mesmo nome.

O que de fato identifica uma empresa de forma única no mundo inteiro? No caso da Alura, o que a identifica na web é seu endereço, ou seja www.alura.com.br. Só existe esse endereço para esta página.

Aproveitaremos a ideia dos endereços da internet nos pacotes Java. Criaremos um conjunto de pastas que recriam o endereço do portal, iniciando pelo país, ou seja, em src criaremos uma pasta denominada br; depois criaremos uma pasta com que representa o sub-domínio. Portanto, temos a seguinte organização de arquivos: "src > br > com > bytebank > banco > modelo,teste", essa é a sistematização do Java que encontraremos em nosso dia a dia.

Qual será o full qualified name da classe CalculadorDeImposto nesta altura do projeto?

Além da palavra chave package inseriremos no começo do código fonte br.com.bytebank.banco.modelo. E o nome da classe será br.com.bytebank.banco.modelo.CalculadorDeImposto.

package br.com.bytebank.banco.modelo;

public class CalculadorDeImposto { 

    private double totalImposto;

    public void registra(Tributavel t) {
        double valor = t.getValorImposto();
        this.totalImposto += valor;
    }
//...

Esse tipo de estruturação pode parecer exagerada em um primeiro momento, mas essa prática se tornou muito útil durante o desenvolvimento de projetos. Não precisamos criar todas as pastas manualmente como fizemos até este ponto, a ferramenta Eclipse criará as pastas de forma automática e rápida.

Aprendemos que o nome completo da classe CalculadorDeImposto é br.com.bytebank.banco.modelo.CalculadorDeImposto. Veremos o nome da classe TesteTributaveis. Percebam que o Eclipse irá autocompletar a linha, porque já conhece a estrutura padrão.

Mas precisamos alterar as classes que estão sendo citadas ao longo do código, incluindo seus respectivos nomes completos para que o código seja compilado corretamente.

package br.com.bytebank.banco.teste.TesteTributaveis;

public class TesteTributaveis { 

    public static void main(String[] args} { 
        br.com.bytebank.banco.modelo.ContaCorrente cc = new br.com.bytebank.banco.modelo.ContaCorrente(222,333);

        br.com.bytebank.banco.modelo.SeguroDeVida seguro = new model.SeguroDeVida();

        br.com.bytebank.banco.modelo.CalculadorDeImposto calc = new br.com.bytebank.banco.modelo.CalculadorDeImposto();

Além de ser um processo trabalhoso, esse tipo de ação dificulta a legibilidade do código. Não precisamos fazer deste modo, existe a opção de importarmos o pacote necessário e com isso podemos continuar utilizando o nome simples das classes.

As importações são expressas logo abaixo da palavra-chave package, sendo essa uma estrutura regular de organização do código. Acionaremos a palavra chave import e vamos declarar o que queremos importar.

package br.com.bytebank.banco.teste; 

import br.com.bytebank.banco.modelo.*;

Com isso, podemos manter nosso código mais limpo e otimizar as adaptações necessárias.

Como vocês puderam ver, há muitas adequações que devemos realizar em nosso código atualmente, precisamos realizar as importações necessárias e corrigir as classes que aparecem com nomes incorretos. Façam isso, observem o que precisa ser retificado e, apenas então, prosseguiremos nas próximas lições.

Sobre o curso Java parte 5: Pacotes e java.lang

O curso Java parte 5: Pacotes e java.lang possui 158 minutos de vídeos, em um total de 54 atividades. Gostou? Conheça nossos outros cursos de Java em Programação, ou leia nossos artigos de Programação.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Java acessando integralmente esse e outros cursos, comece hoje!

  • 1124 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

Premium

  • 1124 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$75
à vista R$900
Matricule-se

Premium Plus

  • 1124 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$100
à vista R$1.200
Matricule-se

Max

  • 1124 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$120
à vista R$1.440
Matricule-se
Procurando planos para empresas?
Acesso por 1 ano
Estude 24h/dia onde e quando quiser
Novos cursos toda semana