Você está na página 1de 55

Ambiente Grfico

Eclipse Indigo Wesley Geraldo Sampaio da Nbrega

Uso Continuo de TDD


Neste momento temos as Classes Pessoa e Livro Precisamos mostrar qual Pessoa possui um determinado Livro emprestado com algum amos portanto! criar um relacionamento entre Livro e Pessoa amos continuar a usar a metodologia "##$ Para isso! e%ecutaremos os seguintes passos& Criar um mtodo de teste do relacionamento 'testGetPessoa( na Classe de teste da Classe Livro 'Livro"est( Implementar o mtodo de relacionamento 'getPessoa( na Classe Livro E%ecutar o teste

Uso Continuo de TDD


Ns )* temos uma Classe Pessoa capa+ de tratar as Pessoas para as quais emprestamos Livros$ Como )* ,oi e%plicado! vamos come-ar na Classe de teste da Classe Livro 'Livro"est($ Nela! vamos criar o mtodo .testGetPessoa. da maneira com a qual )* estamos acostumados 'usando os ,acilitadores do Eclipse(! assim&

Uso Continuo de TDD


Neste mtodo! vamos criar um ob)eto do tipo Livro e outro do tipo Pessoa! assim&

Neste mtodo! vamos criar um ob)eto do tipo Livro e outro do tipo Pessoa! assim&

Uso Continuo de TDD


/eparem nos indicativos de erro em rela-0o ao ,ato de o mtodo .setPessoa. ainda n0o e%istir$

Como estamos lidando com um treinamento aqui! e considerando que comparar ob)etos em 1ava um tanto mais complicado$ 2o invs de veri,icar se o ob)eto Pessoa retornado pelo mtodo .getPessoa. igual ao ob)eto p3 de,inido anteriormente! vamos comparar apenas os nomes! assumindo que cada Pessoa tem um nome 4nico$

Uso Continuo de TDD


Na sequencia! vamos usar o .5uic6 7i%. do Eclipse para criar estes mtodos! posicionando o mouse sobre o erro e selecionando a op-0o .Create met8od.&

Uso Continuo de TDD


9btendo o seguinte resultado&

Uso Continuo de TDD


Seguindo o mesmo procedimento para o mtodo .get. teremos o seguinte&

Uso Continuo de TDD


Salvando todo o trabal8o! a nossa Classe de teste n0o ter* mais erros&

Uso Continuo de TDD


amos agora completar o conte4do real dos mtodos criados$ Primeiro o mtodo set&

/eparem que o Eclipse alerta de que o campo .pessoa. n0o est* de,inido na Classe Livro$ :ais uma ve+! vamos usar o .5uic6 7i%. do Eclipse para corrigir isso! selecionando a op-0o .Create ,ield.! obtendo o seguinte&

Uso Continuo de TDD


9 que indica ter sido criado o campo .pessoa. do tipo 'Classe( .Pessoa.$ 2 di,eren-a sutil! apenas uma letra mai4scula ou min4scula 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 in;cio de de,ini-0o$ 2s palavras .private.! assim como .public.! neste conte%to! s0o c8amados .modi,icadores de acesso.! indicando o escopo de abrang<ncia do ob)eto sendo de,inido$ No caso! o nosso campo .pessoa. vai ser .vis;vel. apenas dentro do escopo desta Classe onde ele est* sendo criado$

Uso Continuo de TDD


:odi,icadores de 2cesso Em 1ava e%istem = modi,icadores de acesso&

public > o ob)eto acessado de qualquer Classe ou Subclasse private > o ob)eto acessado apenas na Classe em que ,oi criado sem modi,icador > o ob)eto acessado apenas por Classes dentro do .pacote. em que ,oi criado protected > o ob)eto acessado de qualquer Classe ou Subclasse dentro do .pacote. em que ,oi criado

Uso Continuo de TDD


Sabendo disso! e se queremos que estes campos este)am dispon;veis para outras Classes deste .pacote. vamos retirar os modi,icadores de acesso! ,icando assim&

amos agora completar o mtodo get! retornando o ob)eto do tipo Pessoa )* de,inido para a Classe Livro&

Uso Continuo de TDD


Salvando tudo que ,oi ,eito at aqui! estamos prontos para e%ecutar o nosso teste$ #esta ve+! podemos e%perimentar a combina-0o de teclas de atal8o do Eclipse para este ,im$ oc< pode estar com outra Classe aberta na *rea de edi-0o! contanto que a Classe cu)os testes voc< dese)a e%ecutar este)a selecionada no .Pac6age E%plorer.! assim&

Uso Continuo de TDD


?sando a combina-0o de teclas& 2lt @ S8i,t @ A! "! os testes de 1?nit ser0o e%ecutados sobre a Classe que estiver selecionada no .Pac6age E%plorer.$ 9 que neste caso! vai nos dar o seguinte resultado&

Uso Continuo de TDD


/ecapitulando o que vimos at agora& 2s Classes Pessoa e Livro! est0o relacionadas 2 Classe Livro depende da Classe Pessoa Este relacionamento de .?m para ?m. 'um livro s pode ter um leitor por ve+(

