SlideShare uma empresa Scribd logo
1 de 26
Baixar para ler offline
Classe




  Geovane Pazine Filho
  Inael Rodrigues de Oliveira Neto
  Jackeline Neves de Almeida
Organização

              Ordem
 Variáveis      Públicas (raramente);
                Estáticas;
                Constantes.
                Estáticas privadas;
                Instância privada;
 Funções        Públicas;
                Privadas (Após a função
                pública que a chama.)
Encapsulamento
    Ideal: variáveis e funções privadas;


  Mas para poder realizar testes tornamos
               protegidas.

      Manter a privacidade! Perder o
  encapsulamento é a última alternativa!
Classes pequenas
1ª regra: Classes devem ser pequenas;
2ª regra: Elas devem ser menores ainda.



         O quão pequena?
Classes pequenas - cont
    Cinco métodos nesse caso é muito!!!


 Para classe não medimos em quantidade de
      métodos e sim responsabilidades!
Classes pequenas - cont
 O nome da classe descreve quais responsabilidades ela
                         faz.

Se ela não tiver um nome conciso, provavelmente ficará
                       grande.

Ambiguidade = Chances de muitas responsabilidades. Ex:
         Processador, Gerenciador ou Super

Exercício: Escreva uma breve descrição da classe com 25
        palavras sem usar "se", "e", "ou" ou "mas".
Princípio da Responsabilidade única (SRP)

       Uma classe deve ter apenas uma
  responsabilidade e um motivo para mudar.
A classe abaixo tem 2 motivos para mudar:
1º acompanha informação sobre a versão;
2º gerencia componentes Swing do Java.




Vamos alterar o nro da versão se alterarmos qualquer código Swing, mas o
oposto não é necessário.
Princípio da Responsabilidade única (SRP)

   Responsabilidade única e potencial para
     reutilização em outros aplicativos.




 Fazer funcionar é diferente de código limpo!
Não terminamos quando o programa funciona!
Volte e divida classes muito cheias em outras
        com responsabilidades únicas.
Princípio da Responsabilidade única (SRP)



 "Você quer suas ferramentas organizadas em
   caixas de ferramentas com muitas gavets
     pequenas, cada um com objetos bem
 classificados e rotulados? Ou poucas gavetas
          nas quais você coloca tudo?"
Coesão
● Classes devem ter poucas variáveis

● Cada variavel deve ser manipulada por
  algum método

● Métodos e variáveis são co-dependentes
  como um todo lógico
Coesão
Veja a implementação de uma Pilha:
● Bem Coesa
● Apenas size() não usa ambas as variáveis
Coesão
No entanto, funções pequenas e poucos
parâmetros pode:
● proliferar instâncias de variáveis usadas por
  vários métodos

Quando isso ocorre deve-se separar as
variáveis e métodos em duas classes mais
coesas
Coesão
Imagine uma função grande
em que desejamos extrair uma
parte dela para outra função.

Se código a ser extraído usa quatro variáveis
declaradas na função, devemos passar todas
as quatro variáveis como parâmetros para a
nova função?
Coesão
Se convertêssemos aquelas
4 variáveis em instâncias de
classe, seria mais fácil
extrair o código sem passar
variável por parâmetro.
Coesão
Se classe ficar com muitas instâncias de
variáveis:
● é bem provável que essa classe pode ser
   dividida em outra classe.
Como organizar para alterar
● Necessidade de Mudança
  ○ Complexidade de entendimento das classes



● Mudança constante
  ○ Risco do Sistema não funcionar como esperado
Como organizar para alterar
Exemplo de classe:
   ●   Falta suporte a update
   ●   Modificação tem possibilidade de estragar outro código.
Como organizar para alterar

● A Classe esta logicamente completa?!

  ○ Se sim, a classe pode ser deixada em paz!

  ○ Se não, devemos considerar consertar nosso
    projeto!
Como organizar para alterar
●   Classes com
    responsabilidades únicas.
●   Metodos privados somente
    onde necessário.


