Anúncio
Anúncio

Mais conteúdo relacionado

Anúncio

Aula05

  1. Java Básico Aula 05 Natanael Fonseca - Arquiteto de Software
  2. Ementa • Collections e Generics; • Conectividade com banco de dados relacionais;
  3. Java Collections Framework Representa um grupo de objetos com características em comum, ou associados segundo algum critério. Em Java, há diferentes maneiras de se representar coleções de objetos. O JCF é formado por interfaces, classes abstratas e interfaces e diversas implementações focadas em diferentes casos de uso. Por isso um programa Java raramente precisa implementar métodos de ordenação, busca, redimensionamento etc. Collections e Generics; 3
  4. Java Collections Framework Composto por diversas interfaces, classes abstratas e implementações que oferecem vantagens diferentes para cenários diferentes, determinando certos mecanismos como, por exemplo, protocolo de iteração para navegação nas coleções. Classes estão disponíveis no pacote java.util. Exemplo : • java.util.ArrayList; • java.util.Collection; • java.util.Arrays; • java.util.Collections. Conectividade com banco de dados relacionais 4
  5. Métodos equals() e hashCode() Vamos estudar dois métodos fundamentais para o bom funcionamento de nossas classes dentro das coleções : • public boolean equals(Object o) – Usado para comparar dois objetos. • public int hashCode() – Usado para criar um código que representa o objeto, o valor retornado deve ser calculado com base nos atributos considerados pelo método equals. Collections e Generics 5
  6. Métodos equals() Ao sobrescrever o método equals deve se levar em consideração as seguintes relações: • Reflexão: x.equals(x) deve ser true para qualquer x diferente de null; • Simetria: para x e y diferentes de null, se x.equals(y) é true, e y.equals(x) também deve ser true; • Transitividade: para x,y e z diferentes de null, se x.equals(y) é true, e y.equals(z) é true, então x.equals(z) também deve ser true. • Consistencia: para x e y diferentes de null, múltiplas chamadas de x.equals(y) devem sempre retornar o mesmo valor. • Para x diferente de null, x.equals(null) deve sempre retornar false. Collections e Generics 6
  7. Exemplo Collections e Generics 7 public class Pessoa { private long id; private String nome; @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + (int) (id ^ (id >>> 32)); result = prime * result + ((nome == null) ? 0 : nome.hashCode()); return result; } } O código abaixo foi gerado pelo eclipse, com base nos atributos da classe Pessoa.
  8. Métodos hashCode() Importante sobrescrever este método ao se trabalhar com coleções em Java de alto desempenho do tipo “Tabela Hash”. • Caso não seja implementado, teremos problema em trabalhar com coleções de alto desempenho, pois as operações de localização podem não funcionar. • As implementações de hashCode e equals devem ser coerentes, ou seja, sempre que dois objetos forem considerados iguais pelo método equals, devem possuir o mesmo valor hashCode. Collections e Generics 8
  9. Exemplo Collections e Generics 9 public class Pessoa { private long id; private String nome; @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Pessoa other = (Pessoa) obj; if (id != other.id) return false; if (nome == null) { if (other.nome != null) return false; } else if (!nome.equals(other.nome)) return false; return true; } }} O código abaixo foi gerado pelo eclipse, com base nos atributos da classe Pessoa.
  10. Interface Java.util.Collection Estabelece um contrato básico que todas as coleções do Collections Framework devem seguir. Nela estão definidos os métodos básicos que todas as coleções devem implementar. No framework não existe nenhuma classe concreta que implemente diretamente essa interface. A única implementação existente é AbstractCollection que é uma classe abstrata, cujo intuito é facilitar a criação de implementações de coleções . Em vez de implementar diretamente Collection, podemos estender AbstractCollection e implementar somente os seus métodos abstratos. Collections e Generics 10
  11. Principais métodos Java.util.Collection • boolean add(Object o); • boolean addAll(Collection col); • boolean remove(Object o); • void clear(); • boolean contains(); • boolean containsAll(Collection col) • boolean isEmpty(); • int size(); • Iterator iterator(); • T[] toArray(T[] array); • Object[] toArray(); • boolean removeAll(Collection col); • boolean retainAll(Collection col); Collections e Generics 11
  12. A interface java.util.List Define uma coleção indexada, também conhecida como sequencia. Por isso, quando utilizamos objetos que implementam esta interface, objetamos o controle sobre a posição em que os elementos são inseridos, sendo possível acessa-los através de um índice inteiro. A interface Liste adiciona a Collection métodos relativos a manipulação do elementos traces do índice dos principais métodos acrescentados são: • void add(int indice, Object elem); • Object set(int indice, Object elem); • Object get(int indice); • Object removce(int indice); • int indexOf(Object o); Collections e Generics 12
  13. Principais implementações de java.util.List • java.util.Arraylist; – Utiliza como estrutura de dados interna um array. O tamanho do array é alterado em termos de execução de acordo com a necessidade da lista. • java.util.LinkedList; – Utiliza como estrutura interna uma lista ligada. Esse tipo de estrutura é mais eficiente para inserção e remoção de elementos do que um array, porem tem um desempenho pior na navegação e localização dos elementos. • java.util.Vector; – Também utiliza como estrutura interna um array, mas essa implementação é sincronizada. Collections e Generics 13
  14. A interface java.util.Set É a representação de conjuntos matemáticos, e é caracterizada por não possuir elementos repetidos no seu interior. A interface Set não acrescenta nenhum método novo em relação aos herdados de Collection, apenas impõe a condição de não permitir duplicados nos contratos dos métodos. Principais implementações: • java.util.HashSet • java.util.LinkedHashSet • java.util.SortedSet e NavigableSet • java.util.TreeSet Collections e Generics 14
  15. A interface Comparable Define classes que são ordenáveis, ou seja, que podem ser automaticamente ordenadas por coleções ou outras classes. A interface Comparable define um método que servira como regra de ordenação das instancias da classe que a implementa. int compareTo(Object o) Um número negativo deve ser retornado caso o objeto estiver antes daquele passado como parâmetro, zero se forem iguais e um numero positivo, se estiver após. Collections e Generics 15
  16. A interface Comparator Utilizada para definir uma regra diferente de ordenação entre dois objetos daquela sugerida pela interface Comparable. Por isto, define o método compare(Object o1, Object o2) retornando um valor inteiro, devendo ser positivo se o primeiro argumento for maior do que o segundo, zero se os elementos forem considerados iguais, e negativo se o primeiro argumento for menos do que o segundo. public class ComparadorClientesId implements Comparator { public int compare(Object o1, Object o2){ Cliente cl1 = (Cliente ) o1; Cliente cl2 = (Cliente) o2; return cl1.getId() – cl2.getId(); } } Collections e Generics 16
  17. Ordenando Arrays e Lists Podemos empregar métodos definidos nas classes utilitárias java.utilArrays e java.util.Collections, conforme a necessidade de ordenar arrays ou List. O métodos de ordenação da classe Arrays são : • void sort(Object[] array): ordenação array de acordo com a ordem natural dos elementos. • void sort(Object[] array, Comparator comp): Ordena o array de acordo com a regra estabelecida no comparator. Os métodos de ordenação da classe Collections são: • void sort(List lista): Ordena a lista de acordo com a ordem natural dos elementos, lança um ClassCastException caso os elementos não implementem Comparable. • void sort(List Array, Comparator comp): ordena a lista de acordo com a regra estabelecida no Comparator. Collections e Generics 17
  18. A interface java.util.Queue Introduzida a partir do Java5, e é utilizada tipicamente para gerenciar objetos como uma fila seguindo o conceito FIFO(first-in, first-out). Ou seja, novos objetos são adicionados no fim da fila, e objetos removidos são tomados no inicio. Além dos métodos básicos da interface Collection, a interface Queue também oferece métodos adicionais de inserção remoção e verificação de objetos. Métodos definidos pela interface: • boolean add(Object o); • boolean remove(Object o); • Object element(); Collections e Generics 18
  19. Principais implementações de java.util.Queue • java.util.PriorityQueue; – Funciona como uma lista ordenada que aceita objetos duplicados. . • java.util.Deque; – Possui características de uma fila, podem ela suporta a inserção e remoção dos objetos no final da fila. • java.util.ArrayDeque; – Utiliza como uma estrutura de dados interna um array. O tamanho do array é alterado em tempo de execução de acordo com a necessidade da lista. Collections e Generics 19
  20. A interface java.util.Map Interface define coleções que mapeiam pares chave-valor. Esse tipo de coleção é utilizada quando necessário localizar rapidamente um valor sem fazer uma busca em todos os elementos da coleção. A localização é feita através da chave , que deve ser única. Collections e Generics 20 Map Chave (Object) valor (Object) RG1 Cliente 1 RG1 RG1 RG1 Cliente 2 Cliente 3 Cliente N
  21. Principais métodos de java.util.Map • object put(Object chave, Object valor); • boolean containsKey(Object chave); • boolean containsValue(Object valor); • Object get(Object chave); • Object remove(Object chave); • int size(); • Set ketSet(); • Collection values(); Collections e Generics 21
  22. Principais implementações de java.util.Map • java.util.HashMap Implementação de map que utiliza uma estrutura de dados do tipo tabela hash para armazenar os pares chave-valor. • java.util.HashTable Igual ao hashmap, mas essa classe é sincronizada. • java.util.LinkedHashMap Utiliza como estrutura de dados interna uma tabela hash, a diferença desta para HashMap é que mantem as chaves em ordem de inserção, ou por frequência de acesso. • java.util.SortedMap Adiciona ao contrato de Map, a característica de manter suas chaves ordenadas. • java.util.NavigableMap Extensão de SortedMap, basicamente introduz novos métodos de busca. • java.util.TreeMap Implementa a interface NavigableMap e, por isso, garante que as chaves serão ordenadas em ordem ascendente, de acordo coma ordem natural dos elementos, ou então, por um objeto do tipo Comparator passo como parâmetro na construção do TreeMap. Collections e Generics 22
  23. Java Database Conectivity (JDBC) Esta API é utilizada para facilitar o acesso a bancos de dados relacionais a partir de aplicações Java. Por meio de JDBC, é possível realizar instruções SQL(Structured Query language) num banco de dados relacional para gravar, alterar ou ler dados manipuladores pelo programa Java. Collections e Generics 23
  24. Driver JDBC O driver JDBC é um conjunto de classe Java que tem a habilidade de se comunicar com o banco de dados relacional realizando tarefas como: • Criar conexões; • Executar comandos SQL; • Chamar Stored Procedures; • Criar Tabelas, etc. Tipos: Tipo 1 – JDBC-ODBC Bridge, atuando como uma ponte entre JDBC e ODBC. Tipo 2 – Parte da implementação em código nativo, parte em Java. Tipo 3 – Este driver utiliza um protocolo de rede próprio para se comunicar com um servidor proprietário que se comunica com o banco de dados. Tipo 4 – 100% Java, o driver foi totalmente implementado em Java. Collections e Generics 24
  25. Driver Oracle A oracle assim como outras fabricantes de banco de dados distribui o driver para acesso ao seu banco, que pode ser baixado em : Oracle Database 10g Release 2 JDBC Drivers http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-10201- 088211.html Oracle Database 11g Release 2 JDBC Drivers http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010- 090769.html Collections e Generics 25
  26. Obtendo uma Conexão Em se tratando de JDBC todas classes utilizadas pertencem ao pacote java.sql.*. Exemplo: import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class TesteConexaoJDBC{ public staic void main(String[] args){ Connection conn = null; try{ conn = DriverManager.getConnection(“jdbc:oracle:thin:@1030:DB”,”user”, “password”); conn.close; }catch(ClassNotFoundException e){ e.printStackTrace(); } catch(SQLException e){ e.printStackTrace(); } } } Collections e Generics 26
  27. Fechando a Conexão De um modo geral, é recomendável fechar a conexão no bloco finally, afinal ele sempre será executado ! Exemplo: try{ conn = DriverManager.getConnection(“jdbc:oracle:thin:@1030:DB”,”user”, “password”); }catch(ClassNotFoundException e){ e.printStackTrace(); } catch(SQLException e){ e.printStackTrace(); } finally { try{ if(conn !=null){ conn.close(); } }catch(SQLException e){ e.printStackTrace(); } } Collections e Generics 27
  28. Realizando uma consulta Exemplo: // Cria-se Statement com base na conexão con Statement stmt = con.createStatement(); // Exemplo: navegando e exibindo os dados dos filmes sql = "SELECT `titulo`,`ano` FROM `filmes`"; // Executa-se a consulta dos campos titulo,ano da tabela de filmes ResultSet res = stmt.executeQuery(sql); int ano; String titulo; while (res.next()) { ano = res.getInt("ano"); titulo = res.getString("titulo"); System.out.println("ROW = " + titulo + ": " + ano); } Collections e Generics 28
  29. Incluindo Registro Exemplo: // Cria-se Statement com base na conexão con Statement stmt = con.createStatement(); //código sql sql = "INSERT INTO `filmes` (`titulo`, `ano`, `diretor`)" + "VALUES ('The Matrix', 1999, 'Andy Wachowski & Larry Wachowski')"; stmt.executeUpdate(sql); Collections e Generics 29
  30. Atualizando Registro Exemplo: // Cria-se Statement com base na conexão Statement stmt = con.createStatement(); stmt = conn.createStatement(); String sql = "UPDATE Registration " + "SET age = 30 WHERE id in (100, 101)"; stmt.executeUpdate(sql); Collections e Generics 30
  31. Deletando Registro Exemplo: // Cria-se Statement com base na conexão Statement stmt = con.createStatement(); String sql = "DELETE FROM Registration " + "WHERE id = 101"; stmt.executeUpdate(sql); Collections e Generics 31
  32. Fim da Quinta Aula Acabou !
Anúncio