Buscar

Técnicas de POO

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.

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando