22
Universidade Católica de Angola Prática de laboratório Fundamentos de Programação II Frei Joaquim José Hangalo

Universidade Católica de Angola Prática de laboratório Fundamentos de Programação II Frei Joaquim José Hangalo

Embed Size (px)

Citation preview

Page 1: Universidade Católica de Angola Prática de laboratório Fundamentos de Programação II Frei Joaquim José Hangalo

Universidade Católica de Angola

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

Frei Joaquim José Hangalo

Page 2: Universidade Católica de Angola Prática de laboratório Fundamentos 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

Page 3: Universidade Católica de Angola Prática de laboratório Fundamentos de Programação II Frei Joaquim José Hangalo
Page 4: Universidade Católica de Angola Prática de laboratório Fundamentos de Programação II Frei Joaquim José Hangalo

• 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.

Page 5: Universidade Católica de Angola Prática de laboratório Fundamentos de Programação II Frei Joaquim José Hangalo

• 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.

Page 6: Universidade Católica de Angola Prática de laboratório Fundamentos de Programação II Frei Joaquim José Hangalo

• 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.

Page 7: Universidade Católica de Angola Prática de laboratório Fundamentos de Programação II Frei Joaquim José Hangalo

Classe Pessoa.java

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

public Pessoa() { }…}

sets e gets omitidos

Page 8: Universidade Católica de Angola Prática de laboratório Fundamentos de Programação II Frei Joaquim José Hangalo

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; }…

Page 9: Universidade Católica de Angola Prática de laboratório Fundamentos de Programação II Frei Joaquim José Hangalo

// 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; }

Page 10: Universidade Católica de Angola Prática de laboratório Fundamentos de Programação II Frei Joaquim José Hangalo

//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; } }

Page 11: Universidade Católica de Angola Prática de laboratório Fundamentos de Programação II Frei Joaquim José Hangalo

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.

Page 12: Universidade Católica de Angola Prática de laboratório Fundamentos de Programação II Frei Joaquim José Hangalo

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.

Page 13: Universidade Católica de Angola Prática de laboratório Fundamentos de Programação II Frei Joaquim José Hangalo

Classe AgenaIntimport java.io.*;

public class Agenda {

PessoaDAO pessoaDAO; BufferedReader in;

public Agenda() {

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

Page 14: Universidade Católica de Angola Prática de laboratório Fundamentos de Programação II Frei Joaquim José Hangalo

// 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");

}

}

Page 15: Universidade Católica de Angola Prática de laboratório Fundamentos de Programação II Frei Joaquim José Hangalo

// 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());

}

}

Page 16: Universidade Católica de Angola Prática de laboratório Fundamentos de Programação II Frei Joaquim José Hangalo

//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();-…

Page 17: Universidade Católica de Angola Prática de laboratório Fundamentos de Programação II Frei Joaquim José Hangalo

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);

}

}…

Page 18: Universidade Católica de Angola Prática de laboratório Fundamentos de Programação II Frei Joaquim José Hangalo

// 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':

Page 19: Universidade Católica de Angola Prática de laboratório Fundamentos de Programação II Frei Joaquim José Hangalo

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

Page 20: Universidade Católica de Angola Prática de laboratório Fundamentos de Programação II Frei Joaquim José Hangalo

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.

Page 21: Universidade Católica de Angola Prática de laboratório Fundamentos de Programação II Frei Joaquim José Hangalo

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.

Page 22: Universidade Católica de Angola Prática de laboratório Fundamentos de Programação II Frei Joaquim José Hangalo

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)…