curso java básico - aula 05

32
Java Básico Aula 05 Natanael Fonseca - Arquiteto de Software

Upload: natanael-fonseca

Post on 19-Jul-2015

117 views

Category:

Technology


4 download

TRANSCRIPT

Java BásicoAula 05

Natanael Fonseca - Arquiteto de Software

Ementa

• Collections e Generics;

• Conectividade com banco de dados relacionais;

Java Collections FrameworkRepresenta um grupo de objetos com características em comum,ou associados segundo algum critério. Em Java, há diferentesmaneiras de se representar coleções de objetos.

O JCF é formado por interfaces, classes abstratas e interfaces ediversas implementações focadas em diferentes casos de uso.

Por isso um programa Java raramente precisa implementarmétodos de ordenação, busca, redimensionamento etc.

Collections e Generics; 3

Java Collections FrameworkComposto por diversas interfaces, classes abstratas eimplementações que oferecem vantagens diferentes paracenários diferentes, determinando certos mecanismos como, porexemplo, 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

Métodos equals() e hashCode()Vamos estudar dois métodos fundamentais para o bomfuncionamento 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 oobjeto, o valor retornado deve ser calculado combase nos atributos considerados pelo métodoequals.

Collections e Generics 5

Métodos equals()Ao sobrescrever o método equals deve se levar em consideração asseguintes relações:

• Reflexão: x.equals(x) deve ser true para qualquer x diferente denull;

• Simetria: para x e y diferentes de null, se x.equals(y) é true, ey.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 dex.equals(y) devem sempre retornar o mesmo valor.

• Para x diferente de null, x.equals(null) deve sempre retornar false.

Collections e Generics 6

Exemplo

Collections e Generics 7

public class Pessoa {

private long id;private String nome;

@Overridepublic 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 atributosda classe Pessoa.

Métodos hashCode()Importante sobrescrever este método ao se trabalhar comcoleções em Java de alto desempenho do tipo “Tabela Hash”.

• Caso não seja implementado, teremos problema em trabalharcom coleções de alto desempenho, pois as operações delocalização podem não funcionar.

• As implementações de hashCode e equals devem sercoerentes, ou seja, sempre que dois objetos foremconsiderados iguais pelo método equals, devem possuir omesmo valor hashCode.

Collections e Generics 8

Exemplo

Collections e Generics 9

public class Pessoa {private long id;private String nome;@Overridepublic 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 atributosda classe Pessoa.

Interface Java.util.CollectionEstabelece um contrato básico que todas as coleções do Collections Frameworkdevem seguir. Nela estão definidos os métodos básicos que todas as coleções devemimplementar.

No framework não existe nenhuma classe concreta que implemente diretamente essainterface. A única implementação existente é AbstractCollection que é uma classeabstrata, cujo intuito é facilitar a criação de implementações de coleções . Em vez deimplementar diretamente Collection, podemos estender AbstractCollection eimplementar somente os seus métodos abstratos.

Collections e Generics 10

Principais métodosJava.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

A interface java.util.List

Define uma coleção indexada, também conhecida como sequencia. Por isso, quandoutilizamos objetos que implementam esta interface, objetamos o controle sobre aposiçã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 elementostraces 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

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

• 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 umarray, porem tem um desempenho pior na navegação e localização doselementos.

• java.util.Vector;

– Também utiliza como estrutura interna um array, mas essaimplementação é sincronizada.

Collections e Generics13

A interface java.util.Set

É a representação de conjuntos matemáticos, e é caracterizada por nãopossuir elementos repetidos no seu interior.

A interface Set não acrescenta nenhum método novo em relação aosherdados de Collection, apenas impõe a condição de não permitir duplicadosnos 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

A interface Comparable

Define classes que são ordenáveis, ou seja, que podem serautomaticamente ordenadas por coleções ou outras classes.

A interface Comparable define um método que servira comoregra de ordenação das instancias da classe que a implementa.

int compareTo(Object o)

Um número negativo deve ser retornado caso o objeto estiverantes daquele passado como parâmetro, zero se forem iguais eum numero positivo, se estiver após.

Collections e Generics 15

A interface Comparator

Utilizada para definir uma regra diferente de ordenação entre dois objetos daquelasugerida pela interface Comparable. Por isto, define o método compare(Object o1,Object o2) retornando um valor inteiro, devendo ser positivo se o primeiro argumentofor maior do que o segundo, zero se os elementos forem considerados iguais, enegativo 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

Ordenando Arrays e Lists

Podemos empregar métodos definidos nas classes utilitárias java.utilArrays ejava.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 doselementos.

• void sort(Object[] array, Comparator comp): Ordena o array de acordo com a regraestabelecida 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 regraestabelecida no Comparator.

Collections e Generics 17

A interface java.util.Queue

Introduzida a partir do Java5, e é utilizada tipicamente para gerenciar objetos comouma fila seguindo o conceito FIFO(first-in, first-out). Ou seja, novos objetos sãoadicionados no fim da fila, e objetos removidos são tomados no inicio. Além dosmétodos básicos da interface Collection, a interface Queue também oferece métodosadicionais 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

Principais implementações de java.util.Queue

• java.util.PriorityQueue;

– Funciona como uma lista ordenada que aceita objetosduplicados. .

• java.util.Deque;

– Possui características de uma fila, podem ela suporta ainserção e remoção dos objetos no final da fila.

• java.util.ArrayDeque;

– Utiliza como uma estrutura de dados interna um array. Otamanho do array é alterado em tempo de execução deacordo com a necessidade da lista.

Collections e Generics19

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 emtodos 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

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

Principais implementações de java.util.Map

• java.util.HashMapImplementaçã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 paraHashMap é 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ãoordenadas em ordem ascendente, de acordo coma ordem natural dos elementos, ouentão, por um objeto do tipo Comparator passo como parâmetro na construção doTreeMap.

Collections e Generics22

Java Database Conectivity(JDBC)

Esta API é utilizada para facilitar o acesso a bancos de dados relacionais a partir deaplicações Java. Por meio de JDBC, é possível realizar instruções SQL(Structured Querylanguage) num banco de dados relacional para gravar, alterar ou ler dadosmanipuladores pelo programa Java.

Collections e Generics23

Driver JDBCO driver JDBC é um conjunto de classe Java que tem a habilidade de se comunicar com obanco 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 umservidor proprietário que se comunica com o banco de dados.

Tipo 4 – 100% Java, o driver foi totalmente implementado em Java.

Collections e Generics24

Driver Oracle

A oracle assim como outras fabricantes de banco de dados distribui o driver paraacesso 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 Generics25

Obtendo uma Conexão

Em se tratando de JDBC todas classes utilizadaspertencem 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 Generics26

Fechando a ConexãoDe um modo geral, é recomendável fechar a conexão no blocofinally, 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 Generics27

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 Generics28

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 Generics29

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 Generics30

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 Generics31

Fim da Quinta Aula

Acabou !