0% acharam este documento útil (0 voto)
22 visualizações36 páginas

Easy Java Magazine: Edição Inaugural

A Easy Java Magazine é uma nova publicação digital que visa oferecer conteúdo acessível sobre Java para todos os níveis de conhecimento. A primeira edição inclui artigos sobre manipulação de texto, a história do Java, programação orientada a objetos e o uso de collections. O objetivo é proporcionar aprendizado e atualização contínua para desenvolvedores interessados na linguagem Java.

Enviado por

Aldemir Queiroz
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
22 visualizações36 páginas

Easy Java Magazine: Edição Inaugural

A Easy Java Magazine é uma nova publicação digital que visa oferecer conteúdo acessível sobre Java para todos os níveis de conhecimento. A primeira edição inclui artigos sobre manipulação de texto, a história do Java, programação orientada a objetos e o uso de collections. O objetivo é proporcionar aprendizado e atualização contínua para desenvolvedores interessados na linguagem Java.

Enviado por

Aldemir Queiroz
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

Sumário

Olá, eu sou o DevMan! Desta página em diante, eu estarei lhe


ajudando a compreender com ainda mais facilidade o conte-
údo desta edição. Será um prazer contar com sua companhia!
Confira abaixo o que teremos nesta revista:

05 – Trabalhando com texto em Java


Core, Tutorial Conhecendo as classes String, StringBuffer e StringBuilder
[ Michel de Lara ]

12 – A História da Tecnologia Java


