SlideShare uma empresa Scribd logo
1 de 63
Baixar para ler offline
Boas Práticas
de desenvolvimento
de software
Olá!
Eu sou Carlos Alberto
Arquiteto de software
CAPES
@euprogramador
euprogramador@gmail.com
Desenvolvimento de
software é difícil
Como organizar o código?
“Se você está tendo um problema
no desenvolvimento, você não
está sozinho. Outro já passou
pelo mesmo problema e já deve
ter solução para o problema.
S.O.L.I.D.
Princípio de desenvolvimento
S ingle principle
O pen closed
L iskov Substitution
I nterface segregation
D ependency Inversion
S.O.L.I.D.
Single responsability
× Sua classe deve ser responsável por apenas um
comportamento
× Deve fazer apenas 1 coisa
× Deve fazer bem
Single responsability
O que há de errado nessa classe?
Single responsability
Após aplicar Single responsability?
× Classes devem poder extender seu
comportamento, facilmente, seja por herança,
interface ou composição.
× Temos de ter boas abstrações.
Open Closed
Exemplo de open/closed
Open Closed
Liskov Substitution
× Herança é bom.
× Cuidado com a herança.
× Projeto por contrato.
× Estabelece regras para uso
× Pré condições - não podem ser mais fortes
que a super-classe.
× Pós condições - não podem ser
enfraquecidas
Eventualmente desenvolvedor escolhe herança
Liskov Substitution
Exemplo de bom uso:
Liskov Substitution
Exemplo de problemas com o uso de herança:
× Properties não deveria ser uma Hashtable, pois tem o put(object,
object) se for usado pode causar problemas.
× Vector é sincronizado, todas as stacks deveriam ser
sincronizadas?
Liskov Substitution
Exemplo de problemas com o uso de herança:
× CEP você busca do correios
× CEP deveria pode salvar ou
remover?
Liskov Substitution
Alternativas para o uso de herança? Composição:
Interface Segregation
× Módulos enxutos
× Pouco comportamento (método)
× Desenvolvimento orientado a interface
Interface Segregation
Exemplo:
Dependency Inversion
× Dependa de abstrações não implementações
× Facilita mudar no futuro
Dependency Inversion
Exemplo:
Padrões de Projeto - Principios de design
Princípios
Dependency Injection
Inversion of Control
Inversion of control
× Princípio de Hollywood, “Não ligue para nós, nós ligamos para
você.”
× Controle das chamadas é invertido não é determinado pelo
programador.
× Controle é delegado a uma infraestrutura, container.
Inversion of control - Exemplos
Spring:
Inversion of control - Exemplos
Weld/CDI:
Dependency Injection
Benefícios
Baixo acomplamento
Testabilidade
Facilidade de manutenção
Dependency Injection
Tipos
Constructor Injection
Property Injection
Method Injection
Service Locator
Dependency Injection
Constructor Injection
Property Injection
Dependency Injection
Method Injection
Dependency Injection
Dependency Injection
Service Locator
Dependency Injection
Melhor Padrão
× Injeção no construtor, good citizen (bom cidadão)
× Tudo que a classe precisa é passado no construtor.
× Garantia de inicialização somente quando atendido as
dependências.
Nem tudo são flores
× Não são todos os frameworks de IOC/DI que implementam
Padrões de Projeto
× Solução para um problema frequente
× Reusavéis
Padrões de projeto dizem respeito a como
organizar o código.
“GOF - Gang of
Four”
Padrões a serem conhecidos
Padrões de Projeto - Categorias
Criacionais
Factory Method
Abstract Method
Builder
Prototype
Singleton
Estruturais
Composite
Adapter
Bridge
Decorator
Facade
Proxy
Flyweight
Comportamentais
Strategy
Template Method
Observer
Mediator
Command
Chain of Responsability
State
Visitor
...
Padrões de Projeto - Categorias
Criacionais
Factory Method
Abstract Method
Builder
Prototype
Singleton
Estruturais
Composite
Adapter
Bridge
Decorator
Facade
Proxy
Flyweight
Comportamentais
Strategy
Template Method
Observer
Mediator
Command
Chain of Responsability
State
Visitor
...
Factory / Abstract Factory
Padrão criacional
Builder
Padrão criacional
Singleton
Padrão criacional
“Dependency
Injection simplifica
ou acaba com
todos eles”
Dependency Injection
Padrão criacional
× Desacopla a solicitação de uma dependência da sua instanciação
× Simplifica código
× Melhora isolamento
× Testável
Dependency Injection
Factory é necessária?
Builder é necessário?
Dependency Injection - Scopes
Define o ciclo de vida do objeto
Padrões de Projeto - Categorias
Criacionais
Factory Method
Abstract Method
Builder
Prototype
Singleton
Estruturais
Composite
Adapter
Bridge
Decorator
Facade
Proxy
Flyweight
Comportamentais
Strategy
Template Method
Observer
Mediator
Command
Chain of Responsability
State
Visitor
...
Composite
Representa um objeto como uma
composição de objetos similares
Trata um conjunto de objetos como um
unico objeto
Composite exemplo
Composite exemplo
Adapter
Bridge
Decorator
Facade
Proxy
Proxy
Flyweight
Permite economizar memória
Compartilhamento de objetos
Exemplo:
String do java possui um pool interno
Padrões de Projeto - Categorias
Criacionais
Factory Method
Abstract Method
Builder
Prototype
Singleton
Estruturais
Composite
Adapter
Bridge
Decorator
Facade
Proxy
Flyweight
Comportamentais
Strategy
Template Method
Observer
Mediator
Command
Chain of Responsability
State
Visitor
...
Strategy
Permite a troca de algoritmos
Muda comportamento conforme contexto
Template Method
Adiciona uma indireção entre componentes
Favorece um baixo acoplamento
Cuidado.
Observer
Mediator
Command
Chain of Responsability
Chain of Responsability
State
Permite mudar de
comportamento
Simplifica ifs para tratar
estado
Thanks!
Perguntas?
Como me encontrar:
@euprogramador
euprogramador@gmail.com

