SlideShare uma empresa Scribd logo
Programação Orientada a Objetos
Bad Smells e Design
Patterns
Pós Graduação em Análise e Desenvolvimento de Sistemas
Aplicados à Gestão Empresarial
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA
TRIÂNGULO MINEIRO – Campus Uberlândia Centro
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Bad Smells
• Conjunto de más práticas de design
• Popularizadas no livro “Refactoring” do
Martin Fowler;
• Existem mais de 60 bad
smells, mas por questão de
escopo, serão citados
apenas 6.
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Refused Bequest
• Quando herdamos de uma classe, mas não
queremos fazer uso de alguns métodos
herdados.
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Feature Envy
• Quando um método está mais interessado
em outro objeto do que no próprio objeto
no qual ele está inserido.
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Intimidade Inapropriada
• Métodos que conhecem demais sobre a
implementação de outra classe
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
God Class ou Blob
• Classes que controlam muitos objetos do
sistema. Tendem a crescer mais do que
deveriam e “fazer tudo”
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Divergent Changes
• Classes não coesas, que sofrem constantes
alterações devido a terem diversas
responsabilidades
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Shotgun Surgery
• Classes que possuem métodos que, toda
vez que alteram, disparam mudanças em
diversos outros lugares do código
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Design Patterns
• São uma forma de se documentar uma
solução para um problema de modelagem;
• Soluções que foram implementadas com
sucesso de forma recorrente em diversos
contextos;
• Padrões de projetos ajudam a
adquirir habilidade para modelar
Software
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Design Patterns
• Padrões = Aprender soluções sem precisar
passar por vários anos alternando entre
escolhas certas e erradas.
• MVC é um padrão, mas arquitetural;
• Cada tecnologia tem seus padrões, como
padrões Java EE, padrões Android, etc..
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Design Patterns
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
J2EE Patterns
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Primeiro Exemplo
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Strategy
• Código ruim + funcionando = mantém do
jeito que está;
• Problemas = precisar manter o código, por
exemplo, novas regras de negócio;
• A solução da forma que está não irá
escalar para um número grande de regras;
• O código pode crescer de forma
descontrolada e se tornar não gerenciável;
• Este código necessita de refactoring;
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Strategy
Solução?
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Strategy
Problemas:
1 – Explosão de subclasses;
2 – Não é possível alterar o comportamento
uma vez que a classe foi instanciada.
Soluções?
1 – Herança com granularidade diferente?
Uma subclasse para cada tipo de veículo?
Problemas? Muita duplicidade de código.
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Strategy
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Strategy
Resolve?
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Strategy
Resolve?
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Strategy
Strategy é um padrão que deve ser utilizado
quando uma classe possuir diversos
algoritmos que possam ser utilizados de
forma intercambiável.
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Template Method
• Algoritmo Geral na superclasse (parte
fixa);
• Passos distintos nas subclasses (parte
variável), fornecendo implementação
própria, completando lacunas.
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Template Method
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Template Method
• Hook Method = técnica para permitir a
extensão do comportamento;
• Template Method = padrão de projeto
que soluciona o problema;
• Na prática, o template Method utiliza
Hook Method em sua solução;
• O conceito de Hook Method é mais geral,
também sendo utilizado por outros
padrões.
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Template Method
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Template Method
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Refatorar para Template
Method
• Funcionalidades com similaridades nos
algoritmos são implemetadas em diferentes
classes, gerando duplicação de código.
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Refatorar para Template
Method
• Funcionalidades com similaridades nos
algoritmos são implemetadas em diferentes
classes, gerando duplicação de código.
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Factory Method
• Encapsular a criação de objetos através da
herança
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Factory Method
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Factory Method
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Bridge
• Um dos problemas da Herança, é quando se
precisa de uma implementação que combine o
comportamento das subclasses
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Bridge
• O padrão Bridge irá criar uma ponte entre as duas
hierarquias ligadas por uma relação de composição;
• No exemplo, a ponte é caracterizada pela relação de
composição entre a classe GeradorArquivo e a interface
PosProcessador.
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Bridge
• Um ótimo efeito colateral nesse padrão é que
classes que foram separadas podem ser
utilizadas em outro contexto;
• Bridge utiliza ao mesmo tempo herança e
composição;
• Bridge utiliza ao mesmo tempo hook methods
e hook classes.
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Bridge
• Um ótimo efeito colateral nesse padrão é que
classes que foram separadas podem ser
utilizadas em outro contexto;
• Bridge utiliza ao mesmo tempo herança e
composição;
• Bridge utiliza ao mesmo tempo hook methods
e hook classes.
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Observer
• Utiliza composição com múltiplos objetos;
• Mudanças em objetos são notificadas para outros
objetos interessados.
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Observer
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Observer
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
State
• Utilizando composição, permite a variação de
comportamento de acordo com o estado de
uma entidade do sistema
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
State
• Aplicação do algoritmo state para busca em
profundidade dos grafos
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Refatorar substituindo
condicionais por
polimorfismo
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Refatorar substituindo
condicionais por
polimorfismo
• Antes e depois
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Refatorar substituindo
condicionais por
polimorfismo
• Antes e depois
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Composição Recursiva
• Criação de uma estrutura mais robusta
colocando instâncias da superclasse ou
interface nas subclasses;
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Composite
• Possui como objetivo prover uma solução para objetos
que representam um conjunto de objetos, mas que
compartilham a mesma abstração deles;
• O padrão segue uma estrutura de árvore
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Composite
• Modelagem do Composite com trechos de
vôo
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Chains of Responsability
• Passos que precisam ser executados em sequência,
contudo com flexibilidade na configuração destes;
• Reutilização destes passos em outros procedimentos
• Este padrão cria uma cadeia de execução na qual cada
elemento processa as informações e em seguida delega
a execução ao próximo em sequência.
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Chains of Responsability
• Arquivo com uma lista de certificados digitais
revogados, atualizando de forma periódica em um
servidor remoto, contendo a data de validade;
• Caches na memória e na base de dados
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Referências
• GUERRA, Eduardo. Design Patterns com Java.
Casa do Código, 2014;
• ANICHE, Maurício. Orientação a objetos e
SOLID para Ninjas. Casa do Código, 2015;
• “LARMAN, Craig – Utilizando UML e Padrões
3ª Edição. Bookman, 2007”.

