SlideShare uma empresa Scribd logo
1 de 32
Baixar para ler offline
Refatoração: Mantendo o
código livre de maus
cheiros
Code Smell
Pedro H.O.Silva
pedrohosilva.wordpress.com/
Quem é você?

Não sou esses caras
Quem é você?
Uai, má o que c vai fala, sô?

Robert C. Martin - "Uncle Bob"
Mas Primeiro: Teoria das Janelas
Quebradas

Em 1982 pelos americanos James Wilson e George Kelling
http://drauziovarella.com.br/drauzio/janelas-quebradas/
Que Diabos/Minuto

Segundo "Uncle Bob", a unidade de
medida para um código é Que
Diabos/minuto !
Afinal, o que é um código
SUJO?!
Afinal, o que é um código
SUJO?!
Bjarne Stroustrup ( Pai do C++ )
● A lógica deve ser direta, para dificultar o encobrimento
de bugs;
● Dependências mínimas;
● Tratamento de erro;
● O Código limpo, faz bem apenas uma coisa, executa
apenas uma tarefa.
Dave Tomas ( Criador do Eclipse )
● O código limpo tem testes de uma forma geral, como
unitários, integração, aceitação etc.
● Nome significativos (nada de “int i;”);
● Poucas dependências e fazer apenas uma tarefa (como
citado por Bjarne);
Dando nome aos Bois!
Nomeando as coisas ( Classes, Métodos,
Variáveis, etc… )
Bizu #01 - Sempre que encontrar um nome
ruim, mude-o ( CTRL + ALT + R );
Bizu #02 - Dê nomes que tenham dignificados,
nada de: int i, String x, Date dmahmsegs;
Dando nome aos Bois!
Bizu #03 - Evite nomes com mais de um
siginificado ou com duplo sentido,
Ex:. HP empresa ou Hipotenusa? ;
Bizu #04 - Evite nomes muito parecidos, Ex:.
XYZControllerForEfficientHandlingOfString
XYZControllerForEfficientStorageOfString
Dando nome aos Bois!
Bizu #05 - Dê nomes pronunciáveis, EX:.
genymdhms ou generationTimestamp?
Padrão SUN: Classes
● Substantivos;
● Primeira Letra Maiúscula;
● Para Palavras Compostas, usar o CamelCase;
Ex:. Dog, ServicoPagamentoCompleto ...
Padrão SUN: Interfaces
●
●
●
●
●

Primeira Letra Maiúscula;
Para Palavras Compostas, usar o CamelCase;
Alguns usam IDAO e DAO
Alguns usam DAO e DAOImpl
Sempre que possível usar nomes mais que
mostrem seu propósito, como por exemplo
List e ArrayList, no JAVA
Ex:. DAO, IDAO, DAO, DAOIml...
Padrão SUN: Métodos
● Primeira Letra Minuscula;
● Para Palavras Compostas, usar o CamelCase,
mas sempre manter a primeira minuscula;
● Verbo-Substantivo
Ex:. getNome, setIdade, somarSalarios ...
Padrão SUN: Variáveis
● Primeira Letra Minuscula;
● Para Palavras Compostas, usar o CamelCase,
mas sempre manter a primeira minuscula;
● Nomes significativos;
● Nomes Pequenos, sempre que possível
Ex:. nome, idade, enderecoEntrega ...
Padrão SUN: Constantes
● Marcados como Final e Static;
● Todas letras maiúsculas;
● Palavras Compostas, separar por
UnderScore ( _ )
Ex:. static final ENVIA_POR_ARQUIVO
Testes
● Mesmo padrão citado nos casos anteriores,
mas para as classes é padrão acrescentar o
sufixo Test, e também manter o mesmo
nome de pacote, porem em uma src
diferente.
Ex:. GeraArquivoTest.class
Métodos
● Pequenos, de 20 a 30 linhas ( eu já vi
métodos com mais de 1000 linhas);
● Fazer apenas uma coisa, devem fazê-la bem,
devem fazer apenas ela;
Bizu #06 - Use a extração de métodos, classes e
interfaces que as IDEs modernas possuem (
CTRL + 1 )
Métodos
● Evite muitos Ifs e Elses, utilizar padrões de
projeto que faça abstração, como Chain of
Responsability, Abstract, Factory, etc…
● Os blocos if, else, while, switch/case devem
conter, de preferência, apenas uma linha,
sendo ela uma chamada de função;
Métodos: Parâmetros
● A quantidade de parâmetros ideal, é ZERO,
0, NULO;
● Mas…
○
○
○
○

