Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
LINGUAGEM DE PROGRAMAÇÃO III /PROGRAMAÇÃO ORIENTADA A OBJETOS II Seção II Técnicas de programação orientada a objetos Professorª Angela Saemi angela.takesaki@bilac.com.br 1 Coleções Arrays ou vetores Manipular arrays é trabalhoso. E na maioria das vezes, o desenvolvedor esbarra em algumas dificuldades. Arrays Não podemos redimensionar um array em JAVA. Não conseguimos buscar por um determinado elemento na qual o índice desconhecemos Arrays Não conseguimos saber quantas posições do Array já foram populadas se não criarmos métodos para auxiliar. Exemplo Arrays Produto[3] =null Array de produtos com 5 posições preenchidas Exclui-se o produto na posição 3. Exemplo Arrays No exemplo anterior, caso tivermos a necessidade de inserirmos um produto novo, precisaríamos sempre saber qual a posição vazia. Caso trabalhássemos com um depósito com cerca de 1000 produtos, teríamos que criar uma outra estrutura de dados para armazenar as informações de espaços vazios? O que fazer então? Podemos usar Coleções!!! Uma coleção é uma estrutura de dados (na realidade, um objeto) que pode armazenar referências de outros objetos. Em geral, essas referências tratam do mesmo tipo objeto. Coleções ou Collections Framework E no nosso mundo real? No mundo real utilizamos o conceito de coleções em nossa rotina: Em uma lista de compras; Em um conjunto de elementos; Em uma agenda de contatos; Em uma fila de banco; API (Application Programming Interface ) A API do Collections é robusta e possui diversas classes que representam estruturas de dados avançadas! Hierarquia das interfaces do Java Collections Framework Listas: java.util.List Lista é uma coleção que possibilita elementos duplicados e mantém uma ordenação específica entre os elementos. Assim, garante-se que ao percorrer a lista, os elementos encontrados estarão em uma ordem pré-determinada, definida na hora da inserção desses dados. Com este recurso, resolvem-se os problemas com arrays citados anteriormente como busca, remoção, tamanho restrito... Listas: java.util.List A interface de coleção List mais utilizada é o ArrayList que implementa um array interno para gerar uma lista. Assim, ela se torna mais rápida para pesquisa do que sua concorrente, a LinkedList, que é mais rápida na inserção e remoção de itens nas pontas. Listas: java.util.List OBSERVAÇÃO: Um ArrayList não é um Array! É comum essa confusão, na realidade ela usa internamente um array como estrutura para armazenamento de dados, mas este atributo está encapsulado e impossível acessá-lo. Em um ArrayList não se usa [ ] e nem o atributo length (tamanho do array). ArrayList Para criarmos um ArrayList, chamamos seu construtor: ArrayList lista = new ArrayList(); Ou List lista = new ArrayList(); ArrayList Para criarmos uma lista de nomes (String): List lista = new ArrayList(); lista.add(“ Samuel "); lista.add(“ Leonardo "); lista.add(“ Maria Carolina "); Pode-se utilizar dois métodos add da interface List: Um método recebe o elemento e o insere no final da lista. Outro método adiciona o elemento em qualquer posição que estiver vazia. ArrayList Observe que diferente do Array, não declaramos o tamanho. Um ArrayList cresce de acordo com o necessário. Todas as interfaces da Collection, trabalham de modo geral, sem especificar um objeto. Por exemplo, não existe uma ArrayList somente para a classe String. ArrayList Todos os métodos das Collections trabalham com OBJECT (OBJETOS)! ArrayList Exemplo de ArrayList Vamos criar uma lista de Contas de banco. Primeiramente vamos criar uma classe Conta. Exemplo de ArrayList public class Conta { //Declaração de variável privada com inicialização de saldo 0.0 private Double saldo = 0.0; public class Conta { //Metódo setSaldo que atualiza o saldo public void setSaldo(Double saldo) { this.saldo = saldo; } Exemplo de ArrayList public class Conta { //Método getSaldo que permite “pegar” o valor do saldo public Double getSaldo() { return saldo; } Exemplo de ArrayList //Método depositar que adiciona o valor do depósito e atualiza o valor do saldo public void depositar(Double valor){ saldo = saldo + valor; } Exemplo de ArrayList Agora vamos instanciar na main três contas e adicionar valor à elas. Conta c1 = new Conta(); // Instanciando Conta c1.depositar(300.00); // Chamando o método depositar e adicionando valor. Exemplo de ArrayList Vamos criar mais duas contas e adicionar valores. Conta c2 = new Conta(); c2.depositar(500.00); Conta c3 = new Conta(); c3.depositar(800.00); Exemplo de ArrayList Agora vamos criar uma ArrayList para adicionar as contas? List contas = new ArrayList(); // Instanciando um ArrayList. contas.add(c1); // Adicionando contas no ArrayList. contas.add(c2); contas.add(c3); Exemplo de ArrayList Podemos verificar quantos elementos há na lista usando o método size( ): System.out.println(contas.size()); Exemplo de ArrayList Podemos também utilizar o método get ( int ), que recebe como parâmetro o índice do elemento a buscar. Utilizando o for para percorrer a lista de contas: for (int i = 0; i < contas.size(); i++) { System.out.println(contas.get(i)); } Obs.: Um problema ocorre aqui caso você precise imprimir essas posições... Exemplo de ArrayList 32 Como imprimir o saldo dessas contas? Pode-se utilizar o método getSaldo( ) após fazer contas.get( i )??? Não é possível fazer isso... Exemplo de ArrayList Por que não??? Porque trabalhamos com objetos... A referência que o método get(i) traz é simplesmente, o endereço do objeto alocado em uma posição na memória. Assim é necessário fazer um cast (conversão) para que o objeto se transforme em um objeto do tipo Conta para acessarmos o saldo através do método getSaldo( ). Assim... for (int i = 0; i < contas.size(); i++) { Conta cc = (Conta) contas.get(i); System.out.println(cc.getSaldo()); } Cast (conversão) Objeto Conta Métodos básicos do ArrayList add() para adicionar o elemento especificado à coleção. remove() para remover o elemento especificado da coleção. Métodos básicos do ArrayList contains() para verificar se a coleção contém o elemento especificado. Retorna true ou false, caso o elemento esteja ou não na lista; size() para obter a quantidade de elementos na coleção. Objetos em uma lista Em geral, podemos adicionar qualquer Object em uma lista. Então, isso quer dizer que podemos misturar objetos... Conta conta = new Conta(); List lista = new ArrayList(); lista.add(“João Nunes"); lista.add(conta); Objetos em uma lista Entretanto, em uma lista desordenada, onde há uma variação de objetos de tipos diferentes, sabemos que é possível recuperar os objetos fazendo a conversão... Mas, realmente precisamos de uma lista de objetos diferentes? Generics Podemos utilizar um recurso denominado Generics, que restringe a lista a um determinado tipo de objetos. List<Conta> contas = new ArrayList<Conta>(); contas.add(c1); contas.add(c3); contas.add(c2); Generics Aqui especificamos que o ArrayList será uma lista de objetos do tipo Conta. List<Conta> contas = new ArrayList<Conta>(); Generics Então quando tentarmos adicionar um tipo de objeto diferente... lista.add(“João Nunes"); //Isso não vai funcionar.... Generics Com o uso do recurso generics, não é necessários fazer a conversão, pois assegura que todos os objetos que serão inseridos na lista serão do tipo Conta. Conta cc = contas.get(i); // Não precisa converter... Exemplo de Generics Crie uma classe Aluno com as variáveis privada nome e idade. public class Aluno { private String nome; private int idade; Crie um construtor e os respectivos gets e sets das variáveis privadas. public Aluno(){ } Exemplo de Generics public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } Exemplo de Generics public int getIdade() { return idade; } public void setIdade(int idade) { this.idade = idade; } Exemplo de Generics Na Main, crie e instancie um ArrayList<Aluno>. List<Aluno> alunos = new ArrayList<Aluno>(); Exemplo de Generics Na Main, crie e instancie um novo aluno e adicione valores. Aluno aluno = new Aluno(); aluno.setNome(" João menezes"); aluno.setIdade( 18); Exemplo de Generics Agora vamos adicionar o aluno na lista alunos... alunos.add(aluno); Exemplo de Generics Será que o aluno foi adicionado à lista? Vamos verificar... for(int i=0;i<alunos.size();i++){ System.out.println(alunos.get(i).getNome()); System.out.println(alunos.get(i).getIdade()); } O programa exibirá o nome e idade do aluno... João menezes 18 O método Sort da classe Collections O método sort é um método estático que recebe uma lista como argumento e o ordena em ordem crescente. O método Sort da classe Collections List lista = new ArrayList(); lista.add(“Luan"); lista.add(“Geraldo"); lista.add(“Anahi"); System.out.println(lista); Collections.sort(lista); System.out.println(lista); O método Sort da classe Collections Ao testar o método sort como implementado anteriormente, observamos que após a inserção, a lista é impressa na ordem de inserção. Mas ao chamarmos o método sort, a lista é exibida em ordem alfabética. Agora vamos trabalhar com POO? Vamos criar uma classe Contato com variáveis nome e telefone privados public class Contato { private String nome; private String telefone; Classe Contato Crie os seus respectivos gets e sets. public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } Classe Contato Crie os seus respectivos gets e sets. public String getTelefone() { return telefone; } public void setTelefone(String telefone) { this.telefone = telefone; } Main Instancie na Main uma lista de contatos e um contato. public static void main(String[] args) { List<Contato> contatos = new ArrayList<Contato>(); Contato c = new Contato(); Main Declare nome e telefones do tipo String para recebermos os dados pelo teclado. String nome; String telefone; Main Vamos receber agora os dados... nome = JOptionPane.showInputDialog("Entre com o nome: "); telefone = JOptionPane.showInputDialog("Entre com o telefone: "); Main Vamos atualizar o valor pelos dados recebidos pelo teclado e adicionar o contato na lista de contatos. c.setNome(nome); //atualiza o valor c.setTelefone(telefone); //atualiza o valor contatos.add(c); Adiciona o contato na lista de contatos Agora vamos exibir o contato adicionado que está na posição 0, chamamos o método get para retornarmos o valor adicionado do contato; JOptionPane.showMessageDialog(null," Contato adicionado: Nome: "+contatos.get(0).getNome()+" Telefone: "+contatos.get(0).getTelefone()); Main Adicionar mais contatos... Que tal adicionarmos mais dois contatos? Contato c2 = new Contato(); nome = JOptionPane.showInputDialog("Entre com o nome: "); telefone = JOptionPane.showInputDialog("Entre com o telefone: "); c2.setNome(nome); c2.setTelefone(telefone); contatos.add(c2); Adicionar mais contatos... Agora que tal tornarmos isso mais dinâmico? Vamos criar métodos para nossa classe contato? Que tal criarmos um método para adicionar, buscar, remover e listar contatos Método adicionar contatos na classe Contato public void adicionarContato( ){ Contato contato = new Contato(); String nome = JOptionPane.showInputDialog(" Digite o nome:"); String telefone = JOptionPane.showInputDialog(" Digite o telefone:"); contato.setNome(nome); contato.setTelefone(telefone); contatos.add(contato); } Analisando o Método adicionar contatos public void adicionarContato( ){ Contato contato = new Contato();//Cria um novo contato String nome = JOptionPane.showInputDialog(" Digite o nome:"); //Recebe o nome do contato String telefone = JOptionPane.showInputDialog(" Digite o telefone:"); //Recebe o número do contato } contato.setNome(nome); //Atualiza o nome do contato contato.setTelefone(telefone); //Atualiza o número do contato contatos.add(contato); //Adicionar o contato na lista de contatos. Analisando o Método adicionar contatos Método listar contatos na classe Contato public void listarContatos(){ String nomes = ""; for(Contato c:contatos){ nomes+= "Nome: "+c.getNome()+"\n"+"Telefone: "+c.getTelefone()+"\n"; } JOptionPane.showMessageDialog(null, nomes); } Analisando o Método listar contatos String nomes = ""; //Declara uma variável do tipo String vazia. for(Contato c:contatos){//Percorre a lista de contatos nomes+= "Nome: "+c.getNome()+"\n"+"Telefone: "+c.getTelefone()+"\n"; //Adiciona nome e telefone na String nomes. } JOptionPane.showMessageDialog(null, nomes); //Exibe a variável com as Strings nome e telefone, listando assim, os contatoz. } Analisando o Método listar contatos Método Buscar contatos na classe Contato public void buscarContato(){ String nome = JOptionPane.showInputDialog(" Digite o nome do contato a ser pesquisado: " ); Contato contato = new Contato(); contato.setNome(nome); for(Contato c1:contatos){ if(contato.getNome().equals(c1.getNome())){ contato = c1; JOptionPane.showMessageDialog(null,"Contato encontrado "+contato.getNome()); } } Analisando o Método Buscar contatos String nome = JOptionPane.showInputDialog(" Digite o nome do contato a ser pesquisado: " ); //Declara uma variável nome do tipo String que recebe o dado pelo teclado. Contato contato = new Contato();//Cria um novo contato contato.setNome(nome); // Atualiza o valor pelo nome digitado pelo usuário. Método Buscar contatos na classe Contato for(Contato c1:contatos){ //Percorre a lista de contatos if(contato.getNome().equals(c1.getNome())){//Verifica se o nome do contato é igual ao nome do contato percorrido na lista contato = c1; JOptionPane.showMessageDialog(null,"Contato encontrado "+contato.getNome()); //Caso encontre o usuário, exibirá o seu nome, avisando que encontrou. } return contato; //Retorna o contato. } Alguns detalhes... for(Contato c1:contatos){ //Perceba que a lista de contatos é percorrida por um contato if(contato.getNome().equals(c1.getNome())){//Perceba também que apesar do nome ser do objeto String, não comparamos objetos da classe String e sim objetos do tipo Contato que possuam a variável String nome. Método removerContato na classe Contato public void removerContato(){ String nome = JOptionPane.showInputDialog(" Digite o nome do contato a ser removido: " ); Contato contato = new Contato(); contato.setNome(nome); Método removerContato na classe Contato for(Contato c1:contatos){ if(!contato.getNome().equals(c1.getNome())){ continue; }else{ contato = c1; contatos.remove(contato); JOptionPane.showMessageDialog(null,"Contato removido "); } listarContatos(); } } } Analisando o Método removercontatos public void removerContato(){ Contato c = new Contato();//Cria um novo contato c = buscarContato();//Chama o método buscarContato() que retorna um contato e atribui a c; } public void removerContato(){ contatos.remove(c); //Remove o contato retornado do método buscarContato() da lista de contatos. listarContatos();//Lista os contatos, podendo assim verificar a remoção. } Analisando o Método removercontatos Que tal testar na main? public static void main(String[] args) { Contato c = new Contato(); for(int i=0;i<4;i++){ c.adicionarContato(); } c.buscarContato(); c.listarContatos(); c.removerContato(); } } E então? Agora que estudamos um pouco de coleções e alguns métodos para manipulá-los. Bora trabalhar? Grupo de até 4 pessoas. Exercícios de POO: Desenvolva um programa que manipule produtos: Crie a classe Produto. Crie métodos para adicionar, remover, listar e buscar produtos. Início da Atividade de ED – Parte 2 Exercícios sobre Métodos em POO O projeto deve ser enviado para o e-mail angela.aulas@gmail.com. No assunto coloque nome dos integrantes, o curso, período e “Atividade ED 2”. Início da Atividade de ED – Parte 2 Exercícios sobre Métodos em POO Bibliografia DEITEL, Paul J.; DEITEL, Harvey M.; Java - Como programar, 8ª edição, São Paulo, Editora: Prentice Hall, 2010. GOODWILL J. Pure JSP -- Java Server Pages: A Code-Intensive Premium Reference Sams, 2000. GONÇALVES, Edson. Desenvolvendo aplicações Web com JSP, Servlets, JavaServer faces, Hibernate, EJB 3 Persistence e Ajax. Ciência Moderna. ISBN 8573935723 ARAUJO, Everton Coimbra de ; Desenvolvimento para WEB com Java, São Paulo, Visual Books, 2010. Bibliografia DEITEL, Paul J.; DEITEL, Harvey M.; Java - Como programar, 8ª edição, São Paulo, Editora: Prentice Hall, 2010. GOODWILL J. Pure JSP -- Java Server Pages: A Code-Intensive Premium Reference Sams, 2000. GONÇALVES, Edson. Desenvolvendo aplicações Web com JSP, Servlets, JavaServer faces, Hibernate, EJB 3 Persistence e Ajax. Ciência Moderna. ISBN 8573935723 ARAUJO, Everton Coimbra de ; Desenvolvimento para WEB com Java, São Paulo, Visual Books, 2010.
Compartilhar