Mais conteúdo relacionado

Destaque

Java Lista Exercicios 04
Java Lista Exercicios 04Java Lista Exercicios 04
Java Lista Exercicios 04
Regis Magalhães
 
Mini Curso - Programação de Interfaces Gráficas - aula 4
Mini Curso - Programação de Interfaces Gráficas - aula 4Mini Curso - Programação de Interfaces Gráficas - aula 4
Mini Curso - Programação de Interfaces Gráficas - aula 4Carlos Eduardo
 
Mini Curso - Programação de Interfaces Gráficas - aula 1
Mini Curso - Programação de Interfaces Gráficas - aula 1Mini Curso - Programação de Interfaces Gráficas - aula 1
Mini Curso - Programação de Interfaces Gráficas - aula 1Carlos Eduardo
 
Mini Curso - Programação de Interfaces Gráficas - aula extra persistência
Mini Curso - Programação de Interfaces Gráficas - aula extra persistênciaMini Curso - Programação de Interfaces Gráficas - aula extra persistência
Mini Curso - Programação de Interfaces Gráficas - aula extra persistência
Carlos Eduardo
 
Mini Curso - Programação de Interfaces Gráficas - aula 3
Mini Curso - Programação de Interfaces Gráficas - aula 3Mini Curso - Programação de Interfaces Gráficas - aula 3
Mini Curso - Programação de Interfaces Gráficas - aula 3Carlos Eduardo
 
Mini Curso - Programação de Interfaces Gráficas - aula 2
Mini Curso - Programação de Interfaces Gráficas - aula 2Mini Curso - Programação de Interfaces Gráficas - aula 2
Mini Curso - Programação de Interfaces Gráficas - aula 2
Carlos Eduardo
 
Apresentação wxWidgets
Apresentação wxWidgetsApresentação wxWidgets
Apresentação wxWidgets
Renzo Petri
 