Mais conteúdo relacionado

Mais procurados

TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação
Icaro Camelo
 
Automacao de testes mitos e verdades
Automacao de testes mitos e verdadesAutomacao de testes mitos e verdades
Automacao de testes mitos e verdades
Cristiano Caetano
 
Testes de Software & Ferramentas de Testes
Testes de Software & Ferramentas de TestesTestes de Software & Ferramentas de Testes
Testes de Software & Ferramentas de Testes
Paulo César M Jeveaux
 

Mais procurados (20)

TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação
 
TDD para "meros mortais"
TDD para "meros mortais"TDD para "meros mortais"
TDD para "meros mortais"
 
Lightning talk Test-Driven Development - TDD
Lightning talk Test-Driven Development - TDDLightning talk Test-Driven Development - TDD
Lightning talk Test-Driven Development - TDD
 
Automacao de testes mitos e verdades
Automacao de testes mitos e verdadesAutomacao de testes mitos e verdades
Automacao de testes mitos e verdades
 
Automacao testes automatizados
Automacao testes automatizadosAutomacao testes automatizados
Automacao testes automatizados
 
Teste Unitários e TDD
Teste Unitários e TDDTeste Unitários e TDD
Teste Unitários e TDD
 
Porque você precisa de uma estratégia de QA e precisa disso AGORA!
Porque você precisa de uma estratégia de QA e precisa disso AGORA!Porque você precisa de uma estratégia de QA e precisa disso AGORA!
Porque você precisa de uma estratégia de QA e precisa disso AGORA!
 
Testes de Software - Fundamentos
Testes de Software - FundamentosTestes de Software - Fundamentos
Testes de Software - Fundamentos
 
Metodos ageis thinkingdifferent
Metodos ageis thinkingdifferentMetodos ageis thinkingdifferent
Metodos ageis thinkingdifferent
 
Nunca foi tao facil testar
Nunca foi tao facil testarNunca foi tao facil testar
Nunca foi tao facil testar
 
Mindset de QA em Diferentes Contextos
Mindset de QA em Diferentes ContextosMindset de QA em Diferentes Contextos
Mindset de QA em Diferentes Contextos
 
Teste de Software
Teste de SoftwareTeste de Software
Teste de Software
 
Testes de Software & Ferramentas de Testes
Testes de Software & Ferramentas de TestesTestes de Software & Ferramentas de Testes
Testes de Software & Ferramentas de Testes
 
A Carreira de Desenvolvedor: do Jr ao Sênior
A Carreira de Desenvolvedor: do Jr ao SêniorA Carreira de Desenvolvedor: do Jr ao Sênior
A Carreira de Desenvolvedor: do Jr ao Sênior
 
Começando errado com php
Começando errado com phpComeçando errado com php
Começando errado com php
 
Palestra Teste de Software: princípios, ferramentas e carreira
Palestra Teste de Software: princípios, ferramentas e carreiraPalestra Teste de Software: princípios, ferramentas e carreira
Palestra Teste de Software: princípios, ferramentas e carreira
 
BDD
BDDBDD
BDD
 
ALM - Testes Exploratórios
ALM - Testes ExploratóriosALM - Testes Exploratórios
ALM - Testes Exploratórios
 
Papéis em teste e qualidade de software
Papéis em teste e qualidade de softwarePapéis em teste e qualidade de software
Papéis em teste e qualidade de software
 
Mini curso de testes ágeis
Mini curso de testes ágeisMini curso de testes ágeis
Mini curso de testes ágeis
 

