You are on page 1of 245

O que o curso?

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.

No mais, simplesmente querer aprender e gostar de pesquisar.

Este curso no tem durao pr-determinada. Voc define o seu ritmo e em


consequncia a durao do curso. O material est todo disponvel aqui nestas pginas,
portanto basta seguir os links e as instrues.

O material, como diz o ttulo, destinado a iniciantes, ensinamos o bsico para que voc
fique confortvel ao prosseguir nos estudos mais avanados.

Para incentivar a interatividade, foi criada uma lista de discusso. Os estudantes


interessados, podem se inscrever e trocar informaes entre si e com instrutores
voluntrios (assim que estes estiverem disponveis).

Por que Java com Eclipse?

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.

Seguem algumas das caractersticas do Eclipse que o tornaram um sucesso de mercado:

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.

Assuntos abordados no Curso

O Bsico do Eclipse para desenvolvimento de aplicaes Java.


O Bsico do Java e Programao Orientada a Objetos.
O Bsico do TDD (Test-driven development) e testes unitrios no Eclipse.

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.

A questo que screencasts so mais difceis de produzir e manter atualizados. Minha


inteno com esta verso Web do curso composta por pginas estticas em Portugus,
seja mais fcil de incrementar e manter atualizada no futuro.

Leitura offline

Quem preferir existe a opo de baixar o texto em formato PDF para leitura offline.

Viso geral de Java

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.

Para implementar esta nova plataforma, eles precisavam de uma linguagem de


programao que atendesse a dois principais requisitos: ser compacta e ser confivel.
Bill Joy, um dos fundadores da Sun, j havia proposto uma nova linguagem de
programao, combinando as linguagens "Mesa" e "C", e chegou a sugerir que os
engenheiros da Sun produzissem um ambiente orientado a objetos, baseado no C++.

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.

A interface grfica possua um sistema de ajuda interativa apresentado por um


personagem virtual, um mascote criado por Joe Palrang que hoje amplamente
conhecido no mundo Java, o Duke. O *7 tinha a habilidade de controlar diversos
dispositivos e aplicaes. Tudo isso foi criado usando a linguagem Oak. Infelizmente,
apesar de todos os esforos, esta tecnologia acabou se mostrando muito avanada para a
indstria de TV a cabo daquela poca.

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.

Rapidamente, a maioria dos navegadores Web incorporaram a habilidade de executar


applets Java nas pginas Web, fazendo com que Java se tornasse popular ainda mais
rpido. Com o advento do Java 2 (lanado inicialmente como J2SE 1.2 no incio de
1999), verses diferentes e customizadas comearam a surgir (J2EE, J2ME), em 2006
por questes de marketing a Sun renomeou as verses mais novas de J2 para: Java EE,
Java ME e Java SE respectivamente.

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

A linguagem Java, apenas um dos componentes da plataforma Java.

O termo "Java" na verdade se refere a um grupo de produtos e especificaes da Sun


Microsystems, atualmente uma subsidiria da Oracle, que juntos constituem uma
plataforma de desenvolvimento de software e que permitem a instalao e uso destes
softwares em vrios ambientes (Sistemas Operacionais e Hardwares) diferentes.

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?

A execuo de um programa java se d em trs aes distintas:

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

3. Execute o programa contido no arquivo "bytecode". A Mquina Virtual Java,


implementa o interpretador Java "java", Este interpretador, processa o arquivo
"bytecode" gerando instrues equivalentes de forma que a plataforma em uso
(Sistema Operacional e Hardware) consiga entender e executar estas instrues.

8
Instalando e Aprontando o Java

Primeiros passos:

Em primeiro lugar precisamos ter disponvel a plataforma de desenvolvimento Java.

Para tal, devemos acessar o site da Oracle que disponibiliza as vrias opes para
Download aqui.

No caso de desenvolvimento em Java, o recomendado o JDK Se voc no tiver


problemas de espao nem de performance, opte pelo Java EE que o que se encontra
em ambientes corporativos. Se tiver algum tipo de limitao, opte pelo Java puro, que
menor e mais simples.

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.

O processo de instalao bem simples, mas se precisar de detalhes, acesse aqui.

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.

O Eclipse composto por um ambiente integrado de desenvolvimento (IDE) e um


sistema de plugins que pode ser estendido pelos usurios. Ele foi quase totalmente
escrito em Java, porm o seu sucesso se deve em boa parte ao fato de ser genrico o
suficiente para atender vrias outras linguagens tais como: Ada, C, C++, COBOL, Perl,
PHP, Python, R, Ruby (incluindo a framework Ruby on Rails), Scala, Clojure, Groovy e
Scheme.

recomendado nesse momento que voc observe na seo de Atualizaes, um artigo


sobre o que mudou no Eclipse verso "Juno", que em Maio de 2013, a verso mais
atual.

Um pouco de Histria:

As origens do Eclipse remontam ao VisualAge da IBM (uma IDE da dcada de 80),


escrita em Smalltalk. Na dcada de 90, o VisualAge se tornou a IDE padro para os
ambientes de desenvolvimento da IBM.

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 Novembro de 2001, foi formado um consrcio para o futuro desenvolvimento do


Eclipse como um projeto de cdigo aberto. Em Janeiro de 2004 a Eclipse Foundation
foi criada.

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:

Release Data Verso Projetos


Juno 27 de Junho 2012 4.2 Juno projects
Indigo 22 de Junho 2011 3.7 Indigo projects
Helios 23 de Junho 2010 3.6 Helios projects
Galileo 24 de Junho 2009 3.5 Galileo projects
Ganymede 25 de Junho 2008 3.4 Ganymede projects
Europa 29 de Junho 2007 3.3 Europa projects
Callisto 30 de Junho 2006 3.2 Callisto projects
Eclipse 3.1 28 de Junho 2005 3.1
Eclipse 3.0 21 de Junho 2004 3.0

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.

Instalando o Eclipse Indigo 3.7

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

O diretrio padro criado ao descompactar o arquivo ZIP o "eclipse" se voc j tiver


outra verso do Eclipse instalada (que foi o meu caso), basta renomear o diretrio para
"eclipseEE" por exemplo:

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.

Isso se deve ao fato de o arquivo de configurao padro no vir com a localizao da


mquina virtual Java especificada.

Para defini-la, basta editar o arquivo "eclipse.ini", e adicionar as seguintes linhas:

-vm
D:\glassfish3\jdk7\bin\javaw.exe

Sendo a segunda, claro, adaptada para a localizao da JDK na dua mquina.

O arquivo "eclipse.ini", possui vrias outras configuraes. Depois do tratamento, ele


deve ter aproximadamente este contedo:

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.

Depois disso, a tela de carga exibe o restante do processo de inicializao do Eclipse.

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