Aula de Algoritmos II - Turma 222
Aula de Algoritmos II - Turma 222Aula de Algoritmos II - Turma 222
Aula de Algoritmos II - Turma 222Bianca Dantas
 
Aula sobre multithreading
Aula sobre multithreadingAula sobre multithreading
Aula sobre multithreading
Bianca Dantas
 
Algoritmos Genéticos Aplicados ao Problema da Mochila Multidimensional
Algoritmos Genéticos Aplicados ao Problema da Mochila MultidimensionalAlgoritmos Genéticos Aplicados ao Problema da Mochila Multidimensional
Algoritmos Genéticos Aplicados ao Problema da Mochila Multidimensional
Bianca Dantas
 
Java Lista Exercicios 06
Java Lista Exercicios 06Java Lista Exercicios 06
Java Lista Exercicios 06
Regis Magalhães
 
JTableView - Swing
JTableView - SwingJTableView - Swing
JTableView - Swing
Sérgio Souza Costa
 
Java 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De ClasseJava 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De ClasseRegis Magalhães
 
Exercicios - Java Swing Listeners
Exercicios - Java Swing ListenersExercicios - Java Swing Listeners
Exercicios - Java Swing Listeners
Daniel Arndt Alves
 
Projeto calculadora em_java
Projeto calculadora em_javaProjeto calculadora em_java
Projeto calculadora em_javasamuelthiago
 

Destaque (20)

php 01 introducao
php 01 introducaophp 01 introducao
php 01 introducao
 
Java Lista Exercicios 04
Java Lista Exercicios 04Java Lista Exercicios 04
Java Lista Exercicios 04
 
Mini Curso - Programação de Interfaces Gráficas - aula 4
Mini Curso - Programação de Interfaces Gráficas - aula 4Mini Curso - Programação de Interfaces Gráficas - aula 4
Mini Curso - Programação de Interfaces Gráficas - aula 4
 
Mini Curso - Programação de Interfaces Gráficas - aula 1
Mini Curso - Programação de Interfaces Gráficas - aula 1Mini Curso - Programação de Interfaces Gráficas - aula 1
Mini Curso - Programação de Interfaces Gráficas - aula 1
 
Mini Curso - Programação de Interfaces Gráficas - aula extra persistência
Mini Curso - Programação de Interfaces Gráficas - aula extra persistênciaMini Curso - Programação de Interfaces Gráficas - aula extra persistência
Mini Curso - Programação de Interfaces Gráficas - aula extra persistência
 
Mini Curso - Programação de Interfaces Gráficas - aula 3
Mini Curso - Programação de Interfaces Gráficas - aula 3Mini Curso - Programação de Interfaces Gráficas - aula 3
Mini Curso - Programação de Interfaces Gráficas - aula 3
 
Mini Curso - Programação de Interfaces Gráficas - aula 2
Mini Curso - Programação de Interfaces Gráficas - aula 2Mini Curso - Programação de Interfaces Gráficas - aula 2
Mini Curso - Programação de Interfaces Gráficas - aula 2
 
Lista Exercicios C2
Lista Exercicios C2Lista Exercicios C2
Lista Exercicios C2
 
Java 07 Entrada Dados
Java 07 Entrada DadosJava 07 Entrada Dados
Java 07 Entrada Dados
 
Apresentação wxWidgets
Apresentação wxWidgetsApresentação wxWidgets
Apresentação wxWidgets
 
Aula de Algoritmos II - Turma 222
Aula de Algoritmos II - Turma 222Aula de Algoritmos II - Turma 222
Aula de Algoritmos II - Turma 222
 
Aula sobre multithreading
Aula sobre multithreadingAula sobre multithreading
Aula sobre multithreading
 
Algoritmos Genéticos Aplicados ao Problema da Mochila Multidimensional
Algoritmos Genéticos Aplicados ao Problema da Mochila MultidimensionalAlgoritmos Genéticos Aplicados ao Problema da Mochila Multidimensional
Algoritmos Genéticos Aplicados ao Problema da Mochila Multidimensional
 