Refatorao
amos aproveitar para ,alar um pouco sobre .re,actoring.$ Pois n0o podemos esquecer ele! um dos passos da metodologia "## que estamos aplicando aqui$

B comum a todo artista durante o desenvolvimento da sua obra! tentar mel8orar o resultado ,inal$ /eescrever um cdigo que )* ,unciona com o intuito de mel8or*>lo ,a+ parte da .arte de programar.$ #esculpem>me alguns gerentes de pro)eto! mas pre,iro tratar os bons desenvolvedores como .artistas. do que como .oper*rios.$

Refatorao
Podemos dar aqui um e%emplo bem simples de re,atora-0o$ oltando C nossa Classe Livro"est! reparem no seguinte trec8o de cdigo&

Ele possui algumas de,ici<ncias tais como& ?so de vari*veis desnecess*rias e nomes n0o representativos 'quem est* com o livro n0o necessariamente o seu dono($

Refatorao
amos re,a+er este trec8o da seguinte ,orma&

Refatorao
Salvando tudo e e%ecutando os testes novamente! devemos ter o mesmo resultado de sucesso de antes$ E assim sendo! podemos remover o cdigo anterior que ,oi comentado! ,icando assim&

Refatorao
amos entender um pouco mais sobre a lin8a de cdigo que acabamos de implementar& String quemPegouLivro = l2.getPessoa().getNome(); Nela! estamos atribuindo C vari*vel do tipo String .quemPegouLivro.! o nome da Pessoa$ :as comoD

Primeiro! usamos o mtodo .getPessoa. para obter uma instEncia do ob)eto do tipo Pessoa a qual o livro est* vinculado$ #epois! sobre a pessoa recuperada! aplicamos o mtodo .getNome.! para obter o nome da pessoa Neste momento! ns temos duas Classes de teste& Pessoa"est e Livro"est! e vamos criar mais$ Seria conveniente ter uma ,orma de e%ecutar todos os testes de uma s ve+$ Podemos obter isso criando uma nova Classe de teste que agregue as demais$

Suite de Testes
Podemos agregar v*rias Classes de teste! criando uma .Suite. de testes! da seguinte ,orma

Suite de Testes
E na )anela que se abre! vamos selecionar agora .1?nit "est Suite.&

Suite de Testes
2 pr%ima )anela! nos permite especi,icar as caracter;sticas da nossa Suite de testes$ 1* s0o e%ibidos valores de,ault! e entre eles podemos ver que as Classes de teste )* e%istentes! est0o selecionadas$ amos aceitar estes valores de,ault e ,inali+ar&

Suite de Testes
9btendo o seguinte&

Suite de Testes

Sem entrar em maiores detal8es aqui! ,ica claro que C medida que novas Classes de teste ,orem criadas! basta incluir novas lin8as relativas a elas na nossa Suite de teste$ :ais uma ve+! estando com a Classe da nossa Suite de testes selecionada no .Pac6age E%plorer.! vamos usar a combina-0o de teclas& 2lt @ S8i,t @ A! "$

Suite de Testes

9btendo agora o seguinte resultado&

/eparem que agora! e%ecutando os testes a partir da nossa Suite de testes! todos os mtodos de teste de todas as nossas Classes de teste s0o e%ecutados de uma s ve+$

Listas
9 que temos at agoraD

Ns criamos a Classe Pessoa Ns criamos a Classe Livro Ns estabelecemos uma liga-0o entre estas Classes criando um campo pessoa na Classe Livro 2gora vamos )untar tudo isso e come-ar a pensar na nossa Classe Fiblioteca$ :as o que gostar;amos que a Classe Fiblioteca ,i+esseD

Listar os livros que possu;mos Listar as pessoas que pegaram nossos livros emprestados Listar quantos livros e pessoas e%istem no nosso grupoD

Listas
Num primeiro momento podemos estimar a nossa Fiblioteca comunit*ria em cerca de GH pessoas e IHH livros$ :as di,;cil de garantir$ amos supor que um amigo entre no grupo e que apenas ele dispon8a de 3HH livros$ L* se vai a nossa mdia por *gua a bai%o$ 9 ideal portanto! que o nosso programa possa lidar com um n4mero ilimitado de livros e pessoas$ N0o por acaso! a linguagem 1ava possui algumas Classes criadas para lidar com listas$ Ns vamos usar uma delas c8amada& 2rrayList$

Listas
Num primeiro momento podemos estimar a nossa Fiblioteca comunit*ria em cerca de GH pessoas e IHH livros$ :as di,;cil de garantir$ amos supor que um amigo entre no grupo e que apenas ele dispon8a de 3HH livros$ L* se vai a nossa mdia por *gua a bai%o$ 9 ideal portanto! que o nosso programa possa lidar com um n4mero ilimitado de livros e pessoas$ N0o por acaso! a linguagem 1ava possui algumas Classes criadas para lidar com listas$ Ns vamos usar uma delas c8amada& 2rrayList$

ArrayList