Objetos no mundo real so facilmente identificveis: conceitualmente falando, pessoas,


carros, bicicletas, gatos, so todos objetos, com caractersticas diferentes. No universo
da programao, objetos so uma coleo de peas de software que possuem estado e
comportamento relacionados. Neste contexto, Classes so plantas baixas ou prottipos,
a partir das quais, os objetos so criados.

Classes Java

Uma Classe Java que pode servir de base para criar e atuar em objetos do tipo
"bicicleta".

public class Bicicleta {

// A Classe Bicicleta possui tres atributos

public int cadencia;


public int marcha;
public int velocidade;

// A Classe Bicicleta possui um construtor

public Bicicleta(int cadenciaInicial, int velocidadeInicial, int marchaInicial) {


marcha = marchaInicial;
cadencia = cadenciaInicial;
velocidade = velocidadeInicial;
}

// A Classe Bicicleta possui quatro metodos

public void setCadencia(int novoValor) {


cadencia = novoValor;
}
public void setMarcha(int novoValor) {
marcha = novoValor;
}
public void acionaFreio(int diminui) {
velocidade -= diminui;
}

public void aumentaVelocidade(int aumenta) {


velocidade += aumenta;

21
}
}

Bicicleta.java hosted with by GitHub

O que um projeto Java?

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.

Ao final do processo de desenvolvimento de uma aplicao Java, esta estrutura de


diretrios empacotada num arquivo ZIP (podem ter extenses diferentes, mas so
arquivos no formato ZIP). Este pacote ento copiado para um diretrio especfico do
servidor de aplicaes, e l descompactado, sendo os bytecodes direcionados para
pastas especficas do servidor, ficando ento a aplicao Java disponvel para uso. Este
o processo conhecido como "deploy de uma aplicao".

A estrutura de um projeto Java, vai depender da Framework de desenvolvimento


adotada e da complexidade do Projeto. Existem vrios exemplos de acordo com
diferentes objetivos e nveis de complexidade aqui. Mas para a grande maioria dos
casos, mesmo em empresas de grande porte, uma estrutura simples de projeto,
contemplando uma nica aplicao com vrias funcionalidades suficiente. Para as
nossas necessidades durante o curso, vamos adotar uma estrutura mais simples, assim:

src/ Contendo os cdigos fonte e demais recursos necessrios a Aplicao


test/ Contendo os cdigos fonte e demais recursos necessrios aos Testes da Aplicao

O que um pacote dentro de um projeto Java?

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

Ento, por exemplo: um programador, criando uma funcionalidade chamada "tutorial"


para um domnio chamado "java.iniciantes.com", dever identificar o diretrio onde
esto localizados os arquivos que compem a aplicao com o seguinte nome de pacote:
"com.iniciantes.java.tutorial"

Este nome de pacote, se traduz fisicamente na seguinte estrutura de diretrios:


"src\com\iniciantes\java\tutorial"

22
Considerando o que foi visto acima, segue um exemplo de uso de um objeto da classe
Bicicleta:

package com.iniciantes.java.tutorial;

public class Controle {

public void movimentaMagrela() {

Bicicleta magrela = new Bicicleta(10,10,10);


magrela.aumentaVelocidade(15);
magrela.setMarcha(4);
magrela.acionaFreio(20);
magrela.setMarcha(2);
magrela.setCadencia(5);

}
}

Controle.java hosted with by GitHub

A nossa Aplicao

Durante o curso, estaremos desenvolvendo uma aplicao simples para controle de


emprstimo de livros de uma "biblioteca entre amigos". A aplicao vai registrar livros,
amigos e quais amigos pediram emprestado quais livros.

Para tal, vamos usar 3 classes:

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.

Criando um projeto Java no Eclipse

Para o nosso curso, vamos criar um projeto chamado: JavaParaIniciantes.

Passo a passo:

Aps abrir o Eclipse, vamos usar: File New Java Project

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.

Mas repare, entretanto, que h um problema reportado na aba "Problems", na parte de


baixo da tela

27
Podemos sempre tentar resolver os problemas usando: Boto direito do mouse sobre a
linha do problema Quick Fix

Mas neste caso, isto no vai ser suficiente.

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.

A estrutura de diretrios que d suporte ao nosso projeto neste momento a seguinte:

Criando um pacote no Eclipse

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

Seguindo o padro de nomenclatura anteriormente citado, vamos criar o pacote com o


seguinte nome:

"com.iniciantes.java.tutorial"

33
Agora ns temos o pacote criado:

Criando uma Classe no Eclipse

Vamos agora criar a primeira Classe do nosso pacote.

34
Passo a passo:

Vamos selecionar o pacote "com.iniciantes.java.tutorial" e usar: Boto direito do mouse


New Class

Seguindo a descrio da nossa aplicao, vamos comear pela Classe Pessoa.

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.

A estrutura de diretrios que d suporte ao nosso projeto neste momento a seguinte:

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.

Tipos de dados primitivos do Java:

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:

java.lang.String Representa Strings de caracteres.

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.

J sobre o dicionrio, vamos aprender a configur-lo para Portugus.

Para isso, o primeiro passo conseguir um dicionrio em Portugus no formato


adequado. Na verdade, simples, um arquivo texto com uma palavra por linha. Eu
tenho uma verso deste arquivo que voc pode baixar daqui.

Descompacte o arquivo e coloque-o no diretrio onde o Eclipse foi instalado.

Agora use: Window Preferences

Na tela seguinte, selecione: General Editors Text Editors Spelling

Altere "Platform dictionary" para "none". E em "User defined dictionary" localize e


selecione o arquivo que voc baixou.

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:

Continuando com a nossa Classe, hora de criar o mtodo construtor.

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:

public class Pessoa {

private String primeiroNome;


private String ultimoNome;
private String endereco;
private String nomeDeUsuario;

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

Sobre a interface do Eclipse

Vamos comear esta segunda aula conhecendo um pouco mais sobre a interface do
Eclipse.

A referncia oficial para a Interface com o usurio do Eclipse est aqui.

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.

Para mudar as configuraes do Eclipse em geral, normalmente existe mais de uma


opo. Como exemplo, vamos alterar uma caracterstica do editor que vai ser
necessria, principalmente quando for necessrio usar o modo de debug. Exibir o
nmero das linhas do cdigo.

Para isso, temos duas opes:

1. Da barra de Menu, "Window" "Preferences..."


2. Na opo "General" "Editors" "Text Editors", marque o checkbox "Show
line numbers".

1. CTRL+3
2. Digite: "line numbers"
3. ENTER

Usando esta ltima opo, temos:

46
E como resultado:

reas de trabalho da bancada do Eclipse

Vamos agora explorar um pouco as demais reas do Workbench do Eclipse.

A primeira informao importante a respeito destas reas, que o contedo, formato e


localizao delas, no fixo. Voc pode customizar tudo ao seu gosto.

Vamos elenc-las aqui, usando a configurao default.

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.

A ttulo de exemplo, vamos abrir a perspectiva "Java Browsing" e observar como so


distribudas as views que a compem pela rea de trabalho do Eclipse.

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

Convm falar sobre alguns smbolos especiais da linguagem 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

Falando em termos de orientao a Objetos, um mtodo representa uma operao num


objeto em particular. Sendo um objeto uma instncia de uma Classe, quando definimos
uma Classe, definimos os seus atributos atravs de variveis e seu comportamento
atravs de mtodos.

Aqui est um exemplo de uma tpica declarao de mtodo em Java:

public double calculaVoo(double envergadura, int motores,

double tamanho, double tonelagem) {

// faz o calculo complicado aqui.

return 10L;

}
view raw Metodo.java hosted with by GitHub

Para declarar um mtodo, os nicos elementos necessrios so: o tipo de retorno, o


nome do mtodo, um par de parnteses e um corpo delimitado por chaves.

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.

De volta ao nosso projeto

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.

Mtodos "getter" e "setter" so usados para recuperar e manipular variveis privadas de


uma Classe diferente. Um mtodo "getter", como o nome sugere, recupera o atributo de
mesmo nome. Um mtodo "setter" permite atribuir um valor ao atributo de mesmo
nome.

Vamos comear pelo mtodo "getNome", assim:

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.

Reparem que se for retirado o qualificador "this" na instruo de atribuio do mtodo


"setMaxLivros", um alerta exibido.

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.

A esta altura, voc deve ter a classe construda desta forma:

package com.iniciantes.java.tutorial;
public class Pessoa {

// Atributos

private String nome; // nome da pessoa

/* Nmero mximo de Livros que


* uma pessoa pode pedir emprestado
*/

private int maxLivros;

// Construtor

public Pessoa() {
nome = "Nome Desconhecido";
maxLivros = 3;
}

59
// Mtodos

public String getNome() {


return nome;
}

public void setNome(String outroNome) {


nome = outroNome;
}

public int getMaxLivros() {


return maxLivros;
}

public void setMaxLivros(int outroValor) {


maxLivros = outroValor;
}

}
pessoa01.java hosted with by GitHub

Caso exista alguma diferena, volte e faa uma reviso nas duas primeiras aulas.

Tudo certo? Ento podemos prosseguir...

60
Aula 03 - Usando o Scrapbook do Eclipse

O que o Scrapbook?

Nesta aula, vamos explorar um pouco as caractersticas da Classe Pessoa usando o


Scrapbook do Eclipse. O Scrapbook uma "joia" escondida no Eclipse, principalmente
para os iniciantes em Java, pois permite explorar as instrues Java de forma interativa
e ver o que cada uma delas faz internamente.

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.

Na janela de "Wizards" que apresentada, selecione: Java Java Run/Debug


Scrapbook Page Next.

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

Vamos comear claro, com algo bem simples:

Temos algumas alternativas para inspecionar o resultado de expresses como esta.


Vamos comear, usando o menu da seguinte forma: Selecione o texto da expresso
desejada:

Em seguida: Run Inspect.

64
Que deve apresentar o seguinte resultado:

Os espaos entre os argumentos e operadores nas expresses Java, no tem significado


para o compilador, portanto, "2+2" e "2 + 2", so tratados exatamente da mesma forma.

Vamos ver agora um trecho de cdigo sendo inspecionado:

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.

Uma outra forma de verificar o resultado de expresses : Run Display.

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.

Experincias com a classe Pessoa

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.

No nosso caso, quando mencionamos no nosso projeto a Classe "Pessoa", o compilador


entende: "com.iniciantes.java.tutorial.Pessoa".

Para que possamos portanto, fazer experincias com a Classe Pessoa no nosso
Scrapbook, devemos importar o pacote onde est localizada a Classe.

Vamos aproveitar e conhecer os botes da barra de ferramentas usados nas operaes do


Scrapbook:

69
Usando o boto de configurao dos imports, vamos importar para o nosso Scrapbook o
pacote da classe Pessoa.

Agora, o nosso Scrapbook entende que: quando mencionamos a Classe "Pessoa",


estamos na verdade nos referindo a: "com.iniciantes.java.tutorial.Pessoa".

Isso feito, podemos comear nossas experincias com a Classe Pessoa.

Vamos comear, criando um objeto (instncia da Classe) do tipo "Pessoa", com a


seguinte instruo:

Pessoa p = new Pessoa();

Sendo:

"Pessoa": o tipo do objeto que est sendo criado (a Classe do objeto).


"p": a varivel que vai representar o objeto (instncia da Classe) que est sendo
criado.
"new": palavra reservada de Java que instrui o compilador a criar um novo
objeto do tipo desejado.
"Pessoa()": mtodo construtor da Classe, a ser usado na criao do objeto.

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"

Agora, se digitamos um ponto ao lado da varivel "p", que no momento representa um


objeto do tipo Pessoa, podemos ver todos os mtodos definidos para este objeto, assim:

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?

Na verdade, aqui podemos observar pela primeira vez um exemplo de "herana" em


Java. Todas as Classes Java, so subclasses da Classe "Object", portanto, todas as
Classes Java, herdam os mtodos da Classe "Object". A Classe "Object" pode ser
considerada o "Poderoso Chefo" das Classes, ou "a Classe de todas as Classes".

A forma de chamar um mtodo de um objeto em Java, usando o ".", logo depois do


nome da varivel que representa o objeto. Quando usamos o "." no Eclipse, ele nos abre
uma lista dos mtodos conhecidos daquele objeto para que possamos escolher o que
desejamos usar no momento.

Vamos comear nossas experincias, mudando o nome padro do objeto pessoa que
acabamos de criar, assim:

Reparem que o Eclipse possui um sistema de ajuda instantneo, e j indica o tipo de


dado que precisa ser passado para o mtodo.

Prosseguindo temos o seguinte:

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.

Vamos supor que ao tentar verificar o resultado da aplicao do mtodo


"getMaxLivros()", tenhamos esquecido de digitar o "()", assim:

O Eclipse nos ajuda com mensagens de erro bem claras, assim:

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?

O JUnit um framework de suporte a testes automatizados para a linguagem de


programao Java. Ela tem sido importante na popularizao do Test Driven
Development (TDD) ou "Desenvolvimento Orientado a Testes".

Como funciona o JUnit?

Em termos de funcionamento, o JUnit um programa usado para executar testes


unitrios em virtualmente qualquer aplicao. Os testes com JUnit so efetuados
escrevendo "casos de teste" em Java, compilando estes casos de testes e executando as
classes resultantes com o "JUnit Test Runner".

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 constituem um processo de desenvolvimento de software onde a menor


poro "testvel" de uma aplicao, chamada unidade, individual e
independentemente verificada em relao ao comportamento dela esperado. Testes
Unitrios so em geral automatizados, mas podem ser feitos manualmente.

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.

Preparando o ambiente 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.

Observando a janela do "Package Explorer", podemos ver a localizao da nossa Classe


de negcio (Classe Pessoa).

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.

Para isso, vamos selecionar a pasta "test".

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:

Sobre o uso de Menus no Eclipse

Na maior parte das aes que efetuamos sobre itens de um projeto, podemos optar por
usar...

A barra de menus sobre um item selecionado:

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

Vamos ignorar isso no momento e seguir adiante com o boto "Next".

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.

Comeando pelo problema indicado da linha 3 (o import), vamos acionar a opo


"Quick Fix", usando o boto direito do mouse sobre ele, assim:

Na janela que surge, selecionamos: "Fix project setup..."

90
E na janela seguinte: "Add JUnit 3 library to the build path"

O que faz com que os erros desapaream, assim:

91
Reparem que o pacote JUnit 3 foi adicionado ao nosso projeto.

A opo "Quick Fix" do Eclipse oferece:

Sugestes para corrigir erros de compilao


Implementa os ajustes selecionados automaticamente
Pode-se usar o boto direito do mouse ou o atalho CTRL-1
O Quick Fix do Eclipse o melhor amigo do desenvolvedor.

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.

Na janela que se abre, selecionar: "Java Buid Path" e a aba "Libraries"

92
Podemos ver que o pacote do JUnit 3 foi adicionado ao "buid path".

Ns poderamos obter o mesmo efeito, usando o boto "Add Library", localizando o


pacote do JUnit 3 no nosso sistema de arquivos e selecionando-o.

93
Vamos examinar o cdigo gerado linha a linha, e entend-lo.

1 - Identificao do pacote da nossa Classe de teste


3 - Import do pacote do JUnit para a Classe "TestCase"
5 - Declarao da nossa Classe de teste "PessoaTest" estendendo a Classe
"TestCase" do JUnit
7 - Declarao do mtodo de teste para o mtodo Construtor da Classe Pessoa
11 - Declarao do mtodo de teste para o mtodo setNome da Classe Pessoa
15 - Declarao do mtodo de teste para o mtodo setMaxLivros da Classe
Pessoa

Sendo a nossa Classe "PessoaTest" uma Subclasse de "TestCase", podemos usar os


mtodos herdados desta ltima. No momento, todos os mtodos de teste esto usando o
mtodo "fail", apenas para gerar um resultado padro dizendo que o teste ainda no foi
implementado.

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.

O prximo passo, modificar os mtodos que foram criados automaticamente para


efetivamente testar os mtodos implementados na Classe Pessoa.

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);

