Programação Java

Embed Size (px)

Citation preview

Programao Java em Ambiente Distribudonfase no Mapeamento Objeto-Relacional com JPA, EJB e HibernateDouglas Rocha MendesNovatec

Copyright 2011 da Novatec Editora Ltda. Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. proibida a reproduo desta obra, mesmo parcial, por qualquer processo, sem prvia autorizao, por escrito, do autor e da Editora. Editor: Rubens Prates Reviso gramatical: Marta Almeida de S Capa: Victor Bittow Editorao eletrnica: Camila Kuwabata e Carolina Kuwabata ISBN: 978-85-7522-262-1 Histrico de impresses: Outubro/2011 Primeira edio Novatec Editora Ltda. Rua Lus Antnio dos Santos 110 02460-000 So Paulo, SP Brasil Tel.: +55 11 2959-6529 Fax: +55 11 2950-8869 E-mail: [email protected] Site: www.novatec.com.br Twitter: twitter.com/novateceditora Facebook: facebook.com/novatec LinkedIn: linkedin.com/in/novatec Dados Internacionais de Catalogao na Publicao (CIP) (Cmara Brasileira do Livro, SP, Brasil) Mendes, Douglas Rocha Programao Java em ambiente distribudo : nfase no mapeamento objeto-relacional com JPA, EJB e Hibernate / Douglas Rocha Mendes. -- So Paulo : Novatec Editora, 2011. ISBN 978-85-7522-262-1 1. Anlise de sistemas 2. Java (Linguagem de programao) 3. Sistemas distribudos - Desenvolvimento I. Ttulo. 11-07649 CDD-005.133 ndices para catlogo sistemtico: 1. Java : Linguagem de programao : Computadores : Processamento de dados 005.133 OGF20111003

1 captulo Framework collectionO captulo 1 aborda o framework collection, responsvel por oferecer um conjunto muito rico de estruturas de dados teis ao desenvolvimento de programas Java que efetuam acesso a bancos de dados. Neste captulo, analisaremos as principais interfaces envolvidas no framework, tais como:Collection

,Map

,Set

,SortedSet

,List

,Queue , SortedMap

,Iterator

,Iterable

,Comparator

eComparable

. Tambm descreveremos com exemplos as principais classes envolvidas, tais como:ArrayList

,Hashtable

,LinkedList

,

Vector , Stack

,HashMap

,LinkedHashMap

,TreeMap

,HashSet

,LinkedHashSet

eTreeSet

.

1.1 IntroduoUma coleo (collection) agrupa objetos de diferentes tipos e pode ser implementada de duas formas. A primeira se refere s colees que estendem ou implementam a interfaceCollection

, e a segunda, as colees que implementam ou estendem a interfaceMap

. Em Java, utilizamos a palavra reservadaextends

para formalizar que uma interface ou classe estende outra e utilizamos a palavra reservada implements para formalizar que uma classe ou interface implementa outra. importante observar que ambas as interfaces (Collection

) tm uma estrutura de implementao independente, ou seja, o formato para adio e acesso aos objetos podem ser diferentes. A figura 1.1 apresenta um exemplo das principais interfaces envolvidas no framework collection. Conforme podemos observar na figura 1.1, identificamos que a interface Collection tem duas subinterfaces, conhecidas porSet

eMap

. Essas duas interfaces geram colees com diferentes caractersticas. Ou seja, caso seja criada uma coleo do tipo da interfaceSet

eList

, precisamos saber que no ser permitido adicionar objetos duplicados nessa coleo. Entretanto, quando a coleo for do tipo da interfaceList

, a adio de objetos duplicados passa a ser possvel. Porm, importante observar que ambas as interfaces definem os mesmos mtodos para adio ou seleo. Na18

19 Captulo 1 Framework collection

seo 1.3.2, abordaremos a interfaceSet

, e na seo 1.3.7, iremos apresentar detalhes da interfaceList

.Figura 1.1 Hierarquia das principais interfaces do framework collection.

Paralelamente interfaceCollection

, temos a interfaceMap

. Uma coleo que imple- mente a interfaceMap

representa uma estrutura de dados na qual para cada objeto adicionado teremos uma chave associada. Assim, para recuperar o objeto adicionado, utilizaremos a chave como mecanismo de pesquisa (no caso da interfaceCollection

, utilizamos ndices). Como exemplo do uso de um objeto do tipo da interfaceMap

