SlideShare uma empresa Scribd logo
SOFTWARE
ROBUSTO E
FLEXÍVEL
SOLID
+
Dois Dedos de
Orientação a Objetos
Robson Bittencourt
2
Desenvolvedor na CWI Software
Gosto de repassar o que aprendo através de
palestras e do meu blog
Estou sempre estudando assuntos relacionados a
desenvolvimento de software, principalmente:
- Java
- JavaScript
- Qualidade de Código
- Devops
- Métodos Ágeis
Agenda 1. Problemas de Software
2. Software Frágil
3. Princípios SOLID
4. Boas Práticas da
Orientação a Objetos
5. Conclusão
3
4
Instigar a reflexão sobre
como criamos sistemas
Orientados a Objetos
0.
OBJETIVO
1.
PROBLEMAS
DE
SOFTWARE
5
“
Código ruim nos atrasa muito
Uncle Bob
6
60,000,000,000
Por ano de prejuízo com bugs de software somente nos EUA
7
Escrevemos
programas
muito
rapidamente
8
“
Não apenas software em
funcionamento, mas software de
excelente qualidade
Manifesto for Software Craftsmanship
9
2.
SOFTWARE
FRÁGIL
10
Software
Frágil
11
Qual é a maior constante
no desenvolvimento de
software?
Software
Frágil
12
A mudança sempre é difícil
de ser realizada
Necessidade de
alteração em
diversos lugares
13
Impacto 1 Impacto 2
Impacto 3 Impacto 4
ALTERAÇÃO
2 -SOLID
14
SOLID
15
É um acrônimo formado
por 5 princípios
introduzidos por Robert C.
Martin no início dos anos
2000.
A intenção destes
princípios é de ajudar a
criar sistemas que sejam
fáceis de manter e
estender.
Os princípios
16
Interface
Segregation
Dependency
Inversion
Liskov
Substitution
Open Closed
Single
Responsability
“
A class should have one, and only one,
reason to change
17
Single Responsability Principle
Single
Responsability
18
A mudança quando ocorre,
deve ocorrer somente em
um ponto
Single
Responsability
19
Como definir o que é uma
única responsabilidade?
Software robusto e flexível
Software robusto e flexível
“
Modules should be open to extension,
but closed to modification
22
Open Closed Principle
Open Closed
23
Novas regras devem ser
obtidas por código novo,
sem alterar o existente
Open Closed
24
Programe para interfaces
não para implementações
Open Closed
25
Evoluir o sistema criando
novas implementações de
abstrações existentes
Software robusto e flexível
Software robusto e flexível
Software robusto e flexível
“
Derived types must be completely
substitutable for their base types
29
Liskov Substitution Principle
Liskov
Substitution
30
A relação “É UM” quando
falamos de herança, se
refere a comportamento
Software robusto e flexível
Software robusto e flexível
Software robusto e flexível
Software robusto e flexível
“
Clients should not be forced to depend
upon interfaces that they don’t use
35
Interface Segregation Principle
Interface
Segregation
36
Muitas interfaces
específicas são melhores
do que uma interface única
Software robusto e flexível
Software robusto e flexível
“
High-level modules should not depend
upon low-level modules. Both should
depend upon abstractions
39
Dependency Inversion Principle
“
Abstractions should never depend
upon details. Details should depend
upon abstractions
40
Dependency Inversion Principle
Dependency
Inversion
41
Sempre fazer sua classe
depender de módulos mais
estáveis
Dependency
Inversion
42
Abstrações sempre devem
depender de outras
abstrações
Software robusto e flexível
Software robusto e flexível
3 - Boas Práticas da
Orientação a Objetos
45
Coesão
46
As propriedades e métodos
da classe devem estar
ligados ao mesmo objetivo
Como saber se uma
classe é coesa?
1. A classe tem uma única
responsabilidade?
2. Essa classe irá parar de
crescer?
3. Você abre está classe para
edição todos os dias?
47
Acoplamento
48
Nos acoplamos com outras
classes quando
dependemos delas
Acoplamento
1. Nem todo acoplamento é
ruim
2. Devemos nos acoplar com
classes estáveis, que são
pouco alteradas
3. Interfaces tendem a ser
estáveis
49
Encapsulamento
50
Você sabe acelerar um
carro. Sabe que quando o
faz o carro se movimenta.
Mas você sabe todos os
processos que ocorrem
quando você aciona o
acelerador?
Software robusto e flexível
Software robusto e flexível
Modelos
Anêmicos
X
Modelos
Ricos
53
Software robusto e flexível
Software robusto e flexível
Tell, Don't Ask
56
Devemos sempre dar
ordens para chamar
métodos.
Não devemos perguntar
antes de chamar.
Software robusto e flexível
Lei de Demeter
Todos os métodos de uma
classe devem se comunicar
somente com:
1. Um membro da classe
2. Um argumento do método
58
Software robusto e flexível
Software robusto e flexível
Composition
Over
Inheritance
61
Não use herança somente
para ganhar
comportamentos
4.
CONCLUSÕES
62
Pensar no projeto de
classes é
fundamental
63
Implementação ruim
não é um grande
problema
64
Abstrair por
abstrair pode
acabar criando
over-engineering
65
Como
identificar os
pontos para
abstração?
Obtenha
feedback do
cliente o
quanto antes
66
Procure ajuda
de outros
programadores
Leve o primeiro
tiro
67
Reforçando
SOLID
Os cinco princípios
Encapsulamento
Esconda o funcionamento
Coesão
Todos pelo mesmo objetivo
68
Reforçando
Herança
Use com cuidado, favoreça a composição
Acoplamento
Controle suas dependências
Modelos Anêmicos
Não separe os dados do comportamento
Fontes
69
▪ Bob Martin SOLID Principles of Object Oriented and Agile Design
▪ Manifesto for Software Craftsmanship
▪ https://www.casadocodigo.com.br/products/livro-oo-solid
▪ https://weblogs.asp.net/andrenobre/princ-237-pios-de-oop-a-lei-de-demeter-lod
▪ http://www.davesquared.net/2009/01/introduction-to-solid-principles-of-oo.html
▪ http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod
▪ http://blog.scottbellware.com/2009/01/good-design-is-easily-learned.html
▪ Código fonte dos exemplos: https://github.com/robsonbittencourt/palestra-solid-oo
Obrigado
70
Blog: rbittencourt.com
Github: robsonbittencourt
Skype: rluizv
E-mail: robson.luizv@gmail.com