Mônade;
Díade;
Tríades;
Políade (Caso muito especial)

● Para evitar isso utilize objetos;
Métodos
● Evite Repetição de Código
Comentários
Comentários
● Não insira comentários em um código ruim,
reescreva-o;
● Comentários velhos são mentirosos, e o pai
da mentira é o ….
● Geralmente os comentários não são
atualizados;
Comentários
● Código bom é auto-explicativo, não precisa
de comentários
● Ler um código bem escrito, é como ler uma
bela poesia;
Comentários Bons
● Legais (Direitos autorais)
● Explicativa, tivemos que fazer isso por causa
disso, foi a melhor maneira que encontramos
de fazer isso, etc …
● Alerta sobre consequencias Ex:. Não usar
este teste porque ele gera um relatório real;
● Comentários TODO
Comentários Ruins
● Comentários Redundantes;
● Comentários Enganadores;
● Comentários Imperativos ( @Param do
javadoc )
● Comentários Longos;
● Comentários Ruidosos
Ex:. /*dia do mes */ private int diaDoMes;
● Marcadores de posição
Ex:. // ########################
Formatação
● Formatação é importante SIM!
● Entre em acordo com o time de
desenvolvimento e definam um padrão;
● Procurem por padrões já estabelecidos;
● Metáfora do Jornal;
Formatação: Bizus
Bizu #07 - No eclipse utilize - CTRL + 3 e
digite: Formatter, clique na opção:

Agora você pode editar sua formatação ;D
Formatação: Bizus
Bizu #08 - No eclipse utilize - CTRL + 3 e
digite: Save Actions, clique em:

Agora você pode habilitar a ação que toda vez
que o documento é salvo ele formata o código.
OBS:. Com o Save Actions é possível configurar
vários combos ;D
Tratamento de Erros
● Sempre que possível use Try/Catch;
● Faça um bom sistema de Logs no seu
projeto;
● Tente cobrir a maior parte do código com
testes;
● Build automatizado/Integração Contínua;
DUVIDAS?
Blog: pedrohosilva.wordpress.com
Facebook: /pedrohenrique.silva.106
E-mail: pedrospsjc@gmail.com
BitBucket: bitbucket.org/pedrosjcampos

Mais conteúdo relacionado

Mais procurados

Clean Code: Por um mundo com códigos melhores - SETI 2017
Clean Code: Por um mundo com códigos melhores - SETI 2017Clean Code: Por um mundo com códigos melhores - SETI 2017
Clean Code: Por um mundo com códigos melhores - SETI 2017Thiago Barradas
 
Depurando Aplicacoes PHP com XDebug e FirePHP II
Depurando Aplicacoes PHP com XDebug e FirePHP IIDepurando Aplicacoes PHP com XDebug e FirePHP II
Depurando Aplicacoes PHP com XDebug e FirePHP IIJefferson Girão
 
Depurando Aplicações PHP com XDebug e FirePHP - SETI 2008
Depurando Aplicações PHP com XDebug e FirePHP - SETI 2008Depurando Aplicações PHP com XDebug e FirePHP - SETI 2008
Depurando Aplicações PHP com XDebug e FirePHP - SETI 2008Jefferson Girão
 
Mantendo a Qualidade dos Códigos de Teste
Mantendo a Qualidade dos Códigos de TesteMantendo a Qualidade dos Códigos de Teste
Mantendo a Qualidade dos Códigos de Testemauricioszabo
 
