Baixo acoplamento e alta coesão no paradigma Orientado a Objetos

PauloVitor29 144 views 36 slides Oct 02, 2018
Slide 1
Slide 1 of 36
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36

About This Presentation

Encontre o balanceamento de um sistema pouco acoplado e bem coeso


Slide Content

Baixo acoplamento e alta coesão no paradigma Orientado a Objetos "Encontre o balanceamento de um sistema pouco acoplado e bem coeso"

Objetivo dessa apresentação? Definição de acoplamento e coesão SOLID Pilares e princípios da orientação a objetos Técnicas e boas práticas Code smells Métricas de código

O que é? Problemas? Soluções Benefícios coesão

problemas coesão Classe com muit as linhas de código Classe é modificada com frequência Difícil de entender e manter Pouca opção de reuso

SOLID

1 solução coesão SRP (Single Responsibility Principle) OCP (Open/closed principle) 2

solução (código) coesão

benefícios coesão Classes coesas são: mais fáceis de serem mantidas podem ser reutilizadas tendem a ter menos bugs

O que é? Problemas? Soluções Benefícios acoplamento

Diagrama

problemas acoplamento Propagação de mudança Reúso cada vez mais difícil (devido às muitas dependências) Alterações em vários lugares A classe se torna frágil, fácil de quebrar

1 solução acoplamento ISP (Interface segregation principle) DIP (Dependency inversion principle) 2

solução (código) acoplamento

benefícios Classes pouco acopladas: dependem de menos classes são mais fáceis de serem testadas possuem menos regras de negócio acoplamento

O que é? Problemas? Soluções Benefícios encapsulamento

problemas encapsulamento Intimidade inapropriada (Code Smell) Cadeia de invocações Aumenta os pontos de mudança

1 solução encapsulamento 2 3 peça ao objeto que tem a informação para fazer o trabalho para você

solução (código) encapsulamento

benefícios encapsulamento facilidade para alterar a implementação de uma classe menos pontos de mudança (boa propagação de mudança)

O que é? Problemas? Soluções Benefícios herança

problemas herança usar herança para reaproveitar código, sem questionar se a classe [é um] quebra de encapsulamento operador protected, dá acesso as classes filhas e as [classes do mesmo pacote]

1 solução herança 2 LSP (Liskov substitution principle)

solução herança Pré-condições: A classe filha só pode afrouxar as precondições . Ex: classe pai recebe 1-100, a classe filha não pode receber 1-50, pois é mais restritiva 1 2 Pós-condições: A classe filha só pode apertar a pós-condição é o contrário da pré Ex: classe pai retorna 1-100, a classe filha não pode afrouxar 1-200, pois é mais amplo

solução (código) herança

avalie quando usar herança a composição é mais difícil de quebrar o encapsulamento a composição nos dá flexibilidade de alterar o comportamento de uma classe alterando suas dependências escrever testes é mais fácil herança deve ser usada quando existe a relação de X é um Y e composição é quando a relação é X tem um Y ou X faz uso de Y

algumas dicas técnicas e boas práticas evite objetos inválidos ( A própria classe deve garantir que fique em um estado válido, isso pode ser feito utilizando construtores) teorema do bom vizinho tiny types (quando necessário) utilize DTOs que representam pedaços do sistema avalie o uso de objetos imutáveis nomenclatura (procure dar nome legível e de fácil compreensão)

más práticas code smells Refused bequest: é quando herdamos de uma classe, mas não queremos fazer uso de alguns dos seus métodos Feature envy: é quando um método está mais interessado em outro objeto do que no objeto em que ele está inserido God class: é aquela classe que controla muitos outros objetos do sistema Divergent changes: é quando a classe não é coesa e sofre alterações constantes, devido às suas diversas responsabilidades Shotgun surgery: é quando surge uma modificação no sistema e para isso é preciso mudar em muitos lugares

métricas de código métricas Complexidade ciclomática : é quando ele tem muitas linhas de código ou quando ele tem muitos possíveis diferentes caminhos a serem executados Tamanho de métodos: linhas de código e quantidade de métodos de uma classe LCOM (Lack of cohesion of methods): contabiliza o número do conjunto de diferentes responsabilidades tem uma classe, quanto maior o número menos coesa a classe é Acoplamento eferente: é quando uma classe depende de diversas outras classes Acoplamento aferente: é quando medimos quantas classes dependem da classe principal Má Nomenclatura: procurar seguir o padrão da linguagem

resumo conclusão Balancear coesão e acoplamento Programar voltado para interface Depender de classes estáveis Manter o comportamento da classe escondido Favoreça a composição

Referências conclusão Livro: Orientação a Objetos e SOLID para Ninjas - Casa do código https://www2.ccs.neu.edu/research/demeter/ https://www.caelum.com.br/apostila-java-orientacao-objetos/heranca-reescrita-e-polimorfismo/ http://blog.caelum.com.br/nao-aprender-oo-getters-e-setters/ http://blog.caelum.com.br/como-nao-aprender-orientacao-a-objetos-heranca/

“ Fonte | Santo Agostinho “ Dá o que tens para que mereças receber o que te falta.