SlideShare ist ein Scribd-Unternehmen logo
1 von 56
Downloaden Sie, um offline zu lesen
Qualidade de Código:
       boas práticas,
        princípios e
         padrões.

 @edgarddavidson
 http://edgarddavidson.com
Curso de Pós Graduação em



      Engenharia de Software Centrada em Métodos Ágeis



   http://engenhariadesoftwareagil.com
Curso de Pós Graduação em
 Teste e Qualidade
    de Software


http://testeequalidadedesoftware.com
Referências
<trollagem>
Um típico implementador
    de POG convícto
1°encontro dos
implementadores de POG
      convíctos
Projeto entregue pelos
implementadores de POG
      convíctos
Um dia típico de trabalho de um
 implementador de POG convícto
Implementadores de POG convíctos
   também trabalham em equipe
Um implementador de POG convícto
     não tem medo do perigo
Um implementador de POG convícto
    assume que boas práticas,
      princípios e padrões
        é tudo um VIAGEM
Por algum
motivo os
erros se
 repetem
</trollagem>
Code Smell
Baixa coesão
               e
       Alto acoplamento

 são um dos fatores fundamentais
   para aumentar a dependência,
dificultar a manutenção, expansão e
              alteração.
1° Code Smell
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.”
2° Code Smell
Fragilidade

“Uma mudança de uma parte do sistema faz com que ele quebra em muitas outras partes,
                            completamente alheios.”
3° Code Smell
Imobilidade



“É difícil separar o sistema em componentes que podem ser reutilizados em outros sistemas.”
4° Code Smell
Complexidade
              Desnecessária

“Há muitas estruturas de código muito inteligentes que não são necessárias agora, mas poderia
                                   ser muito útil um dia.”
5° Code Smell
Repetições
                     Inúteis

“O código parece que foi escrito por dois programadores chamado Recortar e Colar.”
Mostra aí como combater
 esse tal de Code Smell
Qualidade de Código
    boas práticas,
     princípios e
      padrões.
Início



          Teste
         unitário

                                           Princípios de
                                            Projeto OO

Código
                    Refatoração
 POO

                                           Padrões de
                                           Projeto OO




                     Integração Contínua
Desenvolvimento Dirigido pelos Testes
Programação em Par
Refatoração
Substitua Herança por Delegação

Exemplo: pilha subclasse de vetor.

Class MyStack extends Vector {

    public void push (Object element) {
        insertElementAt (element, 0);
}

    public Object pop () {
        Object result = firstElement ();
        removeElementAt (0);
        return result;
}
Refatorando...

Crio campo para superclasse.

Class MyStack extends Vector {
   private Vector _vector = this;
   public void push (Object element) {
       _vector.insertElementAt (element, 0);
}

    public Object pop () {
        Object result = _vector.firstElement ();
        _vector.removeElementAt (0);
        return result;
}
Refatorando...

Removo herança.

Class MyStack extends Vector {
   private Vector _vector = this; new Vector ();
   public void push (Object element) {
       _vector.insertElementAt (element, 0);
  }

   public Object pop () {
       Object result = _vector.firstElement ();
       _vector.removeElementAt (0);
       return result;
  }
Acoplamento e Coesão

  Diminuir
Acoplamento




          Aumentar
           Coesão
Programação Orientada a Objetos




                          Abstração
                       Encapsulamento
                            Reuso
                           Herança
                        Polimorfismo
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
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)
Princípios de Projeto OO – Single Responsibility Principle (SRP)




    "Nunca deve haver mais de um motivo para uma classe ser
                           alterada"
Violação do princípio:
  Considere a Classe TAD
Adequação ao princípio:
Princípios de Projeto OO – Open/Closed Principle (OCP)




“As entidades devem estar abertas para extensão, mas fechadas
                     para modificação”
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.
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;
 }
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
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();
   }
}
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.”
Princípios de Projeto OO – Interface Segregation Principle (ISP)




        “Interfaces mais específicas melhor que interface de
                        propósito diversos.”
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.”
Padrões de Projeto
Padrões Arquiteturais




   De acordo com os
condutores arquiteturais
Atender ao negócio

    Usuário Feliz
Necessidade atendida

    $$$$$$$$$
@edgarddavidson
http://edgarddavidson.com

Weitere ähnliche Inhalte

Was ist angesagt?