Refatorar! Porque ninguém gosta de código que cheira mal
Refatorar! Porque ninguém gosta de código que cheira malRefatorar! Porque ninguém gosta de código que cheira mal
Refatorar! Porque ninguém gosta de código que cheira malAndrei Tognolo
 
Testes e mocks: Em Visual Studio com .NET
Testes e mocks: Em Visual Studio com .NETTestes e mocks: Em Visual Studio com .NET
Testes e mocks: Em Visual Studio com .NETAlessandro Binhara
 
Seja Um Programador Pragmatico
Seja Um Programador PragmaticoSeja Um Programador Pragmatico
Seja Um Programador PragmaticoLeonardo Fernandes
 
Tdd not sure if testing or developing
Tdd  not sure if testing or developingTdd  not sure if testing or developing
Tdd not sure if testing or developingRenato Oliveira
 
TDD - Workshop Pyladies SP
TDD - Workshop Pyladies SPTDD - Workshop Pyladies SP
TDD - Workshop Pyladies SPJessyka Lage
 
Introdução a programação
Introdução a programaçãoIntrodução a programação
Introdução a programaçãoEdu Queiroz
 

Mais procurados (20)

Clean Code: Por um mundo com códigos melhores - SETI 2017
Clean Code: Por um mundo com códigos melhores - SETI 2017Clean Code: Por um mundo com códigos melhores - SETI 2017
Clean Code: Por um mundo com códigos melhores - SETI 2017
 
Depurando Aplicacoes PHP com XDebug e FirePHP II
Depurando Aplicacoes PHP com XDebug e FirePHP IIDepurando Aplicacoes PHP com XDebug e FirePHP II
Depurando Aplicacoes PHP com XDebug e FirePHP II
 
Depurando Aplicações PHP com XDebug e FirePHP - SETI 2008
Depurando Aplicações PHP com XDebug e FirePHP - SETI 2008Depurando Aplicações PHP com XDebug e FirePHP - SETI 2008
Depurando Aplicações PHP com XDebug e FirePHP - SETI 2008
 
Code smell gsw
Code smell   gswCode smell   gsw
Code smell gsw
 
Mantendo a Qualidade dos Códigos de Teste
Mantendo a Qualidade dos Códigos de TesteMantendo a Qualidade dos Códigos de Teste
Mantendo a Qualidade dos Códigos de Teste
 
Programação Orientada a Gambiarra
Programação Orientada a GambiarraProgramação Orientada a Gambiarra
Programação Orientada a Gambiarra
 
Refatorar! Porque ninguém gosta de código que cheira mal
Refatorar! Porque ninguém gosta de código que cheira malRefatorar! Porque ninguém gosta de código que cheira mal
Refatorar! Porque ninguém gosta de código que cheira mal
 
Dojo com Arduino
Dojo com ArduinoDojo com Arduino
Dojo com Arduino
 
Clean code
Clean codeClean code
Clean code
 
Testes e mocks: Em Visual Studio com .NET
Testes e mocks: Em Visual Studio com .NETTestes e mocks: Em Visual Studio com .NET
Testes e mocks: Em Visual Studio com .NET
 
Código limpo
Código limpoCódigo limpo
Código limpo
 
Seja Um Programador Pragmatico
Seja Um Programador PragmaticoSeja Um Programador Pragmatico
Seja Um Programador Pragmatico
 
TDD com Clean Code: Chega de amadorismo!
TDD com Clean Code: Chega de amadorismo!TDD com Clean Code: Chega de amadorismo!
TDD com Clean Code: Chega de amadorismo!
 
Tdd not sure if testing or developing
Tdd  not sure if testing or developingTdd  not sure if testing or developing
Tdd not sure if testing or developing
 
Pep 8
Pep 8Pep 8
Pep 8
 
Coding dojo
Coding dojoCoding dojo
Coding dojo
 
TDD - Workshop Pyladies SP
TDD - Workshop Pyladies SPTDD - Workshop Pyladies SP
TDD - Workshop Pyladies SP
 
Coding Dojo em 10 Minutos!
Coding Dojo em 10 Minutos!Coding Dojo em 10 Minutos!
Coding Dojo em 10 Minutos!
 