, temos uma listagem de alunos em uma turma, sendo que a chave o nmero na lista de chamada e o objeto adicionado uma string que contm o nome do aluno. A seguir, apresentaremos as vantagens de se usar o framework Collection.

1.2 Vantagens de se usar o framework collectionUm framework representa uma aplicao reutilizvel e semicompleta que pode ser especializada para produzir aplicaes personalizadas. O framework collection ofere- ce um conjunto de interfaces e classes que podero ser reutilizadas e especializadas para a representao e a manipulao de objetos que representam vetores dinmicos em Java. Todos os algoritmos disponveis no framework collection e representados pelas suas classes concretas foram desenvolvidos com base na eficincia, nos padres de qualidade e nas melhores prticas. A seguir, apresentaremos algumas das vantagens de se usar o framework collection: Reduo do esforo em programao, pois o framework oferece um conjunto de algoritmos eficientes, prontos para serem utilizados e reutilizados.

(Ex.:

). No captulo 2, abordaremos detalhadamente esse importante conceito presente no JSE a partir da verso 1.5.

Programa 01.01

1 package modulo11; 2 import java.util.ArrayList; 3 import java.util.Collection; 4 import java.util.List; 5 public class ExemploDefinicaoCollection { 6 public static void main(String args[]) { 7 Collection obj = new ArrayList(); 8 obj.add("Programao Java com nfase em Orientao a Objetos."); 9 /* Esta prxima linha gera erro de compilao. 10 O tipo definido da coleo s permite adicionar Strings. */

23 Captulo 1 Framework collection11 // obj.add(100); 12 System.out.println("Acessando objeto: " + ((List )obj).get(0)); 13 } 14 }

Na linha 7 do programa 01.01 criamos um objeto do tipo da interfaceCollection

, porm esse objeto recebe uma referncia do tipo da classeArrayList

. Isso possvel, pois a classeArrayList

implementa a interfaceList

que estende a interfaceCollection

. A figura 1.2 apresenta a hierarquia das interfaces e classes presentes no framework collection, sendo que a interfaceCollection

est presente no topo dessa hierarquia. importante observar que no programa 01.01 definimos que o objetoobj

somente permite adicionar objetos do tipoString

. Essa formalizao ocorreu utilizando o conceito de tipos genricos (tipos parametrizados) (Ex.:

). Todas as interfaces presentes no framework collection so genricas, ou seja, implementam o conceito Genricos, inserido a partir do JSE 1.5, que ser abordado no captulo 2. Na linha 8 do programa 01.01, adicionamos um objeto do tipo da classeString

no objetoobj

por meio do mtodoadd()

. Esse procedimento funcionar sem problemas, pois a interfaceCollection

define esse mtodo. Em seguida, na linha 11, tentamos realizar a adio de um objeto do tipo primitivoint

no objetoobj

. Comoobj

foi criado para receber somente objetos do tipoString

, o compilador Java apresentar um erro de compilao. Para remover esse erro a linha 11 ficou comentada, porm, se o leitor retirar o comentrio, perceber que um erro de compilao ser apresen- tado. Esse erro ocorreu em consequncia de termos definido o objetoobj

como um tipo genrico que s aceita que sejam adicionados objetos do tipoString

. Conforme comentado, no captulo 2, descreveremos os genricos. importante observar que o vetor representado pelo objetoobj

dinmico, ou seja, podemos adicionar inmeras strings sem nos preocupar com a alocao de memria, que ocorrer de forma dinmica. Na linha 12, realizamos a recuperao da string adicionada pela linha 8. Porm, como a interfaceCollection

no define o mtodoget()

, tivemos que utilizar down- casting para a interfaceList

que o define. Caso no seja realizado o downcasting, um erro de compilao ser gerado. Isso ocorre pelo fato de o mtodoget()

ser uma particularidade das classes que implementamList

.

Interface Collection como mecanismo de transporteA interfaceCollection

est presente no topo da hierarquia das interfaces e represen- ta um grupo de interfaces. Por se posicionar no topo da hierarquia, essa pode ser utilizada para transportar objetos de diferentes implementaes entre mtodos. O programa 01.02 apresenta um exemplo da interfaceCollection

como meio de

Programao 24 Java em Ambiente Distribudo transportar objetos de classes concretas. Esse tipo de uso torna-se possvel em Java, graas aos conceitos de herana e polimorfismo.

Programa 01.021 package modulo11; 2 import java.util.ArrayList; 3 import java.util.Collection; 4 import java.util.HashSet; 5 import java.util.Iterator; 6 public class ExemploDefinicaoCollectionParametro { 7 public static void main(String args[]) { 8 Collection obj = new ArrayList(); 9 alteraCollection(obj, "Livro de Programao Java com nfase em OO"); 10 Collection obj1 = new HashSet(); 11 alteraCollection(obj1, "Redes de Computadores Teoria e Prtica"); 12 listaCollection(obj); 13 listaCollection(obj1); 14 } 15 /* O mtodo alteraCollection() recebe ora um objeto do tipo da classe 16 ArrayList ora um objeto do tipo da classe concreta LinkedList. Por fim 17 realiza a adio do objeto recebido como parmetro em obj que do tipo 18 da interface Collection. */ 19 static void alteraCollection(Collection obj, String str) { 20 obj.add(str); 21 } 22 static void listaCollection(Collection obj) { 23 Iterator it = obj.iterator(); 24 while (it.hasNext()) { 25 System.out.println("Recuperando: " + it.next()); 26 } 27 } 28 }

Resultado da execuo do programa:Recuperando: Livro de Programao Java com nfase em OO Recuperando: Redes de Computadores Teoria e Prtica

Na linha 8 do programa 01.02 criamos o objetoobj

do tipoCollection

, porm, rece- bendo um objeto do tipo da classeArrayList

. Conforme comentado, isso possvel porque a classeArrayList

implementa a interfaceList

. Tambm formalizamos que apenas ser possvel adicionar objetos do tipoString

utilizando tipos genricos. O mesmo foi feito com o objetoobj1

(linha 10), que recebeu um objeto do tipo da classeHashSet

. Nas linhas 9 e 11, foram executados o mtodoalteraCollection()

, o qual recebe dois parmetros, sendo o primeiro do tipoCollection

e o segundo do tipo

String

. Como as classes concretasArrayList

eHashSet

implementam interfaces (List

eSet

, respectivamente) que estendem a interfaceCollection

, o compilador Java compilar o programa sem problemas.

25 Captulo 1 Framework collection

Na linha 19, percebemos que a assinatura do mtodoalteraCollection()

define que o primeiro parmetro do tipoCollection

, e o segundo, do tipoString

, conforme comentado. Dessa forma, como ambas as classesArrayList

eHashSet

implementam o mtodoadd()

, o compilador Java no reportar erro e o programa funcionar corretamente. importante observar que apesar de as classes implementarem o mtodoadd()

, os algoritmos utilizados na codificao so diferentes. Abordaremos as classes concretasArrayList

eHashSet

como tambm outras classes do framework collection ainda neste captulo. A figura 1.2 apresenta algumas das classes e interfaces que estendem e implementam a interfaceCollection

. Na linha 22, definimos o mtodolistaCollection()

, que tem a funo de imprimir na tela o contedo da coleo recebida como parmetro. Como a interfaceCollection

tem como subinterfaces as interfacesList

eSet

, nenhum erro de compilao ser gerado. Porm a interfaceCollection

no define o mtodoget()

, e por isso, para navegar entre os objetos das colees recebidas como parmetro, foi necessrio usar iteradores. importante observar que a interfaceSet

tambm no define o mtodoget()

, e por isso a nica forma possvel para navegar em uma coleo, seja ela do tipoList

ouSet

, por meio de iteradores. Conforme podemos observar na linha 23 do programa 01.02, a interface Collection implementa iteradores por meio da interfaceIterator

. Dessa forma, foi possvel apresentar o contedo de duas colees distintas em um nico mtodo. Na seo 1.4.2, apresentaremos mais detalhes sobre iteradores. importante observar que se os mtodoslistaCollection()

ealteraCollection()

no utilizassem a interface Collection como tipo do parmetro de entrada no seria possvel reutilizar tais mtodos rece- bendo parmetros dos tipos das classesArrayList

eHashSet

. A seguir, apresentaremos a interfaceSet

.

1.3.2 Interface SetA interfaceSet

estende a interfaceCollection

e define uma coleo que no permite a incluso de nenhum objeto duplicado. Ou seja, ser ignorada a adio de um objeto caso outro objeto equivalente j exista na coleo. Por objetos equivalentes, entendam-se objetos que tenham o mesmo cdigo hash (retornado pelo mtodohashCode()

) e que retornem verdadeiros na comparao feita pelo mtodoequals()

. Os programas 01.03 e 01.04 apresentam um exemplo do uso da interfaceSet

e dos mtodos sobrecarregadosequals()

ehashCode()

.