Professional Documents
Culture Documents
Caractersticas
O Curso Java para iniciantes (usando Eclipse) para voc que est se iniciando no
mercado e precisa aprender Java de uma forma rpida e objetiva.
Para iniciar o curso, voc precisa saber lgica de programao, pois no ensinamos isso
aqui.
O material, como diz o ttulo, destinado a iniciantes, ensinamos o bsico para que voc
fique confortvel ao prosseguir nos estudos mais avanados.
Existem muitas razes para se aprender a programar em Java. Mas por que usando
Eplipse?
No existem dados estatsticos sobre isso, mas na prtica, podemos considerar o Eclipse
e suas variaes,como sendo a IDE padro de mercado para Java.
Portanto, aprendendo a usar esta IDE, voc j vai se preparando para um prximo
ingresso no mercado de trabalho.
O Eclipse prov uma srie de facilidades que permitem escrever programas Java
de forma muito mais rpida e simples do que usando um editor de texto comum.
Isso significa que voc pode usar mais do seu tempo aprendendo Java do que
digitando e olhando a documentao.
O debugger e o scrapbook permitem olhar "dentro" de um programa Java em
execuo. Isso permite que voc "veja" os objetos e entenda como o Java
funciona "por trs dos panos".
1
O Eclipse prov suporte total para as prticas de desenvolvimento gil, tais
como: TDD (test-driven development) e refatorao. Isso permite que voc
aprenda estas tcnicas enquanto aprende Java.
Alm de tudo isso, existem plugins que permitem disponibilizar facilidades
ainda mais especficas que facilitam o desenvolvimento para plataformas
diversas.
Origens do Curso
No, esta no uma ideia original. Este curso foi baseado no trabalho original de Mark
Dexter datada de 2007, chamada "Eclipse and Java for Total Beginners", disponvel
aqui.
Em 2008, o Ronaldo Caldas fez uma traduo dos screencasts para Portugus. Eles
podem ser encontrados aqui.
Leitura offline
Quem preferir existe a opo de baixar o texto em formato PDF para leitura offline.
Histria
2
Tudo comeou em Dezembro de 1990. O engenheiro Patrick Naughton, da Sun
Microsystems, estava insatisfeito com as ferramentas e APIs do C++ da Sun, estando
disposto a passar a usar a plataforma Next, a Sun ofereceu a ele a chance de trabalhar
numa nova tecnologia, tendo incio assim, o projeto "Stealth".
Em 1991, o projeto foi renomeado para "Green", tendo James Gosling e Mike Sheridan
se juntado a Patrick e junto com outros engenheiros da Sun iniciaram os trabalhos. O
objetivo deste projeto, era antecipar a "prxima onda" tecnolgica do mundo digital.
Eles acreditavam que em breve os equipamentos e eletrodomsticos de uso dirio
estariam interagindo mais e mais com os usurios, e para dar suporte a isso precisava ser
criada uma plataforma de desenvolvimento inteiramente nova, e principalmente:
orientada a objetos.
Gosling, tentou modificar e estender o C++, mas acabou abandonando a ideia, em favor
de uma linguagem inteiramente nova. Esta linguagem foi inicialmente batizada de Oak,
que quer dizer carvalho, em aluso a uma rvore que Gosling podia observar quando
olhava pela janela do seu escritrio.
3
Durante meses, 16 pessoas trabalharam num escritrio de Sand Hill Road, no Menlo
Park, num prottipo para demonstrar a ideia na prtica, e em Setembro de 1992, eles
estavam prontos para demonstrar partes desta nova plataforma, incluindo o sistema
operacional "Green", a linguagem Oak, as bibliotecas e o hardware. O prottipo se
chamava *7 (leia-se "StarSeven"), um controle remoto com uma interface grfica
touchscreen para Televises interativas.
Por outro lado, a internet vinha se desenvolvendo paralelamente num ritmo muito
acelerado.
No incio de Julho de 1994, depois de trs dias de brainstorming com John Gage, diretor
de cincia da Sun, Gosling, Joy, Naughton, Wayne Rosing, e Eric Schmidt, resolveram
redirecionar o projeto para a internet, ficando Gosling incumbido de liderar o projeto.
Eles vislumbraram que com o advento de navegadores com capacidade grfica como o
Mosaic, a internet estava no caminho para evoluir no mesmo caminho de mdia
4
altamente interativo que eles haviam proposto para a industria de TV a cabo. A ttulo de
prottipo, Naughton escreveu um pequeno navegador chamado WebRunner (devido ao
filme Blade Runner), mais tarde renomeado para HotJava.
A primeira demonstrao pblica do WebRunner foi feita por John Gage e James
Gosling no evento "Technology Entertainment Design Conference" em Monterey,
California no incio de 1995.
Este evento pode ser considerado um marco, pois no havia nada de muito interessante
numa nova linguagem apresentando uma pgina contendo um texto e imagens num
clone do Mosaic. A apresentao se arrastava sem chamar a ateno da audincia.
Porm dois demos fizeram a audincia vibrar:
Num deles, Gosling moveu o mouse sobre a imagem 3D de uma molcula fazendo com
que ela se movesse nos 3 eixos, conquistada a ateno da plateia, Gosling foi alm,
apresentando um algoritmo animado de ordenao onde trs conjuntos de linhas
horizontais de tamanhos randmicos eram ordenados da menor para a maior
simplesmente movendo as linhas para cima e para baixo. A plateia nunca tinha visto
nada alm de imagens estticas num navegador. Aquilo era realmente revolucionrio!
Mais tarde, no incio de 1995, a linguagem foi rebatizada para Java, depois que uma
pesquisa de patentes revelou que o nome Oak havia sido registrado pela empresa Oak
Technology. A primeira verso pblica do Java foi anunciada em Maio de 1995 no
evento "SunWord". Era o Java 1.0a2 com o navegador HotJava.
5
No mesmo evento a Netscape anunciou que os seus navegadores iriam incluir suporte a
Java. Em Janeiro de 1996 a Sun criou o grupo JavaSoft para desenvolver a tecnologia
Java.
Nesta nova verso da linguagem, Gosling, procurou implementar uma mquina virtual e
uma linguagem usando notaes semelhantes a linguagem C/C++. Com a promessa de
se escrever uma vez e executar em qualquer lugar - "Write Once, Run Anywhere"
(WORA) - gerando executveis sem custo para as plataformas mais populares.
Em novembro de 2006, a Sun comeou a liberar a maior parte do Java como software
de cdigo aberto "open source", sob os termos da licena pblica GNU. Este processo
terminou em Maio de 2007, tendo ficado toda a parte essencial do Java disponvel nos
termos de software livre e cdigo aberto, exceto uma pequena parte sobre a qual a Sun
no detm o copyright.
6
Logo aps a aquisio da Sun pela Oracle em 2010, a Oracle se auto proclamou como
sendo a "Guardi da tecnologia Java" com um compromisso incansvel de promover
uma comunidade participativa e transparente.
Caractersticas
Java usado num espectro muito amplo de plataformas: desde dispositivos dedicados e
telefones celulares, passando por computadores pessoais, indo at servidores Web e
Aplicaes Corporativas.
A Linguagem Java, uma mistura de muitas outras, tais como: C, C++, LISP,
Objective-C, MESA, Modula3, entre outras. Sintaticamente, ela se assemelha muito a C
e C++, porm muito mais simples que estas, devido ao fato de ser fortemente tipada.
Abaixo, citamos algumas outras caractersticas da linguagem Java que seus
desenvolvedores buscavam quando do seu desenvolvimento.
Simples
Portvel
Orientada a Objetos
Interpretada
Distribuda
Alta Performance
Robusta
Multi Tarefa
Segura
Dinmica
De Arquitetura Neutra
Como Funciona?
7
1. Crie um programa fonte em Java. Um programa fonte, contm texto escrito na
linguagem de programao Java. Um programa Java, pode ser entendido por
voc e outros programadores. Qualquer editor de texto pode ser usado para criar
e editar programas fonte.
2. Compile o programa fonte em um arquivo "bytecode". O compilador Java
"javac"", traduz o seu programa fonte em instrues que a Mquina Virtual Java
(JVM)) pode entender. O compilador armazena estas instrues num arquivo
"bytecode".
8
Instalando e Aprontando o Java
Primeiros passos:
Para tal, devemos acessar o site da Oracle que disponibiliza as vrias opes para
Download aqui.
Instalando o Java 7
Vamos escolher o Java EE, e na pgina seguinte escolher aquele apropriado para a nossa
plataforma de trabalho.
9
Marcar o boto de aceite do acordo de licena.
E efetuar o download.
10
Agora voc tem no s o JDK instalado, como tambm o GlassFish, um "Servidor de
Aplicaes" compatvel com Java EE 6.
O prximo passo, verificar se a instalao est correta. No meu caso, como j havia
uma verso anterior de JDK instalada, o uso do comando "set java", permite verificar
para onde a varivel de ambiente "JAVA_HOME" aponta.
Aps a instalao, devemos portanto, atualizar (ou criar se voc nunca tiver instalado
um JDK antes) a varivel de ambiente "JAVA_HOME".
11
Uma forma simples de testar se est tudo certo com a instalao, tentar obter a verso
do compilador Java disponvel com o comando "javac -version".
12
13
Instalando e Aprontando o Eclipse
O que o Eclipse?
O Eclipse na verdade muito mais que uma IDE. Pode-se dizer que uma plataforma
de desenvolvimento, no s atendendo vrias linguagens de programao, como
tambm vrios objetivos, totalmente configurvel e customizvel.
Um pouco de Histria:
No incio dos anos 2000 surge o VisualAge for Java, e logo depois o VisualAge Micro
Edition, que suportava o desenvolvimento de aplicaes Java multi plataformas. Foi na
14
verdade a reimplementao desta IDE em Java. Esta verso do VisualAge evoluiu para a
plataforma de desenvolvimento Eclipse que conhecemos hoje.
Em Junho de 2004, a primeira verso oficial do Eclipse (a 3.0), foi lanada, e desde
ento, sempre no final de Junho de cada ano novas verses dos projetos da plataforma
Eclipse so lanadas:
Primeiros passos:
Agora que j temos o JDK instalado, vamos instalar a nossa IDE de trabalho, o Eclipse.
Aqui tambm, se voc no tiver problemas de espao nem de performance, opte pelo
Eclipse for Java EE que o que se encontra em ambientes corporativos. Se tiver algum
tipo de limitao, opte pelo Eclipse Clssico, que menor e mais simples.
15
A verso mais recente do Eclipse quando da criao desta pgina a Indigo.
Vamos escolher o Eclipse for Java EE, na pgina seguinte escolher aquele apropriado
para a nossa plataforma de trabalho, e efetuar o download.
16
O processo de instalao extremamente simples, basta descompactar o arquivo
baixado e criar um atalho na sua rea de trabalho para o executvel "eclipse.exe".
Ao tentar acionar o Eclipse pela primeira vez, provavelmente voc vai receber uma
mensagem de erro, acusando uma falha ao tentar criar a mquina virtual.
-vm
D:\glassfish3\jdk7\bin\javaw.exe
17
-startup
plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.100.v20
110502
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-vm
D:\glassfish3\jdk7\bin\javaw.exe
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx512m
Agora sim, ao chamar o Eclipse, a tela de carga deve surgir e logo em seguida, uma
janela solicitando a escolha de um diretrio para a rea de trabalho (onde os seus
projetos vo ser armazenados). Voc pode aceitar a sugesto padro ou escolher uma
outra localizao ao seu gosto.
18
E na sequncia, voc deve visualizar a tela de "Bem Vindo" do Eclipse.
Voc pode fechar esta tela, e a qualquer momento, abri-la novamente usando: Help
Welcome, e explorar todo o seu contedo com calma.
19
20
Aula 01 - Objetos e Classes Java
Objetos
Classes Java
Uma Classe Java que pode servir de base para criar e atuar em objetos do tipo
"bicicleta".
21
}
}
Mas em bom Portugus, o que um projeto Java? Podemos dizer a grosso modo, que
um projeto Java, nada mais do que uma estrutura de diretrios, onde so armazenados
os cdigos fonte na linguagem Java (envolvendo as funcionalidades propriamente ditas
e os seus testes) e os bytecodes resultantes do processo de compilao.
Os nossos arquivos fonte, estaro portanto localizados em algum lugar nesta estrutura
de diretrios, agrupados por tipo e funcionalidade. Os vrios tipos de arquivos Java que
compem um projeto se relacionam. Para que estes arquivos se localizem uns aos
outros, existe uma estrutura de nomenclatura que associa nomes qualificados
localizao fsica dos arquivos. Ento, o diretrio que agrupa arquivos de um
determinado tipo ou funcionalidade num projeto Java, chamado de "pacote"
(package).
22
Considerando o que foi visto acima, segue um exemplo de uso de um objeto da classe
Bicicleta:
package com.iniciantes.java.tutorial;
}
}
A nossa Aplicao
Pessoa: nome e numero mximo de livros que esta pessoa pode pedir
emprestado.
Livro: ttulo, autor, pessoa com quem est emprestado.
Biblioteca: lista de livros e lista de pessoas que podem emprestar livros.
Passo a passo:
23
Repare que se voc, assim como eu, instalou e configurou a verso mais atual do JDK,
pode ocorrer algum tipo de incompatibilidade.
24
Se for este o caso, escolha uma verso mais antiga que seja compatvel.
25
Agora, vamos aceitar as opes default e finalizar.
26
Pronto! O seu projeto Java deve estar criado.
27
Podemos sempre tentar resolver os problemas usando: Boto direito do mouse sobre a
linha do problema Quick Fix
Vamos fazer da seguinte forma: Boto direito do mouse sobre o projeto Properties
28
Na opo "Java Build Path", na aba "Libraries", vamos selecionar a JRE disponvel e
acionar o boto "Edit"
29
Vamos escolher a verso adequada do ambiente de execuo.
30
E acionar o boto "OK"
31
Com isso o problema reportado deve desaparecer.
32
Com o projeto criado, devemos agora criar o pacote que ir agrupar seus componentes.
Passo a passo:
Vamos selecionar a pasta "src" e usar: Boto direito do mouse New Package
"com.iniciantes.java.tutorial"
33
Agora ns temos o pacote criado:
34
Passo a passo:
35
Agora ns temos a Classe criada:
36
A linha identificada com o nmero 1 registra o nome do pacote onde a classe est
localizada.
A linha identificada com o nmero 2 registra a assinatura da Classe.
Com a classe pessoa criada, o prximo passo : definir os atributos que vo caracterizar
os objetos pertencentes a esta Classe.
Repare o asterisco antes do nome do arquivo. Ele indica que o arquivo foi alterado e
ainda no foi salvo.
A linha identificada com o nmero 1 um comentrio simples (uma nica linha).
As linhas identificadas com os nmeros 2 e 4 so as definies dos atributos
propriamente ditos.
O grupo de linhas identificado com o nmero 3 um comentrio composto de vrias
linhas.
37
Tipo Descrio
boolean Pode assumir o valor true ou o valor false
Caractere em notao Unicode de 16 bits. Serve para a armazenagem de dados
char alfanumricos. Tambm pode ser usado como um dado inteiro com valores na
faixa entre 0 e 65535.
byte
Inteiro de 8 bits em notao de complemento de dois. Pode assumir valores
entre -27=-128 e 27-1=127.
short
Inteiro de 16 bits em notao de complemento de dois. Os valores possveis
cobrem a faixa de -2-15=-32.768 a 215-1=32.767
int
Inteiro de 32 bits em notao de complemento de dois. Pode assumir valores
entre -231=2.147.483.648 e 231-1=2.147.483.647.
long
Inteiro de 64 bits em notao de complemento de dois. Pode assumir valores
entre -263 e 263-1.
Representa nmeros em notao de ponto flutuante normalizada em preciso
float
simples de 32 bits em conformidade com a norma IEEE 754-1985. O menor
valor positivo representvel por esse tipo 1.40239846e-46 e o maior
3.40282347e+38
Representa nmeros em notao de ponto flutuante normalizada em preciso
double
dupla de 64 bits em conformidade com a norma IEEE 754-1985. O menor
valor positivo representvel 4.94065645841246544e-324 e o maior
1.7976931348623157e+308
A Classe String:
Uma das vantagens do uso do Eclipse, que ele avalia o que digitado dinamicamente,
e quando o arquivo salvo ele exibe erros e alertas na aba "Problems".
38
Neste caso, repare que as palavras em Portugus esto sublinhadas em vermelho. Isto
ocorre porque o dicionrio padro em Ingls.
Alm disso, existem dois alertas sobre a criao de variveis que no esto sendo
utilizadas.
Sobre os alertas, eles desaparecero na sequncia, quando forem criados mtodos que
usam as variveis criadas.
39
Com isso, basta fechar e abrir novamente o arquivo, que a maioria das palavras ser
reconhecida. Aquelas que no forem, devem ser includas no dicionrio, assim:
40
O mtodo construtor de uma Classe chamado sempre que uma nova instncia de
objeto daquela classe criada. Um mtodo construtor igual a qualquer mtodo
pblico, exceto que ele usa o mesmo nome da Classe e no pode retornar nenhum valor.
Usando uma outra Classe Pessoa como exemplo, um mtodo Construtor ficaria assim:
// O metodo construtor
public Pessoa()
{
}
}
Construtor.java hosted with by GitHub
Neste exemplo, o mtodo construtor no faz nada, mas no nosso caso, vamos us-lo
para inicializar os objetos do tipo "Pessoa" criados com valores default.
Outra vantagem do uso do Eclipse, que ele pode completar o cdigo que digitamos.
Por exemplo: se digitamos um abre chaves "{" e teclamos "Enter", ele cria e identa um
fecha chaves "}" automaticamente.
41
Outra forma de completar o cdigo no Eclipse, digitar parte de um nome definido e
usar: "CTRL" + "Espao". Esta ao apresenta uma lista de nomes definidos que
comeam com a parte digitada. Bastando escolher da lista o item desejado e teclar
"Enter".
Isso completa a nossa primeira aula. Tendo criado a Classe Pessoa, com seus atributos e
mtodo Construtor. Os alertas sero resolvidos na prxima aula quando os mtodos get
e set para os atributos da Classe forem criados.
42
43
Aula 02 - Classes e Mtodos Java
Vamos comear esta segunda aula conhecendo um pouco mais sobre a interface do
Eclipse.
De volta ao Eclipse, a primeira coisa que notamos que ele tem memria! Abre
exatamente da forma que o deixamos da ltima vez.
Quando o Eclipse carregado, ele nos apresenta uma espcie de bancada de trabalho
(Workbench), Esta bancada composta de algumas reas que vamos explorar um pouco
na sequncia, mas a principal delas, claro, a do Editor.
44
Um duplo click na aba do arquivo sendo editado, maximiza a janela do Editor fazendo-a
ocupar toda a rea da bancada de trabalho. Vamos fazer isso, e comentar um pouco mais
sobre as facilidades que o editor de cdigo do Eclipse oferece.
45
Alm daquelas mais bsicas como colorir o cdigo, separando as palavras chave da
linguagem do restante do cdigo, identificando os comentrios, os smbolos e outras
partes do cdigo, edentao e formatao automtica. Existem vrios auxlios visuais,
como por exemplo: indicador de que o arquivo foi alterado mas no foi salvo,
indicadores de erros e alertas, indicadores de fechamento de blocos, e muitos outros.
1. CTRL+3
2. Digite: "line numbers"
3. ENTER
46
E como resultado:
47
1. rea de topo 1 - Barra de Menu
2. rea de topo 2 - Barra de Ferramentas
3. rea esquerda com o "Visualizador de Projeto ou Pacote"
4. rea direita com ao "Lista de tarefas e a Viso macro da Classe"
5. rea de baixo com vria abas informativas
6. rea de rodap com informaes complementares
Cada uma destas reas pode ser configurada para exibir uma ou mais Vises (Views), a
distribuio destas reas e os seus respectivos contedos, vo compor uma Perspectiva
(Perspective) do Eclipse para uma tarefa especfica. A perspectiva Java por exemplo,
visa facilitar o processo de codificao. Uma outra grande vantagem do Eclipse, que
voc pode criar e salvar novas perspectivas totalmente personalizadas.
48
Minha sugesto que voc procure alterar esta perspectiva de forma semelhante (no
necessariamente igual), ao exemplo abaixo, e salv-la com o seu nome para uso futuro.
49
De volta ao Java
; - delimitador de comando
{ e } - delimitadores de bloco
( e ) - delimitadores de parmetros de mtodos
50
// - incio de comentrio
/* e */ - delimitadores de bloco de comentrio
= - operador de atribuio
Mtodos Java
return 10L;
}
view raw Metodo.java hosted with by GitHub
De maneira mais formal, seguem todos os elementos que podem vir a compor a
declarao de um mtodo em Java:
1. Modificadores tais como: public, private, e outros que voc ver no futuro.
2. O tipo de dado retornado pelo mtodo, ou void se o mtodo no retornar um
valor.
3. O nome do mtodo seguindo as regras de nomes de campos, mas com uma
conveno um pouco diferente.
4. A lista de parmetros separados por vrgula, precedidos dos seus respectivos
tipos de dado, delimitados por parnteses, (). Se no houver parmetros, deve-
se usar, os parenteses vazios.
5. Uma lista de possveis excees, que voc tambm ver no futuro.
6. O corpo do mtodo, com todo o seu cdigo delimitado por chaves, incluindo a
declarao de variveis locais ao mtodo.
51
Voltando nossa Classe Pessoa, j havamos criado um mtodo construtor para
inicializar as instncias do objeto Pessoa com valores default. Vamos agora tratar dos
mtodos "getter" e "setter" responsveis por expor as caractersticas do objeto
instanciado. No vamos discutir aqui a questo de expor a implementao de um objeto
para outras Classes em relao aos princpios de Orientao a Objetos.
Repare que imediatamente aps salvar o cdigo alterado, os contedos das Views
"Package Explorer" e "Problems" so alterados de acordo. Na primeira, a referncia ao
novo mtodo surge. E na segunda, a referncia ao alerta de falta de uso do atributo
"nome" desaparece, enquanto a referncia ao mesmo tipo de alerta para o atributo
"maxLivros" permanece.
Para criar o prximo mtodo, vamos usar a facilidade de "completar o cdigo" que o
Eclipse nos d, assim:
52
Com esta combinao, o Eclipse nos d uma matriz para a criao de um mtodo
pblico. Na sequncia, usando a tecla TAB, vamos alterando os prximos elementos da
matriz fornecida, assim:
Ento depois de preencher: o tipo de retorno, o nome, o parmetro e teclar TAB mais
uma vez, estamos prontos para digitar o cdigo que vai compor o mtodo.
53
Neste caso, uma simples atribuio.
Apesar de ter sido usada a facilidade de "completar cdigo" do Eclipse, estes dois
primeiros mtodos foram criados praticamente de forma manual. No entanto, O Eclipse
possui uma facilidade ainda maior neste sentido, podendo gerar os mtodos "getters" e
"setters" automaticamente para ns. Vamos fazer uso desta facilidade para gerar os
mtodos para o atributo "maxLivros", assim:
54
Na Janela apresentada, selecionamos os campos para os quais queremos gerar os
mtodos e acionamos o boto "OK".
55
E o Eclipse gera os mtodos para ns, assim:
56
Existem algumas diferenas entre os mtodos get e set que ns criamos e estes ltimos
criados automaticamente pelo Eclipse: a primeira o tipo de dado sendo tratado. A
segunda o uso do qualificador "this", que indica a instncia corrente do objeto, que
um comportamento padro, por isso no o usamos anteriormente. Outro detalhe que o
eclipse usa como nome da varivel do parmetro do mtodo "set", o mesmo nome da
varivel da classe, assim:
Revisando, uma Classe Java deve conter Atributos e Mtodos, definindo suas
Caractersticas e seu Comportamento:
1. Campos de dados
2. Mtodos Construtores para criar objetos
3. Mtodos getters e setters para trabalhar as caractersticas do objeto
4. Mtodos de comportamento. A lgica de negcio propriamente dita
57
O Eclipse nos ajuda
O Package Explorer do Eclipse, permite uma viso esquemtica da Classe, com seus
elementos.
Isto se deve ao fato de o Java no saber mais se se trata de um atributo da classe ou uma
varivel local. Para evitar este problema, podemos manter o nome da varivel do
58
parmetro igual ao do atributo retornando o qualificador "this", ou mudar o nome da
varivel do parmetro.
Para manter o padro usado no atributo "nome", vamos usar esta segunda opo.
package com.iniciantes.java.tutorial;
public class Pessoa {
// Atributos
// Construtor
public Pessoa() {
nome = "Nome Desconhecido";
maxLivros = 3;
}
59
// Mtodos
}
pessoa01.java hosted with by GitHub
Caso exista alguma diferena, volte e faa uma reviso nas duas primeiras aulas.
60
Aula 03 - Usando o Scrapbook do Eclipse
O que o Scrapbook?
Usando o Scrapbook
Para usar o Scrapbook, devemos criar uma pgina de Scrapbook, que permite executar
comandos e expresses Java sem precisar criar um programa para isso.
Para criar uma pgina de Scrapbook, vamos fazer assim: Boto direito do mouse sobre o
projeto New Other.
61
Especifique um nome para a pgina e acione o boto Finish.
62
Com isso, devemos ter a nova pgina de Scrapbook aberta, assim:
63
Codificando e Inspecionando
64
Que deve apresentar o seguinte resultado:
65
Que deve apresentar o seguinte resultado:
Ocorre que eu esqueci de encerrar o comando "a = a * 10" com um ";". Vamos corrigir
isso e tentar novamente.
66
Que deve apresentar o seguinte resultado:
Vamos agora inspecionar uma expresso Java para criar um objeto do tipo Date "new
java.util.Date()", assim:
67
Reparem que: na janela de inspeo, temos acesso a todos os atributos do objeto criado.
J para avaliar trechos de cdigo Java, devemos usar a opo Run Execute, ou ento:
68
O resultado da execuo do comando ou comandos, exibido na aba "Console".
Nota: Certifique-se de deixar a instruo que voc deseja inspecionar sem o ";" no
final.
J sabendo como usar o Scrapbook, precisamos agora us-lo com a classe Pessoa criada
anteriormente. Observando o Package Explorer, podemos ver que a pgina do nosso
Scrapbook, est fora do pacote da Classe Pessoa.
Existem vrios pacotes criados por terceiros disponveis para uma aplicao Java. Sendo
assim, nada impede de algum ter criado uma outra Classe chamada Pessoa com
caractersticas e comportamentos diferentes dos da Classe que ns criamos. A criao e
uso de pacotes facilita a identificao de classe de mesmo nome mas com caractersticas
diferentes.
Para que possamos portanto, fazer experincias com a Classe Pessoa no nosso
Scrapbook, devemos importar o pacote onde est localizada a Classe.
69
Usando o boto de configurao dos imports, vamos importar para o nosso Scrapbook o
pacote da classe Pessoa.
Sendo:
70
Para permitir a inspeo desta instruo, precisamos complementar este trecho de
cdigo com a simples meno da varivel "p", para que observemos o seu contedo,
assim:
Podemos observar que: uma vez criado, o objeto assume as caractersticas definidas no
mtodo construtor padro da Classe Pessoa, ou seja:
maxLivros = 3
nome = "Nome Desconhecido"
71
Alguns destes mtodos, foram criados por ns, como se pode ver no exemplo. Mas por
outro lado, podemos ver vrios outros que no foram criados por ns. De onde eles
surgiram?
Vamos comear nossas experincias, mudando o nome padro do objeto pessoa que
acabamos de criar, assim:
Inspecionando...
72
Vamos prosseguir, alterando o nmero mximo de Livros para 9, assim:
A ttulo de aprendizado, vamos ver uma outra forma de exibir o resultado, usando um
mtodo "get" e usando a opo de "Exibir o Resultado da Avaliao", assim:
73
Ainda a ttulo de aprendizado, vamos simular um erro e observar como o Eclipse lida
com isso.
Neste caso, informando que: devido ausncia do (), o nome "getMaxLivros", foi
entendido como sendo um possvel nome de varivel, e como no existe nenhuma
varivel definida com este nome, o compilador simplesmente no consegue "resolver"
este nome.
74
O Eclipse portanto, no s ajuda evitando que voc precise digitar muita coisa, mas
tambm ajuda quando ocorrem erros de digitao, como no exemplo acima.
75
Aula 04 - JUnit no Eclipse - parte 1
Testes de software
O assunto desta aula sobre testes. Teste de software um dos assuntos mais ricos e
controversos que temos na rea de de desenvolvimento de software e at no
gerenciamento de projetos de software. Sendo assim, acabei por criar uma pgina
especfica para tratar deste assunto, de forma mais abrangente, indo alm de Java e
JUnit. Esta pgina, pode ser acessada aqui.
O que o JUnit?
Obtendo o JUnit
O JUnit, pode ser obtido no site da JUnit.org. Mas na prtica, no caso dos usurios do
Eclipse, ele j vem disponvel como um plugin, possuindo sua prpria View, a qual
podemos exibir usando:
Window Show View Other, e na janela que se abre, selecionar Java JUnit.
76
Mas o que so testes unitrios afinal?
Testes Unitrios envolvem apenas as caractersticas essenciais da unidade sob teste. Isso
encoraja o desenvolvedor a poder alterar livremente a implementao de uma unidade
buscando uma melhor performance por exemplo, sem se preocupar com uma possvel
interferncia em outras unidades ou na aplicao como um todo.
Uma vez que todas as unidades de uma aplicao estiverem funcionando de forma
satisfatria e sem erros, pores maiores da aplicao podero ser avaliados na forma de
77
testes integrados, depois com testes do sistema e finalmente com testes de aceitao. Os
testes unitrios so a base de todo o processo de testes.
O primeiro passo definir onde no projeto vo ficar os nossos testes. A no ser que
exista orientao do cliente em contrrio, o normal, que no desejamos incluir os
nossos testes no pacote a ser entregue para deploy. Sendo assim, faz sentido armazenar
as Classes de teste numa pasta diferente da usada para armazenar as Classes com o
cdigo da aplicao propriamente dito.
Vamos ento criar uma pasta no mesmo nvel da pasta "src", com o nome "test". Vamos
fazer da seguinte forma: Boto direito do mouse sobre o projeto New Source Folder
78
Na janela que se abre, digitar o nome da pasta ("test" neste caso) e acionar o boto
"Finish".
79
Com isso, temos agora a seguinte estrutura:
Para manter a organizao, vamos querer que as nossas Classes de teste fiquem sob os
mesmos pacotes que as Classes sendo testadas. Sendo assim, vamos criar o mesmo
pacote sob a pasta "test" que acabamos de criar.
80
Usar na barra de menu: File New Package, assim:
E na janela que se abre, digitar o mesmo nome de pacote usado na pasta "src", assim:
81
Obtendo:
Na maior parte das aes que efetuamos sobre itens de um projeto, podemos optar por
usar...
82
O menu flutuante, usando o boto direito do mouse, tambm sobre um item
selecionado:
83
O nosso primeiro cdigo de teste
Agora, estamos prontos para criar o nosso primeiro teste usando JUnit.
Para isso, vamos contar com a ajuda de uma facilidade do Eclipse. O Eclipse possui
modelos de ajuda prontos (Wizards) para efetuar vrias tarefas. Criar testes usando
JUnit, uma delas.
Usando o menu flutuante, vamos marcar o package que acabamos de criar e selecionar o
Wizard: New JUnit Test Case, assim:
84
Na janela que se abre, vamos digitar um nome para a nossa Classe de teste. Um padro
que pode e deve ser seguido aqui : usar para o nome da Classe de teste, o nome da
Classe sendo testada, seguido do sufixo "Test". Alm disso, necessrio digitar o nome
da Classe sendo testada. Teremos portanto, a tela assim:
85
A tela no exibe nenhum erro ou alerta. Tudo est certo, pois o JUnit 4 j est disponvel
nesta instalao. A ttulo de aprendizado, vamos alterar a verso do JUnit para 3 e
observar o que acontece:
86
Reparem que agora surge um alerta indicando que a Super Classe "TestCase" do JUnit
no existe. Isso se deve ao fato de o pacote (JAR) do Junit 3 no estar configurado no
"caminho de construo" (build path) do projeto. O "build path" indica a localizao de
todas as bibliotecas externas necessrias compilao da aplicao. O JUnit uma
dessas bibliotecas externas, da a necessidade de uma referncia a ela constar no "build
path".
Na tela que se segue, podemos escolher os mtodos para os quais vamos gerar cdigo de
teste. No s mtodos da Classe Pessoa, como tambm os mtodos da Classe Object, da
qual a Classe Pessoa herda. Vamos escolher no momento, o mtodo construtor da Classe
Pessoa e tambm os mtodos "set", assim:
87
Ao acionar o boto "Finish", o eclipse abre uma outra janela, dando chance de resolver
o problema detectado anteriormente, adicionado o JUnit 3 no "buid path". Vamos, mais
uma vez, ignorar este problema selecionando a opo "Not now" e acionado o boto
"OK".
88
O que nos leva a seguinte situao:
Como era de se esperar, a nossa classe de teste foi criada, porm surgem vrias
indicaes de erro. Vamos analisar cada uma destas indicaes:
1. No Package Explorer, podemos ver que o projeto como um todo, est marcado
com erro, porque alguma parte dele est com erro. Neste caso, a classe
"PessoaTest" dentro do pacote "com.iniciantes.java.tutorial" dentro da pasta
"test".
89
2. Na janela de cdigo, podemos ver a nossa Classe de teste com indicaes de erro
em toda linha que menciona recursos do JUnit, inclusive no "import".
3. Na aba de "Outline", podemos ver de forma esquemtica onde ocorrem os erros
no nosso cdigo.
4. Na aba "Problems", temos acesso individualizado a cada linha de cdigo
causando problema, indicando sua localizao exata.
Vamos ento usar esta ltima rea para aprender como resolver problemas no nosso
cdigo com a ajuda do Eclipse.
90
E na janela seguinte: "Add JUnit 3 library to the build path"
91
Reparem que o pacote JUnit 3 foi adicionado ao nosso projeto.
Para entender um pouco mais do que o Eclipse fez para corrigir o erro, vamos verificar
o "buid path" do nosso projeto. Poderiamos usar: boto direito do mouse sobre o projeto
Properties. Mas desta vez, vamos usar um atalho: Selecione o projeto e use: Alt +
Enter.
92
Podemos ver que o pacote do JUnit 3 foi adicionado ao "buid path".
93
Vamos examinar o cdigo gerado linha a linha, e entend-lo.
Vamos executar os mtodos de teste da forma que esto e ver o que acontece, assim:
94
Podemos observar na rea inferior, na aba JUnit, o resultado da execuo de todos os
mtodos de teste. Para cada um deles a mensagem j esperada de "Not yet
implemented" exibida.
95
Aula 05 - JUnit no Eclipse - parte 2
Anterior | ndice | Prximo
JUnit Bsico
Neste tpico vamos comear com um exemplo simples para ilustrar os conceitos bsicos
envolvidos nos testes com JUnit.
package com.iniciantes.java.tutorial;
import junit.framework.TestCase;
public class SimpleTest extends TestCase {
public SimpleTest(String name) {
super(name);
}
SimpleTest.java hosted with by GitHub
import junit.framework.*;
Como ns estamos usando recursos criados pela equipe do JUnit, precisamos importar
as classes que desejarmos usar. A maioria reside no subdiretrio "framework", da a
necessidade do comando import.
A nossa Classe de teste precisa definir seus prprios mtodos para ter qualquer utilidade
para ns. Sendo assim, ela estende a Classe "TestCase" a qual vai nos permitir criar
nossos prprios mtodos de teste.
96
public SimpleTest(String name) {
super(name);
}
Todo teste, recebe um nome para que quando observamos o resultado geral de todos os
testes possamos distinguir qual teste gerou o erro se for o caso. O mtodo construtor
prov esta funcionalidade passando o parmetro recebido para a Classe pai.
Este no momento o nico teste constante do nosso "TestCase". Poderiam haver mais,
tantos quantos voc quisesse. Voc pode ver que podemos definir variveis e efetuar
clculos como qualquer outro programa Java.
Vamos ver o resultado da execuo deste teste, usando: boto direito do mouse sobre a
Classe de teste Run As JUnit Test
97
Se alterarmos o valor da varivel "answer" para algo diferente de "2" e executarmos o
teste novamente, vamos obter um erro, assim:
Este teste simples, testa se 1+1 igual ao valor de answer. Este apenas um exemplo de
teste extremamente simples.
98
Voltando aos nossos testes, vamos comear, implementando um teste real para garantir
que o mtodo Construtor da Classe Pessoa esteja fazendo o que dele se espera. Vejamos
o mtodo Construtor:
public Pessoa() {
nome = "Nome Desconhecido";
maxLivros = 3;
}
Ele deve inicializar uma nova instncia da Classe Pessoa com "Nome Desconhecido"
para o atributo "nome" e "3" para o atributo "maxLivros". O que precisamos fazer
criar um mtodo de teste que verifique se estes valores esto corretos.
Vamos usar alguns assistentes do Eclipse para nos ajudar a criar este teste, assim:
Vamos agora alterar cada um dos parmetros, usando a tecla TAB para navegar entre
eles, o que nos leva ao seguinte:
Agora, temos definida uma instncia "p1" da Classe Pessoa. Reparem no alerta
esquerda da linha 8. Ele indica que a varivel "p1" no est sendo usada.
99
Se uma nova instncia da Classe Pessoa foi criada, o seu mtodo Construtor foi
executado. Vamos agora complementar o nosso teste verificando se os valores dos
atributos esto com os valores esperados, usando o mtodo "assertEquals" do JUnit,
assim:
Para completar, vamos corrigir o erro indicado colocando o ";" ao final da linha, e
adotar o mesmo procedimento para o atributo "maxLivros". O que nos leva ao seguinte:
100
O que estamos fazendo aqui : verificando com o mtodo "assertEquals" se os atributos
esto com os valores esperados depois que o mtodo Construtor da Classe Pessoa foi
executado.
Mas de onde vem o mtodo "assertEquals" ? Ele vem da Classe "TestCase" que a
Super Classe da nossa Classe "PessoaTest". E por que este mtodo no pode ser
chamado da seguinte forma:
Reparem que foram executados 3 de 3 testes. Destes, 2 falharam e um foi bem sucedido.
Aquele sobre o mtodo Construtor que acabamos de implementar. Ele foi bem sucedido,
pois os valores dos atributos da instncia "p1" da Classe Pessoa, foram atribudos pelo
mtodo Construtor conforme o esperado.
101
Executando os testes novamente, vamos obter o seguinte:
Agora, 2 dos testes foram bem sucedidos (os que implementamos), apenas um continua
falhando. Vamos cuidar dele em seguida.
Mais uma vez, usando os mesmos passos, vamos implementar o mtodo de teste para o
mtodo "setMaxLivros" da nossa Classe Pessoa. A ttulo de aprendizado, vamos forar
um erro, usando um nome de varivel no definido. Teremos o seguinte:
102
Mais uma vez, a ttulo de aprendizado, vamos forar um erro no teste do mtodo
"setNome", e ver o que acontece:
Reparem no boto "Compare Actual With Expected Test Result" direita. Se acionado,
ele exibe uma janela com as diferenas entre o que era esperado pelo seu teste e o que
foi obtido do mtodo sendo testado, assim:
Agora, basta voltar o teste sua condio anterior, onde todos os mtodos passam.
103
Aula 06 - "Test-First Development" no
Eclipse
No nosso caso, vamos escrever nosso mtodo de teste unitrio antes de escrever o
mtodo sendo testado. O Eclipse possui um excelente suporte ao uso de TDD.
O mtodo toString()
Nossa prxima tarefa vai ser sobrepor o mtodo "toString". Vamos revisar algumas de
suas caractersticas:
104
Vamos voltar nossa pgina de Scrapbook e ver o que este mtodo faz:
Reparem que a nossa Classe Pessoa, est ali identificada (id=47). Mas de forma geral,
estas informaes no so muito teis. Isso se d, porque este mtodo herdado da
Classe Object, e a Classe Object no "conhece" nada sobre a nossa Classe Pessoa.
O que vamos fazer, chamado de "Override" de mtodo, ou seja, vamos "escrever por
cima" de um mtodo j existente. No estaremos criando um mtodo novo, mas sim
aplicando um novo comportamento um mtodo j existente que a nossa Classe est
herdando de Outra.
Aplicando o TDD
105
5. Quando o teste passar, teremos concludo.
De volta nossa Classe de teste, vamos escrever um mtodo para testar a nossa verso
do mtodo "toString". Mas cumprindo o item 1 da metodologia, vamos pensar em: qual
o comportamento desejado para "o nosso" mtodo "toString" ?
Ao salvar as alteraes, exibida uma tela de alerta indicando que uma parte do cdigo
em memria no pode ser atualizado, assim:
106
Isso ocorre porque o Scrapbook usa o modo Debug do Eclipse, e neste modo as
alteraes feitas no cdigo quando salvas, no substituem automaticamente o que est
em memria.
107
5 - A ltima etapa na verdade, um ciclo, onde refatoramos o mtodo at que o teste
passe. Vamos corrigir o retorno do mtodo, ficando assim:
Todos os testes passaram, e era isso que pretendamos. Observem que existe um alerta
na Classe Pessoa, indicando que o nosso mtodo "toString" se sobrepe ao mtodo
original, assim:
Fazer uso diretamente dos nomes dos atributos no lugar dos respectivos mtodos get,
desta forma:
108
Pode nos causar restries no futuro. Imaginem a seguinte situao: algum resolve
separar o atributo nome nos atributos primeiroNome e sobreNome.
Da forma que fizemos, isso iria requerer uma alterao no nosso mtodo toString da
Classe Pessoa. J se tivssemos usado os mtodos get desta forma:
Vamos portanto, preferir sempre o uso dos mtodos get evitando alteraes
desnecessrias em mtodos que faam uso direto dos nomes dos atributos.
109
Aula 07 - Criando a Classe Livro
Anterior | ndice | Prximo
Neste ponto, ns j temos uma Classe Pessoa capaz de tratar as pessoas para as quais
ns emprestamos Livros. Agora ns precisamos da Classe Livro, para tratar dos Livros
que possumos.
Na janela que apresentada, vamos informar o nome da nossa Classe de teste, deixando
o nome da Classe sendo testada vazio, pois ele ainda no existe, claro.
110
O que vai nos levar a isso:
111
Vamos mais uma vez usar as facilidades do Eclipse para nos ajudar neste processo.
Primeiro, vamos criar o mtodo testLivro para testar o mtodo Construtor. Lembre-se:
basta comear a digitar o modificador "public" e CTRL+Espao, assim:
Vamos seguir adiante usando as facilidades do Eclipse para criar uma instncia da
Classe Livro. Para isso, basta digitar "new" e CTRL+Espao, assim:
112
O que nos apresenta o seguinte resultado:
Reparem que: desta vez o nosso mtodo construtor recebe como parmetro o nome do
Livro.
113
Completando com os mtodos de teste propriamente ditos, teremos:
Reparem que a Classe de teste apresenta um erro de compilao. Claro, pois a Classe
Livro, ainda no existe. Mas mesmo assim, o Eclipse nos permite executar os testes,
ento vamos fazer isso e ver o que acontece, assim:
Resultando no seguinte:
114
Como era de se esperar, l esto os erros indicando a no existncia da Classe Livro.
Vamos ver agora, como o Eclipse pode nos ajudar a criar a Classe Livro e todos os seus
elementos de sustentao.
Comearemos usando o boto direito do mouse sobre o nome da classe com erro, e
solicitar a sua criao, assim:
Na janela que apresentada, precisamos alterar a pasta onde a Classe vai ficar
localizada, pois o valor default usado o mesmo local da Classe de teste, e no isso
que desejamos.
115
Vamos selecionar a pasta padro do nosso projeto, ficando assim:
116
Gerando o seguinte:
117
Selecionado a opo de criar o mtodo Construtor, teremos:
Gerando o seguinte:
118
Mais uma vez, salvando a Classe Livro alterada, podemos cuidar do prximo erro:
119
E agora, salvando a Classe Livro alterada, os erros se foram:
Agora que a nossa Classe de teste no tem mais erros de compilao, podemos voltar
nossa ateno para a Classe Livro propriamente dita, e escrever o nosso mtodo
Construtor.
Mas reparem, que ao gerar o nosso mtodo Construtor de forma automtica, o Eclipse
colocou l um comentrio especial, comeando pela palavra chave "TODO", que indica
uma tarefa pendente.
Mais uma facilidade do Eclipse, uma view que exibe todas as tarefas pendentes.
Vamos acion-la, assim:
120
O que nos apresenta o seguinte:
121
Executando o teste novamente, teremos o seguinte resultado:
Reparem que o nome do autor no o esperado, pois espervamos por "Ziraldo", mas o
mtodo construtor gera "Autor Desconhecido" por default.
Para corrigir esta situao, devemos poder definir o nome do autor, vamos ento
implementar os mtodos get e set que vo nos permitir manipular os atributos da Classe
Livro.
Para isso, vamos mais uma vez, usar as facilidades que o Eclipse nos d, assim:
122
Na janela que se abre, vamos selecionar os mtodos get e set para o atributo autor, j
para o atributo ttulo, apenas o get, visto que podemos definir o ttulo diretamente no
mtodo Construtor, assim:
123
Gerando o seguinte resultado final:
124
De volta ao nosso mtodo de teste, podemos definir o nome do autor correto, assim:
125
Portanto, vamos revisar como foi criada a Classe Livro usando TDD:
126
Aula 08 - Adicionar Pessoa Classe
Livro
Ns j temos uma Classe Pessoa capaz de tratar as Pessoas para as quais emprestamos
Livros. Como j foi explicado, vamos comear na Classe de teste da Classe Livro
(LivroTest). Nela, vamos criar o mtodo "testGetPessoa" da maneira com a qual j
estamos acostumados (usando os facilitadores do Eclipse), assim:
127
Neste mtodo, vamos criar um objeto do tipo Livro e outro do tipo Pessoa, assim:
Em seguida, usamos um novo mtodo para definir para quem o Livro vai ser
emprestado, e preparamos o teste do mesmo, da seguinte forma:
Como estamos lidando com um treinamento aqui, e considerando que comparar objetos
em Java um tanto mais complicado. Ao invs de verificar se o objeto Pessoa retornado
pelo mtodo "getPessoa" igual ao objeto p2 definido anteriormente, vamos comparar
apenas os nomes, assumindo que cada Pessoa tem um nome nico.
Na sequencia, vamos usar o "Quick Fix" do Eclipse para criar estes mtodos,
posicionando o mouse sobre o erro e selecionando a opo "Create method":
128
Obtendo o seguinte resultado:
129
Salvando todo o trabalho, a nossa Classe de teste no ter mais erros:
Vamos agora completar o contedo real dos mtodos criados. Primeiro o mtodo set:
130
Reparem que o Eclipse alerta de que o campo "pessoa" no est definido na Classe
Livro.
Mais uma vez, vamos usar o "Quick Fix" do Eclipse para corrigir isso, selecionando a
opo "Create field", obtendo o seguinte:
O que indica ter sido criado o campo "pessoa" do tipo (Classe) "Pessoa". A diferena
sutil, apenas uma letra maiscula ou minscula distingue o nome de um campo do
nome de uma Classe.
Notem tambm que o Eclipse criou o campo "pessoa" usando a palavra "private" no
incio de definio.
No caso, o nosso campo "pessoa" vai ser "visvel" apenas dentro do escopo desta Classe
onde ele est sendo criado.
Modificadores de Acesso
131
4. protected - o objeto acessado de qualquer Classe ou Subclasse dentro do
"pacote" em que foi criado
Sabendo disso, e se queremos que estes campos estejam disponveis para outras Classes
deste "pacote" vamos retirar os modificadores de acesso, ficando assim:
Vamos agora completar o mtodo get, retornando o objeto do tipo Pessoa j definido
para a Classe Livro:
Salvando tudo que foi feito at aqui, estamos prontos para executar o nosso teste.
Desta vez, podemos experimentar a combinao de teclas de atalho do Eclipse para este
fim. Voc pode estar com outra Classe aberta na rea de edio, contanto que a Classe
cujos testes voc deseja executar esteja selecionada no "Package Explorer", assim:
132
Recapitulando o que vimos at agora:
Refatorao
Vamos aproveitar para falar um pouco sobre "refactoring". Pois no podemos esquecer
ele, um dos passos da metodologia TDD que estamos aplicando aqui.
Podemos dar aqui um exemplo bem simples de refatorao. Voltando nossa Classe
LivroTest, reparem no seguinte trecho de cdigo:
Ele possui algumas deficincias tais como: Uso de variveis desnecessrias e nomes no
representativos (quem est com o livro no necessariamente o seu dono).
Primeiro vamos comentar o cdigo atual que vamos refatorar usando o atalho: CTRL +
Shift + C, lembrando que ele do tipo on/off, ou seja, cada vez que acionado, comenta
ou descomenta o trecho de cdigo selecionado:
133
Vamos refazer este trecho da seguinte forma:
E assim sendo, podemos remover o cdigo anterior que foi comentado, ficando assim:
Vamos entender um pouco mais sobre a linha de cdigo que acabamos de implementar:
Neste momento, ns temos duas Classes de teste: PessoaTest e LivroTest, e vamos criar
mais. Seria conveniente ter uma forma de executar todos os testes de uma s vez.
Podemos obter isso criando uma nova Classe de teste que agregue as demais.
134
Suite de testes
Podemos agregar vrias Classes de teste, criando uma "Suite" de testes, da seguinte
forma:
135
A prxima janela, nos permite especificar as caractersticas da nossa Suite de testes. J
so exibidos valores default, e entre eles podemos ver que as Classes de teste j
existentes, esto selecionadas. Vamos aceitar estes valores default e finalizar:
136
Obtendo o seguinte:
Sem entrar em maiores detalhes aqui, fica claro que medida que novas Classes de teste
forem criadas, basta incluir novas linhas relativas a elas na nossa Suite de teste.
137
Mais uma vez, estando com a Classe da nossa Suite de testes selecionada no "Package
Explorer", vamos usar a combinao de teclas: Alt + Shift + X, T.
Reparem que agora, executando os testes a partir da nossa Suite de testes, todos os
mtodos de teste de todas as nossas Classes de teste so executados de uma s vez.
138
Aula 09 - Listas e ArrayList
Agora vamos juntar tudo isso e comear a pensar na nossa Classe Biblioteca.
O ideal portanto, que o nosso programa possa lidar com um nmero ilimitado de
livros e pessoas.
No por acaso, a linguagem Java possui algumas Classes criadas para lidar com listas.
Ns vamos usar uma delas chamada: ArrayList.
Caractersticas de um ArrayList
Pode lidar com um nmero qualquer de Objetos numa lista
Possui mtodos j construdos para gerenciar a lista
Vamos voltar a usar o Scrapbook para nos familiarizar com a Classe ArrayList.
139
Abrindo o Scrapbook, se existir algum cdigo anterior, podemos exclu-lo:
Em seguida:
140
E na sequncia:
141
O fato de importar o pacote "java.util", significa que podemos digitar simplesmente
"ArrayList" em vez de "java.util.ArrayList" no nosso cdigo.
O nosso prximo passo, vai ser criar um ArrayList. Fazemos isso usando o comando
"new" que a essa altura j conhecemos. sempre usando os facilitadores do Eclipse.
Sobre este assunto, cabe aqui uma dica. Aparentemente, nas verses mais recentes do
Eclipse, o assistente de cdigo no est funcionando para o comando "new" no
Scrapbook. Para solucionar este problema, siga os seguintes passos: Window
Preferences Java Editor Templates. Localize o item "new", assim:
142
Clique "OK".
143
E "OK" novamente.
Isso deve fazer funcionar o "code complete" para o comando new no Scrapbook.
144
Onde o construtor "<String>", define para o compilador que a nossa lista s vai poder
conter Objetos do ipo String. Se tentarmos colocar qualquer outro tipo de Objeto na
lista, vamos receber um erro de compilao. Caso no especificado este construtor, a
lista dar suporte a qualquer tipo de Objeto Java. Mas esta no a forma mais comum
de uso.
Vamos agora adicionar elementos na nossa lista usando o mtodo "add", assim:
145
Convm ressaltar que os ndices das listas em Java comeam com 0 (zero).
A ttulo de aprendizado, vamos tentar adicionar um Objeto do tipo inteiro nossa lista.
146
Aplicando a Classe ArrayList
Agora que j estamos familiarizados com a Classe ArrayList, vamos us-la tratar os
nossos livros e pessoas.
147
Seguindo adiante, vamos criar uma pessoa e associar esta pessoa a um dos livros:
Mais uma vez, inspecionando vemos que agora existe uma pessoa associada ao livro l1:
148
Podemos observar aqui, a hierarquia dos Objetos envolvidos: A nossa lista (ArrayList),
contm l1 (Livro) que por sua vez contm p1 (Pessoa).
Agora, vamos ver mais detalhadamente alguns outros mtodos da Classe ArrayList.
149
Usando a hierarquia vista anteriormente, podemos obter a pessoa associada diretamente
do Objeto livro recuperado:
E assim:
150
Inspecionando, teremos um String com o nome da pessoa:
lista.get(0).getPessoa().getNome()
151
O que vai nos retornar a localizao do Objeto l2 na lista:
Sendo ele o segundo elemento da lista (ndice igual a 1), lembrando que o primeiro
elemento da lista possui ndice igual a 0 (zero).
152
Inspecionando, podemos ver que a nossa lista agora possui apenas um Objeto do tipo
Livro, e que ele no l1 e sim o l2, pois o l1 acabou de ser removido:
Agora que sabemos como inserir, localizar e excluir elementos de uma lista, podemos
comear a usar estas listas nas nossas aplicaes. o que vamos fazer na prxima aula.
153
Aula 10 - Classe Biblioteca
Anterior | ndice | Prximo
Library e Biblioteca
O nome da nossa Classe de Teste vai ser "BibliotecaTest". E vamos deixar o nome da
Classe sendo testada em branco, pois ela ainda no existe.
154
Obtendo o seguinte:
155
Aqui vamos usar um novo tipo de teste. o "assertTrue". O objetivo aqui, vai ser
verificar se a nossa instncia da Classe Biblioteca, possui um ArrayList contendo Livros
e outro contendo Pessoas. Dessa forma:
Desta forma, sabemos que o nosso mtodo Construtor da Classe Biblioteca, alm de
criar a instncia da nossa Biblioteca, vai precisar tambm adicionar a ela uma lista de
Livros e outra de Pessoas.
Vamos prosseguir usando o "Quick Fix" do Eclipse para nos ajudar a criar a Classe para
atender a este Teste. Posicionando o mouse sobre o erro, temos:
156
Escolhendo a opo de Criao da Classe...
157
Na janela que se apresenta, precisamos lembrar de alterar o nome da pasta onde a Classe
ser criada para "src".
A seguir, ainda usando o "Quick Fix" do Eclipse, vamos criar o Construtor da Classe:
Gerando o seguinte:
158
Vamos prosseguir usando o "Quick Fix" do Eclipse para solucionar os problemas
apontados na nossa Classe de teste, e ao mesmo tempo ir completando a nossa Classe
Biblioteca.
Em seguida, devemos nos preocupar com os campos "livros" e "pessoas", mas reparem
que ambos so do tipo "ArrayList", e este tipo no est sendo reconhecido pelo
159
compilador. A soluo para isso simples, basta importar o pacote java.util que contm
este tipo de dado.
Fazendo conforme indicado, o pacote importado para a nossa Classe de teste e o erro
desaparece.
160
No esquecendo que para que os erros desapaream da Classe de teste, a Classe
Biblioteca deve ser salva a cada alterao. E tambm que alguns desses erros, s
desaparecerem, se a prpria Classe de teste for salva.
161
Neste momento, com todo o trabalho feito at aqui j salvo, no h mais erros de
compilao no projeto.
162
Lembrando tambm, que existe uma outra forma de acessar os problemas e advertncias
para trat-los. a aba "Problems", geralmente localizada na parte inferior da janela do
Eclipse.
Antes disso, no entanto, vamos cuidar para que os campos da Classe Biblioteca possam
ser acessados por outras Classes dentro do mesmo pacote. Para isso, como j
mencionado anteriormente, basta remover o modificador "public" da definio dos
campos, assim:
163
Com isso, a nossa Classe de teste pode acessar estes campos da forma correta, mas
classes fora deste pacote, no podem.
A prxima interveno em relao aos campos, atender os alertas, e definir que tipo de
Objeto vai ser tratado em cada uma das Listas.
Para isso, vamos usar a aba "Problems" j citada, selecionar uma das linhas, acionar o
boto direito do mouse e selecionar "Quick Fix", assim:
Na janela que se abre, selecionamos as duas linhas com este mesmo problema, e
escolhemos o ajuste
"Add type arguments to ArrayList", assim.
164
Com isso, temos o problema parcialmente resolvido:
165
Mas precisamos substituir os pontos de interrogao pelos tipos de Objetos realmente
desejados, assim:
Podemos agora ajustar o Construtor propriamente dito, comeando pelo nome do campo
de parmetro, de "string" que foi gerado automaticamente para "nome", que bem mais
apropriado.
166
Em seguida, vamos atribuir o parmetro "nome" recebido, ao atributo "nome" da
instncia que estiver sendo criada, assim:
Existem algumas caractersticas que devem ser ressaltadas nestas duas linhas.
167
"<Tipo>", necessrio o uso de () para finalizar o construtor de ArrayList, pois ele no
possui parmetros.
new TipoGenrico<TipoEspecfico>();
Reparem que gerado um alerta para o fato de a varivel local "livros" no ter sido
usada no escopo do mtodo. Este um erro muito comum de acontecer com iniciantes
em Java, portanto, vamos evit-lo, certo?
Com a nossa Classe Biblioteca criada, hora de executar o nosso teste, e ver o que
acontece.
168
Se tudo correu bem, o teste deve passar:
Um detalhe que deve ser observado em relao aos testes de JUnit, que os nomes dos
mtodos de teste devem comear por "test".
Mais uma vez, a ttulo de aprendizado, vamos ver o que ocorre se isso no for feito.
Com o nome do mtodo alterado desta forma, e executando o teste novamente, teremos:
169
Reparem no alerta dizendo que no foi encontrado nenhum teste na Classe. Tudo por
conta do nome fora do padro esperado. Fiquem atentos!
Uma ltima observao a respeito dos testes: eles podem nos ajudar saber de antemo,
qual tipo de dado suportado por cada mtodo.
170
Aula 11 - Primeiros Mtodos da Classe
Biblioteca
Para providenciar o que est faltando, vamos continuar a usar a metodologia TDD, e os
facilitadores do Eclipse.
Sendo assim, nossa primeira ao vai ser criar os mtodos "get" para os seguintes
campos:
171
Na barra de menus selecionar: Source Generate Getters and Setters...
172
Obtendo o seguinte:
173
Aprendendo e aplicando um pouco mais sobre a metodologia TDD, aps qualquer
modificao como a que acabamos de fazer, uma boa hora de reexecutar os testes para
garantir que as nossas alteraes no tenham gerado nenhum erro. A palavra de ordem
: "Ficou em dvida, reexecute os testes". Portanto, vamos fazer isso.
Mais uma vez, uma das formas de se fazer isso, : com a Classe BibliotecaTest
selecionada.
174
Na barra de menus selecionar: Run Run As JUnit Test.
Obtendo o seguinte:
Como era de se esperar, os testes continuam passando, afinal era uma alterao bem
pequena e foi feita usando um dos facilitadores do Eclipse, mas serve para exercitar o
uso de TDD.
O nosso prximo passo ser escrever um mtodo de teste para os mtodos responsveis
por adicionar e remover Livros.
Para evitar duplicidade de cdigo, pois estes objetos podem ser teis em outros mtodos
que ainda vo ser criados, existe no JUnit o mtodo "setUp()", que como o nome indica
usado para inicializar o nosso procedimento de teste com tudo que for necessrio.
175
oneTimeSetUp()
setUp()
testEmptyCollection()
tearDown()
setUp()
testOneItemCollection()
tearDown()
oneTimeTearDown()
Mas isso assunto para um curso mais avanado. No momento, vamos abrir a nossa
Classe de teste "BibliotecaTest", e cri-lo, assim:
Mas existe um problema com esta implementao. Ocorre que as variveis: l1, l2, p1,
p2 e b1, so locais ao mtodo setUp. Desta forma, elas no estariam disponveis para os
demais mtodos da nossa Classe de Teste.
A soluo para isso, simples: basta passar a definio das variveis para o escopo da
Classe, transformando-as em "campos". E mais uma vez, o Eclipse nos ajuda nesta
tarefa com um dos seus facilitadores.
bom que se tenha em mente, que em geral, o Eclipse os d ao menos trs formas
diferentes para obter um determinado resultado: Um usando a barra de menus, outro
usando o menu de contexto no prprio cdigo fonte e um terceiro usando teclas de
atalho.
Com a varivel l1 selecionada, acionar o boto direito do mouse sobre ela e no menu de
contexto, selecionar: Refactor Convert Local Variable to Field...
176
Na tela que se abre em seguida, aceitar os valores default e acionar o boto OK.
Obtendo o seguinte:
177
Agora, usando a barra de menu:
Na tela que se abre em seguida, aceitar os valores default e acionar o boto OK.
178
Obtendo o seguinte:
179
Com a varivel p1 selecionada, acionar: Alt + Shift + T. Isso faz surgir direto o menu de
contexto especfico de Refatorao, no qual basta selecionar: Convert Local Variable to
Field..., ou simplesmente usar a tecla "v".
Na tela que se abre em seguida, aceitar os valores default e acionar o boto OK.
180
Obtendo o seguinte:
Fazendo o mesmo para as variveis: p2 e b1, usando, dos mtodos expostos o que voc
julgar mais cmodo, obteremos o seguinte:
181
uma dvida frequente dos iniciantes neste ponto, querer saber qual a diferena entre
uma Varivel e um Campo?
Como vimos nos procedimento acima, todos so Variveis, s que: aquelas variveis
definidas a nvel da Classe, so tambm chamadas de Campos (Fields), apenas
nomenclatura.
Feito isso, podemos agora criar o nosso novo mtodo de teste para a incluso de Livros.
Mais uma vez, usando os facilitadores do Eclipse, inicie a construo do mtodo pela
inicializao dos objetos necessrios, assim:
182
Em seguida, precisamos garantir que o objeto principal do nosso teste esteja vazio,
assim:
183
Ocorre que: o mtodo "addLivro" ainda no existe. Vamos usar o auxlio do Eclipse
para a correo de erros que aparece na imagem acima, e criar o mtodo (vazio por
enquanto) na Classe Biblioteca, assim:
Uma vez adicionados os Livros, devemos garantir que o objeto no est mais vazio e
possui 2 (dois) itens, assim:
Alm disso, devemos garantir que os ndices dos objetos so os esperados, assim:
184
O prximo passo, testar da mesma forma os efeitos do mtodo "removeLivro".
185
Alm dos testes j efetuados, podemos ainda garantir que o ndice do segundo Livro,
passou a ser 0 (zero), lembrando que: quando havia dois objetos do tipo Livro, o
primeiro tinha ndice 0 (zero) e o segundo o ndice 1 (um). Agora que retiramos o
primeiro Livro, o ndice do segundo Livro deve passar a ser 0 (zero).
Para finalizar, vamos fazer de forma semelhante o teste dos efeitos de remover o Livro
que havia sobrado, assim:
186
Devemos ter voltado situao inicial, ou seja, o objeto deve estar vazio.
Agora, devemos usar exatamente os mesmos procedimentos para criar os mtodos para
adicionar e remover Pessoas, usando claro a metodologia TDD e comeando pelos
seus respectivos testes.
187
E os mtodos implementados na Classe Biblioteca, devem ficar desta forma:
Com todos os mtodos prontos, devemos executar novamente os testes, neste momento,
o ideal que a nossa suite de testes seja alterada incluindo a classe "BibliotecaTest",
assim:
Com a nossa Suite de testes (AllTests) alterada desta forma, podemos testar toda a
aplicao e devemos obter sucesso, assim:
188
Podemos verificar neste momento, usando a Viso "Outline", que a Classe Biblioteca j
possui vrios mtodos implementados:
189
Aula: 12 - Os mtodos de Emprstimo e
Devoluo
Agora que temos os mtodos bsicos da Classe Biblioteca criados, vamos implementar
a parte de Emprstimo e Devoluo de Livros.
Estes mtodos vo ver um pouco mais complexos do que os que fizemos at aqui.
Prosseguindo no uso da metodologia TDD, vamos criar um mtodo de teste para tudo
isso, assim:
testMovimentaLivro
Planejamento e Design
Como j foi mencionado, estes mtodos vo ser um pouco mais complexos, portanto,
vamos cuidar do seu planejamento e design antes de comear a codificar.
190
3. Caso contrrio, simplesmente retornar ao mtodo chamador que o emprstimo
no ocorreu.
Agora que sabemos o que o mtodo deve fazer, vamos estabelecer o "como" ele vai
fazer, definindo a sua assinatura:
Com tudo isso em mente, podemos iniciar a construo do nosso mtodo de teste, na
Classe BibliotecaTest.
Nada de novo aqui. Usando os facilitadores do Eclipse, estamos prontos para comear.
191
Neste ponto, vamos usar uma sintaxe um pouco diferente do mtodo assertTrue do
JUnit. De forma que: caso o retorno do mtodo sendo testado seja falso, uma mensagem
seja exibida, assim:
Lembrando que o mtodo "emprestimo", que ainda vamos criar, retorna um valor
booleano, indicando se a operao foi bem sucedida ou no.
Depois disso, supondo que o emprstimo tenha sido bem sucedido, devemos verificar se
o nome da Pessoa atribudo ao Livro, o que se espera, assim:
192
Lembrando aqui, que devemos recuperar o nome da Pessoa, e no comparar com o
objeto Pessoa simplesmente. Como j foi mencionado, comparar dois objetos em Java
pode ser enganador...
Tambm supondo que o emprstimo foi bem sucedido, podemos nos certificar que: uma
tentativa de emprestar o mesmo livro vai falhar, usando agora o mtodo assertFalse do
JUnit. De forma que: caso o retorno do mtodo sendo testado seja verdadeiro, uma
mensagem seja exibida, assim:
Guarde na memria:
193
Com tudo isso, o mtodo de Emprstimo est razoavelmente bem criticado.
Usando a mesma tcnica e os mesmo dados, vamos fazer as verificaes para o mtodo
de Devoluo, assim:
O prximo passo, usar o "Quick Fix" do Eclipse para nos ajudar a criar os mtodos
que precisamos:
194
Fazendo o mesmo para o mtodo de Devoluo:
Teremos:
195
Neste ponto, estamos aptos a implementar os mtodos de Emprstimo e Devoluo
propriamente ditos.
Por exemplo: o mtodo de Emprstimo, vai precisar atribuir uma Pessoa a um Livro,
mas apenas se o Objeto Pessoa estiver vazio (null).
Desta forma:
196
O comando if, que de uso frequente, e portanto precisa ser bem estudado.
O operador de igualdade ==, que no deve ser confundido com o de atribuio
=. Um erro frequente entre os iniciantes.
O Literal1 null, que define um Objeto2 vazio.
Notas:
1. Diferente do que muitos imaginam, "null" no uma palavra reservada. um
Literal.
2. Entenda-se qualquer Objeto: um Campo, uma Varivel, ou a instncia de uma
Classe.
Referncias:
O comando if.
O operador de igualdade.
O literal null.
if (l1.getPessoa() == null)
if (l1.getPessoa() != null)
197
Estamos constatando que j existe uma Pessoa atribuda ao Livro "l1".
Agora, estamos prontos para testar tudo que fizemos at agora. Como as modificaes
foram feitas apenas na Classe Biblioteca, podemos executar apenas os testes da Classe
correspondente: BibliotecaTest.
198
Aulas: 13 e 14 - Evoluido os mtodos de
Emprstimo e Devoluo
A essa altura, poderamos pensar que o nosso mtodo de Emprstimo, est pronto.
Mas ser que est mesmo? Algum lembra que existe um limite de Livros que uma
Pessoa pode pegar emprestado?
Lembrou? Ento vamos cuidar disso. Mais uma vez, usando TDD, vamos comear
pelos testes.
Desta forma:
199
O primeiro teste com assertTrue, garante que eu devo conseguir emprestar o Livro "l2"
para a Pessoa "p1".
Agora, para que possamos testar se o nmero mximo de Livros que uma Pessoa pode
pegar emprestado foi atingido, precisamos antes de mais nada saber, quantos livros
aquela Pessoa j havia pego emprestado.
quantidade = b1.getLivrosPorPessoa(p1).size();
200
Mas vamos manter o padro, e comear pelos testes:
Isso chamado de: redundncia de cdigo. Para evitar esse tipo de situao, assim que
uma repetio de um determinado trecho de cdigo detectada, devemos procurar
transformar o contedo deste trecho, num mtodo parte.
mais um caso de Refatorao de Cdigo, como vimos no item 12, aula 08.
Com as linhas que nos interessam selecionadas, na barra de menus, selecionar: Refactor
Extract Method..., ou usar o atalho: Alt + Shift + M.
201
Na Janela que se abre, especificar o nome desejado para o mtodo, assim:
Isso faz com que todas as ocorrncias daquelas linhas sejam substitudas pela chamada
do novo mtodo que foi automaticamente criado pelo Eclipse. Desta forma:
202
Agora, com o mtodo addItems criado, podemos fazer uso dele no nosso novo mtodo
de teste:
203
Prosseguindo na implementao, vamos fazer os testes, na seguinte sequncia:
204
Aqui, usamos mais uma vez o recurso de Lista (ArrayList).
Prosseguindo, vamos usar novamente o Quick Fix do Eclipse para criar o mtodo.
205
A qual, merece algumas explicaes. Vamos ver linha a linha:
64. Define o ArrayList resultado que vai armazenar a Lista que o mtodo deve
retornar.
66. O "if" que define as condies que vo eleger um elemento para a nossa Lista.
o O Livro deve estar emprestado a uma Pessoa.
o O nome da Pessoa a qual o Livro foi emprestado
deve ser igual ao da Pessoa passada como parmetro
Observem tambm, que o "if" da linha 66 possui duas condies interligadas. Neste
caso, foi usado o operador &&, que o "E lgico", ou seja, para que a condio como
um todo seja satisfeita, cada uma de suas partes deve ser satisfeita.
muito importante notar que usamos o mtodo ".equals()" para comparar o String
nome da Pessoa. Esta a forma correta de se comparar Objetos em Java. O operador
"==", s deve ser usado para comparar tipos primitivos (int, boolean, char, double, etc.).
Depois disso tudo, hora de executarmos os testes novamente. Vamos mais uma vez,
selecionar a Classe de Teste BibliotecaTest e usar o atalho j conhecido: Alt + Shift + X
+ T:
206
Podemos ver que apesar de o teste do mtodo "movimentaLivro" ter falhado, o teste do
mtodo "getLivrosPorPessoa", passou! Isso est correto, pois ns ainda no terminamos
o mtodo "movimentaLivro".
Neste ponto, algum pode perguntar: mesmo necessria a primeira condio do if,
verificando se o objeto Pessoa associado ao Livro no est nulo? Vamos alterar o cdigo
desta forma:
Esta uma das mensagens de erro mais comuns no ambiente Java. E o motivo sempre
o mesmo: A tentativa de manipular um Objeto inexistente (null).
No nosso caso, com a retirada do teste, os Livros que no tinham sido atribudos a
nenhuma Pessoa, passaram a ser considerados, e no primeiro Livro da nossa Lista que
no tinha Pessoa atribuda, onde tentamos obter o nome da Pessoa com
"umLivro.getPessoa().getNome()" ocorreu o erro.
207
Tendo aprendido mais um pouco sobre os possveis erros e necessidade de testes, vamos
voltar o cdigo situao anterior com as duas condies:
48. Foi inserida uma segunda condio no "if" para verificar se a quantidade de
Livros que a Pessoa passada como parmetro pediu emprestado, ainda menor
que o limite.
Com estas alteraes feitas, hora de testar novamente, selecionando a Classe de Teste
BibliotecaTest e usando o atalho: Alt + Shift + X + T:
208
Agora sim, o teste deve passar.
E a est. Todos os testes devem ter passado e a nossa aplicao j evoluiu bastante!
209
Aula: 15 - Finalizando a Classe
Biblioteca
J estamos quase no fim da nossa tarefa. Os mtodos bsicos j foram criados. Agora,
precisamos criar os mtodos finais:
getLivrosDisponiveis
getLivrosIndisponiveis
toString para a Classe Livro
toString para a Classe Biblioteca
O mtodo getLivrosDisponiveis
Este mtodo vai retornar uma lista dos livros que ainda no foram emprestados.
210
Prosseguindo, podemos copiar e alterar linhas de mtodos anteriores at chegar a este
ponto:
Depois de copiar e alterar mais alguma linhas de cdigo, o mtodo de teste deve estar
assim:
211
O prximo passo codificar o mtodo getLivrosDisponiveis propriamente dito.
212
Se tudo correu bem na codificao, os testes devem passar:
O mtodo getLivrosIndisponiveis
De forma anloga ao mtodo anterior, vamos criar o mtodo de teste para este mtodo,
tendo como base o mtodo testGetLivrosPorPessoa.
Depois de copiar e alterar algumas linhas, devemos ter o mtodo de teste assim:
213
Criando o mtodo...
Com o mtodo vazio salvo, e de volta a nossa Classe de Teste, devemos estar livres dos
erros.
Sendo:
214
3. Um Livro indisponvel
4. Dois Livros indisponveis
Com o trabalho feito at aqui salvo e com a classe BibliotecaTest selecionada, vamos
usar o atalho: Alt+Shift+X, T para executar os testes desta classe.
Este mtodo deve ser sobre escrito na maior parte das Classes.
Mais uma vez, comeando pelos testes, vamos abrir a nossa Classe de testes para
Livros.
215
Aproveitando algumas linhas do mtodo testGetPessoa, e efetuando as alteraes
necessrias, vamos ter o seguinte resultado:
216
A esta altura, o contedo deste mtodo tambm deve ser familiar a todos, mas vamos
descrever as suas principais linhas:
Com o trabalho feito at aqui salvo e com a classe LivroTest selecionada, vamos usar o
atalho: Alt+Shift+X, T para executar os testes desta classe.
Diferente da anterior, a Classe Biblioteca, pode conter uma grande quantidade de Livros
e Pessoas.
217
Criando o mtodo...
218
Mais uma vez, com o trabalho feito at aqui salvo e com a classe BibliotecaTest
selecionada, vamos usar o atalho: Alt+Shift+X, T para executar os testes desta classe.
Para finalizar esta aula, podemos executar toda a Suite de testes para garantir que todas
as Classes continuam funcionando adequadamente.
E a est. Todos os testes devem ter passado e a nossa aplicao est praticamente
pronta!
219
220
Aula: 16 - Criando o mtodo main e o
arquivo JAR
O progresso at agora
Nesta ltima aula ns vamos criar um programa independente para criar e modificar
Objetos do tipo Biblioteca.
Um exemplo:
Se a nossa aplicao tivesse algum tipo de Interface Grfica com o Usurio (ou GUI),
bastaria apresentar um formulrio no mtodo "main" e deixar o usurio prosseguir da.
Criar uma Interface Grfica em Java, est alm do escopo deste curso, portanto:
No nosso caso:
Vamos simular uma ao do usurio sobre as nossas Classes no mtodo "main" e exibir
os resultados na console do sistema.
Para finalizar, assim que tivermos tudo isso funcionado dentro do Eclipse, vamos usar o
seu "Ajudante de Exportao" para criar uma arquivo executvel do tipo JAR.
221
Arquivos do tipo JAR, podem ser executados em qualquer computador (ou dispositivo)
que execute Java (que tenha o JRE ou JDK instalados).
Na prtica
Podemos colocar o mtodo "main", em qualquer das nossas Classes, mas vamos fazer
isso, na Classe Biblioteca, considerando que ela a principal Classe da nossa Aplicao.
Mais uma vez, usando o assistente de cdigo do Eclipse, vamos deixar que ele crie o
mtodo para ns.
Vamos digitar a palavra "main", seguida por Ctrl+Espao e aceitar o mtodo "main"
proposto:
222
Obtendo o seguinte:
O mtodo "main", um mtodo esttico (static), que no retorna nada (void), e recebe
como parmetro um Array de Strings chamado "args" (String[] args).
Isso permite a um programa Java ler parmetros da linha de comando. No vai ser o
caso do nosso exemplo.
223
Completando para nos atender:
224
O prximo passo, exibir o status atual da Biblioteca. Vamos criar o mtodo
"imprimeStatus" para esta finalidade. Mtodo esse que ser utilizado sempre que for
necessrio exibir o status atual da Biblioteca medida que o nosso programa vai sendo
executado.
225
Obtendo:
226
Usando a mesma estratgia, vamos criar novas situaes:
227
Obtendo:
Depois de devidamente alterado para exibir a situao de cada Livro, de cada Pessoa e
da Biblioteca como um todo, o mtodo deve ficar assim:
228
Agora que a nossa Classe possui um mtodo "main", ela pode ser considerada uma
aplicao Java, e como tal pode ser executada.
Para isso, temos algumas opes: usando o menu principal, usando teclas de atalho ou
usando o menu de contexto.
Com a Classe Biblioteca selecionada, usar o boto direito do mouse para acionar o
menu de contexto e selecionar: Run As Java Application
229
O que deve produzir um resultado semelhante a este na console:
Agora que temos a nossa aplicao funcionando no Eclipse, podemos nos preocupar em
gerar um arquivo "executvel" para ela.
No ambiente Java, este arquivo "executvel" do tipo JAR (ou Java Archive).
Este arquivo vai poder ser executado fora do Eclipse em qualquer sistema que seja
compatvel com Java.
230
E na janela que se abre: Java JAR file
231
Na janela seguinte, fica claro o motivo de ter criado os nossos testes em um pacote
separado. Neste momento, podemos exportar apenas o cdigo fonte que o que
efetivamente necessrio.
232
Na tela seguinte vamos aceitar os valores default:
233
Na prxima tela vamos especificar a Classe que contm o mtodo "main":
234
Acionando o boto "Browse":
235
A qual selecionada:
236
Feito isso, o arquivo JAR deve ter sido gerado:
237
Para testar este nosso executvel fora do Eclipse, ser necessrio abrir uma console do
sistema operacional no diretrio onde o arquivo JAR foi gerado.
No Windows XP, a maneira clssica era usar o comando "Run" ou "Executar", digitar o
comando "cmd", para chamar a console do sistema, e a partir da, chegar ao diretrio
desejado e executar os comandos necessrios.
Se voc j est usando o Windows 7 como eu, vai aqui uma dica de como habilitar esta
opo no menu "Start" ou "Iniciar":
238
Na tela que se abre, acione o boto "Customize" ou "Customizar":
239
Use a barra de rolagem at localizar o comando Run e selecione-o:
240
Clique OK, Apply e OK novamente nas telas anteriores.
241
De volta ao nosso objetivo, vamos usar esta opo Run do menu Start. Na tela que se
abre, vamos digitar "cmd".
242
O que deve fazer abrir uma console do sistema:
Agora, com os comandos normais do DOS, devemos nos posicionar no diretrio onde o
arquivo JAR foi gerado:
243
E l emitir o comando para executar a nossa aplicao:
244
Lembrando que o comando "java" pode ser executado de qualquer lugar, pois a sua
localizao est contida na varivel de ambiente do sistema chamada PATH.
245