Minicurso - Teste de software (CACSI 2015)
Minicurso - Teste de software (CACSI 2015)Minicurso - Teste de software (CACSI 2015)
Minicurso - Teste de software (CACSI 2015)Vanilton Pinheiro
 
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janei...
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janei...Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janei...
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janei...Renato Groffe
 
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Grupo Bandeirantes - ...
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Grupo Bandeirantes - ...Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Grupo Bandeirantes - ...
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Grupo Bandeirantes - ...Renato Groff
 
Introdução a testes de sofwtare
Introdução a testes de sofwtareIntrodução a testes de sofwtare
Introdução a testes de sofwtareFernando Palma
 
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018Renato Groff
 
Noções em teste de software e introdução a automação
Noções em teste de software e introdução a automaçãoNoções em teste de software e introdução a automação
Noções em teste de software e introdução a automaçãoSandy Maciel
 
Validação e Testes de software
Validação e Testes de softwareValidação e Testes de software
Validação e Testes de softwareRondinelli Mesquita
 
Testes De Software - Uma Visão Geral
Testes De Software - Uma Visão GeralTestes De Software - Uma Visão Geral
Testes De Software - Uma Visão Geralpaulo peres
 
Algoritmos - Paradigmas de Programação
Algoritmos - Paradigmas de ProgramaçãoAlgoritmos - Paradigmas de Programação
Algoritmos - Paradigmas de ProgramaçãoElaine Cecília Gatto
 
Teste de Software Introdução à Qualidade
Teste de Software Introdução à Qualidade Teste de Software Introdução à Qualidade
Teste de Software Introdução à Qualidade Camilo Ribeiro
 
Campus Party Brasil 2010 - ALM - Application Lifecycle Management
Campus Party Brasil 2010 - ALM - Application Lifecycle ManagementCampus Party Brasil 2010 - ALM - Application Lifecycle Management
Campus Party Brasil 2010 - ALM - Application Lifecycle ManagementRamon Durães
 

Was ist angesagt? (16)

Minicurso - Teste de software (CACSI 2015)
Minicurso - Teste de software (CACSI 2015)Minicurso - Teste de software (CACSI 2015)
Minicurso - Teste de software (CACSI 2015)
 
TDD - Test Driven Development com JAVA
TDD - Test Driven Development com JAVATDD - Test Driven Development com JAVA
TDD - Test Driven Development com JAVA
 
AppTesting
AppTestingAppTesting
AppTesting
 
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janei...
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janei...Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janei...
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janei...
 
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Grupo Bandeirantes - ...
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Grupo Bandeirantes - ...Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Grupo Bandeirantes - ...
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Grupo Bandeirantes - ...
 
Introdução a testes de sofwtare
Introdução a testes de sofwtareIntrodução a testes de sofwtare
Introdução a testes de sofwtare
 
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018
 
Noções em teste de software e introdução a automação
Noções em teste de software e introdução a automaçãoNoções em teste de software e introdução a automação
Noções em teste de software e introdução a automação
 
Instituto Stela S&T#001, Projeto de software com testes unitários
Instituto Stela S&T#001, Projeto de software com testes unitáriosInstituto Stela S&T#001, Projeto de software com testes unitários
Instituto Stela S&T#001, Projeto de software com testes unitários
 
Validação e Testes de software
Validação e Testes de softwareValidação e Testes de software
Validação e Testes de software
 
Testes De Software - Uma Visão Geral
Testes De Software - Uma Visão GeralTestes De Software - Uma Visão Geral
Testes De Software - Uma Visão Geral
 
Algoritmos - Paradigmas de Programação
Algoritmos - Paradigmas de ProgramaçãoAlgoritmos - Paradigmas de Programação
Algoritmos - Paradigmas de Programação
 
Aula - Teste de Software
Aula - Teste de SoftwareAula - Teste de Software
Aula - Teste de Software
 
Teste de Software Introdução à Qualidade
Teste de Software Introdução à Qualidade Teste de Software Introdução à Qualidade
Teste de Software Introdução à Qualidade
 
Teste de Software
Teste de SoftwareTeste de Software
Teste de Software
 
Campus Party Brasil 2010 - ALM - Application Lifecycle Management
Campus Party Brasil 2010 - ALM - Application Lifecycle ManagementCampus Party Brasil 2010 - ALM - Application Lifecycle Management
Campus Party Brasil 2010 - ALM - Application Lifecycle Management
 

Ähnlich wie Qualidade de Código: boas práticas e padrões