Java Lista Exercicios 06
Java Lista Exercicios 06Java Lista Exercicios 06
Java Lista Exercicios 06
 
JTableView - Swing
JTableView - SwingJTableView - Swing
JTableView - Swing
 
Lista Exercicios C
Lista Exercicios CLista Exercicios C
Lista Exercicios C
 
Merci 10 Completo
Merci 10 CompletoMerci 10 Completo
Merci 10 Completo
 
Java 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De ClasseJava 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De Classe
 
Exercicios - Java Swing Listeners
Exercicios - Java Swing ListenersExercicios - Java Swing Listeners
Exercicios - Java Swing Listeners
 
Projeto calculadora em_java
Projeto calculadora em_javaProjeto calculadora em_java
Projeto calculadora em_java
 

Semelhante a Programação Orientada a Objetos - Pós Graduação - Aula 8 - Bad Smells & Design Patterns

NoSql
NoSqlNoSql
Workshop Scrum Developer
Workshop Scrum DeveloperWorkshop Scrum Developer
Workshop Scrum DeveloperJoão Victorino
 
Tendências em teste de software
Tendências em teste de softwareTendências em teste de software
Tendências em teste de software
Qualister
 
cms_files_81187_1648754282Material_Doutorado_Profissional_em_Engenharia_de_So...
cms_files_81187_1648754282Material_Doutorado_Profissional_em_Engenharia_de_So...cms_files_81187_1648754282Material_Doutorado_Profissional_em_Engenharia_de_So...
cms_files_81187_1648754282Material_Doutorado_Profissional_em_Engenharia_de_So...
Ricardo Roberto MSc, MBA
 
Global tecnol s.a – tecnologias – ads semestre 5º e 6º semestre
Global tecnol s.a – tecnologias – ads semestre 5º e 6º semestreGlobal tecnol s.a – tecnologias – ads semestre 5º e 6º semestre
Global tecnol s.a – tecnologias – ads semestre 5º e 6º semestre
HELENO FAVACHO
 
Projeto Integrado Áreas de TI - iniciar uma jornada empreendedora - 2.pdf
Projeto Integrado Áreas de TI - iniciar uma jornada empreendedora - 2.pdfProjeto Integrado Áreas de TI - iniciar uma jornada empreendedora - 2.pdf
Projeto Integrado Áreas de TI - iniciar uma jornada empreendedora - 2.pdf
HELENO FAVACHO
 
PROJETO INTEGRADO - CURSOS DA ÁREA DE TI - Uma das tecnologias mais populare...
PROJETO INTEGRADO - CURSOS DA ÁREA DE TI -  Uma das tecnologias mais populare...PROJETO INTEGRADO - CURSOS DA ÁREA DE TI -  Uma das tecnologias mais populare...
PROJETO INTEGRADO - CURSOS DA ÁREA DE TI - Uma das tecnologias mais populare...
HELENO FAVACHO
 
Dessign patterns: Resoluções comuns para problemas comuns de POO
Dessign patterns: Resoluções comuns para problemas comuns de POODessign patterns: Resoluções comuns para problemas comuns de POO
Dessign patterns: Resoluções comuns para problemas comuns de POO
João Lucas Farias
 
Pitagoras - Introdução a Programação Orientada a Objetos - Encapsulamento, Ac...
Pitagoras - Introdução a Programação Orientada a Objetos - Encapsulamento, Ac...Pitagoras - Introdução a Programação Orientada a Objetos - Encapsulamento, Ac...
Pitagoras - Introdução a Programação Orientada a Objetos - Encapsulamento, Ac...
Charles Fortes
 
Modular CSS - Projetando CSS para aplicativos
Modular CSS - Projetando CSS para aplicativosModular CSS - Projetando CSS para aplicativos
Modular CSS - Projetando CSS para aplicativos
Bunee.io - Hiring with Intelligence
 
PHPZEIRO: Adote um framework
PHPZEIRO: Adote um frameworkPHPZEIRO: Adote um framework
PHPZEIRO: Adote um framework
Leonardo "Hackin" Freire
 
Simple singleton pattern
Simple singleton patternSimple singleton pattern
Simple singleton pattern
Dennis Calazans
 