Mais conteúdo relacionado

PPTX
Testes Automatizados
PDF
Apresentação WTM
PDF
Desenvolvimento Client-Side 2016
PDF
Management 3.0 - a vida pós-agilidade
PDF
O que move a web atualmente?
PPT
DevInCachu 2012: Desenvolvendo Aplicacoes RIA com ExtJS 4 e Sencha Touch 2
PDF
Ria e Java FX
PPTX
Aplicações ricas com JavaFX 2
Testes Automatizados
Apresentação WTM
Desenvolvimento Client-Side 2016
Management 3.0 - a vida pós-agilidade
O que move a web atualmente?
DevInCachu 2012: Desenvolvendo Aplicacoes RIA com ExtJS 4 e Sencha Touch 2
Ria e Java FX
Aplicações ricas com JavaFX 2

Mais procurados (20)

PDF
JavaFX: Desktop para desenvolvedores WEB
PPTX
Java e Mercado de Trabalho
PPTX
Criando aplicações java fx em minutos
PDF
JavaFX: A nova biblioteca gráfica da plataforma Java
PPTX
Suporte a macros na sua aplicação com PowerShell
PPTX
Acelere - e melhore! - o feedback com testes automatizados rápidos
PPTX
Refactoring
PDF
Be Happy With Semantic Versioning And Git Flow - PHP Conference Brasil 2012
PPTX
Continuous Integration, Automated Builds e Continuous Deploy, desenvolvimento...
PPTX
Micro frontend
PDF
Introdução ao LiveOak
PDF
Desenvolvimento rápido de aplicações com JEE e JavaFX
PDF
Clean Architecture
PDF
JavaFX 2
PPTX
PDF
Java não é tão difícil quanto parece
PPTX
JavaFX - Uma visão Geral
PDF
Introdução ao java fx e visage
PDF
IFSP 2015 - Cultura DevOps
ODP
Java: o que estudar para o mercado de trabalho
JavaFX: Desktop para desenvolvedores WEB
Java e Mercado de Trabalho
Criando aplicações java fx em minutos
JavaFX: A nova biblioteca gráfica da plataforma Java
Suporte a macros na sua aplicação com PowerShell
Acelere - e melhore! - o feedback com testes automatizados rápidos
Refactoring
Be Happy With Semantic Versioning And Git Flow - PHP Conference Brasil 2012
Continuous Integration, Automated Builds e Continuous Deploy, desenvolvimento...
Micro frontend
Introdução ao LiveOak
Desenvolvimento rápido de aplicações com JEE e JavaFX
Clean Architecture
JavaFX 2
Java não é tão difícil quanto parece
JavaFX - Uma visão Geral
Introdução ao java fx e visage
IFSP 2015 - Cultura DevOps
Java: o que estudar para o mercado de trabalho
Anúncio

Semelhante a Software robusto e flexível (20)