ZeroBugsProject - Técnicas de programação efetivas
ZeroBugsProject - Técnicas de programação efetivasZeroBugsProject - Técnicas de programação efetivas
ZeroBugsProject - Técnicas de programação efetivasRafael Chinelato Del Nero
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHGiovanni Bassi
 
Design Patterns on Rails
Design Patterns on RailsDesign Patterns on Rails
Design Patterns on Railstchandy
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesCamilo Ribeiro
 
A influência do Test-Driven Design no projeto de classes e no design em siste...
A influência do Test-Driven Design no projeto de classes e no design em siste...A influência do Test-Driven Design no projeto de classes e no design em siste...
A influência do Test-Driven Design no projeto de classes e no design em siste...Toni Esteves
 
Por quê você deve utilizar TDD?
Por quê você deve utilizar TDD?Por quê você deve utilizar TDD?
Por quê você deve utilizar TDD?Wellington Moreira
 
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
 
Test driven development
Test driven developmentTest driven development
Test driven developmentclauvane1708
 
Refactory Worshop
Refactory WorshopRefactory Worshop
Refactory Worshopguestd37c23
 
Objects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do códigoObjects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do códigoBonoBee
 

Ähnlich wie Qualidade de Código: boas práticas e padrões (20)

Refactoring - Design no Código
Refactoring - Design no CódigoRefactoring - Design no Código
Refactoring - Design no Código
 
ZeroBugsProject - Técnicas de programação efetivas
ZeroBugsProject - Técnicas de programação efetivasZeroBugsProject - Técnicas de programação efetivas
ZeroBugsProject - Técnicas de programação efetivas
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BH
 
Design Patterns on Rails
Design Patterns on RailsDesign Patterns on Rails
Design Patterns on Rails
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por Testes
 
Code Smells
Code SmellsCode Smells
Code Smells
 
A influência do Test-Driven Design no projeto de classes e no design em siste...
A influência do Test-Driven Design no projeto de classes e no design em siste...A influência do Test-Driven Design no projeto de classes e no design em siste...
A influência do Test-Driven Design no projeto de classes e no design em siste...
 
Por quê você deve utilizar TDD?
Por quê você deve utilizar TDD?Por quê você deve utilizar TDD?
Por quê você deve utilizar TDD?
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Projeto de Software
Projeto de SoftwareProjeto de Software
Projeto de Software
 
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
 
Gof design patterns
Gof design patternsGof design patterns
Gof design patterns
 
Test driven development
Test driven developmentTest driven development
Test driven development
 
Refactory Worshop
Refactory WorshopRefactory Worshop
Refactory Worshop
 
Growing oos guided_by_tests entire
Growing oos guided_by_tests entireGrowing oos guided_by_tests entire
Growing oos guided_by_tests entire
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
Clean architecture
Clean architectureClean architecture
Clean architecture
 
Dojo solid
Dojo solidDojo solid
Dojo solid
 
Objects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do códigoObjects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do código
 
01-Paradigmas.pdf
01-Paradigmas.pdf01-Paradigmas.pdf
01-Paradigmas.pdf
 

Mehr von edgarddavidson.com

Pós Graduação em Engenharia de Software Centrada em Métodos Ágeis
Pós Graduação em Engenharia de Software Centrada em Métodos ÁgeisPós Graduação em Engenharia de Software Centrada em Métodos Ágeis
Pós Graduação em Engenharia de Software Centrada em Métodos Ágeisedgarddavidson.com
 
Localização de Placas de Veículos Baseada em Métodos Estatísticos
Localização de Placas de Veículos Baseada em Métodos EstatísticosLocalização de Placas de Veículos Baseada em Métodos Estatísticos
Localização de Placas de Veículos Baseada em Métodos Estatísticosedgarddavidson.com
 
Localização de Placas de Veículos Baseada em Métodos Estatísticos
Localização de Placas de Veículos Baseada em Métodos EstatísticosLocalização de Placas de Veículos Baseada em Métodos Estatísticos
Localização de Placas de Veículos Baseada em Métodos Estatísticosedgarddavidson.com
 

Mehr von edgarddavidson.com (10)

O programador pragmático
O programador pragmáticoO programador pragmático
O programador pragmático
 
Scrum checklists
Scrum checklistsScrum checklists
Scrum checklists
 
Scrum checklist
Scrum checklistScrum checklist
Scrum checklist
 
