terça-feira, 9 de abril de 2013

Trabalhando com vários arquivos *.java

Fala pessoal, hoje vou mostrar como trabalhar com mais de um arquivo (.java) em seus projetos.

Introdução

Quando estamos aprendendo a programar geralmente escrevemos nossos códigos em um único arquivo. Isso é feito para que o aluno não se perca no decorrer de seu aprendizado e trabalhar com um único arquivo é muito mais simples do que trabalhar com vários.
Quando estamos programando no paradigma orientado a objetos muitas vezes (senão sempre) precisamos de mais que um arquivo. Programas grandes costumam possuir vários arquivos onde uma parte do código chama outro parte de código de um arquivo diferente.
Bom visto que para grandes programas temos que usar mais de um arquivo vamos então aprender como programar utilizando mais de um arquivo ... bora lá pé de pano?

Brincando com os arquivos

Vamos imaginar que temos o seguinte problema: Precisamos desenvolver um sistema para uma loja de jóias, essa loja deseja realizar o cadastro de produtos e clientes. Vamos deixar só isso por enquanto pequeno gafanhoto depois retomamos e brincamos mais ;-)

De acordo com o texto acima eu sei que vou ter no mínimo 3 arquivos não é mesmo? O primeiro arquivo seria para escrever código de manipulação de clientes, o segundo de produtos e o terceiro arquivo seria a minha classe principal.

Mais a questão é: "E se eu quiser fazer tudo no mesmo arquivo?". Na tem problema algum em codificar um programa inteiro em um único arquivo, vejamos por exemplo como criar as 3 classes de nosso programa em um único arquivo:


public class TestJoalheria { public static void main() { // CÓDIGO OCULTO } } public class Cliente { // CÓDIGO OCULTO } public class Produto { // CÓDIGO OCULTO }
Esse seria o nosso arquivo único com todas as classes que nosso sistema possui. Veja que não tem problema algum em ter todo o código em um único arquivo. A desvantagem em ter tudo programado em apenas um único arquivo seria a complexidade que o código ganharia. Imagine ter que procurar um erro em um arquivo que tenha 50 classes e o total de linhas seja igual à 100.000 linhas?!

Já que tratar tudo em um arquivo é algo muito complexo, imagine agora se o mesmo programa de 100.000 linhas estivesse divido em 50 arquivos diferentes. É muito mais fácil procurar um erro em um arquivo que você sabe que o erro está ali e esse arquivo tem agora 2000 linhas ... conseguiu enxergar a vantagem pequeno gafanhoto?

Bom vamos ver como ficou o código da Joalheria em vários arquivos? DICA: INCREMENTE FUNCIONALIDADES A MAIS NO SOFTWARE, SEI LÁ CONSTRUA UMA INTERFACE GRÁFICA ... OU DEIXE UM COMENTÁRIO DIZENDO O QUE GOSTARIA QUE EU MODIFICASSE NO CÓDIGO PARA TE AJUDAR MELHOR. BONS ESTUDOS. 

Cliente.java
public class Cliente { private String nome; private int idade; private String endereco; private String telefone; public Cliente(String nome, int idade, String endereco, String telefone) { this.nome = nome; this.idade = idade; this.endereco = endereco; this.telefone = telefone; } public String getNome() { return nome; } public int getIdade() { return idade; } public String getEndereco() { return endereco; } public String getTelefone() { return telefone; } }

Produto.java public class Produto { private String descricao; private float preco; private int estoque; public Produto(String descricao, float preco, int estoque) { this.descricao = descricao; this.preco = preco; this.estoque = estoque; } public String getDescricao() { return descricao; } public float getPreco() { return preco; } public int getEstoque() { return estoque; } }

Joalheria.java import java.util.List; import java.util.ArrayList; public class Joalheria { private List clientesCadastrados; private List produtosCadastrados; public Joalheria() { clientesCadastrados = new ArrayList<>(); produtosCadastrados = new ArrayList<>(); } public boolean adicionarCliente(Cliente cliente) { if (cliente != null) { clientesCadastrados.add(cliente); return true; } return false; } public boolean adicionarProduto(Produto produto) { if (produto != null) { produtosCadastrados.add(produto); return true; } return false; } public List getClientesCadastrados() { return clientesCadastrados; } public List getProdutosCadastrados() { return produtosCadastrados; } public int qtdeClientesCadastrados() { return clientesCadastrados.size(); } public int qtdeProdutosCadastrados() { return produtosCadastrados.size(); } }

TestJoalheria.java import javax.swing.JOptionPane; public class TestaJoalheria { Joalheria joalheria = new Joalheria(); private boolean cadastrarCliente(String nome, int idade, String endereco, String telefone) { return joalheria.adicionarCliente(new Cliente(nome, idade, endereco, telefone)); } private boolean cadastrarProduto(String descricao, float preco, int estoque) { return joalheria.adicionarProduto(new Produto(descricao, preco, estoque)); } private void imprimirClientes() { int qtde = joalheria.qtdeClientesCadastrados(); if (qtde > 0) { System.err.println("Número de clientes cadastrados na base de dados: " + qtde); for (Cliente c : joalheria.getClientesCadastrados()) { System.out.println("Nome: " + c.getNome()); System.out.println("Idade: " + c.getIdade()); System.out.println("Endereço: " + c.getEndereco()); System.out.println("Telefone: " + c.getTelefone()); System.out.println("------------------------------------"); } } else { System.err.println("Nenhum cliente encontrado!"); } } private void imprimirProdutos() { int qtde = joalheria.qtdeProdutosCadastrados(); if (qtde > 0) { System.err.println("Número de produtos cadastrados na base de dados: " + qtde); for (Produto p : joalheria.getProdutosCadastrados()) { System.out.println("Descrição: " + p.getDescricao()); System.out.println("Preço: " + p.getPreco()); System.out.println("Estoque: " + p.getEstoque()); System.out.println("------------------------------------"); } } else { System.err.println("Nenhum produto encontrado!"); } } // Esse cara nada mais é que o método que dá o ponta pé inicial public static void main(String[] args) { int opcao; TestaJoalheria test = new TestaJoalheria(); do { opcao = Integer.parseInt(JOptionPane.showInputDialog("Informe o que deseja cadastrar: \n1-Produtos\n2-Clientes\n\n0-Sair")); if (opcao == 1) { String descricao = JOptionPane.showInputDialog("Entre com a descrição do produto"); float preco = Float.parseFloat(JOptionPane.showInputDialog("Entre com o preço")); int estoque = Integer.parseInt(JOptionPane.showInputDialog("Entre com a quantidade em estoque")); if (!test.cadastrarProduto(descricao, preco, estoque)) { JOptionPane.showMessageDialog(null, "Erro ao cadastrar produto!"); } else { JOptionPane.showMessageDialog(null, "Produto cadasrtrado com sucesso!"); } } else if (opcao == 2) { String nome = JOptionPane.showInputDialog("Entre com o nome"); int idade = Integer.parseInt(JOptionPane.showInputDialog("Entre com a idade")); String endereco = JOptionPane.showInputDialog("Entre com o endereço"); String telefone = JOptionPane.showInputDialog("Entre com o telefone"); if (!test.cadastrarCliente(nome, idade, endereco, telefone)) { JOptionPane.showMessageDialog(null, "Erro ao cadastrar cliente!"); } else { JOptionPane.showMessageDialog(null, "Cliente cadasrtrado com sucesso!"); } } else { JOptionPane.showMessageDialog(null, "Sistema finalizado!!!"); } } while(opcao != 0); test.imprimirProdutos(); test.imprimirClientes(); } }

Nenhum comentário:

Postar um comentário

Novidade!!! Agora vamos ter canal no Youtube =D

Fala pessoal tudo beleza, estou sumido a correria está forte por aqui. Estou querendo dar um start em um projeto antigo que vem desde o temp...