POG nunca mais - SOLISC
POG nunca mais - SOLISCPOG nunca mais - SOLISC
POG nunca mais - SOLISC
 
Introdução a programação
Introdução a programaçãoIntrodução a programação
Introdução a programação
 

Semelhante a Refatoração: Como deixar seu código livre de maus Cheiros

Boas práticas de programação em C# .NET
Boas práticas de programação em C# .NETBoas práticas de programação em C# .NET
Boas práticas de programação em C# .NETFabiano Roman Beraldi
 
Código limpo: Boas práticas e sua importância no desenvolvimento de software.
Código limpo: Boas práticas e sua importância no desenvolvimento de software.Código limpo: Boas práticas e sua importância no desenvolvimento de software.
Código limpo: Boas práticas e sua importância no desenvolvimento de software.Pedro Edson Silva Barros
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In TubaRafael Paz
 
Clean code - Mantenha seu código limpo
Clean code - Mantenha seu código limpoClean code - Mantenha seu código limpo
Clean code - Mantenha seu código limpoTiago Bencardino
 
Desenvolvimento orientado a testes
Desenvolvimento orientado a testesDesenvolvimento orientado a testes
Desenvolvimento orientado a testesCarlos Santana
 
Clean Code (Robert C. Martin)
Clean Code (Robert C. Martin)Clean Code (Robert C. Martin)
Clean Code (Robert C. Martin)Yasser Veleda
 
Lógica de Programação - Unimep/Pronatec - Aula02
Lógica de Programação - Unimep/Pronatec - Aula02Lógica de Programação - Unimep/Pronatec - Aula02
Lógica de Programação - Unimep/Pronatec - Aula02André Phillip Bertoletti
 
Princípios Básicos para Desenvolvedores
Princípios Básicos para DesenvolvedoresPrincípios Básicos para Desenvolvedores
Princípios Básicos para Desenvolvedoresguitoper
 
In tests we trust: começando com TDD, mocks e mais
In tests we trust: começando com TDD, mocks e maisIn tests we trust: começando com TDD, mocks e mais
In tests we trust: começando com TDD, mocks e maisAna Paula Gomes
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisRogerio Fontes
 
Quais são os erros mais comuns de um programador ruby
Quais são os erros mais comuns de um programador ruby Quais são os erros mais comuns de um programador ruby
Quais são os erros mais comuns de um programador ruby Flavia Fortes
 
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014Gilmar PSL
 
Projeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.SProjeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.SThoughtworks
 
Refinamento e boas práticas de programação
Refinamento e boas práticas de programaçãoRefinamento e boas práticas de programação
Refinamento e boas práticas de programaçãoAécio Costa
 

Semelhante a Refatoração: Como deixar seu código livre de maus Cheiros (20)

Boas práticas de programação em C# .NET
Boas práticas de programação em C# .NETBoas práticas de programação em C# .NET
Boas práticas de programação em C# .NET
 
Clean code
Clean codeClean code
Clean code
 
Código limpo: Boas práticas e sua importância no desenvolvimento de software.
Código limpo: Boas práticas e sua importância no desenvolvimento de software.Código limpo: Boas práticas e sua importância no desenvolvimento de software.
Código limpo: Boas práticas e sua importância no desenvolvimento de software.
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In Tuba
 
Clean code - Mantenha seu código limpo
Clean code - Mantenha seu código limpoClean code - Mantenha seu código limpo
Clean code - Mantenha seu código limpo
 
Clean code
Clean codeClean code
Clean code
 
Clean code clickbus
Clean code   clickbusClean code   clickbus
Clean code clickbus
 
Clean Code
Clean CodeClean Code
Clean Code
 
Desenvolvimento orientado a testes
Desenvolvimento orientado a testesDesenvolvimento orientado a testes
Desenvolvimento orientado a testes
 
Codigo limpo
Codigo limpoCodigo limpo
Codigo limpo
 