Scrum checklist pt-br
Scrum checklist pt-brScrum checklist pt-br
Scrum checklist pt-br
 
Carreira de Professor?
Carreira  de Professor?Carreira  de Professor?
Carreira de Professor?
 
Recursividade
RecursividadeRecursividade
Recursividade
 
Formei, mas não sei nada!!!
Formei, mas não sei nada!!!Formei, mas não sei nada!!!
Formei, mas não sei nada!!!
 
Pós Graduação em Engenharia de Software Centrada em Métodos Ágeis
Pós Graduação em Engenharia de Software Centrada em Métodos ÁgeisPós Graduação em Engenharia de Software Centrada em Métodos Ágeis
Pós Graduação em Engenharia de Software Centrada em Métodos Ágeis
 
Localização de Placas de Veículos Baseada em Métodos Estatísticos
Localização de Placas de Veículos Baseada em Métodos EstatísticosLocalização de Placas de Veículos Baseada em Métodos Estatísticos
Localização de Placas de Veículos Baseada em Métodos Estatísticos
 
Localização de Placas de Veículos Baseada em Métodos Estatísticos
Localização de Placas de Veículos Baseada em Métodos EstatísticosLocalização de Placas de Veículos Baseada em Métodos Estatísticos
Localização de Placas de Veículos Baseada em Métodos Estatísticos
 

Qualidade de Código: boas práticas e padrões

  • 1. Qualidade de Código: boas práticas, princípios e padrões. @edgarddavidson http://edgarddavidson.com
  • 2.
  • 3. Curso de Pós Graduação em Engenharia de Software Centrada em Métodos Ágeis http://engenhariadesoftwareagil.com
  • 4. Curso de Pós Graduação em Teste e Qualidade de Software http://testeequalidadedesoftware.com
  • 7. Um típico implementador de POG convícto
  • 10. Um dia típico de trabalho de um implementador de POG convícto
  • 11. Implementadores de POG convíctos também trabalham em equipe
  • 12. Um implementador de POG convícto não tem medo do perigo
  • 13. Um implementador de POG convícto assume que boas práticas, princípios e padrões é tudo um VIAGEM
  • 17. Baixa coesão e Alto acoplamento são um dos fatores fundamentais para aumentar a dependência, dificultar a manutenção, expansão e alteração.
  • 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.”
  • 21. Fragilidade “Uma mudança de uma parte do sistema faz com que ele quebra em muitas outras partes, completamente alheios.”
  • 23. Imobilidade “É difícil separar o sistema em componentes que podem ser reutilizados em outros sistemas.”
  • 25. Complexidade Desnecessária “Há muitas estruturas de código muito inteligentes que não são necessárias agora, mas poderia ser muito útil um dia.”
  • 27. Repetições Inúteis “O código parece que foi escrito por dois programadores chamado Recortar e Colar.”
  • 28. Mostra aí como combater esse tal de Code Smell
  • 29. Qualidade de Código boas práticas, princípios e padrões.
  • 30. Início Teste unitário Princípios de Projeto OO Código Refatoração POO Padrões de Projeto OO Integração Contínua
  • 31.
  • 35. Substitua Herança por Delegação Exemplo: pilha subclasse de vetor. Class MyStack extends Vector { public void push (Object element) { insertElementAt (element, 0); } public Object pop () { Object result = firstElement (); removeElementAt (0); return result; }
  • 36. Refatorando... Crio campo para superclasse. Class MyStack extends Vector { private Vector _vector = this; public void push (Object element) { _vector.insertElementAt (element, 0); } public Object pop () { Object result = _vector.firstElement (); _vector.removeElementAt (0); return result; }
  • 37. Refatorando... Removo herança. Class MyStack extends Vector { private Vector _vector = this; new Vector (); public void push (Object element) { _vector.insertElementAt (element, 0); } public Object pop () { Object result = _vector.firstElement (); _vector.removeElementAt (0); return result; }
  • 38. Acoplamento e Coesão Diminuir Acoplamento Aumentar Coesão
  • 39. Programação Orientada a Objetos Abstração Encapsulamento Reuso Herança Polimorfismo
  • 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"
  • 43. Violação do princípio: Considere a Classe TAD
  • 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.”
  • 54. Padrões Arquiteturais De acordo com os condutores arquiteturais
  • 55. Atender ao negócio Usuário Feliz Necessidade atendida $$$$$$$$$