● Beneficios:
●   Entendimento Simples!
●   Risco de uma função
    prejudicar outra é infima!
●   Mais fácil testar pontos
    lógicos
●   Adicionar funções muito
    mais fácil.
Como organizar para alterar
● Classes devem ser abertas para expansão,
  mas fechadas para alteração!

● Num sistema ideal, incorporaríamos novos
  recursos através da expansão e não
  alterando o código.
Como isolar das alterações
● Uma classe do cliente dependente de
  detalhes concretos corre perigo quando tais
  detalhes são modificados.

● Interface e classes abstratas ajudam a
  isolar o impacto desses detalhes.
Como isolar das alterações
Exemplo:
  Classe Portfolio, depende diretamente de
uma API TokyoStockExchange externa para
derivar o valor do portfolio.


               Problemas?!
Como isolar das alterações
Solução:




Interface StockExchange que declare um único
                   método.
Como isolar das alterações
● Sistema desacoplado é mais flexivel,
  portanto, tem maior capacidade de
  reutilização.
● Ao utilizar dessa estratégia nossas classes
  aderem ao DIP (Principio da Inversão da
  Independencia)

"Classes devem depender de abstrações e não
            de detalhes concretos"

Mais conteúdo relacionado

Mais procurados

Curso de Java (Parte 3)
 Curso de Java (Parte 3) Curso de Java (Parte 3)
Curso de Java (Parte 3)Mario Sergio
 
Java Primeiros Passos - Cap 7
Java Primeiros Passos - Cap 7Java Primeiros Passos - Cap 7
Java Primeiros Passos - Cap 7David Willian
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In TubaRafael Paz
 
Minicurso Ruby on Rails Dextra
Minicurso Ruby on Rails DextraMinicurso Ruby on Rails Dextra
Minicurso Ruby on Rails DextraDextra
 
Curso de Java (Parte 4)
Curso de Java (Parte 4)Curso de Java (Parte 4)
Curso de Java (Parte 4)Mario Sergio
 
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 objetosLeonardo Melo Santos
 
Guia Rápido de Referência Java
Guia Rápido de Referência JavaGuia Rápido de Referência Java
Guia Rápido de Referência JavaMario Jorge Pereira
 
Introdução a Banco de Dados (Parte 3)
Introdução a Banco de Dados (Parte 3)Introdução a Banco de Dados (Parte 3)
Introdução a Banco de Dados (Parte 3)Mario Sergio
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesRegis Magalhães
 
Java - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosJava - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosMoises Omena
 
4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de ProgramaçãoManuel Menezes de Sequeira
 
Refatoração - aquela caprichada no código
Refatoração - aquela caprichada no códigoRefatoração - aquela caprichada no código
Refatoração - aquela caprichada no códigoJuciellen Cabrera
 
Curso de java - Antonio Alves - aula 04
Curso de java - Antonio Alves -  aula 04Curso de java - Antonio Alves -  aula 04
Curso de java - Antonio Alves - aula 04Antonio Alves
 
Aula 01 - Começando a programar em PHP
Aula 01 - Começando a programar em PHPAula 01 - Começando a programar em PHP
Aula 01 - Começando a programar em PHPEvandro Júnior
 

Mais procurados (20)

Código Limpo
Código LimpoCódigo Limpo
Código Limpo
 
Curso de Java (Parte 3)
 Curso de Java (Parte 3) Curso de Java (Parte 3)
Curso de Java (Parte 3)
 
Java Primeiros Passos - Cap 7
Java Primeiros Passos - Cap 7Java Primeiros Passos - Cap 7
Java Primeiros Passos - Cap 7
 
Lógica de programação
Lógica de programaçãoLógica de programação
Lógica de programação
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In Tuba
 
Minicurso Ruby on Rails Dextra
Minicurso Ruby on Rails DextraMinicurso Ruby on Rails Dextra
Minicurso Ruby on Rails Dextra
 
Curso de Java (Parte 4)
Curso de Java (Parte 4)Curso de Java (Parte 4)
Curso de Java (Parte 4)
 
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
 