Clean Code (Robert C. Martin)
Clean Code (Robert C. Martin)Clean Code (Robert C. Martin)
Clean Code (Robert C. Martin)
 
Lógica de Programação - Unimep/Pronatec - Aula02
Lógica de Programação - Unimep/Pronatec - Aula02Lógica de Programação - Unimep/Pronatec - Aula02
Lógica de Programação - Unimep/Pronatec - Aula02
 
Princípios Básicos para Desenvolvedores
Princípios Básicos para DesenvolvedoresPrincípios Básicos para Desenvolvedores
Princípios Básicos para Desenvolvedores
 
In tests we trust: começando com TDD, mocks e mais
In tests we trust: começando com TDD, mocks e maisIn tests we trust: começando com TDD, mocks e mais
In tests we trust: começando com TDD, mocks e mais
 
122172 1445
122172 1445122172 1445
122172 1445
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everis
 
Quais são os erros mais comuns de um programador ruby
Quais são os erros mais comuns de um programador ruby Quais são os erros mais comuns de um programador ruby
Quais são os erros mais comuns de um programador ruby
 
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
 
Projeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.SProjeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.S
 
Refinamento e boas práticas de programação
Refinamento e boas práticas de programaçãoRefinamento e boas práticas de programação
Refinamento e boas práticas de programação
 