Caracter;sticas de um 2rrayList Pode lidar com um n4mero qualquer de 9b)etos numa lista Possui mtodos )* constru;dos para gerenciar a lista

amos voltar a usar o Scrapboo6 para nos ,amiliari+ar com a Classe 2rrayList$

ArrayList
2brindo o Scrapboo6! se e%istir algum cdigo anterior! podemos e%clu;> lo&

2 Classe 2rrayList est* no pacote .)ava$util.$ Portanto! a primeira coisa a ,a+er & importar este pacote para o Scrapboo6&

ArrayList
Na )anela que se abre$$

ArrayList
Em seguida&

ArrayList
E na sequ<ncia&

ArrayList
9 ,ato de importar o pacote .)ava$util.! signi,ica que podemos digitar simplesmente .2rrayList. em ve+ de .)ava$util$2rrayList. no nosso cdigo$ 9 nosso pr%imo passo! vai ser criar um 2rrayList$ 7a+emos isso usando o comando .neJ. que a essa altura )* con8ecemos$ sempre usando os ,acilitadores do Eclipse$ Sobre este assunto! cabe aqui uma dica$ 2parentemente! nas versKes mais recentes do Eclipse! o assistente de cdigo n0o est* ,uncionando para o comando .neJ. no Scrapboo6$ Para solucionar este problema! siga os seguintes passos& WindoJ L Pre,erences L 1ava L Editor L "emplates$ Locali+e o item .neJ.! assim&

ArrayList

ArrayList
Edite este template e altere o conte%to de .1ava statements. para .)ava.$

ArrayList
Isso deve ,a+er ,uncionar o .code complete. para o comando neJ no Scrapboo6$

Come-amos criando uma lista va+ia! assim&

ArrayList
9nde o construtor .MStringN.! de,ine para o compilador que a nossa lista s vai poder conter 9b)etos do ipo String$ Se tentarmos colocar qualquer outro tipo de 9b)eto na lista! vamos receber um erro de compila-0o$ Caso n0o especi,icado este construtor! a lista dar* suporte a qualquer tipo de 9b)eto 1ava$ :as esta n0o a ,orma mais comum de uso$ amos agora adicionar elementos na nossa lista usando o mtodo .add.! assim&

ArrayList
E veri,icar o resultado com o .Inspect.! assim&

ArrayList
Convm ressaltar que os ;ndices das listas em 1ava come-am com H '+ero($ 2 t;tulo de aprendi+ado! vamos tentar adicionar um 9b)eto do tipo inteiro C nossa lista$

ArrayList
/esultando em um erro! assim&

2plicando a Classe 2rrayList


2gora que )* estamos ,amiliari+ados com a Classe 2rrayList! vamos us*> la tratar os nossos livros e pessoas$ amos come-ar com a Classe Livro! assim&

2plicando a Classe 2rrayList


Inspecionando! vamos ver os livros na nossa lista&

2plicando a Classe 2rrayList


Seguindo adiante! vamos criar uma pessoa e associar esta pessoa a um dos livros&

2plicando a Classe 2rrayList


:ais uma ve+! inspecionando vemos que agora e%iste uma pessoa associada ao livro lI&

2plicando a Classe 2rrayList


Podemos observar aqui! a 8ierarquia dos 9b)etos envolvidos& 2 nossa lista '2rrayList(! contm lI 'Livro( que por sua ve+ contm pI 'Pessoa($ 2gora! vamos ver mais detal8adamente alguns outros mtodos da Classe 2rrayList$ Locali+ando um elemento 'o primeiro( da lista&

2plicando a Classe 2rrayList


Inspecionando! vamos obter o 9b)eto livro esperado

2plicando a Classe 2rrayList


Seguindo usando o mesmo princ;pio! )* que obtivemos um 9b)eto do tipo Pessoa! podemos recuperar o nome da pessoa diretamente dele! assim&

Inspecionando! teremos um String com o nome da pessoa&

2plicando a Classe 2rrayList


Portanto! nesta lin8a de cdigo& lista$get'H($getPessoa'($getNome'( lista$get'H( > retorna o livro lI getPessoa'( > retorna a pessoa pI getNome'( > retorna o String com o nome da pessoa pI

2plicando a Classe 2rrayList


amos agora locali+ar um determinado livro na lista! usando o mtodo .inde%9,.&

9 que vai nos retornar a locali+a-0o do 9b)eto l3 na lista&

2plicando a Classe 2rrayList


Sendo ele o segundo elemento da lista ';ndice igual a I(! lembrando que o primeiro elemento da lista possui ;ndice igual a H '+ero($ /esumindo& se sabemos o ;ndice! podemos obter o 9b)eto$ Se sabemos o 9b)eto! podemos obter o ;ndice$ Isso tambm se aplica ao uso do mtodo .remove.$

2plicando a Classe 2rrayList


amos us*>lo para remover o 9b)eto lI da lista&

2plicando a Classe 2rrayList


Inspecionando! podemos ver que a nossa lista agora possui apenas um 9b)eto do tipo Livro! e que ele n0o lI e sim o l3! pois o lI acabou de ser removido&

Você também pode gostar