PPTX
Princípios SOLID
PPTX
Orientação a Objetos e SOLID
ODP
Orientação a Objetos (1)
ODP
Orientação a Objetos (introdução)
PDF
PDF
[CEFETMG][ESw] Aula 6 - Conceitos de projeto
PDF
Pragmatismo e Padroes - Um limiar tenue entre o sucesso e o fracasso do seu p...
PPTX
SOLID - Clean Architecture
PPTX
Clean Code - Boas práticas para desenvolvimento
PPTX
Princípios SOLID
PDF
Oo presentation básica
PDF
Análise de sistemas oo 1
PPTX
SOLID - Teoria e Prática
PDF
Poo apostila visual c
PPTX
SOLID Os princípios da linguagem orientada a objeto
PPT
01 Orientacao A Objetos Programacao
PDF
Boas práticas de programação - Princípios SOLID
PPTX
Programação de Elite - Requisito dado é código implementado
PPTX
Análise Orientada a Objetos - resumo.pptx
Princípios SOLID
Orientação a Objetos e SOLID
Orientação a Objetos (1)
Orientação a Objetos (introdução)
[CEFETMG][ESw] Aula 6 - Conceitos de projeto
Pragmatismo e Padroes - Um limiar tenue entre o sucesso e o fracasso do seu p...
SOLID - Clean Architecture
Clean Code - Boas práticas para desenvolvimento
Princípios SOLID
Oo presentation básica
Análise de sistemas oo 1
SOLID - Teoria e Prática
Poo apostila visual c
SOLID Os princípios da linguagem orientada a objeto
01 Orientacao A Objetos Programacao
Boas práticas de programação - Princípios SOLID
Programação de Elite - Requisito dado é código implementado
Análise Orientada a Objetos - resumo.pptx
Anúncio

Último (7)

PDF
apresentacao introducao computacao ead.pdf
DOC
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO
PDF
Evolução em código: algoritmos genéticos com PHP
PPTX
Mapeamento de Objeto para Tabela Relacional
PPTX
Curso de Windows 11 resumido na prática.pptx
PDF
Dos requisitos ao código: como criar código rastreável em PHP
DOC
COMO AUTOMATIZR JOGOS SUPER NINTENDO ATRAVES DA PROGRAMAÇÃO
apresentacao introducao computacao ead.pdf
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO
Evolução em código: algoritmos genéticos com PHP
Mapeamento de Objeto para Tabela Relacional
Curso de Windows 11 resumido na prática.pptx
Dos requisitos ao código: como criar código rastreável em PHP
COMO AUTOMATIZR JOGOS SUPER NINTENDO ATRAVES DA PROGRAMAÇÃO

Software robusto e flexível

Notas do Editor

  • #5: Vou mostrar vários conceitos e bastante código A ideia não é ensinar todos Cada um daria uma hora de palestra sozinho provavelmente
  • #7: Quem nunca perdeu muito tempo em tarefas que deveriam ser fáceis? Desenvolve a solução e aparecem bugs durante os testes e precisa desenvolver novamente.
  • #9: Fazer a comparação com um cirurgião
  • #10: Pois a qualidade do código vai garantir o funcionamento futuro do sistema
  • #11: Isso nos leva a termos sistemas frágeis Fazer a comparação com o Jenga
  • #12: A mudança As vezes achamos que aquele código não vai mudar, mas cedo ou tarde ele muda
  • #13: As vezes para fazer uma mudança temos que alterar em vários lugares Podemos esquecer de alterar um lugar
  • #15: Para tentar melhorar isso vamos começar a falar de SOLID
  • #16: 5 princípios mapeados pelo Uncle Bob em 2000 Formam um acrônimo Ele não inventou os princípios, eles já existiam a muito tempo Objetivo é criar sistemas fáceis de manter e estender
  • #18: Ou seja ela deve ter uma única responsabilidade
  • #19: A mudança deve se propagar para o sistema
  • #20: A classe não para de crescer Verificar a existência de muitos ifs Ao perguntar o que a classe/método faz respondemos com um “E”
  • #22: Mais tarde será mostrado como utilizar estas classes
  • #24: Fazer comparação com Lego Contar história da tarefa que parecia difícil
  • #25: Devemos sempre pensar nas abstrações antes das implementação
  • #29: Não preciso mais abrir o GerenciadorFaturas quando uma nova ação aparecer
  • #33: Se o banco tiver somente contas comuns não vai dar erro Mas se tiver uma conta de estudante vai
  • #39: Se quisermos podemos ainda implementar duas interfaces
  • #50: Citar o acoplamento com List
  • #51: pensar com muito cuidado em quais métodos são públicos em uma classe não criar seters pra tudo
  • #53: Antes o enum deixava vazar a regra de que existia um cálculo para o salário
  • #61: Falar sobre o acoplamento escondido com as duas classes
  • #64: Temos que gastar mais tempo pensando e desenhando as soluções Uma vez projetado, codificar não deve ser difícil
  • #65: A mudança do HashMap de LinkedList para Árvore Binária
  • #66: Difícil de entender
  • #67: Não crie um strategy se você só tem um tipo de imposto