public void testSimpleTest() {


int answer = 2;
assertEquals((1+1), answer);

}
SimpleTest.java hosted with by GitHub

Vamos analisar este exemplo linha a linha:

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.

public class SimpleTest extends TestCase {

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.

public void testSimpleTest() {


int answer = 2;
assertEquals((1+1), answer);
}

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.

public void testSimpleTest() {


int answer = 2;
assertEquals((1+1), answer);
}

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.

Normalmente, o que desejamos testar o resultado de algum mtodo. Por exemplo, um


mtodo que remova todos os caracteres "a", de um String. Voc pode test-lo assim:

public void testStringStripFunction() {


String expected = "bb"
StringStripper stripper = new StringStripper();
assertEquals(expected, stripper.stringStrip("aabaaaba"));
}

O que pode fazer o "assertEquals" falhar se o mtodo StringStripper no se comportar


como esperado. Assim, podemos tentar corrigir o mtodo e executar o teste novamente
at que ele tenha sucesso.

De volta aos nossos testes

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:

No mtodo "testPessoa()" retiramos a chamada do mtodo "fail" e digitamos a instruo


"new" + CTRL + Espao, o que nos apresenta o seguinte:

Selecionar a opo "create new object", o que leva ao seguinte:

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:

E preenchendo os parmetros, assim:

O que nos leva ao seguinte:

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:

PessoaTest pt = new PessoaTest();


pt.assertEquals(...);

A resposta que o mtodo "assertEquals" um mtodo esttico (cuja declarao deve


conter o modificador static). Um mtodo esttico, no pertence a nenhuma instncia de
uma Classe, e sim Classe como um todo.

A sintaxe de uso de um mtodo esttico, a seguinte: <Classe>.<mtodo>, o que nos


levaria ao seguinte: PessoaTest.assertEquals(...), sendo que o nome da Classe opcional
dentro da mesma Classe. O Eclipse nos ajuda a diferenciar os mtodos estticos,
exibindo-os em itlico.

Vamos agora executar os testes novamente, usando o boto "Rerun Test":

E ver o que acontece... O que vai nos levar ao seguinte:

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.

Usando os mesmos passos, vamos implementar o mtodo de teste para o mtodo


"setNome" da nossa Classe Pessoa, obtendo o seguinte:

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:

Como a varivel no existe, o assistente do Eclipse no consegue nos ajudar.

Vamos agora corrigir o erro, obtendo o seguinte:

Executando os testes novamente, vamos ter:

102
Mais uma vez, a ttulo de aprendizado, vamos forar um erro no teste do mtodo
"setNome", e ver o que acontece:

E executando os testes novamente...

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

TFD ? TDD ? BDD ?


TFD - Test-First Development
TDD - Test-Driven Development
BDD - Behavior-Driven Development

Qualquer destas siglas, representa basicamente a metodologia de comear o


desenvolvimento, no pelo cdigo da funcionalidade propriamente dito, mas sim pela
codificao dos testes (ou comportamentos) que vo garantir que a funcionalidade
codificada faz o que dela se espera.

como se a codificao dos testes (ou comportamentos) representasse a especificao


em cdigo da funcionalidade. E a codificao da funcionalidade vai ento atender
exatamente a especificao. Simples assim!

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:

Ele herdado da Classe Object


Ele retorna a representao em String de um Objeto
Ele normalmente criado para todas as Classes

104
Vamos voltar nossa pgina de Scrapbook e ver o que este mtodo faz:

Preparando o cdigo assim:

Que uma vez inspecionado, nos apresenta o seguinte:

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.

Em geral, quando criamos uma nova Classe, gostaramos de modificar o mtodo


"toString" para melhor representar os objetos da nossa Classe.

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

Neste ponto, poderamos simplesmente abrir a nossa Classe Pessoa e comear a


escrever cdigo novo. No entanto, vamos aplicar a metodologia de TDD, e para isso,
vamos recapitular o que esta metodologia prope:

1. Pense sobre o que o mtodo deve fazer.


2. Escreva um caso de teste que vai testar este mtodo.
3. Escreva o novo mtodo.
4. Teste o novo mtodo.

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" ?

1 - Um objetivo prtico, seria que o nosso mtodo "toString" retornasse o nome e o


nmero de livros de uma determinada pessoa da seguinte forma:

Romer Simpson (9 livros)

2 - Vamos escrever um caso de teste para isso na Classe "PessoaTest". Estaremos


usando as facilidades j vistas anteriormente, obtendo o seguinte resultado:

Este mtodo por si s, serve como documentao do nosso mtodo "toString". Se


algum alterar o comportamento do nosso mtodo "toString" e esquecer de alterar este
teste, ele vai falhar, indicando que a documentao no est mais em conformidade com
a implementao.

3 - Vamos agora escrever a nossa verso do mtodo "toString"na Classe "Pessoa".


Estaremos mais uma vez usando as facilidades j vistas anteriormente, obtendo o
seguinte resultado:

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.

4 - O prximo passo, executar os testes e ver o que acontece.

Acionando o boto de comparao dos resultados, podemos ver o seguinte:

Fica claro que no definimos corretamente o retorno do mtodo.

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:

Testando novamente, teremos o seguinte:

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:

Bastaria alterar o mtodo "getNome" para:

return primeiroNome + " " + sobreNome;

Mantendo nosso mtodo toString livre de alteraes.

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

Um pouco mais de TDD

Nesta aula continuaremos a usar a metodologia TDD. Portanto, iniciaremos criando a


Classe de teste para a Classe Livro, e em seguida vamos usar as ferramentas de ajuda
instantnea do Eclipse para nos ajudar a criar a Classe Livro propriamente dita.

Recapitulando os objetivos da nossa aplicao:

Manter uma lista dos nossos Livros


Manter uma lista das Pessoas para as quais emprestamos livros
Ser possvel ver quem pegou emprestado qual livro

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.

Ento, vamos criar a Classe de teste para ela, assim:

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:

Vamos falar rapidamente sobre a Classe Livro. Quais so os atributos necessrios


nossa Classe Livro?

ttulo. (por exemplo: "Menino Maluquinho")


autor. (por exemplo: "Ziraldo")
Pessoa que possui o Livro. (objeto do tipo Pessoa)

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:

Preenchendo os espaos adequadamente, teremos:

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:

Mais uma vez, preenchendo os espaos adequadamente, teremos:

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:

O Eclipse nos alerta do erro, mas permite prosseguir:

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:

Vamos voltar Classe de teste e cuidar do prximo erro:

117
Selecionado a opo de criar o mtodo Construtor, teremos:

Salvando a Classe Livro alterada, podemos cuidar do prximo erro:

Gerando o seguinte:

118
Mais uma vez, salvando a Classe Livro alterada, podemos cuidar do prximo erro:

E mais uma vez, selecionado a opo de criar o mtodo Construtor, teremos:

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:

Vamos ento executar a tarefa pendente e implementar o nosso mtodo Construtor da


Classe Livro, assim:

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:

Executando o teste mais uma vez, teremos:

125
Portanto, vamos revisar como foi criada a Classe Livro usando TDD:

1. Criar a classe LivroTest


2. Criar o mtodo testLivro() para testar o construtor
3. Usar os facilitadores do Eclipse para criar a Classe Livro
4. Usar os facilitadores do Eclipse para criar os mtodos get e set
5. Alterar o teste para definir o valor correto ao atributo autor
6. Executar com sucesso o mtodo de teste

126
Aula 08 - Adicionar Pessoa Classe
Livro

Uso contnuo de TDD

Objetivos desta aula:

Neste momento temos as Classes Pessoa e Livro


Precisamos mostrar qual Pessoa possui um determinado Livro emprestado com
algum
Vamos portanto, criar um relacionamento entre Livro e Pessoa

Vamos continuar a usar a metodologia TDD. Para isso, executaremos os seguintes


passos:

1. Criar um mtodo de teste do relacionamento (testGetPessoa) na Classe de teste


da Classe Livro (LivroTest)
2. Implementar o mtodo de relacionamento (getPessoa) na Classe Livro
3. Executar o teste

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:

Reparem nos indicativos de erro em relao ao fato de o mtodo "setPessoa" ainda no


existir.

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:

Seguindo o mesmo procedimento para o mtodo "get" teremos o seguinte:

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.

As palavras "private", assim como "public", neste contexto, so chamados


"modificadores de acesso", indicando o escopo de abrangncia do objeto sendo
definido.

No caso, o nosso campo "pessoa" vai ser "visvel" apenas dentro do escopo desta Classe
onde ele est sendo criado.

Modificadores de Acesso

Em Java existem 4 modificadores de acesso:

1. public - o objeto acessado de qualquer Classe ou Subclasse


2. private - o objeto acessado apenas na Classe em que foi criado
3. sem modificador - o objeto acessado apenas por Classes dentro do "pacote"
em que foi criado

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:

Usando a combinao de teclas: Alt + Shift + X, T, os testes de JUnit sero executados


sobre a Classe que estiver selecionada no "Package Explorer".

O que neste caso, vai nos dar o seguinte resultado:

132
Recapitulando o que vimos at agora:

As Classes Pessoa e Livro, esto relacionadas


A Classe Livro depende da Classe Pessoa
Este relacionamento de "Um para Um" (um livro s pode ter um leitor por vez)

Refatorao

Vamos aproveitar para falar um pouco sobre "refactoring". Pois no podemos esquecer
ele, um dos passos da metodologia TDD que estamos aplicando aqui.

comum a todo artista durante o desenvolvimento da sua obra, tentar melhorar o


resultado final. Reescrever um cdigo que j funciona com o intuito de melhor-lo faz
parte da "arte de programar". Desculpem-me alguns gerentes de projeto, mas prefiro
tratar os bons desenvolvedores como "artistas" do que como "operrios".

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:

Salvando tudo e executando os testes novamente, devemos ter o mesmo resultado de


sucesso de antes.

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:

String quemPegouLivro = l2.getPessoa().getNome();

Nela, estamos atribuindo varivel do tipo String "quemPegouLivro", o nome da


Pessoa. Mas como?

Primeiro, usamos o mtodo "getPessoa" para obter uma instncia do objeto do


tipo Pessoa a qual o livro est vinculado.
Depois, sobre a pessoa recuperada, aplicamos o mtodo "getNome", para obter o
nome da pessoa

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:

Boto direito do mouse sobre o nosso pacote de testes New Other.

E na janela que se abre, vamos selecionar agora "JUnit Test Suite":

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.

Obtendo agora o seguinte resultado:

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

Listas na nossa aplicao

O que temos at agora?

Ns criamos a Classe Pessoa


Ns criamos a Classe Livro
Ns estabelecemos uma ligao entre estas Classes criando um campo pessoa na
Classe Livro

Agora vamos juntar tudo isso e comear a pensar na nossa Classe Biblioteca.

Mas o que gostaramos que a Classe Biblioteca fizesse?

Listar os livros que possumos


Listar as pessoas que pegaram nossos livros emprestados
Listar quantos livros e pessoas existem no nosso grupo?

Num primeiro momento podemos estimar a nossa Biblioteca comunitria em cerca de


50 pessoas e 100 livros. Mas difcil de garantir. Vamos supor que um amigo entre no
grupo e que apenas ele disponha de 200 livros. L se vai a nossa mdia por gua a
baixo.

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:

A Classe ArrayList est no pacote "java.util". Portanto, a primeira coisa a fazer :


importar este pacote para o Scrapbook:

Na janela que se abre...

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:

Edite este template e altere o contexto de "Java statements" para "java".

142
Clique "OK".

143
E "OK" novamente.

Isso deve fazer funcionar o "code complete" para o comando new no Scrapbook.

Comeamos criando uma lista vazia, assim:

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:

E verificar o resultado com o "Inspect", 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.

Resultando em um erro, assim:

146
Aplicando a Classe ArrayList

Agora que j estamos familiarizados com a Classe ArrayList, vamos us-la tratar os
nossos livros e pessoas.

Vamos comear com a Classe Livro, assim:

Inspecionando, vamos ver os livros na nossa lista:

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.

Localizando um elemento (o primeiro) da lista:

Inspecionando, vamos obter o Objeto livro esperado:

149
Usando a hierarquia vista anteriormente, podemos obter a pessoa associada diretamente
do Objeto livro recuperado:

E assim:

Seguindo usando o mesmo princpio, j que obtivemos um Objeto do tipo Pessoa,


podemos recuperar o nome da pessoa diretamente dele, assim:

150
Inspecionando, teremos um String com o nome da pessoa:

Portanto, nesta linha de cdigo:

lista.get(0).getPessoa().getNome()

lista.get(0) - retorna o livro l1


getPessoa() - retorna a pessoa p1
getNome() - retorna o String com o nome da pessoa p1

Vamos agora localizar um determinado livro na lista, usando o mtodo "indexOf":

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

Resumindo: se sabemos o ndice, podemos obter o Objeto. Se sabemos o Objeto,


podemos obter o ndice.

Isso tambm se aplica ao uso do mtodo "remove".

Vamos us-lo para remover o Objeto l1 da lista:

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

A palavra "Library" no mundo Java define um conjunto de pacotes. Poderia haver


alguma confuso de nomes se estivssemos trabalhando em Ingls, pois Classe que vai
representar os Livros que temos e as Pessoas que podem pegar os livros emprestados,
deveria tambm se chamar "Library". Mas, como aqui, estamos usando nomes em
Portugus, no h nenhum problema de confuso entre "Library" e "Biblioteca", que vai
ser o nome da nossa Classe.

Vamos continuar a usar a metodologia TDD. Portanto:

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:

Vamos primeiramente criar o mtodo de teste do Construtor da Classe. Sempre usando


os facilitadores do Eclipse:

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

Feito isso, teremos o seguinte:

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.

Primeiro o campo "nome".

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.

Agora o campo "livros".

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.

Da mesma forma, vamos fazer para o campo "pessoas".

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.

Neste ponto, ns estamos aptos a completar o mtodo construtor da Classe Biblioteca.

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:

O prximo passo, criar os atributos de Livros e Pessoas da instncia no formato de


Listas, assim:

Existem algumas caractersticas que devem ser ressaltadas nestas duas linhas.

livros = new ArrayList<Livro>();


pessoas = new ArrayList<Pessoa>();

Quando chamamos o Construtor de um "ArrayList" usando o comando "new", e


especificamos o tipo do Objeto especfico que queremos usando o parmetro de tipo

167
"<Tipo>", necessrio o uso de () para finalizar o construtor de ArrayList, pois ele no
possui parmetros.

Portanto, a sintaxe do construtor nesses casos, a seguinte:

new TipoGenrico<TipoEspecfico>();

Outra observao importante, em relao declarao dos campos a nvel da Classe.

Campos declarados na Classe, no devem ser declarados novamente nos mtodos da


Classe, pois na verdade, estariam sendo declaradas novas variveis, locais aos mtodos,
podendo causar muita confuso. A ttulo de aprendizado, vamos ver o que ocorre se isso
for feito.

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.

Sabemos que os livros de uma Biblioteca so do tipo ArrayList. O que acontece se


algum tentar adicionar um livro usando um tipo de dado diferente do esperado?

Reparem que gerado um erro de compilao justamente dizendo que o mtodo no se


aplica ao tipo de dado passado como parmetro, pois ele esperava um "ArrayList" e foi
passado um "String".

170
Aula 11 - Primeiros Mtodos da Classe
Biblioteca

Que Mtodos precisamos na Classe Biblioteca?

Existem alguns mtodos na Classe Biblioteca, cuja necessidade, chama a ateno. So


eles:

Mtodos "get" para os campos(mtodos "set" no so necessrios)


Mtodos addLivro e addPessoa
Mtodos removeLivro e removePessoa
Mtodos pegarLivro e devolverLivro
Mtodo getLivrosDisponiveis
Mtodo getLivrosEmprestados
Mtodo getLivrosPessoa

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:

Uma das formas de se conseguir isso, : com a Classe Biblioteca selecionada.

171
Na barra de menus selecionar: Source Generate Getters and Setters...

Na janela que apresentada, expandir os campos e selecionar apenas os mtodos que


necessitamos:

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.

No entanto, ns vamos precisar de alguns objetos para efetuar estes testes.

Objetos do tipo Livro


Objetos do tipo Pessoa
Um Objeto do tipo Biblioteca

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.

Na verdade, existem alguns "mtodos padro" costumeiramente usados no s na


inicializao, como tambm na finalizao e nos prprios testes com JUnit

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.

Neste caso especfico, vamos ver cada um deles.

Comeando pelo menu de contexto no cdigo:

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:

Com a varivel l2 selecionada, na barra de menus selecionar: Refactor Convert Local


Variable to Field...

Na tela que se abre em seguida, aceitar os valores default e acionar o boto OK.

178
Obtendo o seguinte:

Finalmente, usando as teclas de atalho:

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:

O prximo passo, adicionar livros na nossa biblioteca, 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".

Na situao atual, se removemos um dos Livros da Biblioteca, deve restar apenas 1,


portanto:

Neste momento, o mtodo "removeLivro", no existe. Vamos usar o mesmo


procedimento j usado anteriormente, para criar este mtodo vazio (por enquanto), na
Classe Biblioteca, obtendo o seguinte:

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

Vamos verificar isso, desta forma:

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.

chegada a hora de implementar os mtodos que vo cuidar de adicionar e remover os


Livros, na Classe Biblioteca, assim:

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.

Sendo assim, o mtodo de teste deve ficar assim:

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:

Mais alguns vo ser implementados em breve.

189
Aula: 12 - Os mtodos de Emprstimo e
Devoluo

Afinal isso que uma Biblioteca faz

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

Ele vai testar os mtodos de Emprstimo e Devoluo


o Empresta um Livro
o Empresta um segundo Livro
o Devolve um Livro
o Devolve um segundo Livro
o Comandos de verificao depois de cada chamada de mtodo

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.

Vamos estabelecer agora as caractersticas do nosso mtodo de Emprstimo.

Deve estabelecer o objeto Pessoa no campo pessoa do Livro


Usando o mtodo setPessoa
O que acontece se o Livro j foi emprestado?
o No deve permitir o emprstimo
Precisa testar isso no prprio mtodo de Emprstimo
O mtodo deve indicar sucesso ou falha de acordo com a situao
Devemos informar ao mtodo chamador se o emprstimo foi bem sucedido ou
no

Sabendo de tudo isso, vamos detalhar em Pseudo cdigo, o que o mtodo de


Emprstimo deve fazer:

1. Garantir que o Livro ainda no foi emprestado.


2. Se ainda no foi emprestado, atribuir uma Pessoa para o Livro e retornar para o
mtodo
chamador que o emprstimo foi bem sucedido.

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:

1. Vai retornar um booleano (true ou false), indicando sucesso ou falha.


2. No Pseudo-Cdigo, foi mencionado "uma Pessoa para o Livro". Mas qual
Pessoa e qual Livro?
3. Livro e Pessoa portanto, vo ser parmetros do nosso mtodo.

Sendo assim, a assinatura do mtodo seria esta:

public boolean emprestimo(Livro li, Pessoa pe)

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.

Os primeiros passos, vo ser: Inicializar os objetos, com o j conhecido mtodo setUp().


E adicionar Livros e Pessoas Biblioteca, assim:

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:

assertTrue - d certo se o mtodo sendo testado retorna true.


Caso contrrio, emite a mensagem.
assertFalse - d certo se o mtodo sendo testado retorna false.
Caso contrrio, emite a mensagem.

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:

Reparem que o mtodo de Devoluo, s precisa receber o Livro como parmetro.

O prximo passo, usar o "Quick Fix" do Eclipse para nos ajudar a criar os mtodos
que precisamos:

O que nos leva a isto:

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.

Mas para isso, devemos considerar alguns detalhes

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:

Aqui surgem algumas informaes novas, que precisamos comentar.

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.

Portanto, com a expresso:

if (l1.getPessoa() == null)

Estamos verificando se no h nenhuma Pessoa atribuda ao Livro "l1".

O cdigo do mtodo de Devoluo, vai ser muito semelhante, assim:

Nada de novo aqui, a no ser:

O operador de diferente !=.

Neste caso, com a expresso:

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.

Desta vez, com a Classe de Teste selecionada:

Vamos usar o atalho: Alt + Shift + X + T.

Se tudo correu bem e no houve erros de digitao, o teste deve passar:

Assim, os nossos mtodos de Emprstimo e Devoluo esto prontos para evoluir.

198
Aulas: 13 e 14 - Evoluido os mtodos de
Emprstimo e Devoluo

Melhorando 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?

Na Classe Pessoa, ns havamos criado o campo maxLivros, com a finalidade de


limitar o nmero de Livros que uma Pessoa pode pegar emprestado simultaneamente.

No entanto, ns no tratamos disso no mtodo de emprstimo nem nos seus respectivos


testes.

Lembrou? Ento vamos cuidar disso. Mais uma vez, usando TDD, vamos comear
pelos testes.

Vamos incluir mais alguns testes no mtodo testMovimentaLivro da Classe


BibliotecaTest.

Desta forma:

199
O primeiro teste com assertTrue, garante que eu devo conseguir emprestar o Livro "l2"
para a Pessoa "p1".

J o segundo teste com assertFalse, garante que eu no devo conseguir emprestar o


Livro "l1" para a mesma Pessoa "p1", pois o seu limite de Livros emprestados (1 no
caso) foi atingido.

Se neste momento, executarmos os testes, eles devem falhar, pois ns no alteramos o


mtodo de Emprstimo para levar em considerao o limite de Livros. Vamos confirmar
isso (Alt + Shift + X + T):

Realmente, como era de se esperar, os testes falham. E emitida a mensagem de


Emprstimo indevido, pois como ns ainda no implementamos um tratamento para o
limite de Livros, o mtodo conseguiu emprestar mais um Livro para a mesma Pessoa
mesmo com o limite sendo excedido.

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.

Fica clara a necessidade de um mtodo getLivrosPorPessoa. Tendo este mtodo, seria


bastante simples obter a quantidade de Livros, desta forma:

quantidade = b1.getLivrosPorPessoa(p1).size();

200
Mas vamos manter o padro, e comear pelos testes:

Agora reparem naquelas 4 linhas do mtodo testMovimentaLivro, ns j as havamos


usado mais acima, e vamos precisar usar novamente neste novo mtodo.

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.

Nesses casos, mais uma vez, os facilitadores do Eclipse nos ajudam.

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:

Garantir que no incio, a Pessoa "p1" no tenha pego nenhum Livro.


Emprestar o Livro "l1" para a Pessoa "p1".
Verificar se o tamanho da Lista de Livros da Pessoa "p1", o esperado.
Verificar se o ndice do Livro "l1" na Lista de Livros o esperado.
Emprestar o Livro "l2" para a Pessoa "p1".
Verificar se o tamanho da Lista de Livros da Pessoa "p1", o esperado.
Verificar se o ndice do Livro "l2" na Lista de Livros o esperado.

O que vai nos levar ao seguinte:

204
Aqui, usamos mais uma vez o recurso de Lista (ArrayList).

Prosseguindo, vamos usar novamente o Quick Fix do Eclipse para criar o mtodo.

Finalizando os mtodos de Emprstimo e Devoluo

O mtodo getLivrosPorPessoa, ser implementado da seguinte forma:

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.

65. Um lao do tipo "foreach", que vai percorrer a lista de Livros.

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

68. O elemento eleito adicionado na Lista.

71. O ArrayList "resultado" retornado.

Como funciona o lao "foreach"?

1. Coloca o primeiro Livro da lista "this.getLivros" em "umLivro"


2. Executa o bloco de cdigo
3. Coloca o prximo Livro em "umLivro"
4. Executa o bloco de cdigo
5. Repete at o final da Lista

O lao do tipo "foreach" o mais indicado para processar Listas.

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:

E testar novamente, selecionando a Classe de Teste BibliotecaTest e usando o atalho:


Alt + Shift + X + T:

Desta forma ocorreu um erro de compilao, gerando a mensagem "NullPointer


Exception".

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:

Feito isso, podemos voltar ao mtodo de Emprstimo, e implementar a verificao do


limite de Livros por Pessoa, assim:

Foram duas as modificaes feitas. Vamos ver linha a linha:

46. Foi criada a varivel "livrosEmprestados", que armazena o tamanho da Lista de


Livros da Pessoa que foi passada como parmetro.

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.

Uma ltima verificao deve ser feita.

Como j havamos includo a Classe "BibliotecaTest" na nossa Suite de testes


"AllTests", basta selecion-la, e usando o mesmo atalho: Alt + Shift + X + T, executar
todos os testes, garantindo que estas ltimas alteraes no causaram problema em
outras partes da aplicao.

E a est. Todos os testes devem ter passado e a nossa aplicao j evoluiu bastante!

209
Aula: 15 - Finalizando a Classe
Biblioteca

Criando os mtodos finais da 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

Nota: desta aula em diante ser usado o Windows7

O mtodo getLivrosDisponiveis

Este mtodo vai retornar uma lista dos livros que ainda no foram emprestados.

Mais uma vez, comeando pelos testes...

Usando os facilitadores do Eclipse, vamos codificar o mtodo de teste assim:

210
Prosseguindo, podemos copiar e alterar linhas de mtodos anteriores at chegar a este
ponto:

Neste caso, vamos logo criar o mtodo.

Salvando o mtodo criado.

Ficaremos livres de erros no nosso cdigo de teste.

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.

Para isso, vamos aproveitar o cdigo do mtodo getLivrosPorPessoa, e depois de copiar


e alterar as suas linhas, devemos ter o mtodo assim:

Em seguida vamos executar a Suite de testes:

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

O mtodo vazio gerado:

Com o mtodo vazio salvo, e de volta a nossa Classe de Teste, devemos estar livres dos
erros.

Este mtodo de teste deve ser bem familiar a esta altura.

Sendo:

1. Inicializao dos objetos de teste


2. Nenhum Livro indisponvel

214
3. Um Livro indisponvel
4. Dois Livros indisponveis

Mais uma vez, o prximo passo codificar o mtodo getLivrosIndisponiveis


propriamente dito.

Para isso, vamos aproveitar o cdigo do mtodo getLivrosDisponiveis, e depois de


copiar e alterar as suas linhas, devemos ter o mtodo assim:

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.

Novamente, se tudo correu bem na codificao, os testes devem passar:

Os mtodos toString para as nossas Classes

Como j explicado anteriormente, o mtodo toString herdado da Classe Object.

Este mtodo deve ser sobre escrito na maior parte das Classes.

Ele retorna uma representao em String do Objeto.

O mtodo toString para a Classe Livro

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:

Vamos agora, codificar o mtodo toString na Classe Livro.

O resultado final deve ser este:

216
A esta altura, o contedo deste mtodo tambm deve ser familiar a todos, mas vamos
descrever as suas principais linhas:

35. Define a varivel local que vai armazenar a situao do Livro.

36. O "if" que define a situao do Livro.


o Se o Livro no possui Pessoa associada, a situao "Disponvel".
o Se o Livro possui Pessoa associada, a situao "Emprestado para" esta
Pessoa.

42. Retorna a combinao: Ttulo + Autor + Situao como um String.

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.

Novamente, se tudo correu bem na codificao, os testes devem passar:

O mtodo toString para a Classe Biblioteca

Diferente da anterior, a Classe Biblioteca, pode conter uma grande quantidade de Livros
e Pessoas.

O mtodo toString neste caso, vai retornar um sumrio de informaes.

Vamos abrir a nossa Classe de testes para Biblioteca.

217
Criando o mtodo...

Aproveitando algumas linhas j conhecidas, e efetuando as alteraes necessrias,


vamos ter o seguinte resultado:

Vamos agora, codificar o mtodo toString na Classe Biblioteca.

O resultado final deve ser este:

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.

Novamente, se tudo correu bem na codificao, os testes devem passar:

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

Neste ponto, a nossa aplicao est praticamente completa. Vejamos:

Temos as Classes Pessoa, Livro e Biblioteca codificadas.


Como usamos a metodologia TDD, temos um alto grau de confiana de que as
nossas Classes vo funcionar de acordo com o que foi projetado.

No entanto, ns s executamos partes da aplicao, e ainda assim, partindo das Classes


de Teste: PessoaTest, LivroTest e BibliotecaTest usando o JUnit.

Executando um programa Java

Nesta ltima aula ns vamos criar um programa independente para criar e modificar
Objetos do tipo Biblioteca.

Para tal, precisamos entender que:

1. Quem executa um programa Java, o Java Runtime Engine (JRE).


2. Depois de carregar as nossas Classes em memria, o JRE, precisa saber o que
fazer depois.
3. Para isso, O JRE tenta executar um mtodo especial chamado "main"
4. Portanto, precisamos criar o mtodo "main" em uma de nossas Classes.

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.

Vamos prosseguir usando o assistente de cdigo e fazer o seguinte:

Criar uma Biblioteca.


Criar Livros e Pessoas.
Associar Livros e Pessoas Biblioteca.
Efetuar alguns emprstimos e devolues.
Tudo isso, exibindo os resultados parciais na console.

Comeamos assim: "new" + Ctrl+Espao, e selecionando "create new object".

223
Completando para nos atender:

Vamos prosseguir usando o assistente de cdigo at obter o seguinte:

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.

Assim: "sysout" + Ctrl+Espao.

225
Obtendo:

Completando esta primeira parte:

226
Usando a mesma estratgia, vamos criar novas situaes:

Usando o assistente de cdigo, vamos criar o mtodo "imprimeStatus".

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.

Para isso, vamos usar o menu: File Export...

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.

J no Windows 7, o comando "Run" no fica habilitado por default, e a opo da barra


de pesquisa, por vezes, muito lenta.

Se voc j est usando o Windows 7 como eu, vai aqui uma dica de como habilitar esta
opo no menu "Start" ou "Iniciar":

Acione o boto direito do mouse no menu "Start" ou "Iniciar" e selecione a opo:


Properties ou Propriedades

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.

Isso deve fazer surgir a opo de "Run" no menu Start.

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:

java -jar Biblioteca.jar

E o resultado esperado deve ser obtido:

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.

FIM - Este o final do curso.

245

You might also like