Destaque

Introdução a Padrões de Projeto - Engenharia de Software
Introdução a Padrões de Projeto - Engenharia de SoftwareIntrodução a Padrões de Projeto - Engenharia de Software
Introdução a Padrões de Projeto - Engenharia de Software
Willian Carminato
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projeto
ejdn1
 

Destaque (9)

Boas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de softwareBoas práticas no desenvolvimento de software
Boas práticas no desenvolvimento de software
 
Seus testes estão gritando. Você está ouvindo?
Seus testes estão gritando. Você está ouvindo?Seus testes estão gritando. Você está ouvindo?
Seus testes estão gritando. Você está ouvindo?
 
Padrões de Projeto e Boas Práticas em PHP - PHP Conference Brasil 2010
Padrões de Projeto e Boas Práticas em PHP - PHP Conference Brasil 2010Padrões de Projeto e Boas Práticas em PHP - PHP Conference Brasil 2010
Padrões de Projeto e Boas Práticas em PHP - PHP Conference Brasil 2010
 
Padrão de Projetos singleton
Padrão de Projetos singletonPadrão de Projetos singleton
Padrão de Projetos singleton
 
Boas práticas de django
Boas práticas de djangoBoas práticas de django
Boas práticas de django
 
Documentos de software
Documentos de softwareDocumentos de software
Documentos de software
 
Padrão Fachada
Padrão FachadaPadrão Fachada
Padrão Fachada
 
Introdução a Padrões de Projeto - Engenharia de Software
Introdução a Padrões de Projeto - Engenharia de SoftwareIntrodução a Padrões de Projeto - Engenharia de Software
Introdução a Padrões de Projeto - Engenharia de Software
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projeto
 

Semelhante a Boas práticas no desenvolvimento de software

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
 

Semelhante a Boas práticas no desenvolvimento de software (20)

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...
 
DevOps Anti-Patterns - Campus Party
DevOps Anti-Patterns - Campus PartyDevOps Anti-Patterns - Campus Party
DevOps Anti-Patterns - Campus Party
 
Macro Arquitetura de Software
Macro Arquitetura de SoftwareMacro Arquitetura de Software
Macro Arquitetura de Software
 
Refactoring
RefactoringRefactoring
Refactoring
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdf
 
Test-Driven Development - Introdução
Test-Driven Development - IntroduçãoTest-Driven Development - Introdução
Test-Driven Development - Introdução
 
Princípios SOLID
Princípios SOLIDPrincípios SOLID
Princípios SOLID
 
Pragmatismo e Padroes - Um limiar tenue entre o sucesso e o fracasso do seu p...
Pragmatismo e Padroes - Um limiar tenue entre o sucesso e o fracasso do seu p...Pragmatismo e Padroes - Um limiar tenue entre o sucesso e o fracasso do seu p...
Pragmatismo e Padroes - Um limiar tenue entre o sucesso e o fracasso do seu p...
 
Teste de software
Teste de softwareTeste de software
Teste de software
 
Softwares que Duram: Uma abordagem Arquitetônica
Softwares que Duram: Uma abordagem ArquitetônicaSoftwares que Duram: Uma abordagem Arquitetônica
Softwares que Duram: Uma abordagem Arquitetônica
 
[CEFETMG][ESw] Aula 6 - Conceitos de projeto
[CEFETMG][ESw] Aula 6 - Conceitos de projeto[CEFETMG][ESw] Aula 6 - Conceitos de projeto
[CEFETMG][ESw] Aula 6 - Conceitos de projeto
 
Não deixe seu projeto só nas mãos do framework
Não deixe seu projeto só nas mãos do frameworkNão deixe seu projeto só nas mãos do framework
Não deixe seu projeto só nas mãos do framework
 
Como TDD pode influenciar na construção do seu Produto?
Como TDD pode influenciar na construção do seu Produto?Como TDD pode influenciar na construção do seu Produto?
Como TDD pode influenciar na construção do seu Produto?
 
Pesquisa em Métodos Ágeis para o Desenvolvimento de Software
Pesquisa em Métodos Ágeis para o Desenvolvimento de SoftwarePesquisa em Métodos Ágeis para o Desenvolvimento de Software
Pesquisa em Métodos Ágeis para o Desenvolvimento de Software
 
Aplicando SOLID com PHP7
Aplicando SOLID com PHP7Aplicando SOLID com PHP7
Aplicando SOLID com PHP7
 
Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?
 
Greenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresaGreenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresa
 
E xtreme programming
E xtreme programmingE xtreme programming
E xtreme programming
 
Test driven development
Test driven developmentTest driven development
Test driven development
 
Código limpo php
Código limpo phpCódigo limpo php
Código limpo php
 

Último

Último (8)

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 

Boas práticas no desenvolvimento de software