Universidade Católica de Angola Prática de laboratório Fundamentos de Programação II Frei...

Post on 22-Apr-2015

159 views 1 download

Transcript of Universidade Católica de Angola Prática de laboratório Fundamentos de Programação II Frei...

Universidade Católica de Angola

Prática de laboratórioFundamentos de Programação II

Frei Joaquim José Hangalo

Exemplo simples de trabalho com array de objectos

O exemplo apresentado foi retirado Do livro de Alcione de Paiva Oliveira e Vinícius Valente Maciel

JAVA NA PRÁTICA, Volume I, UNIVERSIDADE FEDERAL DE VIÇOSA

• Conforme o diagrama os objectos da classe Pessoa armazenarão os dados de uma pessoa. A classe fornece os métodos para acesso a estes dados.

• O objecto da classe PessoaDAO é composto por vários dados de pessoa.

• A classe PessoaDAO possui os métodos necessários para a inserção e recuperação de dados.

• O método inserir(), trata de inserir uma pessoa na lista de pessoas, o método listarPessoas(), retorna uma lista contendo todos os objectos da classe Pessoa e o método buscarPessoaPeloNome() retorna um objecto da classe Pessoa em função do nome especificado.

• A classe Agenda é responsável por fornecer os método que implementam a interface com o utilizador. Ela foi criada por questões de projecto, uma vez que é importante manter separado o código das interfaces do sistema.

Classe Pessoa.java

public class Pessoa { private String nome; private String telefone; private String endereco;

public Pessoa() { }…}

sets e gets omitidos

Classe PessoaDAO.javapublic class PessoaDAO{ Pessoa pessoas[];

public PessoaDAO() { pessoas=null; } // Métodos public void inserir (Pessoa pessoa){ if(pessoas == null) pessoas = new Pessoa[1]; else aumentaCapacidade(); pessoas[pessoas.length-1]=pessoa; }…

// Consultar public Pessoa buscaPessoaPeloNome (String nome){ Pessoa aux = null; for(int i =0; i<pessoas.length; i++) if(pessoas[i].getNome().equals(nome)) aux=pessoas[i]; return aux; }

//listar public Pessoa[] listaPessoas(){ return pessoas; } // aumenta capacidade private void aumentaCapacidade() { Pessoa[] aux = new Pessoa[pessoas.length+1]; for(int i=0; i<pessoas.length; i++) aux[i]= pessoas[i]; pessoas=aux; } }

O método aumentaCapacidade(), cria um novo array maior em uma unidade que o anterior. Esta não é uma solução muito eficiente. O melhor seria incrementar o array em várias unidades, de modo que o redimensionamento seria necessário em intervalos menores. Entretanto, o código seria bem mais complexo.

O método buscaPessoaPeloNome() retorna um objecto com um dado nome igual ao passado ao método. Se não existir tal objecto é retornado null.

Já o método listaPessoas() retorna uma referencia ao array de objectos do tipo Pessoa.

Classe AgenaIntimport java.io.*;

public class Agenda {

PessoaDAO pessoaDAO; BufferedReader in;

public Agenda() {

pessoaDAO = new PessoaDAO(); in = new BufferedReader(new InputStreamReader(System.in)); }…

// Exibir lista public void mostraPessoas() { Pessoa pessoa[] = pessoaDAO.listaPessoas(); for (int i = 0; i < pessoa.length; i++) { System.out.println("\nNome:\t" + pessoa[i].getNome()

+ "\nTelefone:\t" + pessoa[i].getTelefone() + "\nEndereco:\t" + pessoa[i].getEndereco() + "\n");

}

}

// Exibir Pessoa public void mostraDadosDaPessoa() { String nome = null; try {

System.out.println("Escreva o nome da pessoa que procura"); nome = in.readLine(); if (nome.length() < 1) { System.exit(-1); } } catch (IOException e) { System.out.println(e.getMessage()); System.exit(-1); }

Pessoa pessoa = pessoaDAO.buscaPessoaPeloNome(nome); if (pessoa != null) { System.out.println("\nNOme:\t" + pessoa.getNome() + "\nTelefone:\t" + pessoa.getTelefone() + "\

nEndereco:\t" + pessoa.getEndereco());

}

}

//Obter dados da pessoa public void obterDadosDaPessoa() { String nome; String telefone; String endereco;

try { System.out.println("Escreva o nome"); nome = in.readLine(); if (nome.length() < 1) { System.exit(-1); } System.out.println("Escreva o numero do telefone"); telefone = in.readLine();-…

System.out.println("Escreva o endereco"); endereco = in.readLine();

pessoaDAO.inserir(new Pessoa(nome, telefone, endereco));

} catch (IOException e) { System.out.println(e.getMessage()); System.exit(-1);

}

}…

// main public static void main(String args[]) { Agenda ag = new Agenda(); String opcao = ""; for (;;) { System.out.println( "\nAgenda Pessoal\n***********************\n"); System.out.print( "Opcoes:\n(i)nserir\n(c)onsultar\n(l)istar\n(f)im=>"); try { opcao = ag.in.readLine(); } catch (IOException e) { System.out.println(e.getMessage()); System.exit(-1); } switch (opcao.charAt(0)) { case 'f':

System.exit(0); break; case 'i': ag.obterDadosDaPessoa(); break; case 'c': ag.mostraDadosDaPessoa(); break; case 'l': ag.mostraPessoas(); break; } } }}

O método main() da classe Agenda cria um objecto da própria classe, que por sua vez possui um objecto da classe PessoaDAO.

A partir de então o programa entra num laço, que aguarda e atende às solicitações do utilizador.

Todos os métodos da classe recebem e exibem dados por meio dos dispositivos de E/S padrão.

Para ler os dados do dispositivo de entrada padrão, uma linha por vez, foi necessário encapsular o objecto System.in em objectos das classes BufferedReader e InputStreamReader .

a entrada de dados será realizada por meio do método readLine(), que retorna a linha digitada pelo utilizador.

Trabalho a realizarCriar uma aplicação semelhante mas com interface

gráfica (JOptionPane)O conhecimento e a criatividade serão a base para a

defesa

para estudo e aprofundamento além do livro de Deitel consultar também a apostila da caelum (www.caelum.com.br) intitulada: Algoritmos e estrutura de dados em Java (só a parte que fala de vectores)…