Código Limpo Dual
Código Limpo DualCódigo Limpo Dual
Código Limpo Dual
 
Guia Rápido de Referência Java
Guia Rápido de Referência JavaGuia Rápido de Referência Java
Guia Rápido de Referência Java
 
Clean code
Clean codeClean code
Clean code
 
Java e orientação a objetos
Java e orientação a objetosJava e orientação a objetos
Java e orientação a objetos
 
Guia rapido java v2
Guia rapido java v2Guia rapido java v2
Guia rapido java v2
 
Introdução a Banco de Dados (Parte 3)
Introdução a Banco de Dados (Parte 3)Introdução a Banco de Dados (Parte 3)
Introdução a Banco de Dados (Parte 3)
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas Interfaces
 
Java - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosJava - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a Objetos
 
4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação
 
Refatoração - aquela caprichada no código
Refatoração - aquela caprichada no códigoRefatoração - aquela caprichada no código
Refatoração - aquela caprichada no código
 
Curso de java - Antonio Alves - aula 04
Curso de java - Antonio Alves -  aula 04Curso de java - Antonio Alves -  aula 04
Curso de java - Antonio Alves - aula 04
 
Aula 01 - Começando a programar em PHP
Aula 01 - Começando a programar em PHPAula 01 - Começando a programar em PHP
Aula 01 - Começando a programar em PHP
 

Semelhante a Organização de classes em POO

Baixo acoplamento e alta coesão no paradigma Orientado a Objetos
Baixo acoplamento e alta coesão no paradigma Orientado a ObjetosBaixo acoplamento e alta coesão no paradigma Orientado a Objetos
Baixo acoplamento e alta coesão no paradigma Orientado a ObjetosPaulo Vitor
 
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
 
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
 
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
 
Artigo - Single responsabilityprinciple-final
Artigo - Single responsabilityprinciple-finalArtigo - Single responsabilityprinciple-final
Artigo - Single responsabilityprinciple-finalThiago Ribeiro
 
Apresentação - Single responsability principle
Apresentação - Single responsability principleApresentação - Single responsability principle
Apresentação - Single responsability principleThiago Ribeiro
 
Apresentação - Single responsability principle
Apresentação - Single responsability principleApresentação - Single responsability principle
Apresentação - Single responsability principleThiago Ribeiro
 

Semelhante a Organização de classes em POO (20)

Code Smells
Code SmellsCode Smells
Code Smells
 
Baixo acoplamento e alta coesão no paradigma Orientado a Objetos
Baixo acoplamento e alta coesão no paradigma Orientado a ObjetosBaixo acoplamento e alta coesão no paradigma Orientado a Objetos
Baixo acoplamento e alta coesão no paradigma Orientado a Objetos
 
Clean code em C#
Clean code em C#Clean code em C#
Clean code em C#
 
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
 
Encapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosEncapsulamento em Orientação a Objetos
Encapsulamento em Orientação a Objetos
 
Clean code part 2
Clean code   part 2Clean code   part 2
Clean code part 2
 
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++
 
Refatoração
RefatoraçãoRefatoração
Refatoração
 
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
 
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
 
SRP - Single Responsability Principle
SRP - Single Responsability PrincipleSRP - Single Responsability Principle
SRP - Single Responsability Principle
 
Artigo - Single responsabilityprinciple-final
Artigo - Single responsabilityprinciple-finalArtigo - Single responsabilityprinciple-final
Artigo - Single responsabilityprinciple-final
 
Solid / DRY Princípios
Solid / DRY PrincípiosSolid / DRY Princípios
Solid / DRY Princípios
 
Grasp Patterns.ppt
Grasp Patterns.pptGrasp Patterns.ppt
Grasp Patterns.ppt
 
Apresentação - Single responsability principle
Apresentação - Single responsability principleApresentação - Single responsability principle
Apresentação - Single responsability principle
 
Apresentação - Single responsability principle
Apresentação - Single responsability principleApresentação - Single responsability principle
Apresentação - Single responsability principle
 
