SlideShare uma empresa Scribd logo
1 de 36
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 muitas 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.
Baixo acoplamento e alta coesão

Mais conteúdo relacionado

Mais procurados

Mais procurados (16)

Orientação a Objetos
Orientação a ObjetosOrientação a Objetos
Orientação a Objetos
 
Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetos
 
Curso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NETCurso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NET
 
Texto sobre interface
Texto sobre interfaceTexto sobre interface
Texto sobre interface
 
Refatorações
RefatoraçõesRefatorações
Refatorações
 
Estudos Technocorp
Estudos TechnocorpEstudos Technocorp
Estudos Technocorp
 
Apostila de Introdução a POO com C#
Apostila de Introdução a POO com C#Apostila de Introdução a POO com C#
Apostila de Introdução a POO com C#
 
Java - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosJava - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a Objetos
 
Refatoração de Código Legado
Refatoração de Código LegadoRefatoração de Código Legado
Refatoração de Código Legado
 
Java - Boas práticas
Java - Boas práticasJava - Boas práticas
Java - Boas práticas
 
Programação C - Aula 1
Programação C - Aula 1Programação C - Aula 1
Programação C - Aula 1
 
Gisele
GiseleGisele
Gisele
 
Livro Código limpo: Classes
Livro Código limpo:  ClassesLivro Código limpo:  Classes
Livro Código limpo: Classes
 
Reuso com Herança e Composição
Reuso com Herança e ComposiçãoReuso com Herança e Composição
Reuso com Herança e Composição
 
UFCG.JCert Reunião 1 - Declarações e Controle de Acesso
UFCG.JCert Reunião 1 - Declarações e Controle de AcessoUFCG.JCert Reunião 1 - Declarações e Controle de Acesso
UFCG.JCert Reunião 1 - Declarações e Controle de Acesso
 
Herança
HerançaHerança
Herança
 

Semelhante a Baixo acoplamento e alta coesão

Diagrama de classe aula 02 PDF para UML.
Diagrama de classe aula 02 PDF para UML.Diagrama de classe aula 02 PDF para UML.
Diagrama de classe aula 02 PDF para UML.NunoVieira83
 
Encapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosEncapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosDaniel Brandão
 
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Sérgio Souza Costa
 
SOLID Os princípios da linguagem orientada a objeto
SOLID Os princípios da linguagem orientada a objetoSOLID Os princípios da linguagem orientada a objeto
SOLID Os princípios da linguagem orientada a objetoAlberto Monteiro
 
Orientação a objetos php
Orientação a objetos   phpOrientação a objetos   php
Orientação a objetos phpsecomp2011
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetosCleyton Ferrari
 
Programação Orientado a Objetos - Sessao 4.pptx
Programação Orientado a Objetos - Sessao 4.pptxProgramação Orientado a Objetos - Sessao 4.pptx
Programação Orientado a Objetos - Sessao 4.pptxBernaldinoFernandes
 
Fundamentos e princípios do projeto orientado a objetos
Fundamentos e princípios do projeto orientado a objetosFundamentos e princípios do projeto orientado a objetos
Fundamentos e princípios do projeto orientado a objetosEvandro Agnes
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfAndreCosta502039
 
principios_SOLID_resumo.pdf
principios_SOLID_resumo.pdfprincipios_SOLID_resumo.pdf
principios_SOLID_resumo.pdfssuser9941f1
 
Conceitos de Orientação a Objeto e Exemplos no Estudo de Caso do TRT-16
Conceitos de Orientação a Objeto e Exemplos no Estudo de Caso do TRT-16Conceitos de Orientação a Objeto e Exemplos no Estudo de Caso do TRT-16
Conceitos de Orientação a Objeto e Exemplos no Estudo de Caso do TRT-16marcusNOGUEIRA
 

Semelhante a Baixo acoplamento e alta coesão (20)

Code Smells
Code SmellsCode Smells
Code Smells
 
Diagrama de classe aula 02 PDF para UML.
Diagrama de classe aula 02 PDF para UML.Diagrama de classe aula 02 PDF para UML.
Diagrama de classe aula 02 PDF para UML.
 
Clean code em C#
Clean code em C#Clean code em C#
Clean code em C#
 
Refatoração
RefatoraçãoRefatoração
Refatoração
 
Encapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosEncapsulamento em Orientação a Objetos
Encapsulamento em Orientação a Objetos
 
Aula Herança
Aula HerançaAula Herança
Aula Herança
 
Estudos Technocorp
Estudos TechnocorpEstudos Technocorp
Estudos Technocorp
 
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
 
