O documento discute boas práticas de qualidade de código, incluindo princípios como baixo acoplamento e alta coesão. Também aborda padrões de projeto orientado a objetos e códigos cheirosos, além de técnicas como teste unitário e refatoração para melhorar a qualidade do código.
19. Rigidez
“O sistema é difícil de mudar, porque cada vez que você muda alguma coisa, você
tem que mudar alguma outra coisa em uma sucessão interminável de mudanças.”
40. Princípios de Projeto
•Restrição ao Acesso
•Prefira a composição à herança
•Programação para a interface
•Separe o que permanece igual do
que varia
41. S ingle Responsibility Principle (SRP)
O pen/Closed Principle (OCP)
L iskov substitution principle (LSP)
I nterface Segregation Principle (ISP)
D ependency Inversion Principle (DIP)
42. Princípios de Projeto OO – Single Responsibility Principle (SRP)
"Nunca deve haver mais de um motivo para uma classe ser
alterada"
45. Princípios de Projeto OO – Open/Closed Principle (OCP)
“As entidades devem estar abertas para extensão, mas fechadas
para modificação”
46. Violação do princípio:
Considere o método para calcular o preço total de peças:
public double totalPrice(Part[] parts){
double total = 0.0;
for(int i=0; i < parts.length; i++){
total += parts[i].getPrice();
}
return total;
}
O método processa diferentes tipos de peças da hierarquia de
Part, sem demandar modificações, portanto conformado-
se com o OCP.
47. Violação do princípio:
O que ocorrerá se a empresa decidir cobrar um preço adicional por
certas peças?
public double totalPrice(Part[] parts){
double total = 0.0;
for(int i = 0; i < parts.length; i++){
if(parts[i] instanceof Motherbord)
total +=(1.45 * part[i].getPrice());
else if (parts[i] instanceof Memory)
total += (1.30 * part[i].getPrice());
else
total += part[i].getPrice();
}
return total;
}
48. Adequação ao princípio:
Considere novamente o método totalPrice original
public double totalPrice(Part[] parts){
double total = 0.0;
for(int i = 0; i < parts.length; i++){
total += part[i].getPrice();
}
return total;
}
Note que agora o método não precisa ser alterado para
processar diferentes tipos de peças.
Mas as subclasses especiais de Parts precisam
49. Adequação ao princípio:
public class Part{
private double basePrice;
public void setPrice(double price){
basePrice = price;
}
public double getPrice(){return basePrice;}
}
public class motherBoard extends Part{
public double getPrice(){return 1.45*super.getPrice();
}
public class Memory extends Part{
public double getPrice(){
return 1.30 * super.getPrice();
}
}
50. Princípios de Projeto OO – Liskov substitution principle (LSP)
“Funções que usam objetos de uma superclasse devem ser capazes
de usar objetos das subclasses.”
51. Princípios de Projeto OO – Interface Segregation Principle (ISP)
“Interfaces mais específicas melhor que interface de
propósito diversos.”
52. Princípios de Projeto OO – Dependency Inversion Principle (DIP)
“Módulos de alto nível não devem depender de módulos de nível
mais baixo. Todos devem depender de abstrações.”