Definição dos erros
Os erros selecionados foram extraídos do livro Clean Code de Robert C. Martin e Refactoring de Martin Fowler. Foram utilizadas as seções referentes aos Bad Smells para definição dos erros, onde algumas definições convergem e, portanto, refletem um mesmo erro. É importante lembrar que, como esse estudo é direcionado a um problema específico, só consideramos erros que podem ser reconhecidos a partir dos comentários dos professores.
Segue, então, os erros de design:
-
Erros em Métodos: Aqui denominado métodos, foram adaptadas trechos de discussões sobre funções de ambos os livros para categorização desses erros. Em ambas as obras foi citado como má prática de programação a implementação de funções longas e funções com muitos parâmetros. Também são considerados bad smells funções que fazem mais de uma coisa e/ou possuem mais de um nível de abstração. Funções com efeito colateral também são problemáticas. Duplicação de funções também é considerado um bad smell.
-
Erros de Abstração: Abstração em programação orientada a objetos consiste em dar identidade e definir características e ações para os objetos. Os objetos devem ser identificados como uma entidade por si só e não pela junção de seus componentes. Envolve ocultação da implementação, expondo apenas sua interface. Programas que falhem na sintetização dos objetos e sua identidade dentro do sistema são programas com erros de abstração. Objetos que não escondem detalhes de implementação também indicam problemas de abstração.
-
Violações da Lei de Deméter: Uma heurística que diz que um módulo/objeto não deve conhecer as “entranhas” de um outro objeto que manipula. Uma unidade deve ter conhecimento limitado das outras. Segue-se aqui o princípio da ocultação da informação. Ao se utilizar métodos de uma classe deve-se sabe o que o método faz e nunca como ele faz. Problemas de acoplamento e feature envy podem indicar violação da lei de deméter.
-
Problemas de Encapsulamento:Trata-se do conceito de caixa preta, evitando o acesso direto às propriedades de um objeto. Enquanto por abstração entende-se ocultação da implementação, no encapsulamento deve-se ocultar a informação. Programas que ferem o expert da informação podem indicar erros de encapsulamento (mas também de abstração).
-
Problemas de Coesão: Uma classe deve ter apenas uma única responsabilidade e realizá-la de maneira satisfatória, ou seja, uma classe não deve assumir responsabilidades que não são suas. Objetos e classes que com múltiplas responsabilidades são classes com problemas de coesão (que também podem indicar problemas de abstração).
Os outros erros considerados não se tratam de erros de design, mas se mostraram bastante presentes durante a avaliação e portanto serão considerados na análise.