Administração de materiais unidade 03 14-06-07 - 108 - ppts 01 slide por fo...
Administração de materiais unidade 03   14-06-07 - 108 - ppts 01 slide por fo...Administração de materiais unidade 03   14-06-07 - 108 - ppts 01 slide por fo...
Administração de materiais unidade 03 14-06-07 - 108 - ppts 01 slide por fo...Alex Casañas
 
Code Smells
Code SmellsCode Smells
Code Smells
Alan Willms
 
Estilizando temas de WordPress
Estilizando temas de WordPressEstilizando temas de WordPress
Estilizando temas de WordPress
Anyssa Ferreira
 
Boas práticas de desenvolvimento para Jupyter Notebooks
Boas práticas de desenvolvimento para Jupyter NotebooksBoas práticas de desenvolvimento para Jupyter Notebooks
Boas práticas de desenvolvimento para Jupyter Notebooks
Joel Pinho Lucas
 
Aula 3.ppt
Aula 3.pptAula 3.ppt
Frameworks PHP @edgarsandi
Frameworks PHP @edgarsandiFrameworks PHP @edgarsandi
Frameworks PHP @edgarsandi
Edgar Rodrigues Sandi
 
Aula1 Apresentacao TEES
Aula1 Apresentacao TEESAula1 Apresentacao TEES
Aula1 Apresentacao TEES
Rogerio P C do Nascimento
 
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 Programação Orientada a Objetos - Pós Graduação - Aula 8 - Bad Smells & Design Patterns (20)

NoSql
NoSqlNoSql
NoSql
 
Workshop Scrum Developer
Workshop Scrum DeveloperWorkshop Scrum Developer
Workshop Scrum Developer
 
Tendências em teste de software
Tendências em teste de softwareTendências em teste de software
Tendências em teste de software
 
cms_files_81187_1648754282Material_Doutorado_Profissional_em_Engenharia_de_So...
cms_files_81187_1648754282Material_Doutorado_Profissional_em_Engenharia_de_So...cms_files_81187_1648754282Material_Doutorado_Profissional_em_Engenharia_de_So...
cms_files_81187_1648754282Material_Doutorado_Profissional_em_Engenharia_de_So...
 
Global tecnol s.a – tecnologias – ads semestre 5º e 6º semestre
Global tecnol s.a – tecnologias – ads semestre 5º e 6º semestreGlobal tecnol s.a – tecnologias – ads semestre 5º e 6º semestre
Global tecnol s.a – tecnologias – ads semestre 5º e 6º semestre
 
Projeto Integrado Áreas de TI - iniciar uma jornada empreendedora - 2.pdf
Projeto Integrado Áreas de TI - iniciar uma jornada empreendedora - 2.pdfProjeto Integrado Áreas de TI - iniciar uma jornada empreendedora - 2.pdf
Projeto Integrado Áreas de TI - iniciar uma jornada empreendedora - 2.pdf
 
PROJETO INTEGRADO - CURSOS DA ÁREA DE TI - Uma das tecnologias mais populare...
PROJETO INTEGRADO - CURSOS DA ÁREA DE TI -  Uma das tecnologias mais populare...PROJETO INTEGRADO - CURSOS DA ÁREA DE TI -  Uma das tecnologias mais populare...
PROJETO INTEGRADO - CURSOS DA ÁREA DE TI - Uma das tecnologias mais populare...
 
Dessign patterns: Resoluções comuns para problemas comuns de POO
Dessign patterns: Resoluções comuns para problemas comuns de POODessign patterns: Resoluções comuns para problemas comuns de POO
Dessign patterns: Resoluções comuns para problemas comuns de POO
 
Pitagoras - Introdução a Programação Orientada a Objetos - Encapsulamento, Ac...
Pitagoras - Introdução a Programação Orientada a Objetos - Encapsulamento, Ac...Pitagoras - Introdução a Programação Orientada a Objetos - Encapsulamento, Ac...
Pitagoras - Introdução a Programação Orientada a Objetos - Encapsulamento, Ac...
 