SOLID / DRY
SOLID / DRYSOLID / DRY
SOLID / DRY
 
Estudos Technocorp
Estudos TechnocorpEstudos Technocorp
Estudos Technocorp
 
Object calisthenics
Object calisthenicsObject calisthenics
Object calisthenics
 
Aula Herança
Aula HerançaAula Herança
Aula Herança
 

Mais de Inael Rodrigues

Artigo Monitoramento de Pastagem
Artigo Monitoramento de PastagemArtigo Monitoramento de Pastagem
Artigo Monitoramento de PastagemInael Rodrigues
 
Arquiteturas de sistemas reais
Arquiteturas de sistemas reaisArquiteturas de sistemas reais
Arquiteturas de sistemas reaisInael Rodrigues
 
Codigo limpo: Nomes Significativos Cap 2
Codigo limpo:  Nomes Significativos Cap 2Codigo limpo:  Nomes Significativos Cap 2
Codigo limpo: Nomes Significativos Cap 2Inael Rodrigues
 
Código limpo: Comentários
Código limpo:   ComentáriosCódigo limpo:   Comentários
Código limpo: ComentáriosInael Rodrigues
 
Código limpo: Funções Capítulo 3
Código limpo: Funções  Capítulo 3Código limpo: Funções  Capítulo 3
Código limpo: Funções Capítulo 3Inael Rodrigues
 
Código Limpo: Testes de Unidade Capítulo 09
Código Limpo: Testes de Unidade Capítulo 09 Código Limpo: Testes de Unidade Capítulo 09
Código Limpo: Testes de Unidade Capítulo 09 Inael Rodrigues
 
Código Limpo: Objetos e Estruturas de Dados cap6
Código Limpo: Objetos e Estruturas de Dados cap6Código Limpo: Objetos e Estruturas de Dados cap6
Código Limpo: Objetos e Estruturas de Dados cap6Inael Rodrigues
 
Livro Código Limpo: Tratamento de Erros - Cap 7
Livro Código Limpo: Tratamento de Erros - Cap 7Livro Código Limpo: Tratamento de Erros - Cap 7
Livro Código Limpo: Tratamento de Erros - Cap 7Inael Rodrigues
 
Teste Estrutural usando a ferramenta Jabuti
Teste Estrutural usando a ferramenta JabutiTeste Estrutural usando a ferramenta Jabuti
Teste Estrutural usando a ferramenta JabutiInael Rodrigues
 
TDC 2012: Trilha - Android University Back end Android
TDC 2012: Trilha - Android University Back end Android TDC 2012: Trilha - Android University Back end Android
TDC 2012: Trilha - Android University Back end Android Inael Rodrigues
 
TDC 2012 Trilha – Android University
TDC 2012 Trilha – Android UniversityTDC 2012 Trilha – Android University
TDC 2012 Trilha – Android UniversityInael Rodrigues
 
Ferramentas para Ambiente de Desenvolvimento Ágil
Ferramentas para Ambiente de Desenvolvimento ÁgilFerramentas para Ambiente de Desenvolvimento Ágil
Ferramentas para Ambiente de Desenvolvimento ÁgilInael Rodrigues
 
Android bootcamp 06-01-2012 Part 2
Android bootcamp 06-01-2012 Part 2Android bootcamp 06-01-2012 Part 2
Android bootcamp 06-01-2012 Part 2Inael Rodrigues
 
Android bootcamp 06-01-2012 Part 1
Android bootcamp  06-01-2012 Part 1Android bootcamp  06-01-2012 Part 1
Android bootcamp 06-01-2012 Part 1Inael Rodrigues
 

Mais de Inael Rodrigues (18)

Artigo Monitoramento de Pastagem
Artigo Monitoramento de PastagemArtigo Monitoramento de Pastagem
Artigo Monitoramento de Pastagem
 
Map Reduce
Map ReduceMap Reduce
Map Reduce
 