SOLID Os princípios da linguagem orientada a objeto
SOLID Os princípios da linguagem orientada a objetoSOLID Os princípios da linguagem orientada a objeto
SOLID Os princípios da linguagem orientada a objeto
 
Padrões de Projeto
Padrões de ProjetoPadrões de Projeto
Padrões de Projeto
 
Orientação a objetos php
Orientação a objetos   phpOrientação a objetos   php
Orientação a objetos php
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 
Programação Orientado a Objetos - Sessao 4.pptx
Programação Orientado a Objetos - Sessao 4.pptxProgramação Orientado a Objetos - Sessao 4.pptx
Programação Orientado a Objetos - Sessao 4.pptx
 
[CEFET][ESw] Aula 5 - Diagrama de Classe
[CEFET][ESw] Aula 5 - Diagrama de Classe[CEFET][ESw] Aula 5 - Diagrama de Classe
[CEFET][ESw] Aula 5 - Diagrama de Classe
 
Fundamentos e princípios do projeto orientado a objetos
Fundamentos e princípios do projeto orientado a objetosFundamentos e princípios do projeto orientado a objetos
Fundamentos e princípios do projeto orientado a objetos
 
Revisão de C# 4.0
Revisão de C# 4.0Revisão de C# 4.0
Revisão de C# 4.0
 
Siga a doutrina certa
Siga a doutrina certaSiga a doutrina certa
Siga a doutrina certa
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdf
 
principios_SOLID_resumo.pdf
principios_SOLID_resumo.pdfprincipios_SOLID_resumo.pdf
principios_SOLID_resumo.pdf
 
Conceitos de Orientação a Objeto e Exemplos no Estudo de Caso do TRT-16
Conceitos de Orientação a Objeto e Exemplos no Estudo de Caso do TRT-16Conceitos de Orientação a Objeto e Exemplos no Estudo de Caso do TRT-16
Conceitos de Orientação a Objeto e Exemplos no Estudo de Caso do TRT-16
 

Mais de Paulo Vitor

Mais de Paulo Vitor (6)

Graalvm
GraalvmGraalvm
Graalvm
 
Spring boot com docker
Spring boot com dockerSpring boot com docker
Spring boot com docker
 
Refactoring
RefactoringRefactoring
Refactoring
 
Flex
FlexFlex
Flex
 
Git
GitGit
Git
 
Scrum
ScrumScrum
Scrum
 

Baixo acoplamento e alta coesão

  • 1. Baixo acoplamento e alta coesão no paradigma Orientado a Objetos "Encontre o balanceamento de um sistema pouco acoplado e bem coeso"
  • 2. 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
  • 3. // ● O que é? ● Problemas? ● Soluções ● Benefícios coesão
  • 4.
  • 5. // problemas coesão ● Classe com muitas linhas de código ● Classe é modificada com frequência ● Difícil de entender e manter ● Pouca opção de reuso
  • 7. // 1 solução coesão ● SRP (Single Responsibility Principle) ● OCP (Open/closed principle) 2
  • 9. // benefícios coesão Classes coesas são: ● mais fáceis de serem mantidas ● podem ser reutilizadas ● tendem a ter menos bugs
  • 10. // ● O que é? ● Problemas? ● Soluções ● Benefícios acoplamento
  • 11.
  • 13. // 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
  • 14. // 1 solução acoplamento ● ISP (Interface segregation principle) ● DIP (Dependency inversion principle) 2
  • 16. // benefícios Classes pouco acopladas: ● dependem de menos classes ● são mais fáceis de serem testadas ● possuem menos regras de negócio acoplamento
  • 17. // ● O que é? ● Problemas? ● Soluções ● Benefícios encapsulamento
  • 18.
  • 19. // problemas encapsulamento ● Intimidade inapropriada (Code Smell) ● Cadeia de invocações ● Aumenta os pontos de mudança
  • 20. // 1 solução encapsulamento 2 3 ● peça ao objeto que tem a informação para fazer o trabalho para você
  • 22. // benefícios encapsulamento ● facilidade para alterar a implementação de uma classe ● menos pontos de mudança (boa propagação de mudança)
  • 23. // ● O que é? ● Problemas? ● Soluções ● Benefícios herança
  • 24.
  • 25. // 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]
  • 26. // 1 solução herança 2 ● LSP (Liskov substitution principle)
  • 27. // 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
  • 29. // 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
  • 30. // 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)
  • 31. // 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
  • 32. // 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
  • 33. // 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
  • 34. // 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/
  • 35. “ Fonte | Santo Agostinho “Dá o que tens para que mereças receber o que te falta.