Modular CSS - Projetando CSS para aplicativos
Modular CSS - Projetando CSS para aplicativosModular CSS - Projetando CSS para aplicativos
Modular CSS - Projetando CSS para aplicativos
 
PHPZEIRO: Adote um framework
PHPZEIRO: Adote um frameworkPHPZEIRO: Adote um framework
PHPZEIRO: Adote um framework
 
Simple singleton pattern
Simple singleton patternSimple singleton pattern
Simple singleton pattern
 
Administração de materiais unidade 03 14-06-07 - 108 - ppts 01 slide por fo...
Administração de materiais unidade 03   14-06-07 - 108 - ppts 01 slide por fo...Administração de materiais unidade 03   14-06-07 - 108 - ppts 01 slide por fo...
Administração de materiais unidade 03 14-06-07 - 108 - ppts 01 slide por fo...
 
Code Smells
Code SmellsCode Smells
Code Smells
 
Estilizando temas de WordPress
Estilizando temas de WordPressEstilizando temas de WordPress
Estilizando temas de WordPress
 
Boas práticas de desenvolvimento para Jupyter Notebooks
Boas práticas de desenvolvimento para Jupyter NotebooksBoas práticas de desenvolvimento para Jupyter Notebooks
Boas práticas de desenvolvimento para Jupyter Notebooks
 
Aula 3.ppt
Aula 3.pptAula 3.ppt
Aula 3.ppt
 
Frameworks PHP @edgarsandi
Frameworks PHP @edgarsandiFrameworks PHP @edgarsandi
Frameworks PHP @edgarsandi
 
Aula1 Apresentacao TEES
Aula1 Apresentacao TEESAula1 Apresentacao TEES
Aula1 Apresentacao TEES
 
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...
 

Mais de Carlos Eduardo

When and Why Your Code Starts to Smell Bad
When and Why Your Code Starts to Smell BadWhen and Why Your Code Starts to Smell Bad
When and Why Your Code Starts to Smell Bad
Carlos Eduardo
 
Experimentos envolvendo ações de Rejuvenescimento de Software
Experimentos envolvendo ações de Rejuvenescimento de SoftwareExperimentos envolvendo ações de Rejuvenescimento de Software
Experimentos envolvendo ações de Rejuvenescimento de Software
Carlos Eduardo
 
A Measurement-Based Model for Estimation of Resource Exhaustion in Operationa...
A Measurement-Based Model for Estimation of Resource Exhaustion in Operationa...A Measurement-Based Model for Estimation of Resource Exhaustion in Operationa...
A Measurement-Based Model for Estimation of Resource Exhaustion in Operationa...
Carlos Eduardo
 
Socket Descriptor Leak encontrado na JDK
Socket Descriptor Leak encontrado na JDKSocket Descriptor Leak encontrado na JDK
Socket Descriptor Leak encontrado na JDK
Carlos Eduardo
 
Máquinas de turing com memória limitada
Máquinas de turing com memória limitadaMáquinas de turing com memória limitada
Máquinas de turing com memória limitada
Carlos Eduardo
 
Detecting bad smells in source code using change history information
Detecting bad smells in source code using change history informationDetecting bad smells in source code using change history information
Detecting bad smells in source code using change history information
Carlos Eduardo
 
Recommending refactoring operations in large software systems
Recommending refactoring operations in large software systemsRecommending refactoring operations in large software systems
Recommending refactoring operations in large software systems
Carlos Eduardo
 

Mais de Carlos Eduardo (7)

When and Why Your Code Starts to Smell Bad
When and Why Your Code Starts to Smell BadWhen and Why Your Code Starts to Smell Bad
When and Why Your Code Starts to Smell Bad
 
Experimentos envolvendo ações de Rejuvenescimento de Software
Experimentos envolvendo ações de Rejuvenescimento de SoftwareExperimentos envolvendo ações de Rejuvenescimento de Software
Experimentos envolvendo ações de Rejuvenescimento de Software
 
A Measurement-Based Model for Estimation of Resource Exhaustion in Operationa...
A Measurement-Based Model for Estimation of Resource Exhaustion in Operationa...A Measurement-Based Model for Estimation of Resource Exhaustion in Operationa...
A Measurement-Based Model for Estimation of Resource Exhaustion in Operationa...
 