Arquiteturas de sistemas reais
Arquiteturas de sistemas reaisArquiteturas de sistemas reais
Arquiteturas de sistemas reais
 
Backtracking
BacktrackingBacktracking
Backtracking
 
Codigo limpo: Nomes Significativos Cap 2
Codigo limpo:  Nomes Significativos Cap 2Codigo limpo:  Nomes Significativos Cap 2
Codigo limpo: Nomes Significativos Cap 2
 
Código limpo: Limites
Código limpo: LimitesCódigo limpo: Limites
Código limpo: Limites
 
Código limpo: Comentários
Código limpo:   ComentáriosCódigo limpo:   Comentários
Código limpo: Comentários
 
Código limpo: Funções Capítulo 3
Código limpo: Funções  Capítulo 3Código limpo: Funções  Capítulo 3
Código limpo: Funções Capítulo 3
 
Código Limpo: Testes de Unidade Capítulo 09
Código Limpo: Testes de Unidade Capítulo 09 Código Limpo: Testes de Unidade Capítulo 09
Código Limpo: Testes de Unidade Capítulo 09
 
Código Limpo: Objetos e Estruturas de Dados cap6
Código Limpo: Objetos e Estruturas de Dados cap6Código Limpo: Objetos e Estruturas de Dados cap6
Código Limpo: Objetos e Estruturas de Dados cap6
 
Livro Código Limpo: Tratamento de Erros - Cap 7
Livro Código Limpo: Tratamento de Erros - Cap 7Livro Código Limpo: Tratamento de Erros - Cap 7
Livro Código Limpo: Tratamento de Erros - Cap 7
 
Paa algoritmos gulosos
Paa  algoritmos gulososPaa  algoritmos gulosos
Paa algoritmos gulosos
 
Teste Estrutural usando a ferramenta Jabuti
Teste Estrutural usando a ferramenta JabutiTeste Estrutural usando a ferramenta Jabuti
Teste Estrutural usando a ferramenta Jabuti
 
TDC 2012: Trilha - Android University Back end Android
TDC 2012: Trilha - Android University Back end Android TDC 2012: Trilha - Android University Back end Android
TDC 2012: Trilha - Android University Back end Android
 
TDC 2012 Trilha – Android University
TDC 2012 Trilha – Android UniversityTDC 2012 Trilha – Android University
TDC 2012 Trilha – Android University
 
Ferramentas para Ambiente de Desenvolvimento Ágil
Ferramentas para Ambiente de Desenvolvimento ÁgilFerramentas para Ambiente de Desenvolvimento Ágil
Ferramentas para Ambiente de Desenvolvimento Ágil
 
Android bootcamp 06-01-2012 Part 2
Android bootcamp 06-01-2012 Part 2Android bootcamp 06-01-2012 Part 2
Android bootcamp 06-01-2012 Part 2
 
Android bootcamp 06-01-2012 Part 1
Android bootcamp  06-01-2012 Part 1Android bootcamp  06-01-2012 Part 1
Android bootcamp 06-01-2012 Part 1
 

