QUALIDADE DE CÓDIGO
Leitura Capítulo 7 (Prog. Orient. a Obj. usando Java - 4th Edition)
Principais conceitos a serem abrangidos slide 3 Design baseado na responsabilidade Acoplamento Coesão Refatoração
Alterações de software slide 4 O software não é como um romance que é escrito uma vez e, então, mantém-se inalterado. O software é estendido, corrigido, mantido, portado, adaptado O trabalho é feito por diferentes pessoas ao longo do tempo (em geral, décadas).
Mude ou morra slide 5 Há apenas duas opções de software: Ambas são continuamente mantidas; ou morrem. O software que não puder ser mantido será jogado fora.
Qualidade de código slide 6 Há dois conceitos importantes para a qualidade de código: Acoplamento Coesão 2008 by Pearson Education Programãção orientada com objetos JAVA Uma introdução prática utilizando o BlueJ Barnes Kölling
Acoplamento slide 7 O acoplamento se refere às ligações entre distintas unidades de um programa. Se duas classes dependem rigorosamente de muitos detalhes uma da outra, dizemos que são fortemente acopladas. Nosso objetivo é o acoplamento fraco.
Coesão slide 8 A coesão refere-se ao número e à diversidade de tarefas pelas quais uma única unidade de uma aplicação é responsável. Se cada unidade é responsável por uma única tarefa lógica, dizemos que ela tem alta coesão. A coesão se aplica a classes e métodos. Buscamos a alta coesão.
Design de classes Acoplamento, coesão e design baseado em responsabilidade
Acoplamento fraco slide 10 Se duas classes dependem rigorosamente de muitos detalhes uma da outra, dizemos que são fortemente acopladas O acoplamento fraco possibilita: entender uma classe sem ler outras mudar uma classe sem afetar outras assim: melhora a capacidade de manutenção
Alta coesão slide 11 Se cada unidade é responsável por uma única tarefa lógica, dizemos que ela tem alta coesão. A alta coesão possibilita: entender o que uma classe ou método faz usar nomes descritivos reusar classes ou métodos
Coesão de métodos slide 12 Um método deve ser responsável por apenas uma tarefa bem definida.
Coesão de classes slide 13 As classes devem representar uma entidade única, bem definida.
Duplicação de código slide 14 Duplicação de código: é um indicador de design ruim dificulta a manutenção pode levar à introdução de erros durante a manutenção
Duplicação de código Ambos tem as linhas de código: System.out.println("You are " + currentroom.getdescription()); System.out.print("Exits: "); if(currentroom.northexit!= null) { System.out.print("north "); } if(currentroom.eastexit!= null) { System.out.print("east "); } if(currentroom.southexit!= null) { System.out.print("south "); } if(currentroom.westexit!= null) { System.out.print("west "); } System.out.println();
Duplicação de código Baixa coesão Duplicação de código é sintoma de baixa coesão printwelcome imprime a mensagem de boas vindas & imprime a localização atual goroom altera a localização atual & imprime a localização atual Os métodos fazem 2 coisas (baixa coesão) Solução: Criar um método printlocationinfo que imprime a localização atual Usá-lo em printwelcome e goroom
Design baseado na responsabilidade slide 17 Questão: onde adicionar um novo método (que classe)? Cada classe deve ser responsável por manipular seus próprios dados. A classe que deter os dados deve ser responsável por processá-los. RDD resulta em acoplamento fraco.
Localizando alterações slide 18 Um objetivo de reduzir o acoplamento e o design baseado na responsabilidade é o de localizar alterações. Quando uma alteração é necessária, deve ser afetado o menor número de classes possível.
Pensando à frente slide 19 Ao elaborar o design de uma classe, tentamos pensar que é provável que alterações sejam feitas no futuro. Nosso objetivo é facilitar essas alterações.
Coesão de métodos slide 20 Um método deve ser responsável por apenas uma tarefa bem definida. Exemplo de métodos coesos?
Coesão de métodos slide 21 Um método deve ser responsável por apenas uma tarefa bem definida.
Coesão de classes slide 22 As classes devem representar uma entidade única, bem definida.
Refatoração slide 23 Quando as classes são mantidas, é freqüente a adição de código. Classes e métodos tendem a tornar-se mais longos. Ocasionalmente, classes e métodos devem ser refatorados para manter a coesão e o fraco acoplamento.
Refatorando e testando slide 24 Ao refatorar o código, separe o processo de refatorar daquele de fazer outras alterações. Primeiro faça apenas a refatoração, sem alterar a funcionalidade. Teste antes e depois de refatorar para assegurar que tudo está funcionando.
Perguntas sobre design slide 25 Perguntas comuns: Qual deve ser o comprimento de uma classe? Qual deve ser o comprimento de um método? Essas perguntas podem ser respondidas considerando a coesão e o acoplamento.
Diretrizes de design slide 26 Um método é muito longo se executar mais de uma tarefa lógica. Uma classe é muito complexa se representar mais de uma entidade lógica. Nota: essas são diretrizes elas ainda deixam muitas alternativas para o designer.