Socket Descriptor Leak encontrado na JDK
Socket Descriptor Leak encontrado na JDKSocket Descriptor Leak encontrado na JDK
Socket Descriptor Leak encontrado na JDK
 
Máquinas de turing com memória limitada
Máquinas de turing com memória limitadaMáquinas de turing com memória limitada
Máquinas de turing com memória limitada
 
Detecting bad smells in source code using change history information
Detecting bad smells in source code using change history informationDetecting bad smells in source code using change history information
Detecting bad smells in source code using change history information
 
Recommending refactoring operations in large software systems
Recommending refactoring operations in large software systemsRecommending refactoring operations in large software systems
Recommending refactoring operations in large software systems
 

Último

Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
Momento da Informática
 
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdfEscola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Gabriel de Mattos Faustino
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
Danilo Pinotti
 
Guardioes Digitais em ação: Como criar senhas seguras!
Guardioes Digitais em ação: Como criar senhas seguras!Guardioes Digitais em ação: Como criar senhas seguras!
Guardioes Digitais em ação: Como criar senhas seguras!
Jonathas Muniz
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
Momento da Informática
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
Faga1939
 

Último (6)

Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
 
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdfEscola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
 
Guardioes Digitais em ação: Como criar senhas seguras!
Guardioes Digitais em ação: Como criar senhas seguras!Guardioes Digitais em ação: Como criar senhas seguras!
Guardioes Digitais em ação: Como criar senhas seguras!
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
 