Core A trajetória de uma das mais bem sucedidas plataformas de desenvolvimento do mundo
[ Bruno Souza, Fabiane Bizinella Nardon e Serge Rehem

20 – Programação orientada a objetos com Java


Core Aprendendo a programar em Java – Primeiros passos
[ Adam Victor Nazareth Brandizzi ]

28 – Utilizando Collections
Tutorial, Boas Práticas Dominando as estruturas de dados em Java
[ Carlos Araújo ]

[Tutorial] Artigo no estilo tutorial passo-a-passo. [Core] Técnicas Server-side, ferramentas, IDEs, e outros assuntos [Boas Práticas] Um dos objetivos da revista é levar para o leitor
que fogem às demais categorias. não somente as melhores técnicas, mas também as melhores prá-
ticas de desenvolvimento, orientadas ao aumento da qualidade e
produtividade.
Editorial
Ano I • Edição 01 • 2010

É
com grande prazer que anunciamos mais uma grande novidade para a comunidade
Java. Após ampliarmos a Java Magazine e lançarmos a primeira revista sobre Java
totalmente digital, apresentamos agora a Easy Java Magazine. Uma revista que nasce
Edição com todos os cuidados das revistas DevMedia, como já acontece com a Clube Delphi, Java
Editor Magazine, SQL Magazine, .Net Magazine, WebMobile, Engenharia de Software Magazine,
Eduardo Spínola (eduspinola@[Link]) e a também recente Easy .Net Magazine.
O nosso objetivo, como sempre, é de oferecer um excelente conteúdo para todos aqueles
Arte
interessados em aprender, independentemente do seu nível de conhecimento. E foi pensando
Capa e Diagramação Romulo Araujo (romulo@[Link])
nisso, que resolvemos lançar a Easy Java Magazine.
Produção Uma das nossas grandes dificuldades sempre foi conciliar edições com artigos para os
Gerência de Marketing Kaline Dolabella (kalined@[Link]) diferentes leitores, sejam eles: iniciantes, intermediários ou avançados. Com esta novidade,
Jornalista Responsável Kaline Dolabella - JP24185
disponibilizamos um amplo espaço para todos os leitores que estão dando seus primeiros
Revisão e Supervisão Thiago Vincenzo ([Link]@[Link])
passos na linguagem de programação mais utilizada no mundo e para os leitores, que
Coordenação Geral Daniella Costa (daniella@[Link])
mesmo já experientes, gostam de se manter atualizados com matérias mais introdutórias,
Atendimento ao leitor mas não menos importantes.
A DevMedia possui uma Central de Atendimento on-line, onde você pode Após esta breve introdução, que tal conhecermos os artigos desta edição?
tirar suas dúvidas sobre serviços, enviar críticas e sugestões e falar com um de
Não poderíamos iniciar esta revista de outra forma que não fosse apresentando a História
nossos atendentes. Através da nossa central também é possível alterar dados
cadastrais, consultar o status de assinaturas e conferir a data de envio de suas do Java. Para isso, convidamos três nomes que se você ainda não conhece, encontrará em
revistas. Acesse [Link]/central, ou se preferir entre em artigos e muito provavelmente conhecerá em eventos Java, são eles: Bruno Souza (também
contato conosco através do telefone 21 3382-5038. conhecido como Javaman), Fabiane Nardon (líder da JavaTools Community do [Link]) e
Publicidade Sérgio Rehem (líder do Java Bahia). Conhecer o passado te ajudará a compreender o presente
Cristiany Queiroz e se preparar para o futuro.
publicidade@[Link] – 21 3382-5038 O segundo artigo aborda os primeiros passos para dominar a linguagem de programação.

Anúncios – Anunciando nas publicações e nos sites do Grupo DevMedia, você Em Programação orientada a objetos com Java, Adam Victor nos ensinará como se estruturam
divulga sua marca ou produto para mais de 100 mil desenvolvedores de todo o os programas Java e desenvolveremos a nossa primeira aplicação. Para completar este artigo,
Brasil, em mais de 200 cidades. Solicite nossos Media Kits, com detalhes sobre veja o vídeo que ensina mais alguns recursos importantes da linguagem.
preços e formatos de anúncios.
Trabalhar com texto em Java é considerado por muitos um bom desafio. Para facilitar esta
tarefa, na matéria elaborada por Michel de Lara, conheça as classes String, StringBuffer e
StringBuilder e saiba em detalhes e na prática qual a melhor situação para empregar cada
uma. No vídeo deste artigo, veja mais exemplos de uso destas classes.
Para finalizar esta edição, exploraremos um dos mais importantes recursos do Java, as
collections, artigo escrito por Carlos Araújo. Aprenda o que são Collections, quais os seus
elementos e como utilizá-las adequadamente nas suas aplicações. Na vídeo aula deste artigo,
veremos as principais coleções e algumas boas práticas.
Deste modo finalizamos a primeira edição da Easy Java. Se você quiser apresentar elogios,
críticas e sugestões, é só entrar em contato.

Seja bem-vindo à Easy Java Magazine!


Boa leitura e até a próxima!

Fale com o Editor!


É muito importante para a equipe saber o um artigo na revista ou no site Easy Java
que você está achando da revista: que tipo Magazine, entre em contato com o editor,
de artigo você gostaria de ler, que artigo você informando o título e mini-resumo do tema
mais gostou e qual artigo você menos gostou. que você gostaria de publicar:
Fique a vontade para entrar em contato com
os editores e dar a sua sugestão! Eduardo Spínola - Editor da Revista
Se você estiver interessado em publicar eduspinola@[Link]
Eduardo Oliveira Spínola
eduspinola@[Link]
[Link]/Java_Magazine
Trabalhando com texto em Java

1 String s = “arara”;
• Linha 10: Aqui uma String vazia é criada cessário, a classe String oferece o suporte 2 s = [Link](‘a’,’e’); // recebendo um char
utilizando-se o mesmo mecanismo de necessário para operações envolvendo como parâmetro
3 [Link](s);
“atalho” que foi demonstrado na linha texto: quebrá-lo em várias partes, fazer
8, só que o conteúdo para o qual aponta busca de determinado conteúdo, conver- A saída na linha 3 será “erere”.
a variável minhaString4 é uma String vazia. ter a String em bytes, verificar se o texto
Pode-se dizer que, com relação ao conte- começa ou termina com um dado conjun- public String trim()
údo, as linhas 6 e 10 fazem a mesma coisa: to de caracteres, comparar se uma String é O método trim() retorna uma String sem os
criam uma String vazia; igual à outra (o método equals() é definido espaços em branco no começo e no final
• Linhas 12 e 13: Como já foi comentado na classe Object), dentre outros. da mesma. É útil quando se trabalha com
neste artigo, a classe String possui diversos preenchimento de formulários. Antes de
construtores. Não cabe aqui tentarmos public String replace(CharSequence target, salvar no banco de dados as informações
demonstrar a utilização de cada um deles. CharSequence replacement) preenchidas pelo usuário na tela, pode-
Estas duas linhas demonstram mais um O método replace() faz a substituição de se chamar o método trim() em todos os
exemplo de como podemos criar objetos um determinado conjunto de caracteres campos texto preenchidos pelo operador,
String a partir de outros objetos passados por outro, retornando uma nova String. de modo a evitar que espaços em branco
como parâmetro no construtor. A vari- Um exemplo de sua utilização pode desnecessários sejam gravados, econo-
ável minhaString5 tem o mesmo conteúdo ser visto em fóruns de discussão, onde mizando espaço no banco de dados. O
das variáveis minhaString1, minhaString2 e os administradores criam uma lista de código abaixo exemplifica a utilização do
minhaString3, porém foi inicializada de uma palavras de baixo calão que não podem método trim():
maneira diferente das demais, recebendo ser publicadas. Caso alguém escreva tais
um array de char. palavras, elas serão automaticamente 1 String s = “ Java Magazine “;
2 s = [Link]();
substituídas por outras, após uma busca
Estes são alguns modos de se declarar adequada (que pode ser feita utilizando o Após a execução do comando na linha
e atribuir valor às variáveis do tipo String. método contains(), explicado mais adiante). 2, a variável de referência s apontará para
Agora veremos alguns dos métodos utili- Vejamos o código abaixo: a nova String criada sem os espaços que
zados para se manipular o conteúdo destas existiam na linha 1 (“Java Magazine”).
variáveis. 1 String s = “Este comentário foi péssimo!”; Todavia, como pode ser observado, o
2 s = [Link](“péssimo”,”ruim”);
3 [Link](s); espaço em branco do meio da palavra não
Métodos úteis da classe String foi removido.
Para se trabalhar com texto, a classe String A saída na linha 3 será “Este comen-
oferece diversos métodos utilitários. Por tário foi ruim!”. O método replace() é public boolean contains(CharSequence s)
questões de espaço, não serão descritos Case Sensitive, ou seja, faz diferenciação O método contains() não tem como retorno
todos aqui. Vamos apenas comentar aque- entre maiúsculas e minúsculas. Por- uma nova String, mas sim um boolean. Ele
les que são mais utilizados no dia-a-dia do tanto, se na linha 2 estivesse escrito s = avalia se a String original contém a String
programador. Logicamente, dependendo [Link](“Péssimo”,“ruim”) nada seria alterado passada como parâmetro para o méto-
do sistema que esteja sendo desenvolvido, e a frase inicial seria impressa na saída do. Este método pode ser utilizado para
alguns métodos serão mais utilizados que padrão. Também é válido lembrar que verificar, por exemplo, se determinado
outros, mas independente do que seja ne- o método replace() busca todas as ocor- nome está na lista de aprovados de um
rências do primeiro parâmetro e realiza concurso público ou vestibular. Ou ainda,
a substituição pelo segundo. Perceba o se um dado específico foi recebido em
Listagem 1. Maneiras de declarar e inicializar Strings que acontece com a busca na próxima uma mensagem enviada por outro sistema
1 package principal; sentença: para realizar validação. As linhas abaixo
2 demonstram uma utilização do método
3 public class ClassePrincipal { 1 String s = “Gosto de comer frango com batata. contains():
4 Não gosto de batata frita.”;
5 public static void main(String[] args) { 2 s = [Link](“batata”,”polenta”);
6 String minhaString1 = new String(); 3 [Link](s); 1 String s = “001MARCOS PAULO M19803112”;
7 minhaString1 = “Java”; 2 [Link]([Link](“MARCOS”));
Aqui a impressão será “Gosto de comer
8 String minhaString2 = “Java”;
9 String minhaString3 = new String(“Java”); frango com polenta. Não gosto de comer Um detalhe interessante é que o método
10 String minhaString4 = “”; polenta frita.” contains() também é Case Sensitive. No caso
11
Por fim, o método replace() é sobrecarrega- do código acima, o resultado será true,
12 char[ ] meusChars = new char[] {‘J’,’a’,’v’,’a’};
13 String minhaString5 = new String(meusChars); do e pode receber apenas um caractere (do porém, se a String passada como parâmetro
14 } tipo primitivo char) como parâmetro para estivesse escrita “Marcos”, o resultado
15 }
que seja feita a substituição. Exemplo: seria false.

6 Easy Java Magazine • Edição 01


public int length() [Link]([Link]()) a saída seria ção em Java.
O método lengh() retorna um int indicando “jonny debruce”. A Tabela 2 apresenta uma descrição su-
o tamanho da String, ou seja, a quantidade cinta de outros métodos úteis presentes
de caracteres que há na String atual. É co- public String substring(int beginIndex) na classe String.
mum ser utilizado em loops for e blocos de O método substring() retorna uma parte Até o momento vimos o que fazer para
condição if. O trecho a seguir demonstra a do texto original a partir do índice especi- criar Strings e também como manipular
aplicação deste método: ficado. Ele recebe como parâmetro um int seu conteúdo, agora vamos analisar
que indica o ponto de partida (iniciado em uma das particularidades das Strings: a
1 [Link](“ Java “.length()); zero) pelo qual se deve iniciar a pesquisa. imutabilidade.
A linha 1 imprimirá “6”, que é a quanti- A partir deste índice o método copia tudo
dade de caracteres contida na String “ Java que estiver até o final da palavra. Há outra Como são criados objetos da classe
” (aqui o método foi invocado diretamente implementação deste método que recebe String
na instância da classe, sem a utilização de um índice para indicar o término da pes- Certamente você já ouviu uma frase
uma variável de referência). Perceba que os quisa, mas ele não será abordado aqui. O parecida com esta: “Strings são imutáveis,
espaços em branco também são conside- método substring() pode ser útil para fazer seu valor nunca poderá ser alterado”.
rados como caracteres. Se fizéssemos uma buscas em Strings e capturar determinadas Certo... vários artigos e livros falam da
chamada ao método trim() encadeado com informações, por exemplo: imutabilidade das Strings, mas o que isso
length(), da forma “ Java ”.trim().length(), a linha significa na prática? O que isso influencia
1 exibiria o valor “4” na saída padrão. 1 String s = “Universidade”; no meu código e como eu posso tirar
2 [Link]([Link](7));
proveito disso? Vamos tentar responder a
public String toUpperCase() Como o índice da String inicia em zero, a estas questões. Por exemplo, quando você
O método toUpperCase() retorna uma nova saída do comando será “idade”. Note que escreve uma linha de código parecida
String com o mesmo conteúdo da original, o caractere que estiver ocupando a posição com esta:
só que com todos os caracteres em letras do índice inicial de pesquisa também será
maiúsculas. Assim como o método trim(), incluído na String de resultado. A Tabela 1 String s = “Java”;

toUpperCase() também pode ser utilizado antes demonstra o funcionamento do método


de salvar dados de um formulário na base para a palavra “Universidade”. O que acontece na prática é:
de dados. Como as pessoas não possuem Os métodos apresentados aqui são ape- 1. Uma nova String com o valor “Java”
o mesmo padrão de digitação (algumas nas alguns dos muitos presentes na classe é criada no pool de Strings (em breve
digitam todo o texto em minúsculo, Outras String. Porém, sabendo-se trabalhar com falaremos sobre pool de Strings);
Começam Todas As Palavras De Uma Frase os que já foram citados é possível realizar 2. A variável de referência s aponta para
Com Letras Maiúsculas, E HÁ TAMBÉM muitas tarefas do cotidiano da programa- o valor criado.
AQUELAS QUE ESQUECEM O CAPS
LOCK LIGADO), o método toUpperCase() pode Palavra U N I V E R S I D A D E
ser a solução para este problema, salvando Índice 0 1 2 3 4 5 6 7 8 9 10 11
todos os dados do cliente em letra maiúscula.
Veja um exemplo abaixo: Tabela 1. Caracteres da String “Universidade” copiados pelo método substring()

Método Descrição
1 String s1 = “rodolfo rodrigues”;
2 String s2 = “Alfredo Augusto”; public char charAt(int index) Retorna o caractere que estiver na posição do índice passado
3 String s3 = “JONNY DEBRUCE”; como parâmetro (iniciado em zero).
4 [Link]([Link]()); public String concat(String str) Retorna a junção da String na qual o método está sendo cha-
5 [Link]([Link]());
mado adicionando ao seu final a String passada por parâmetro
6 [Link]([Link]());
(“str”).
A saída será, respectivamente: public int indexOf(int ch) Tem função inversa ao charAt(): retorna a posição (índice) em
RODOLFO RODRIGUES que se encontra na String o caractere pesquisado.
ALFREDO AUGUSTO
public boolean startsWith(String prefix) Retorna true se a String iniciar com o valor passado como parâ-
JONNY DEBRUCE
metro (Case Sensitive). Caso contrário, retorna false.

Existe ainda o método toLowerCase(), o “ir- public boolean endsWith(String suffix) Mesmo funcionamento do startsWith(), só que verificando o
final da String na qual o método foi invocado.
mão menor” do método toUpperCase(), porém
menos utilizado. Ele também retorna uma public boolean equalsIgnoreCase(String Compara se duas Strings são iguais. Para que isso ocorra, é
anotherString) necessário que elas tenham o mesmo comprimento e os carac-
nova String com o mesmo conteúdo da origi- teres correspondentes nas duas sequências sejam os mesmos,
nal, mas com todos os caracteres em letras independente se maiúsculos ou minúsculos.
minúsculas. Se na linha 6 estivesse escrito Tabela 2. Outros métodos úteis presentes na classe String

Edição 01 • Easy Java Magazine 7


• Linha 5: Novamente uma String é criada cio bastante comum que é a criação de alterados após sua criação. Entretanto,
no pool, como resultado da execução do constantes (variáveis declaradas como em alguns momentos necessitamos fazer
método replace(): “Meu nome sempre foi public static final). Com as constantes, as várias modificações em uma mesma String.
”. Esta nova String é associada à variável Strings já são criadas no pool e podem ser Para estes casos, as classes StringBuffer e
de referência s4. Vale a pena ressaltar que reutilizadas em várias partes do código, StringBuilder auxiliam na manipulação de
as variáveis s1 e s3 ainda fazem referência diminuindo assim a criação de objetos Strings sem a criação de vários objetos na
à String “Meu nome era ”. Se a String refe- desnecessários. Elas dificilmente serão memória e, agora sim, alterando o mesmo
renciada por s1 tivesse sido alterada na elegíveis para serem coletadas pelo Garbage objeto diversas vezes. Ambas as classes
linha 9, o resultado da linha 10 não seria o Collector, pois sempre haverá uma variável têm o mesmo propósito: trabalhar com
esperado, pois como s3 também referencia referenciando-a. Segue um exemplo de objetos de texto que podem ser alterados.
a mesma String, o método replace() não teria declaração de uma constante: No entanto, há uma diferença importante
feito nenhuma alteração. Há também a entre elas (além da classe StringBuilder estar
criação da String “sempre foi” no pool; public static final String nomeDaEmpresa = “Info disponível apenas a partir da versão 1.5 do
Telecom LTDA.”;
• Linha 6: Vemos aqui um exemplo de como JDK), a sincronização.
o Java oferece a sobrecarga do operador “+” Foi comentado na seção “Como utilizar A classe StringBuffer é considerada uma
para manipulação de Strings. A variável s3 Strings em Java” que a classe String apre- “classe sincronizada”, ou seja, possui seus
recebe a concatenação (junção) das Strings senta uma particularidade interessante na métodos sincronizados (somente uma
referenciadas por s4 e s2. Esta é uma das criação de instâncias da sua classe. Duran- Thread pode acessar por vez). Sabemos
maneiras mais utilizadas para unir duas te a explicação dos métodos desta classe, os que não é possível declarar uma classe
ou mais Strings. O método concat() também exemplos demonstram a criação de Strings com o modificador de acesso syncronized,
faz concatenação de Strings, porém é menos sem a utilização do construtor e da palavra mas pode-se fazê-lo nos métodos, e é isso
utilizado pelo fato do operador “+” ser uma chave new. Este é um detalhe na criação de que a classe StringBuffer faz.
maneira mais rápida de fazê-lo; objetos que pode fazer grande diferença A explicação técnica sobre sincroniza-
• Linha 7: É impresso na saída padrão com relação ao consumo de memória da ção seria assunto para um artigo sobre
“Meu nome sempre foi Michel”. aplicação. Analisemos o código abaixo: “Threads”, mas basicamente podemos
dizer que métodos sincronizados são mais
String s = new String(“Java”);
Agora vamos entender quantas Strings “lentos” do que métodos não sincroniza-
foram criadas no pool de Strings: Nesta linha, acontece a criação de uma dos, visto que somente uma Thread pode
• Linha 1: Uma String “Meu nome era ”; String “Java” no pool de Strings e também executar cada método por vez. Assim, a
• Linha 2: Uma String “Michel”; um novo objeto String na memória comum, classe StringBuilder seria mais indicada por
• Linha 3: Nenhuma String é criada no pool, que será referenciado por s. Ou seja, sempre ter um melhor desempenho do que sua
pois a String na linha 1 é reutilizada; que é criada uma String através da palavra predecessora, para aplicações nas quais
• Linha 4: Atenção! Aqui são criadas três chave new, um novo objeto será criado na a velocidade da execução é importante. A
novas Strings: “era”, “é” e “Meu nome é ”. memória. A não ser que seja fundamental classe StringBuffer, por sua vez, é indicada
Porém, nenhuma delas é referenciada por para o seu código, procure evitar a criação para aplicações que envolvem utilização
qualquer variável; de Strings desta forma. de várias linhas de execução simultâneas
• Linha 5: Duas Strings novas são criadas: Durante a codificação, porém, pode ser (threads), como sistemas Web.
“sempre foi ” e “Meu nome sempre foi ”. necessária uma constante alteração de Analisemos o trecho de código que uti-
Esta última é atribuída à variável s4. A objetos String (para a criação de sentenças liza a classe StringBuilder:
String “era” já existe no pool e não será SQL, por exemplo). Com isso, se optar
criada novamente; por manipular as sentenças utilizando 1 String tabela = “funcionario”;
2 String orderBy = “ ORDER BY nome”;
• Linha 6: Mais uma String é criada no pool, objetos String, você poderá ter vários deles 3 StringBuilder sql = new StringBuilder
“Meu nome sempre foi Michel”. abandonados ao final da execução da (“SELECT cpf, nome “);
4 [Link](“FROM “);
consulta no pool. Para resolver este pro-
5 [Link](tabela);
Como pudemos observar, um total de blema, há outras duas classes que podem 6 [Link](“ WHERE sexo = ‘M’”).append(orderBy);
oito Strings foram criadas no pool, entre- ser usadas para se trabalhar com Strings
tanto algumas delas não são referenciadas sem que sejam criados vários objetos String Vejamos o que acontece a partir da linha 3.
por nenhuma variável e são elegíveis para desnecessários e ocupar menos memória: É criado um objeto StringBuilder e atribuído
serem coletadas pelo Garbage Collector StringBuffer e StringBuilder. à variável de referência sql. Nas linhas
(o funcionamento do Garbage Collector é seguintes, são feitas várias chamadas ao
assunto para outro artigo). StringBuffer e StringBuilder método append(), de modo que novos dados
Para aperfeiçoar a utilização das Strings, Conforme já descrevemos, Strings são são adicionados ao objeto criado. Perceba
uma boa prática é valer-se de um artifí- imutáveis: elas não têm seus valores que, ao contrário dos objetos String, o Strin-

Edição 01 • Easy Java Magazine 9


Michel de Lara Livros
[Link]@[Link]
É Tecnólogo em Informática pela Guia completo de estudos para certificação
UFPR com especialização em em Java, Philip Heller e Simon Roberts, Ed.
Tecnologia da Informação. Atualmente Ciência Moderna, 2004
cursa MBA Executivo em Gestão de Livro voltado para os estudos das cerificações
Projetos na ESIC-PR. Em TI, atua há aproximadamente SCJP e SCJD. Possui linguagem simples e acom-
5 anos, exercendo atividades de programação e análise panha um CD.
de sistemas orientados a objetos. Possui as certifica-
ções SCJA (96%) e SCJP 1.4 (93%)
Certificação Sun para programador & desen-
volvedor Java 2 (3ª Edição), Kathy Sierra e Bert
JavaDoc da Sun para a versão 1.4 da Bates, Ed. Alta Books, 2003
linguagem O livro mais indicado para estudos de certificação
[Link]/j2se/1.4.2/docs/api/java/lang/ para a versão 1.4 do Java. Também aborda SCJP
[Link] e SCJD. Contém vários exercícios desafiadores
e um conteúdo bem explicado. O livro é bas-
tante divertido de ler e não há problemas com
tradução.

Edição 01 • Easy Java Magazine 11


Os primeiros anos empresa e desenvolvedor tivesse acesso a Daniel de Oliveira
O lançamento do Java 1.1 incorporou fun- esses poderosos recursos.
Mauricio Leal, SouJava:“Há anos, eu programava em Clipper e
cionalidades importantes como JavaBeans O Java ME também foi adotado em massa
fazia sistemas extremamente complexos. Durante a Faculdade,
e JDBC, além de uma significativa melhora pelos fabricantes de telefones celulares, e
vi um artigo que me chamou a atenção, apresentando
na performance com os compiladores Just se expandiu para outros aparelhos, como
uma tecnologia revolucionária capaz de rodar em vários
In Time (JIT). A tecnologia Java ganhou PDAs, impressoras e hoje temos até uma
computadores chamada de Java. Imediatamente pedi para
maturidade e começamos a ver decisões caneta capaz de rodar aplicações Java. Só
meus colegas que tinham acesso à Internet na Faculdade
corporativas de uso da tecnologia Java nos aparelhos celulares, existem hoje mais
(naquela época, não havia acesso à Internet como hoje) e fiz o
em projetos como Banco do Brasil, Bank- de 2 bilhões de dispositivos compatíveis download do primeiro JDK 1.0.1.”
Boston, Baneb e muitos outros. Diversas com Java ME.
universidades em todo o mundo adotam
Fabio Velloso
a linguagem Java em seus currículos. O Java Community Process – JCP
JavaOne, evento mundial da tecnologia Em 1997, a Sun tentou padronizar a es- SouJava: “No início éramos muito questionados sobre
Java, que em sua primeira edição contava pecificação de Java através do comitê ISO/ performance, devo ter discutido esse assunto umas 500
com 6 mil desenvolvedores, se torna a IEC JTC1. Depois de muita discussão e vezes! Lembro-me de um projeto de desenvolvimento de
maior conferência de desenvolvedores do pedidos de esclarecimentos por parte dos um protocolo de criptografia para o BankBoston que foi
mundo e chega a ter 20 mil desenvolvedo- membros da ISO para aprovar a solicitação desenvolvido em C e assembler porque necessitávamos de
res presentes no Moscone Center em São feita pela Sun, a própria empresa decidiu performance. Com o lançamento da versão Java 1.1.8, que
Francisco, EUA. retirar sua solicitação e criar um comitê trouxe o BigInteger e o Just In Time (JIT) Compiler, fizemos
próprio, específico para atender as ne- uma nova implementação em Java, que era mais rápida que o
Java 2 cessidades da Tecnologia Java. Assim, em código em assembler. Nos últimos 15 anos implementei vários
Com o passar do tempo, a tecnologia 1998, nasceu o Java Community Process projetos de Internet Banking, processamento de CDR de alto
Java evoluiu de uma linguagem de pro- (JCP). O JCP foi criado com o objetivo de volume e outros que exigiam alto poder de processamento, e
gramação para uma grande família de ser um processo aberto e participativo para sempre com excelente performance. Hoje é divertido lembrar
tecnologias, todas baseadas na linguagem desenvolver e revisar as especificações da do tempo em que as discussões não se resumiam a existência
Java e no conceito multiplataforma. Em tecnologia Java, suas implementações de de foreach na linguagem”.
dezembro de 1998 era lançada a versão referência e suas suites de teste. A abertura
Serge Rehem
1.2 (codinome Playground) ou Java 2, do JCP permitiu com que mesmo empresas
como ficou mais conhecida. Foi quando concorrentes da Sun se tornassem partici- Serpro/JavaBahia: “Em 1997 trabalhava no Banco do Estado
a API gráfica multiplataforma Swing pantes ativas da evolução da Tecnologia da Bahia – Baneb e me envolvi com o projeto do Internet
incorporou-se ao núcleo. Também surgia Java. Diferentemente da maioria dos Banking, um wrapper para as telas do 3270. Trabalhei com
o largamente usado (e útil) framework de processos de padronização existentes, é JDBC e Applets, ambiente Visual Symantec Cafe (muito bom
coleções do Java. possível até mesmo participar como indi- para a época!). Saí do banco e fui para o Serpro, retomei o
O que mais chamou a atenção, no entan- víduo, sem representar uma organização, e contato com Java em 2000/2001 numa especialização, até
to, foi a divisão entre J2SE (Java 2 Platform, sem pagar nada. Isso fez do JCP um ponto participar do IRPF Java, conhecer Bruno Souza e entrar para o
Standard Edition), a base da plataforma, de atração para a discussão e evolução da JavaBahia. Isso mudou minha vida para valer!”
J2EE (Enterprise Edition) voltada para tecnologia Java.
aplicações corporativas e J2ME (Micro Com a criação do JCP, aumentou ainda Osvaldo Doederlein
Edition), uma versão reduzida, específica mais o interesse na tecnologia Java, pois ela
“No começo de carreira em 1996, trabalhando para a também
para pequenos aparelhos. O J2EE rapida- tinha se tornado uma tecnologia construí-
recém-criada Visionnaire, fui encarregado de examinar uma
mente se tornou a principal plataforma da pela comunidade de empresas interes-
nova linguagem da Sun, que parecia ‘quente’ devido ao
utilizada pelas grandes empresas do sadas em Java e não mais algo dominado
embutimento no Netscape. Baixei o JDK 1.0, e logo estávamos
mundo todo, pois pela primeira vez elas apenas pela Sun. Assim IBM, Oracle, JBoss
dando o primeiro curso de Java do Brasil, antes mesmo da
tinham uma tecnologia sólida, confiável e e outras 800 empresas entraram com força
Sun. Começamos a usar Java pra valer quando surgiram a
multiplataforma para criar suas aplicações no JCP e começaram a nascer diversas Java
JSP e Swing (adotando ambas desde os primeiros betas) e
empresariais, principalmente web. Em- Specification Requests (JSR). JSRs são os
implementações de CORBA que permitiam às GUIs feitas em
presas como IBM, BEA e Oracle lançaram documentos que descrevem formalmente
Java falar com programas C++... afinal, o Java era muito lento
seus servidores de aplicação Java EE (o as especificações da tecnologia Java. Hoje
para servidores. Depois do Java2 tudo mudou, o Java virou
“2” sairia oficialmente do nome em 2006). existem cerca de 350 JSRs que definem
campeão no servidor, entrou também no segmento móvel, por
Logo começaram a surgir servidores de desde APIs bem conhecidas, como JDBC e
outro lado o Java acabou virando o patinho feio dos desktops...
aplicação Open Source, como o JBoss e o JSPs, até APIs mais desconhecidas, como a
até o surgimento da JavaFX, que tem renovado meu interesse
Tomcat, que popularizaram ainda mais OSS Discovery API e a Pricing API.
por GUIs. Mas essa é uma nova história!”
a tecnologia, ao permitir que qualquer Uma curiosidade é que saiu do Brasil a

Edição 01 - Easy Java Magazine 15


A História da Tecnologia Java

Ulisses Telemaco primeira inscrição individual do JCP. A ting), e enums (espécie de lista ordenada
JEEBrasil/JavaBahia:“O ano era 1999, estava quase no meio da participação de um brasileiro era impor- de valores, muito usadas para especificar
minha graduação quando conheci de verdade Java. Comecei a tante para levar as discussões nacionais constantes do tipo numérico). Além des-
trabalhar na reescrita de dois grandes sistemas para a UFRN. para dentro do processo. Sendo assim, tas, uma sintaxe avançada da instrução
O primeiro foi desenvolvido em Applet e o segundo em JSP. Bruno Souza se cadastrou quando ainda for (uma espécie de for each) também foi
A satisfação em trabalhar com essa tecnologia foi tanta que era necessário pagar uma taxa de 100 incorporada, facilitando a iteração entre
em poucos dias (isso mesmo, dias!) nossa equipe teve a dólares. De acordo com Onno Kluyt, membros de coleção.
ideia de lançar o JSPBrasil. Era um projeto com o objetivo de responsável pelo JCP na época, Bruno foi A última versão estável da Plataforma
disponibilizar material didático sobre a tecnologia Java/JSP. O o primeiro e único a ter pago uma taxa Java é a Java SE 6 (codinome Mustang;
JSPBrasil evoluiu para J2EEBrasil e JEEBrasil. Minha satisfação para participar do JCP (cerca de um ano observe que a Sun retirou o “.0”), de de-
em trabalhar e contribuir para a comunidade continua a depois a cobrança foi abolida). Felizmente zembro de 2006. Ganhos significativos de
mesma (diria até que aumentou)”. não foi o único brasileiro a participar, e performance na JVM e no Swing foram
outros tiveram atuações importantes, os maiores benefícios. O Java SE 6 Update
Alexandre Gomes como Osvaldo Doederlein (colaborador da 10, de outubro de 2008, remodelou a ar-
Java Magazine desde a primeira edição), quitetura de Plug-ins (Applets passam a
SEA Tecnologia: “Comecei a programar em 1991, nos idos do
que participou das discussões do Java ter recursos semelhantes aos destinados
Logo, DBaseIII, Foxpro e Clipper. Em 96, entrei na faculdade
SE, Michael “MisterM Santos”, que con- a aplicações Java WebStart), o Swing ga-
e me apresentaram o Pascal e o C. No mesmo ano, no auge
tribuiu na especificação de Data e Tempo, nha um novo e mais moderno Look&Feel
da programação visual, resolvi aprender o badalado Delphi
e Yara Senger, cujo projeto exemplo de (o Nimbus) e surge o Java Kernel, um
(Dominando o Delphi 2 – Bíblia, Maco Cantu) e empaquei num
JSF foi incorporado à implementação de conjunto mais enxuto do Java Runtime
capítulo que tratava da tal Programação Orientada a Objetos.
referência. Environment (JRE), contendo as classes
Sem conseguir avançar muito, matriculei-me numa disciplina
mais comumente utilizadas deixando as
de mesmo nome que fora então oferecida na universidade e
Java 1.4, J2SE5, Java SE 6 outras para serem carregadas conforme a
fui apresentado à linguagem Java (Core Java 1st Ed). No ano
O Java 1.4 (codinome Merlin) foi a primei- demanda. No momento da escrita deste
seguinte, conheci o Bruno Souza em sua tradicionalíssima
ra versão que seguiu inteiramente o pro- artigo, o Update 20 (15 de abril de 2010)
palestra de apresentação da tecnologia, naquela que foi, se não
cesso do JCP, através da JSR 59. Liberada era o mais recente.
me engano, uma das primeiras reuniões do DFJUG. Nos 10 anos
em fevereiro de 2002, este importante mar-
seguintes, consolidei minha carreira sobre a plataforma da Sun.
co trouxe novidades como o Java WebStart JavaOne e Duke’s Award
Envolvi-me em vários projetos, participei de concursos, dei aulas,
(que permite baixar e executar aplicações Com o JavaOne se tornando cada vez
viajei, fui a muitos eventos, conheci profissionais brilhantes,
Desktop direto do navegador, com apenas mais importante, atraindo milhares de
trabalhei em ótimas empresas e até criei uma pra mim! Devo
muito à tecnologia do WORA, mas devo muito mais aos amigos
1 clique!), a nova palavra reservada assert, a desenvolvedores a cada ano, a Sun de-
que construí nesta vibrante comunidade. A propósito, o livro de
incorporação de parser XML e processador cidiu criar um prêmio para os melhores
Delphi continua marcado no capítulo de POO até hoje e nunca
XSL (JAXP), extensões de criptografia e se- projetos Java do ano, para ser entregue
mais foi aberto. Está aqui para doações (:-P ” gurança (JCE, JSSE, JAAS), encadeamento em grande estilo durante o JavaOne. E
de exceções e remodelagem das expressões assim nasceu o Duke’s Choice Award.
regulares. Era um novo ânimo para os Simbolizado por um pequeno troféu
Yara Senger desenvolvedores, pois desde 1998 nem na forma do mascote Duke, o prêmio
Globalcode: “Quando eu estava no meio do curso de a plataforma nem a linguagem tinham passou a ser ambicionado por todos
Ciências da Computação, me apaixonando por Java, sofrido grandes evoluções (a versão 1.3 os desenvolvedores Java. E mais uma
estudando Applets (final de 1999, início de 2000), um – codinome Kestrel, de 2000 – trouxe, por vez o Brasil teve destaque, ganhando
amigo veterano começava a orientação científica com exemplo, o Java Sound e o Java Platform três Dukes: em 2003, com o projeto do
uma tecnologia sensacional: Servlets! Em 2001, durante o Debugger Architecture (JPDA), pouco para Cartão Nacional de Saúde, em 2004 com
estágio na Accenture, em um projeto Java EE que esbanjava causar maiores impactos). o sistema de Imposto de Renda Pessoa
internacionalização, fomos fazer um curso na Sun, um marco O J2SE 5.0 ou Java 1.5, codinome Tiger, Física e em 2005 com o sistema de saúde
fundamental na minha vida, pois conheci Design Patterns, lançado em setembro de 2004 apresentou de São Paulo (Figura 3).
EJBs, o JavaMan (Bruno Souza) e o SouJava... e tive aula com mudanças ainda mais significativas na
o homem com quem eu iria me casar: Vinicius Senger! Em linguagem, com destaque para anotações Grupos de Usuários e Comunidades Open Source
2003, participando do segundo JavaOne, já na Globalcode, (“marcações” em classes, atributos e Quando foi lançada, a Tecnologia Java
quase casada com o Vinicius, conhecemos o projeto Rave, métodos, que vem – por exemplo – subs- inovou em vários sentidos, como na
que transformou-se em JavaServer Faces e foi recentemente tituindo a necessidade de arquivos de possibilidade de software multiplatafor-
incorporado à especificação Java EE 6. A história nos levou à configuração), generics (notação de tipos ma, na criação de ambientes visuais, no
colaboração e à criação do projeto JSF 2 Scrum Toys, que está para coleções que diminuem a obrigação download de aplicações para o browser
sendo distribuído com o GlassFish e NetBeans.” de conversão explícita de tipos – typecas- web, entre outras. Mas uma inovação

16 Easy Java Magazine - Edição 01


A História da Tecnologia Java

No Brasil, a comunidade de Grupos de Java no Tempo


Usuários Java (JUGs) é muito forte e ativa,
Ano No Mundo No Brasil
tendo inclusive ajudado a fundar a comuni-
1995 Tecnologia Java nasce oficialmente. Primeiros brasileiros começam a estudar Java.
dade mundial de JUGs. Ainda neste ponto,
o Brasil é um importante fomentador: hoje 1996 JDK 1.0 lançado e ocorre o primeiro JavaOne. Primeiro evento de Java no Brasil, o JavaDay.

existem brasileiros com grande atuação em Primeiro JavaCard é lançado.


importantes comunidades como a JavaTools, 1997 JavaCard 2.0 lançado e o JavaOne deste ano Banco do Brasil adota Java.
JUGs, JSRs, Apache, JBoss, e muitas outras. atrai 8.000 desenvolvedores, tornando-se
oficialmente a maior conferência de desenvol-
vimento de software do mundo.
Conclusão
A tecnologia Java revolucionou o mercado de JDK 1.1 é lançado.
desenvolvimento de software com uma ideia 1998 Java Community Process (JCP) é formalizado. Fundado o DFJUG
J2SE 1.2 é lançado.
simples: a independência de plataforma. No Primeiro SmartCard com Java é lançado pela
VISA.
1999 Código fonte do Java 2 é distribuído e o J2EE Fundado o SouJava. Em pouco tempo, o SouJava e o
Fernando Anselmo
beta é lançado. DFJUG se tornam os maiores grupos de usuários Java do
“Em uma bela manhã de trabalho, com um rouxinol mundo.
JavaOne reúne 20.000 desenvolvedores
cantando na minha janela (sentia que algo diferente iria
2000 Mais de 400 grupos de usuários Java no Java é a linguagem do ano pela Revista Info.
acontecer), recebi uma proposta indecorosa do Daniel mundo.
propondo a tradução de um curso que era um sucesso nas
J2SE 1.3 é lançado.
Filipinas. Resolvemos que não poderíamos adotar o mesmo
2001 Primeiro JavaOne fora dos EUA é feito no Pesquisa do Gartner mostra que 62% das companhias
modelo, já que aqui seria melhor aulas independentes Japão. brasileiras já usam Java.
no modelo e-learning, fora de sala de aula. Tínhamos as 2002 J2EE atinge dois milhões de downloads. Lançada a Java Magazine número 1. Matéria de capa: “O
apostilas e os slides da primeira lição, mas faltava algo, Brasil tem Java”.
e após dois Cheddar McMelt e um Milk-Shake grande de J2SE 1.4, a primeira versão desenvolvida sob o
JCP, é lançada. Sistema Brasileiro de Pagamentos (SPB) é lançado com a
chocolate surgiu uma daquelas ideias malucas: vídeo-aulas, tecnologia Java.
feitas em Estúdio. Daniel comprou um quadro com um 2003 [Link], o portal para a comunidade Java, é Projeto do Cartão Nacional de Saúde ganha o Duke’s
universo alternativo, e iríamos fazer tudo como um grande lançado. Choice Award no JavaOne.
filme de Ficção Científica. Após gravarmos um simples vídeo 2004 Java 5 é lançado. IRPF em Java é lançado e ganha o Duke’s Choice Award.

de cinco minutos para uma apresentação na Politec e levar 2005 Número de desenvolvedores Java atinge 4.5 Sistema de Saúde de São Paulo ganha o Duke’s Choice
mais de oito horas de gravações, a ideia murchou como um milhões. Award.
Java chega a Marte através do Mars Rover, que
balão vazio. Mas uma parte ficou: voz e imagem. A imagem possui Java embutido. Brasileiros criam o Juggy, mascote dos grupos de usuá-
não seria mais a nossa, e sim a dos slides com filmes que rios Java, que é adotado por JUGs do mundo todo.
capturassem o que se estava fazendo no computador! Iniciativa JEDI é lançada nas Filipinas.
2006 Anunciado que Java será open source. A plata- Tradução das APIs do OpenJDK para português.
Testamos uma série de programas e passamos a gerar as
forma Java EE é aberta como open source sob
aulas em Flash. O toque final foi um ambiente Moodle para o projeto GlassFish. Jonathan Schwartz, CEO da Sun, encontra Lula.
comportar tudo. E deste modo nascia o JEDI no Brasil.”
Java 6 é lançado.
2007 Java se torna totalmente Open Source. Uma brasileira é escolhida para o OpenJDK Interim
Manoel Pimentel Governance Board.
Ocorre o primeiro CommunityOne, uma
Editor-Chefe da Revista Visão Ágil: “Passei grande parte conferência conjunta com o JavaOne focada Iniciativa JEDI chega ao Brasil (e mais oito países que
dos anos 90 programando em Delphi e Clipper, mas no em Open Source. falam a língua portuguesa) coordenado pelo DFJUG.

final da década, com a necessidade de criar soluções web e JavaFX é anunciado.


multiplataforma, passei a apostar em soluções mais abertas 2008 Java é embutido em diversos dispositivos, JavaBahia realiza em seu blog, pelo 1º ano, a cobertura
como PHP e Java. Nesse momento, usava a plataforma como canetas inteligentes e Blu-Rays. do JavaOne em tempo real.
Java apenas para criar pequenos Applets e muitos Servlets
Diversas ferramentas para JavaFX são disponi- O IRPF é citado pela Sun como responsável por um dos
monstruosos (risos). De lá para cá, acompanhei e apoiei o bilizadas. maiores picos de download do Java.
surgimento de muitas comunidades Java, colaborei com
projetos OpenSource e com o time do [Link], escrevi Linguagens como Groovy, Scala, JRuby e Jyn- Rogério Santana, do Ministério do Planejamento, divide
thon ganham destaque no JavaOne. com Bruno Souza uma sessão técnica sobre produção e
artigos e fiz muitas palestras sobre Java. Devido ao meu uso do software livre no governo brasileiro.
trabalho de Coaching em Agile, venho me distanciando 2009 Sun é comprada pela Oracle. IRPF é lançado só em Java e é utilizado no preenchimento
cada vez mais do uso diário da linguagem, mas continuo de mais de 25 milhões de declarações. Versões em outras
linguagens são descontinuadas.
estimulando o uso da plataforma Java e torcendo pelo
2010 James Gosling, o pai do Java, deixa a Oracle. Norma para o Ginga-J, que permite Java na TV Digital
sucesso de toda a comunidade construída em torno dela.” brasileira, é aprovada.

18 Easy Java Magazine - Edição 01


Brasil, essa ideia ganhou força, já que o país bus- Digital até nos sistemas de Cloud Computing, o
[Link]
cava independência tecnológica. Para nós, Java profissional Java só tem a ganhar com as novas
Uma breve história do projeto Green.
surgiu em um momento único, onde a Internet ondas da tecnologia.
começava a ganhar força, e não havia mais um E sobre a historia da Tecnologia Java, tem uma [Link]
atraso entre a tecnologia surgir lá fora e poder coisa que é certeza: ainda estamos escrevendo, e 10-1996/[Link]
ser usada aqui. Vários profissionais aprovei- a sua participação é fundamental para escrever So why did they decide to call it Java?
taram a oportunidade e fizeram do Brasil um o próximo capítulo. Vamos escrever juntos o Curiosidades sobre o nome da linguagem.
dos maiores participantes no mercado Java futuro. O seu, o nosso e o da tecnologia Java.
mundial. A Tecnologia Java cresceu e evoluiu, [Link]
muito com a participação dos nossos desenvol- Bruno Souza better_is_always_different
vedores "tupiniquins". Grandes projetos feitos bruno@[Link] Blog do Jonathan Schwartz, ex-CEO da Sun,
no Brasil ganharam destaque mundial, e o país É Bruno Souza é Consultor da falando da origem do nome Java.
foi participante ativo dessa evolução. Summa Technologies e Diretor do
Com o Java Livre - o Projeto OpenJDK - a Tec- SouJava. Conhecido como “JavaMan”, [Link]
nologia Java ganha um novo impulso, e as novas Bruno é desenvolvedor, evangelista history
Java e open source e trabalha com comunidades livres.
versões têm tudo para serem mais inclusivas, A História das versões do Java.
Diretor mundial da Open Source Initiative OSI, coorde-
mais participativas, e com maiores chances
nou as comunidades NetBeans e OpenSolaris e ajudou
para profissionais brasileiros. Com Java sendo
a criar a Comunidade Mundial de Grupos de Usuários [Link]
fortemente utilizada desde ambientes de TV
Java. Pioneiro no Desenvolvimento Java, participou de [Link]
alguns dos maiores projetos Java do país. Versão preliminar da especificação do Oak (Oak
Fabiane Bizinella Nardon Language Specification, v0.2, 32 páginas).
fabiane@[Link]
Msc e PhD. Atuou em diversas Serge Rehem
[Link]
empresas e em projetos de larga [Link]@[Link]
Página Oficial do JEDI
escala, como o Sistema SIGA-Saúde, Especialista em Sistemas
vencedor do Duke’s Choice Awar- Distribuídos pela UFBA. Analista [Link]
d’2005. É líder do núcleo de computação na nuvem do do Serpro/Salvador desde 1997, JEDI DFJUG Brazil
LSI/USP. Foi membro do OpenJDK Governance Board, atualmente lidera o time técnico do
o órgão responsável pela criação da constituição do Framework Demoiselle Framework. Atuou em vários
Java Open Source. É líder da JavaTools Community do sistemas importantes, dentre eles o IRPF Java, ga-
[Link]. Recebeu o Special Jury Award no concurso nhador do Duke’s Choice Award 2004. É líder do grupo
Simagine’2006, em Barcelona. Em 2006, foi apontada JavaBahia e mantenedor do blog [Link].
como Java Champion pela Sun Microsystems. com, sobre trabalho colaborativo.

Edição 01 - Easy Java Magazine 19


Programação orientada a objetos com Java

dade não “escala”: à medida que progra- Adam Victor Nazareth Brandizzi
Listagem 4. Classe Mamifero.
mas crescem, é mais difícil mantê-los. A brandizzi@[Link]
public class Mamifero extends Animal { orientação a objetos é, provavelmente, a Trabalha com Java há cinco anos, especialmente
solução mais popular para esse problema, desenvolvendo aplicações Web.
public String lactar() {
return “leite”; e Java é a linguagem de referência para
} esse paradigma de programação. Nesse [Link]
}
artigo vimos que, em Java, programas são tutorial/[Link]
compostos por unidades chamadas obje- Tutorial oficial da antiga Sun Microsystems,
Listagem 5. Superclasse e subclasse em uso. tos. Os objetos possuem métodos (código) empresa desenvolvedora de Java, em
public class AnimaisAgindo { e atributos (dados). Para declarar métodos inglês.
e atributos, escrevem-se classes, que são
public static void main(String[] args) { modelos a partir dos quais os objetos são [Link]
Animal animal = new Animal();
Mamifero mamifero = new Mamifero(); criados. Vimos também que é possível Página do livro Thinking in Java, de Bruce Eckel. É
[Link](“plantas”); criar classes novas a partir de outras, um dos melhores livros para se começar a estudar
[Link](“queijo”);
usando herança, e que classes podem ser Java, e há uma edição antiga mas muito boa
String produto = [Link]();
[Link](“O produto da lactação é “ agrupadas, para melhor compreensão, gratuitamente disponível no site. Em inglês.
+ produto); em pacotes.
}
Orientação a objetos não se restringe a
} esses conceitos. Para se programar compe-
tentemente de maneira orientada a objetos,
saber como organizar estes componentes
Conclusão é crucial. Entretanto, para isso é preciso
Programação estruturada, a maneira conhecer estes componentes, e esse artigo
tradicional de se programar, é bastante explica o que são, a importância e o papel
simples e clara. Entretanto, essa simplici- de cada um.

26 Easy Java Magazine • Edição 01


Listagem 2. Esta aplicação instancia um da interface Comparator, que logo estudare- ordenação implementada por Comparable
ArrayList e o atribui a uma referência do mos ainda neste artigo. A aplicação deste é chamada ordenação natural. Por exem-
tipo List. Insere alguns nomes de alunos método pode ser constatada na Listagem plo, em uma String a ordenação natural é a
com o método add() e finalmente imprime 3, onde podemos observar que o método ordem alfabética, em uma classe wrapper
a lista – as implementações de coleções sort() altera a lista original. – Integer, Float, etc. – a ordenação natural
sobrescrevem o método toString(), por isso é a ordem numérica.
podemos imprimir a lista passando apenas Adicionando novo requisito – Novos dados
a referência para o método println(). Considere agora que as necessidades da
Neste exemplo, a primeira consideração nossa aplicação foram modificadas e que,
Listagem 3. Utilização do método sort() da classe
a fazer é que, tendo em mente a progra- precisamos, além do nome do aluno, o Collections
mação para interface, na declaração de nome do curso que ele está fazendo e a sua
lista foi usado o tipo List. Portanto, se nota. Definimos então a classe Aluno de import [Link].*;

decidirmos mudar a implementação para acordo com a Listagem 4, e modificamos public class ListaAluno {
LinkedList, é necessário apenas substituir a classe ListaAluno conforme a Listagem
o tipo ArrayList. 5, de maneira que a lista possa adicionar public static void main(String[] args) {
List<String> lista = new ArrayList<String>();
A segunda consideração refere-se ao tipo objetos Aluno ao invés de String. [Link](“João da Silva”);
de dado que uma lista pode adicionar. [Link](“Antonio Sousa”);
Normalmente é possível inserir qualquer Classificação de objetos [Link](“Lúcia Ferreira”);
[Link](lista);
Object em uma lista, ou seja, assim como Se incluirmos na Listagem 5 a chamada [Link](lista);
poderíamos inserir uma String, poderíamos ao método sort() veremos que o código [Link](lista);
}
inserir Aluno, Integer, etc. Se a lista permite não compila. O compilador retornará um
inserir Object, na hora de recuperar esses erro informando que não encontrou o }
dados, é necessário fazer cast para o tipo método sort(). Visto que apenas trocamos
Listagem 4. Classe Aluno.
desejado. Além disso, não se teria certeza a classe String pela classe Aluno, parece
do tipo de dado que foi inserido, e o cast razoável supor que o problema está na public class Aluno {
poderia causar uma exceção. A partir de classe Aluno, e está correto. private String nome;
private String curso;
Java 5 foi introduzido o conceito de Generics, A documentação da classe Collections double nota;
que nos permite escrever código reusável nos informa que o método sort() aceita
para qualquer tipo de objeto. Sob a ótica da apenas listas cujos elementos sejam de Aluno(String nome, String curso, double nota) {
[Link] = nome;
utilização deste conceito em coleções, para tipos que implementem a interface Compa- [Link] = curso;
definirmos o tipo que lista poderá adicionar, rable, e Aluno não implementa Comparable. [Link] = nota;
}
incluímos o parâmetro <String> em sua de- Esta interface tem apenas um método
claração. Dessa forma o compilador gerará a ser implementado, compareTo(). Sua public String toString() {
um erro caso se tente adicionar um objeto implementação deve ser feita de forma a return [Link];
}
que não seja String. E não será necessário retornar um inteiro negativo, zero ou um
usar cast durante a iteração. inteiro positivo caso o objeto que execute // Métodos getters e setters
o método seja menor, igual ou maior que o }
Adicionando novo requisito – Ordem ascendente objeto passado como parâmetro. Cabe ao Listagem 5. Classe ListaAluno modificada.
Vamos supor agora que desejamos que desenvolvedor decidir o critério que será
a lista seja classificada em ordem ascen- adotado para comparar dois objetos. import [Link].*;

dente. Observando a documentação da Na classe Aluno consideraremos que a public class ListaAluno {
implementação ArrayList, verificamos que comparação entre dois objetos será de-
não existe um método de ordenação. Para terminada pela comparação entre seus public static void main(String[] args) {
List<Aluno> lista = new ArrayList<Aluno>();
solucionar este requisito, uma opção seria nomes, que são do tipo String. Dessa forma
mudar nossa aplicação para utilizar a a classe Aluno deve ser alterada para que Aluno a = new Aluno(“João da Silva”,
“Linux básico”, 0);
interface Set, onde os elementos estariam fique de acordo com a Listagem 6.
Aluno b = new Aluno(“Antonio Sousa”,
classificados pela ordem natural, no en- Note que no método compareTo() fizemos “OpenOffice”, 0);
tanto a inserção de novos elementos seria simplesmente uma chamada ao mesmo Aluno c = new Aluno(“Lúcia Ferreira”, “Internet”, 0);
[Link](a);
mais lenta. Sendo assim, vamos utilizar a método, só que para o atributo nome, que
[Link](b);
classe utilitária Collections. Esta classe dis- é do tipo String. String é uma classe compa- [Link](c);
põe do método sort(), que pode classificar rável, isto é, já implementa Comparable. [Link](lista);
}
uma interface List em ordem natural ou Agora podemos incluir uma chamada }
classificar de acordo com a implementação ao método sort() na classe ListaAluno. A

Edição 01 • Easy Java Magazine 31


Utilizando Collections

elementos na estrutura. envolve saber o que sua interface oferece, Carlos Araújo
Esta interface mapeia chaves para va- quais as suas características e como ela [Link]@[Link]
lores. Considerando a nova proposta do será usada. É professor do curso de Sistemas de Informação
problema, a chave será o nome do aluno e no Centro Universitário Luterano de Santarém
o valor será o objeto aluno. Conclusões – Pará. Leciona Estruturas de Dados e Linguagem de
Para usar uma classe que implementa Java Collections Framework tem muito Programação Orientada a Objetos usando Java, desen-
volve sistemas há 20 anos e é certificado SCJP. Mantém
Map, quaisquer classes que forem utili- mais recursos do que aqueles que apresenta-
o blog [Link]
zadas como chave devem sobrescrever mos neste artigo. É fundamental estudarmos
os métodos hashCode() e equals(). Isso é a documentação da API para nos familiari-
necessário porque em um Map as chaves zarmos com as opções que esta estrutura [Link]/docs/books/tutorial/
não podem ser duplicadas, apesar dos va- oferece. Falamos no texto que as interfaces collections/[Link]
lores poderem ser. Para a implementação não são thread-safe, no entanto a classe Collec- Tutorial da Java Collections Framework no
mostrada na Listagem 12, utilizamos um tions possui um método synchronized para cada site da Oracle/Sun
TreeMap, que garante que as chaves estarão collection. Este método retorna objetos thread-
em ordem ascendente. safe, para o caso de você necessitar de acesso [Link]/developer/onlineTraining/
Note que na declaração do collection concorrente. O conhecimento dos contratos collections/[Link]
informamos dois tipos: String e Aluno. O de equals() e hashCode() é muito importante Curso de Introdução a Collections Framework no
primeiro refere-se à chave e o segundo ao para a utilização adequada das interfaces site da Oracle/Sun
valor. O método para inserir na estrutura aqui estudadas. A implementação errada
é put(), que recebe dois objetos (chave e desses métodos pode produzir resultados
[Link]/docs/books/tutorial/java/
[Link]
valor). Para recuperar um objeto específico inesperados e errôneos.
Tutorial sobre conceitos e características de Java
utilizamos o método get() passando a chave Além das interfaces apresentadas, exis-
no site da Oracle/Sun
como parâmetro. tem outras, tais como NavigableSet, Blocking-
Como Map não estende Collection, não tem Queue, Deque, BlockingDeque, NavigableMap, etc.
[Link]/developerworks/edu/j-dw-
os métodos iterator() e listIterator(). Entre- É muito importante consultar sempre a
[Link]
tanto, existe o método keySet() que retorna documentação de Java SE para usar com
Tutorial da Java Collections Framework no site
um Set com as chaves do mapa, e o método eficiência a API.
da IBM
values() que retorna um Collection com os Neste artigo, aprendemos que é fun-
valores associados às chaves. Assim, po- damental conhecer a hierarquia das
[Link]/developer/Books/
demos percorrer o mapa partindo desses coleções de maneira a utilizar as inter-
effectivejava/[Link]
métodos e usando enhanced-for. A aplicação faces para programar polimorficamente.
Contratos e considerações sobre as
deste comando (for (Objeto obj: colecao) { ... }) Vimos também que, além da hierarquia,
implementações dos métodos de Object
para percorrer o mapa também é mostrada é fundamental conhecer os algoritmos –
na Listagem 12. métodos – para manipular corretamente
[Link]/javase/6/docs/
Com tudo o que foi apresentado, pode- as estruturas. Documentação de Java SE 6
mos constatar que não existe a melhor Entender as características de cada
implementação que resolve todos os pro- interface e implementação fornece a base
blemas de estruturas de dados. Cada tipo para a decisão de qual delas utilizar, visan-
de problema requer uma implementação do solucionar, da melhor maneira possível,
diferente dependendo das características os problemas apresentados durante o
do mesmo. Escolher a implementação certa desenvolvimento de aplicações.

34 Easy Java Magazine • Edição 01


Edição 01 • Easy Java Magazine 35

Você também pode gostar