Organização de classes em POO

  • 1. Classe Geovane Pazine Filho Inael Rodrigues de Oliveira Neto Jackeline Neves de Almeida
  • 2. Organização Ordem Variáveis Públicas (raramente); Estáticas; Constantes. Estáticas privadas; Instância privada; Funções Públicas; Privadas (Após a função pública que a chama.)
  • 3. Encapsulamento Ideal: variáveis e funções privadas; Mas para poder realizar testes tornamos protegidas. Manter a privacidade! Perder o encapsulamento é a última alternativa!
  • 4. Classes pequenas 1ª regra: Classes devem ser pequenas; 2ª regra: Elas devem ser menores ainda. O quão pequena?
  • 5.
  • 6.
  • 7. Classes pequenas - cont Cinco métodos nesse caso é muito!!! Para classe não medimos em quantidade de métodos e sim responsabilidades!
  • 8. Classes pequenas - cont O nome da classe descreve quais responsabilidades ela faz. Se ela não tiver um nome conciso, provavelmente ficará grande. Ambiguidade = Chances de muitas responsabilidades. Ex: Processador, Gerenciador ou Super Exercício: Escreva uma breve descrição da classe com 25 palavras sem usar "se", "e", "ou" ou "mas".
  • 9. Princípio da Responsabilidade única (SRP) Uma classe deve ter apenas uma responsabilidade e um motivo para mudar. A classe abaixo tem 2 motivos para mudar: 1º acompanha informação sobre a versão; 2º gerencia componentes Swing do Java. Vamos alterar o nro da versão se alterarmos qualquer código Swing, mas o oposto não é necessário.
  • 10. Princípio da Responsabilidade única (SRP) Responsabilidade única e potencial para reutilização em outros aplicativos. Fazer funcionar é diferente de código limpo! Não terminamos quando o programa funciona! Volte e divida classes muito cheias em outras com responsabilidades únicas.
  • 11. Princípio da Responsabilidade única (SRP) "Você quer suas ferramentas organizadas em caixas de ferramentas com muitas gavets pequenas, cada um com objetos bem classificados e rotulados? Ou poucas gavetas nas quais você coloca tudo?"
  • 12. Coesão ● Classes devem ter poucas variáveis ● Cada variavel deve ser manipulada por algum método ● Métodos e variáveis são co-dependentes como um todo lógico
  • 13. Coesão Veja a implementação de uma Pilha: ● Bem Coesa ● Apenas size() não usa ambas as variáveis
  • 14. Coesão No entanto, funções pequenas e poucos parâmetros pode: ● proliferar instâncias de variáveis usadas por vários métodos Quando isso ocorre deve-se separar as variáveis e métodos em duas classes mais coesas
  • 15. Coesão Imagine uma função grande em que desejamos extrair uma parte dela para outra função. Se código a ser extraído usa quatro variáveis declaradas na função, devemos passar todas as quatro variáveis como parâmetros para a nova função?
  • 16. Coesão Se convertêssemos aquelas 4 variáveis em instâncias de classe, seria mais fácil extrair o código sem passar variável por parâmetro.
  • 17. Coesão Se classe ficar com muitas instâncias de variáveis: ● é bem provável que essa classe pode ser dividida em outra classe.
  • 18. Como organizar para alterar ● Necessidade de Mudança ○ Complexidade de entendimento das classes ● Mudança constante ○ Risco do Sistema não funcionar como esperado
  • 19. Como organizar para alterar Exemplo de classe: ● Falta suporte a update ● Modificação tem possibilidade de estragar outro código.
  • 20. Como organizar para alterar ● A Classe esta logicamente completa?! ○ Se sim, a classe pode ser deixada em paz! ○ Se não, devemos considerar consertar nosso projeto!
  • 21. Como organizar para alterar ● Classes com responsabilidades únicas. ● Metodos privados somente onde necessário. ● Beneficios: ● Entendimento Simples! ● Risco de uma função prejudicar outra é infima! ● Mais fácil testar pontos lógicos ● Adicionar funções muito mais fácil.
  • 22. Como organizar para alterar ● Classes devem ser abertas para expansão, mas fechadas para alteração! ● Num sistema ideal, incorporaríamos novos recursos através da expansão e não alterando o código.
  • 23. Como isolar das alterações ● Uma classe do cliente dependente de detalhes concretos corre perigo quando tais detalhes são modificados. ● Interface e classes abstratas ajudam a isolar o impacto desses detalhes.
  • 24. Como isolar das alterações Exemplo: Classe Portfolio, depende diretamente de uma API TokyoStockExchange externa para derivar o valor do portfolio. Problemas?!
  • 25. Como isolar das alterações Solução: Interface StockExchange que declare um único método.
  • 26. Como isolar das alterações ● Sistema desacoplado é mais flexivel, portanto, tem maior capacidade de reutilização. ● Ao utilizar dessa estratégia nossas classes aderem ao DIP (Principio da Inversão da Independencia) "Classes devem depender de abstrações e não de detalhes concretos"