Programação Orientada a Objetos - Pós Graduação - Aula 8 - Bad Smells & Design Patterns

  • 1. Programação Orientada a Objetos Bad Smells e Design Patterns Pós Graduação em Análise e Desenvolvimento de Sistemas Aplicados à Gestão Empresarial INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA TRIÂNGULO MINEIRO – Campus Uberlândia Centro Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
  • 2. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Bad Smells • Conjunto de más práticas de design • Popularizadas no livro “Refactoring” do Martin Fowler; • Existem mais de 60 bad smells, mas por questão de escopo, serão citados apenas 6.
  • 3. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Refused Bequest • Quando herdamos de uma classe, mas não queremos fazer uso de alguns métodos herdados.
  • 4. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Feature Envy • Quando um método está mais interessado em outro objeto do que no próprio objeto no qual ele está inserido.
  • 5. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Intimidade Inapropriada • Métodos que conhecem demais sobre a implementação de outra classe
  • 6. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br God Class ou Blob • Classes que controlam muitos objetos do sistema. Tendem a crescer mais do que deveriam e “fazer tudo”
  • 7. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Divergent Changes • Classes não coesas, que sofrem constantes alterações devido a terem diversas responsabilidades
  • 8. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Shotgun Surgery • Classes que possuem métodos que, toda vez que alteram, disparam mudanças em diversos outros lugares do código
  • 9. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Design Patterns • São uma forma de se documentar uma solução para um problema de modelagem; • Soluções que foram implementadas com sucesso de forma recorrente em diversos contextos; • Padrões de projetos ajudam a adquirir habilidade para modelar Software
  • 10. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Design Patterns • Padrões = Aprender soluções sem precisar passar por vários anos alternando entre escolhas certas e erradas. • MVC é um padrão, mas arquitetural; • Cada tecnologia tem seus padrões, como padrões Java EE, padrões Android, etc..
  • 11. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Design Patterns
  • 12. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br J2EE Patterns
  • 13. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Primeiro Exemplo
  • 14. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Strategy • Código ruim + funcionando = mantém do jeito que está; • Problemas = precisar manter o código, por exemplo, novas regras de negócio; • A solução da forma que está não irá escalar para um número grande de regras; • O código pode crescer de forma descontrolada e se tornar não gerenciável; • Este código necessita de refactoring;
  • 15. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Strategy Solução?
  • 16. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Strategy Problemas: 1 – Explosão de subclasses; 2 – Não é possível alterar o comportamento uma vez que a classe foi instanciada. Soluções? 1 – Herança com granularidade diferente? Uma subclasse para cada tipo de veículo? Problemas? Muita duplicidade de código.
  • 17. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Strategy
  • 18. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Strategy Resolve?
  • 19. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Strategy Resolve?
  • 20. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Strategy Strategy é um padrão que deve ser utilizado quando uma classe possuir diversos algoritmos que possam ser utilizados de forma intercambiável.
  • 21. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Template Method • Algoritmo Geral na superclasse (parte fixa); • Passos distintos nas subclasses (parte variável), fornecendo implementação própria, completando lacunas.
  • 22. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Template Method
  • 23. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Template Method • Hook Method = técnica para permitir a extensão do comportamento; • Template Method = padrão de projeto que soluciona o problema; • Na prática, o template Method utiliza Hook Method em sua solução; • O conceito de Hook Method é mais geral, também sendo utilizado por outros padrões.
  • 24. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Template Method
  • 25. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Template Method
  • 26. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Refatorar para Template Method • Funcionalidades com similaridades nos algoritmos são implemetadas em diferentes classes, gerando duplicação de código.
  • 27. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Refatorar para Template Method • Funcionalidades com similaridades nos algoritmos são implemetadas em diferentes classes, gerando duplicação de código.
  • 28. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Factory Method • Encapsular a criação de objetos através da herança
  • 29. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Factory Method
  • 30. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Factory Method
  • 31. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Bridge • Um dos problemas da Herança, é quando se precisa de uma implementação que combine o comportamento das subclasses
  • 32. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Bridge • O padrão Bridge irá criar uma ponte entre as duas hierarquias ligadas por uma relação de composição; • No exemplo, a ponte é caracterizada pela relação de composição entre a classe GeradorArquivo e a interface PosProcessador.
  • 33. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Bridge • Um ótimo efeito colateral nesse padrão é que classes que foram separadas podem ser utilizadas em outro contexto; • Bridge utiliza ao mesmo tempo herança e composição; • Bridge utiliza ao mesmo tempo hook methods e hook classes.
  • 34. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Bridge • Um ótimo efeito colateral nesse padrão é que classes que foram separadas podem ser utilizadas em outro contexto; • Bridge utiliza ao mesmo tempo herança e composição; • Bridge utiliza ao mesmo tempo hook methods e hook classes.
  • 35. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Observer • Utiliza composição com múltiplos objetos; • Mudanças em objetos são notificadas para outros objetos interessados.
  • 36. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Observer
  • 37. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Observer
  • 38. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br State • Utilizando composição, permite a variação de comportamento de acordo com o estado de uma entidade do sistema
  • 39. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br State • Aplicação do algoritmo state para busca em profundidade dos grafos
  • 40. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Refatorar substituindo condicionais por polimorfismo
  • 41. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Refatorar substituindo condicionais por polimorfismo • Antes e depois
  • 42. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Refatorar substituindo condicionais por polimorfismo • Antes e depois
  • 43. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Composição Recursiva • Criação de uma estrutura mais robusta colocando instâncias da superclasse ou interface nas subclasses;
  • 44. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Composite • Possui como objetivo prover uma solução para objetos que representam um conjunto de objetos, mas que compartilham a mesma abstração deles; • O padrão segue uma estrutura de árvore
  • 45. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Composite • Modelagem do Composite com trechos de vôo
  • 46. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Chains of Responsability • Passos que precisam ser executados em sequência, contudo com flexibilidade na configuração destes; • Reutilização destes passos em outros procedimentos • Este padrão cria uma cadeia de execução na qual cada elemento processa as informações e em seguida delega a execução ao próximo em sequência.
  • 47. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Chains of Responsability • Arquivo com uma lista de certificados digitais revogados, atualizando de forma periódica em um servidor remoto, contendo a data de validade; • Caches na memória e na base de dados
  • 48. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Referências • GUERRA, Eduardo. Design Patterns com Java. Casa do Código, 2014; • ANICHE, Maurício. Orientação a objetos e SOLID para Ninjas. Casa do Código, 2015; • “LARMAN, Craig – Utilizando UML e Padrões 3ª Edição. Bookman, 2007”.