desenvolvimento profissional utilizando técnicas de código limpo

Upload: marcello-galhardo

Post on 03-Apr-2018

219 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    1/85

    Desenvolvimentoprofissional utilizando

    tcnicas de cdigo limpoMarcello Torres de Oliveira Galhardo

    [email protected]

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    2/85

    "Para poder considerar a si mesmo umprofissional, voc deve criar um cdigo limpo.

    No h desculpa racional para no dar omelhor de si."

    Robert Cecil Martin

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    3/85

    Sumrio

    - Introduo- Proposta de projeto- Cdigo limpo*- Software de anlise de cdigo fonte**- Concluso**- Cronograma

    - Referncias

    * Ainda em desenvolvimento

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    4/85

    Introduo

    Alguns dizem que a programao deixou deser uma preocupao.

    Dizem que devemos nos preocupar commodelos e requisitos.

    Outros que se a engenharia de software estiverbem elaborada, o cdigoestar bem escrito!

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    5/85

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    6/85

    IntroduoO que um bom cdigo?

    Existem tantas definies como existemprogramadores no mundo.

    Que tal a opinio dos mais experientes?

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    7/85

    IntroduoOpinies sobre um bom cdigo

    "Elegante e eficiente,

    cdigo limpo faz bemapenas uma coisa."

    Bjarne Stroustrup,criador da linguagemde programao C++

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    8/85

    IntroduoOpinies sobre um bom cdigo

    "Simples e direto,pode ser lido comouma conversa, como

    uma prosa."

    Grady Booch, criadorda modelagem de

    software UML.

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    9/85

    IntroduoOpinies sobre um bom cdigo

    "Parece ter sido

    escrito por algumque se importa."

    Michael Feathers,engenheiro snior na

    Object Mentor.

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    10/85

    IntroduoOpinies sobre um bom cdigo

    "Cada rotina que vocl faz o que voc

    espera."

    Ward Cunningham,criador do Wiki,

    cocriador da eXtremeProgramming. Lder

    da comunidadeSmalltalk.

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    11/85

    IntroduoAinda no est convencido?

    Ah! Mais o cronograma apertado!

    No tenho tempo para frescura!

    Meu chefe est me pressionando!

    Quero mostrar produtividade!

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    12/85

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    13/85

    IntroduoAt aonde vai o profissionalismo

    Responda!Se voc fosse um mdico e um paciente

    exigisse que voc parasse com toda aquelalavao das mos na preparao a para a

    cirurgia?

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    14/85

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    15/85

    IntroduoAt aonde vai o profissionalismo

    Obviamente o mdico ir se recusar. Por que?Porque o mdico sabe mais que o paciente.

    Ele o profissional, sem mencionar que seria

    criminoso.

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    16/85

    IntroduoQual o custo de um cdigo "ruim"?

    Perda drstica na produtividade.

    Problemas com o tempo de desenvolvimento.

    Alto acoplamento de cdigo.

    Muitos, MUITOS programadores!

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    17/85

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    18/85

    IntroduoEnto, um cdigo bem escrito ...

    ...simples.

    ...elegante.

    ...eficiente.

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    19/85

    IntroduoAgora que voc entende...

    Funcionar o mnimo que se deve esperar deum cdigo...

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    20/85

    Proposta de projetoObjetivos de desenvolvimento

    Analisar o que um cdigo limpo.

    Explicar o conceito de um cdigo limpo.

    Desenvolver um aplicativo que analise o cdigofonte e d informaes de como melhora-lo.

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    21/85

    Cdigo limpo

    "Qualquer um conselhe escrever cdigo queum computador entende. Bons programadores,

    escrevem cdigo que humanos entendam."

    Martin Fowler

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    22/85

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    23/85

    Cdigo limpo

    Como mensurara qualidade de um cdigo?

    Linhasdecdigoporclasse?

    Nmerodemtodos?

    Nmerodeclasses?

    Linhasdecdigo

    spormtodo?

    Nmerodeestruturasdedeciso?

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    24/85

    Cdigo limpoNomes significativos

    H nomes por todos os lados em um software.

    Nomeamos variveis, classes, funes,parmetros, pacotes, diretrios....

    J que vamos fazer muito isso, devemos fazerisso muito bem.

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    25/85

    Cdigo limpoNomes que revelam seu propsito

    Qual o propsito deste cdigo?

    public List pegarCelulasMarcadas () {List lista1 = new ArrayList();for (int[] x : umaLista)

    if (x[0] == 4)lista1.add(x);

    return lista1;}

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    26/85

    Cdigo limpoNomes que revelam seu propsito

    Por que difcil dizer o que o cdigo faz? Noh expresses complexas.

    O problema no a simplicidade do cdigo,

    mas seu aspecto implcito, isto , o contextoque no est explcito no cdigo.

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    27/85

    Cdigo limpoNomes que revelam seu propsito

    Que tipos de coisas esto em umaLista?

    Qual a importncia de um item na posio zerona umaLista?

    Qual a importncia do valor 4?

    Como eu usaria a lista retornada?

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    28/85

    Cdigo limpoNomes que revelam seu propsito

    E agora, qual o propsito?

    public ListaDeCelulasMarcadas pegarCelulasMarcadas () {ListaDeCelulasMarcadas celulasMarcadas = new

    listaDeCelulasMarcadas();for (Celula celula : tabuleiroDoJogo)

    if (celula.estaMarcada())celulasMarcadas.add(celula);return celulasMarcadas;

    }

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    29/85

    Cdigo limpoNomes pronunciveis

    Os seres humanos so bons com as palavras.Pode parecer tolo, mais todas as palavras so

    pronunciveis.

    class DtaCli_Rcrd {private Date dNasc;private Date dCad;private double salDisMen = 102,5;

    }

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    30/85

    Cdigo limpoNomes pronunciveis

    timo! A classe est pronta e voc j podefalar com seu amigo sobre o bug queencontrou nela, por exemplo: "Bem, aqui no

    dNasc, est tendo um problema no calculo do

    SalDisMen, t vendo?"

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    31/85

    Cdigo limpoNomes pronunciveis

    Compare:

    class Cliente {private Date dataDeNascimento;private Date dataDeCadastro;

    private double saldoDisponivelPorMes = 102,5;}

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    32/85

    Cdigo limpoNome de classes

    Classes e objetos devem ter nomes comsubstantivos, como por exemplo: Cliente,

    Usuario, Conta, Produto e etc.

    Evite palavras muito usadas como Dados ou

    Info, palavras que lembrem palavrasreservadas e jamais utilizem verbo na criaodo nome de uma classe.

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    33/85

    Cdigo limpoNome de mtodos

    Os nomes de mtodos devem ter verbos comoinserir, realizar, apagar, salvar e atualizar.

    Devem-se nomear mtodos de acesso,alterao e autenticao segundo seus valores

    e adicionar os prefixos get, set ou is de acordocom opadro javabeans.

    www.java.sun.com/products/javabeans/docs/specs

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    34/85

    Cdigo limpoNome de mtodos

    Quando os construtores estiveremsobrecarregados, use mtodos de fbricaestticos com nomes que descrevam os

    parmetros.

    Usuario usuario = Usuario.encontrePeloId(23);

    melhor do que:

    Usuario usuario = new Usuario(23);

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    35/85

    Cdigo limpoUse nomes passveis de busca

    Utilizar nomes ruins causa vrios problemas aum software, e um dos piores a dificuldade

    de localiz-los.

    Ao utilizar bons nomes, voc otimiza a buscapor um trecho especfico sem precisar parar

    em cdigos aleatrios com letras semelhantes!Alm disto, voc otimiza o Code Complete do

    editor de texto que esteja usando.

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    36/85

    Cdigo limpo

    "A primeira regra de funes que elas devemser pequenas. A segunda que precisam serainda menores."

    Robert Cecil Martin

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    37/85

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    38/85

    Cdigo limpoFunes pequenas

    De acordo com Robert C Martin e Kent Beck,uma funo deve conter no mximo 20 linhas

    (quando estiverem muito mal escritas...).

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    39/85

    Cdigo limpoFunes pequenas

    No existe uma regra especfica ou algo queprove que funes pequenas so melhores.Essas afirmativas so baseadas em

    experincias prprias e relatos de outros

    profissionais no ramo.

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    40/85

    Cdigo limpoFaa apenas uma coisa

    As funes devem fazer uma coisa. Devemfaz-la bem. Devem fazer apenas ela.

    O verdadeiro desafio descobrir o querealmente "uma coisa".

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    41/85

    Cdigo limpoFaa apenas uma coisa

    Se uma funo faz apenas aqueles passos em

    um nvel abaixo do nome da funo, ento elaest fazendo uma s coisa.

    Apesar de tudo, o motivo de criarmos a funo para decompor um conceito em uma srie de

    passos no prximo nvel de abstrao.

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    42/85

    Cdigo limpoUm nvel de abstrao por funo

    Para confirmar que uma funo faz apenas"uma coisa"deve ser verificado se todas as

    instrues dentro da funo esto no mesmo

    nvel de abstrao.

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    43/85

    Cdigo limpoUm nvel de abstrao por funo

    Vrios nveis de abstrao dentro de uma

    funo sempre gera confuso.

    Os leitores podem no conseguir dizer se uma

    expresso determinada um conceitoessencial ou um mero detalhe.

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    44/85

    Cdigo limpoLer o cdigo de cima para baixo

    Um cdigo deve ser lido de cima para baixo,como uma narrativa.

    Utilize sujeitos, verbos e predicados.

    Narrativas so frases em ordem coerente.

    V do nvel de abstrao mais alto, descendoat o mais baixo.

    C

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    45/85

    Cdigo limpoParmetros de funes

    A quantidade ideal de parmetros para umafuno zero (nula). Depois vem um(mnade), seguido de dois (dade).

    necessrio evitar trs (trade). Mais do que trs

    (polade), nunca devem ser usados.

    Cdi li

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    46/85

    Cdigo limpoParmetros de funes

    Parmetros so complicados.

    Exigem conceitos.

    Do ponto de vista de testes, difcil escrevertodas as combinaes possveis

    Cdi li

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    47/85

    Cdigo limpoEvite efeitos colaterais

    Se sua promete fazer apenas uma coisa, masela tambm faz outras coisas escondidas, ela

    um efeito colateral.

    Cdi li

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    48/85

    Cdigo limpoEvite efeitos colaterais

    Acessar uma varivel global, por exemplo,

    causa um acoplamento do cdigo e torna ofluxo do sistema confuso.

    Mais por que o nome efeitos colaterais? Pelasua reao ao descobrir o motivo do cdigo

    no funcionar.

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    49/85

    Cdi li

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    50/85

    Cdigo limpoEvite efeitos colaterais

    Se for necessrio este tipo de efeito colateral,deve-se deixar explcito no nome da funo

    qual a real inteno da funo.

    Cdi li

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    51/85

    Cdigo limpoParmetros de sada

    Os parmetros so comumente interpretadoscomo entradas de uma funo. Se uma funoaltera o estado de um parmetro, ela deveria

    alterar o estado do objeto que pertence.

    Cdi li

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    52/85

    Cdigo limpoParmetros lgicos

    Passar um booleano para uma funo umaprtica horrenda, pois ele mostra

    explicitamente que o mtodo faz mais de uma

    coisa.

    Cdi li

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    53/85

    Cdigo limpoParmetros lgicos

    paginaDebug = true;

    PaginaWeb paginaWeb = PaginaWeb.renderizaPagina(paginaDebug);

    Se o valor for verdadeiro ele ir renderizar umapgina de teste, se for falso (padro) ele ir

    renderizar a pgina normalmente.

    Cdi li

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    54/85

    Cdigo limpoParmetros lgicos

    public void configuraERenderizaPagina () {paginaWeb.configuraPagina();

    return paginaWeb.renderizaPagina();}

    Se o valor for verdadeiro ele ir renderizar uma

    pgina de teste, se for falso (padro) ele irrenderizar a pgina normalmente.

    Cdigo limpo

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    55/85

    Cdigo limpoSeparao comando-consulta

    Uma funo deve fazer ou responder algo, mas

    no ambos.

    Uma funo somente pode alterar informaes

    ou retornar informaes de um objeto.

    Cdigo limpo

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    56/85

    Cdigo limpoSeparao comando-consulta

    public boolean set(String atributo, String valor);

    Essa funo define o valor de um atributo eretorna true se obtiver xito ou false se o

    atributo no existir. Isso levaria a instrues:

    if (set("nomeDeUsuario", "marcello_galhardo"))

    Cdigo limpo

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    57/85

    Cdigo limpoSeparao comando-consulta

    Imagine do ponto de vista do leitor:

    Est sendo perguntado se o atributo"nomeDoUsuario" anteriormente recebeu o

    valor "marcello_galhardo"?

    Ou se "nomeDeUsuario" obteve xito emreceber o valor "marcello_galhardo"?

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    58/85

    Cdigo limpo

    "Quando voc sentir a necessidade deescrever um comentrio, chegou o momentode voc re-escrever todo o seu cdigo."

    Brian W. Kernighan e P.J. Plaugher

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    59/85

    Cdigo limpo

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    60/85

    Cdigo limpoComentrios significam cdigo ruim

    Uma das motivaes mais comuns para criarum comentrio um cdigo ruim.

    Construmos um mdulo e sabemos que estconfuso e desorganizado.

    Estamos cientes da baguna, ento dizemos:"Oh, melhor inserir um comentrio!"

    Cdigo limpo

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    61/85

    Cdigo limpoComentrios significam cdigo ruim

    No! melhor limpar seu cdigo.

    Cdigo limpo

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    62/85

    Cdigo limpoComentrios significam cdigo ruim

    Cdigos claros e expressivos com poucos

    comentrios so mais legveis que muitoscomentrios em um cdigo confuso.

    Ao invs de explicar a baguna, melhorlimpar ela.

    Cdigo limpo

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    63/85

    Cdigo limpoExplique-se no cdigo

    Certamente h vezes em que no possvel

    se expressar direito no cdigo.

    Infelizmente devido a isso, muitos

    programadores assumem que o cdigoraramente um bom meio para se explicar.

    Cdigo limpo

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    64/85

    Cdigo limpoExplique-se no cdigo

    // Verifica se o funcionario tem direito a todos os benefcios

    if (funcionario.ativo & HORA_TOTAL > HORA_MINIMA) && (funcionario.idade > 65)

    Qual voc gostaria de ver em um cdigo fonte?

    if (funcionario.temDireitoATodosOsBeneficios())

    Cdigo limpo

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    65/85

    Cdigo limpoComentrios bons

    Comentrios sobre licena.

    Comentrios de alerta.

    Comentrios para documentao.

    Necessidade de explicao de regra denegcio especfica.

    Cdigo limpo

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    66/85

    Cdigo limpoComentrios extremamente ruins

    Poucas prticas so to condenveis quanto

    colocar o cdigo como comentrio.

    Um cdigo comentado nunca apagado, pois

    outros programadores acham que o cdigo importantes demais para no serem apagados.

    Cdigo limpo

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    67/85

    Cdigo limpoComentrios extremamente ruins

    Houve uma poca em que explicar o cdigoem comentrio poderia ser prtico.

    Mais j faz anos que existem sistemas decontrole de verso/cdigo fonte, que

    lembraram dos cdigos.

    Eu prometo que no perder seu cdigo.

    Cdigo limpo

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    68/85

    Cdigo limpoFormatao

    Aqui, existem trs regras essnciais:

    1. As regras da linguagem de programao.

    2. As regras do framework utilizado.

    3. As regras do time de desenvolvimento.

    Cdigo limpo

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    69/85

    Cdigo limpoObjetos e estruturas de dados

    H um motivo para declararmos nossas

    variveis como privadas. No queremos queningum dependa delas.

    Desejamos ter a liberdade para alterar o tipo

    ou a implementao seja por capricho ouimpulso.

    Cdigo limpo

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    70/85

    Cdigo limpoA Lei de Demeter

    Um mtodo F de uma classe C s deve

    chamar os mtodos de:

    1. C.2. Um objeto criado porF.

    3. Um objeto passado como parmetro para F.4. Um objeto dentro de uma varivel de instncia de C.

    Cdigo limpo

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    71/85

    Cdigo limpoA Lei de Demeter

    Um mtodo no deve chamar os mtodos em

    objetos retornados por qualquer outra dasfunes permitidas.

    Em outras palavras, fale apenas comconhecidos, no com estranhos.

    Cdigo limpo

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    72/85

    Cdigo limpoUse excees para tratar erros

    Use excees ao invs de cdigos de erros.

    Tratamento de exceo algo que um mtododeve fazer.

    No use excees genricas.

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    73/85

    Cdigo limpo

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    74/85

    Cdigo limpoUse excees para tratar erros

    if (deletaPagina(pagina) == E_OK) {if (registro.deletaReferencias(pagina.nome) == E_OK) {

    if (configChaves.deletaChaves(pagina.id)) == E_OK) {logger.log("pagina deletada!");

    } else {logger.log("configChaves no foi deletado!");

    }} else {

    logger.log("deletar referencias do registro falhou!");}

    } else {logger.log("no foi possvel deletar a pagina"); return E_ERROR;

    }

    Cdigo limpo

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    75/85

    Cdigo limpoUse excees para tratar erros

    public void removeCompletamenteUmaPagina() {try {

    deletaPagina(pagina);registro.deletaReferencias(pagina.nome);configChaves.deletaChaves(pagina.id);

    } catch (DeleteFailedException e) {

    logger.log(e.getMessage());}

    }

    Cdigo limpo

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    76/85

    Cdigo limpoNo retorne null de mtodos

    Obriga o uso de if.

    Pode dispararNullPointerException.

    Considere: Lanar excees ou retornar umobjeto de caso especial.

    Cdigo limpo

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    77/85

    Cdigo limpoNo retorne null de mtodos

    List empregados = getEmpregados();

    if (empregados != null) {for (Empregado empregado: empregados) {

    pagamentoTotal += empregado.getSalario();}

    }

    Cdigo limpo

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    78/85

    Cdigo limpoNo retorne null de mtodos

    List empregados = getEmpregados();for (Empregado empregado: empregados) {

    pagamentoTotal += empregado.getSalario();}

    Cdigo limpo

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    79/85

    Cdigo limpoUse excees para tratar erros

    Use excees ao invs de cdigos de erros.

    Tratamento de exceo algo que um mtododeve fazer.

    No use excees genricas.

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    80/85

    Cdigo limpo

    "Deixe a rea do acampamento mais limpa doque como voc a encontrou."

    Boy Scouts of America

    Cdigo limpo

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    81/85

    Cdigo limpoEquvocos da refatorao

    Se no estiver quebrado, no conserte!

    Refatorao no oferece benefcios a curtoprazo.

    Refatorao s funciona para equipes agis.

    Cdigo limpo

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    82/85

    Cdigo limpoAplicao exemplo: Agenda APK

    Aplicao nativa (Android).Desenvolvido em Java.

    ORM.Padro de camadas.

    Model-View-Controller.

    Active Records.

    Cdigo limpo

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    83/85

    Cd go poAplicao exemplo: Agenda APK

    Anlise rpida:

    Maior classe: 80 linhas.Maior mtodo: 6 linhas.Nmero de if: 0.Nmero de for: 0.

    Nmero de for-each: 1.

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    84/85

    Cronograma

  • 7/28/2019 Desenvolvimento profissional utilizando tcnicas de cdigo limpo

    85/85

    Referncias

    Implementation Patterns, Kent Beck, Addison-

    Wesley, 2007.

    Clean Code, Robert C Martin, Alta Books,

    2011.