Refatoração: Como deixar seu código livre de maus Cheiros

  • 1. Refatoração: Mantendo o código livre de maus cheiros Code Smell Pedro H.O.Silva pedrohosilva.wordpress.com/
  • 2. Quem é você? Não sou esses caras
  • 4. Uai, má o que c vai fala, sô? Robert C. Martin - "Uncle Bob"
  • 5. Mas Primeiro: Teoria das Janelas Quebradas Em 1982 pelos americanos James Wilson e George Kelling http://drauziovarella.com.br/drauzio/janelas-quebradas/
  • 6. Que Diabos/Minuto Segundo "Uncle Bob", a unidade de medida para um código é Que Diabos/minuto !
  • 7. Afinal, o que é um código SUJO?!
  • 8. Afinal, o que é um código SUJO?! Bjarne Stroustrup ( Pai do C++ ) ● A lógica deve ser direta, para dificultar o encobrimento de bugs; ● Dependências mínimas; ● Tratamento de erro; ● O Código limpo, faz bem apenas uma coisa, executa apenas uma tarefa.
  • 9. Dave Tomas ( Criador do Eclipse ) ● O código limpo tem testes de uma forma geral, como unitários, integração, aceitação etc. ● Nome significativos (nada de “int i;”); ● Poucas dependências e fazer apenas uma tarefa (como citado por Bjarne);
  • 10. Dando nome aos Bois! Nomeando as coisas ( Classes, Métodos, Variáveis, etc… ) Bizu #01 - Sempre que encontrar um nome ruim, mude-o ( CTRL + ALT + R ); Bizu #02 - Dê nomes que tenham dignificados, nada de: int i, String x, Date dmahmsegs;
  • 11. Dando nome aos Bois! Bizu #03 - Evite nomes com mais de um siginificado ou com duplo sentido, Ex:. HP empresa ou Hipotenusa? ; Bizu #04 - Evite nomes muito parecidos, Ex:. XYZControllerForEfficientHandlingOfString XYZControllerForEfficientStorageOfString
  • 12. Dando nome aos Bois! Bizu #05 - Dê nomes pronunciáveis, EX:. genymdhms ou generationTimestamp?
  • 13. Padrão SUN: Classes ● Substantivos; ● Primeira Letra Maiúscula; ● Para Palavras Compostas, usar o CamelCase; Ex:. Dog, ServicoPagamentoCompleto ...
  • 14. Padrão SUN: Interfaces ● ● ● ● ● Primeira Letra Maiúscula; Para Palavras Compostas, usar o CamelCase; Alguns usam IDAO e DAO Alguns usam DAO e DAOImpl Sempre que possível usar nomes mais que mostrem seu propósito, como por exemplo List e ArrayList, no JAVA Ex:. DAO, IDAO, DAO, DAOIml...
  • 15. Padrão SUN: Métodos ● Primeira Letra Minuscula; ● Para Palavras Compostas, usar o CamelCase, mas sempre manter a primeira minuscula; ● Verbo-Substantivo Ex:. getNome, setIdade, somarSalarios ...
  • 16. Padrão SUN: Variáveis ● Primeira Letra Minuscula; ● Para Palavras Compostas, usar o CamelCase, mas sempre manter a primeira minuscula; ● Nomes significativos; ● Nomes Pequenos, sempre que possível Ex:. nome, idade, enderecoEntrega ...
  • 17. Padrão SUN: Constantes ● Marcados como Final e Static; ● Todas letras maiúsculas; ● Palavras Compostas, separar por UnderScore ( _ ) Ex:. static final ENVIA_POR_ARQUIVO
  • 18. Testes ● Mesmo padrão citado nos casos anteriores, mas para as classes é padrão acrescentar o sufixo Test, e também manter o mesmo nome de pacote, porem em uma src diferente. Ex:. GeraArquivoTest.class
  • 19. Métodos ● Pequenos, de 20 a 30 linhas ( eu já vi métodos com mais de 1000 linhas); ● Fazer apenas uma coisa, devem fazê-la bem, devem fazer apenas ela; Bizu #06 - Use a extração de métodos, classes e interfaces que as IDEs modernas possuem ( CTRL + 1 )
  • 20. Métodos ● Evite muitos Ifs e Elses, utilizar padrões de projeto que faça abstração, como Chain of Responsability, Abstract, Factory, etc… ● Os blocos if, else, while, switch/case devem conter, de preferência, apenas uma linha, sendo ela uma chamada de função;
  • 21. Métodos: Parâmetros ● A quantidade de parâmetros ideal, é ZERO, 0, NULO; ● Mas… ○ ○ ○ ○ Mônade; Díade; Tríades; Políade (Caso muito especial) ● Para evitar isso utilize objetos;
  • 24. Comentários ● Não insira comentários em um código ruim, reescreva-o; ● Comentários velhos são mentirosos, e o pai da mentira é o …. ● Geralmente os comentários não são atualizados;
  • 25. Comentários ● Código bom é auto-explicativo, não precisa de comentários ● Ler um código bem escrito, é como ler uma bela poesia;
  • 26. Comentários Bons ● Legais (Direitos autorais) ● Explicativa, tivemos que fazer isso por causa disso, foi a melhor maneira que encontramos de fazer isso, etc … ● Alerta sobre consequencias Ex:. Não usar este teste porque ele gera um relatório real; ● Comentários TODO
  • 27. Comentários Ruins ● Comentários Redundantes; ● Comentários Enganadores; ● Comentários Imperativos ( @Param do javadoc ) ● Comentários Longos; ● Comentários Ruidosos Ex:. /*dia do mes */ private int diaDoMes; ● Marcadores de posição Ex:. // ########################
  • 28. Formatação ● Formatação é importante SIM! ● Entre em acordo com o time de desenvolvimento e definam um padrão; ● Procurem por padrões já estabelecidos; ● Metáfora do Jornal;
  • 29. Formatação: Bizus Bizu #07 - No eclipse utilize - CTRL + 3 e digite: Formatter, clique na opção: Agora você pode editar sua formatação ;D
  • 30. Formatação: Bizus Bizu #08 - No eclipse utilize - CTRL + 3 e digite: Save Actions, clique em: Agora você pode habilitar a ação que toda vez que o documento é salvo ele formata o código. OBS:. Com o Save Actions é possível configurar vários combos ;D
  • 31. Tratamento de Erros ● Sempre que possível use Try/Catch; ● Faça um bom sistema de Logs no seu projeto; ● Tente cobrir a maior parte do código com testes; ● Build automatizado/Integração Contínua;
  • 32. DUVIDAS? Blog: pedrohosilva.wordpress.com Facebook: /pedrohenrique.silva.106 E-mail: pedrospsjc@gmail.com BitBucket: bitbucket.org/pedrosjcampos