SlideShare una empresa de Scribd logo
1 de 51
Descargar para leer sin conexión
Agenda
  Visão Geral
  Histórico
  Motivação
  Fundamentos de Projeto Orientado a Objetos
  Herança, Agregação, Interfaces, Polimorfismo,
Delegação, Encapsulamento, Funcionalidade.
  Classificações de padrões
  Idiomas
  Anti-padrões
Existem várias maneiras
para se construir uma aplicação
Nos dias de hoje...
  Construir software é complicado
  Lento e Caro
  Ainda não somos capazes de gerar software
sem erro
  Novas tecnologias e necessidades
  Aumentam a complexidade dos sistemas
  Diminuem o número de pessoas capacitadas
  Processo e metodologia nem sempre são
adequados ou não existem
Problemas
  Projetos cancelados
  Sistemas não funcionam como planejado
  Alto custo de desenvolvimento e manutenção
  Baixa qualidade e produtividade
  Os prazos muitas vezes são estourados
  É difícil reutilizar
  É difícil gerenciar a mudança
uma luz no fim do túnel
Fundamentos e Princípios OO
  Abstração
  Encapsulamento
  Polimorfismo
  Herança
Conhecer OO
!= ser bom com OO
  Conhecer os princípios de OO não significa
dizer que seremos bons na construção de
sistemas flexíveis, reutilizáveis e de fácil
manutenção
  Sistema OO
  Possuem propriedades nem sempre óbvias
Conhecer
  Requer
  Experiência
  Trocar experiência
  Para quê?
  Sistemas possuem problemas semelhantes e
recorrentes
=> Soluções semelhantes
Padrões de Projeto
Explicando
  Contexto
  Situação à qual um padrão é aplicável
  Recorrente
  Problema
  Objetivo que está se tentando atingir
  + Limitações que ocorram no contexto
  Solução
  O que se pretende obter
  Um design genérico que possa ser aplicado para qualquer
pessoa contornar as limitações a atingir um objetivo
Exemplo
  Problema:
  Como faço para não me atrasar para o
trabalho?
  Contexto:
  Tranquei as chaves dentro do carro
  Solução
  Quebre a janela, entre no carro, ligue o
motor e dirija para o trabalho
Ops...
  Padrão
  Deve ser aplicado a um problema recorrente
  Não é uma solução que possa ser aplicada
diversas vezes
  Custo
Breve histórico
  A idéia de armazenar informação sobre padrões
observados em um contexto pode ser atribuída ao
arquiteto Christopher Alexander e foi elaborada
no contexto de arquitetura.
  Nos anos 70, a arquitetura era considerada uma
disciplina que requeria muita experiência.
  O arquiteto Christopher Alexander e alguns colegas
criaram alguns livros com o objetivo de fazer com
que pessoas sem muita experiência em arquitetura
pudessem criar seus projetos.
Breve histórico
  Os livros identificavam
similaridades entre bons
projetos e seus princípios
comuns.
  Eles chamaram essas
soluções de patterns.
Breve histórico
  Em 1994, quatro autores – Erich
Gamma, Richard Helm, Ralph
Johnson e John Vlissides –
publicaram o primeiro catálogo de
Design Patterns para programas
orientado a objetos:
  “Design Patterns – Elements of
Reusable Object-Oriented Software”.
  Os quatro autores acima ficaram
conhecidos como GoF (Gang of
Four).
Características de um padrão
  Descrevem e justificam soluções para
problemas concretos e bem definidos
  Não são estratégias de implementação
  Devem ser comprovados, isto é, devem ter
sido previamente experimentados e testados
  Tratam problemas que ocorrem em
diferentes contextos
  Descrevem relações entre conceitos,
estruturas e mecanismos existentes nos
sistemas
Características
  Possuem pontos fortes e pontos fracos
  Capturam a evolução e aprimoramento das
soluções
  Podem ser utilizados em conjunto com outros
padrões, compondo linguagens de padrões,
frameworks ou arquiteturas
Benefícios
  Facilitam a reutilização de projetos e
arquiteturas
  Ajudam a documentar a arquitetura de
software
  Introduzem um vocabulário comum
  Propiciam compartilhamento de experiência
entre profissionais
  Permitem que os desenvolvedores concentrem
seus esforços nos aspectos inéditos do
problema
Benefícios
  Proporcionam uma solução comprovada
  Ajudam a minimizar os erros
  Reduz riscos
  Possibilitam a redução de prazos
Elementos essenciais
de um padrão
  Nome
  A identificação importante
  Vocabulário
  Problema
  Quando aplicar o padrão
  Classe de problemas em que pode ser aplicado e
seu contexto
Elementos essenciais
de um padrão
  Solução
  Elementos que fazem parte do design
  Relacionamento
  Responsabilidades
  Colaborações
  Conseqüências
  Resultados
  Efeitos
Catálogo
de Padrões
  Descreve
  Padrões :P
  Relacionamentos
  Sub-divisão em categorias
  Exibidos em um formato específico
  Design das classes
  Como implementar
  Exemplo
Nome – apresenta o padrão
de forma sucinta
Classificação – agrupa o
padrão de acordo com
algumas categorias
Intenção – O que o padrão
faz. A descrição.
Motivação – cenário
concreto, descrevendo o
problema e como ele foi
equacionado pela solução
Aplicabilidade – Situações
em que o padrão pode ser
utilizado
Estrutura – Fornece um
diagrama que ilustra a
relação entre as classes
participantes do padrão
Participantes – Classes e
objetos existentes no
design. Descreve
responsabilidades e papéis
que desempenham no
padrão.
Conseqüências – Efeitos –
positivos e negativos – que
o uso do padrão pode
gerar.
Colaborações – Informa
como os participantes
interagem no padrão
Exemplo – Trecho ou bloco
de código que podem ser
úteis na implementação
Relacionados –
Relacionamento deste com
outros
Usos conhecidos –
Exemplos do uso em
sistemas reais
Organizando Padrões
  Classificação em categorias para facilitar a
organização
  Classificações mais conhecidas:
  Finalidade
  Escopo
Organizando Padrões
finalidade
  Finalidade
  Refletem o que eles fazem
Singleton Prototype Builder
Factory-Method
Abstract Factory
Template Method Mediator
Visitor Iterator Memento
Command Strategy Interpreter
State Observer
Chain of Responsability
Composite Decorator
Proxy Facade Bridge Adapter
Flyweigth
Organizando Padrões
finalidade
Criação de instâncias de objetos
Desconectam o cliente
da criação de objetos
Preocupam-se com a forma
como as classes e objetos
interagem e com a distribuição
de responsabilidades
Permite que você organize classes
ou objetos em estruturas maiores
Organizando Padrões
escopo
  Escopo
  Se o padrão se aplica primariamente a classes ou
objetos
Descrevem se as relações
entre classes são definidas
através da herança.
Relações estabelecidas
em tempo de compilação.
Descrevem os relacionamentos
entre objetos e são definidos
primariamente por composição.
Relacionamentos criados em tempo
de execução.
Mais dinâmicos e
flexíveis.
Organizando Padrões
escopo
Factory-Method
Template-Method
Adapter
Interpreter
Template-Method Mediator
Command Observer
Visitor Iterator Memento
Chain of Responsability
Strategy Interpreter
State
Padrões Arquiteturais
  Estilo geral de um sistema
  Particionamento Físico
  Considerações sobre a Infra-estrutura
  Software
  Idéia fundamental do esquema da
organização do software
  Soluções eficientes e elegantes para
problemas comuns de projeto de software
Padrões Arquiteturais
  Mais conhecidos
  MVC (Model-View-Controller)
Padrões Arquiteturais
  Mais conhecidos
  Camadas
  Pipes e Filtros
  Broker
Mais um pouco...
  Anti-padrões
  Soluções PÉSSIMAS adotadas em projetos
  Documentação de más práticas
  Indicações de como NÃO solucionar problemas
  Diversas categorias
  :D  Pode ser uma solução atraente
  Explica porque é uma solução ruim a longo prazo
  Sugere outros padrões aplicáveis
Preparando
  Herança
  Interfaces
  Agregação
  Polifomorfismo
Certas classes possuem
propriedades comuns
Abstraio as características comuns
e as ponha numa nova classe Forma
Então eu ligo as outras 4 classes
à classe Forma, criando a herança
O que toda essa herança
faz por você???
  Você evita duplicar código
  Ponha o código comum em apenas em um lugar e
faça as subclasses herdarem aquele código da
superclasse. Quando você quiser mudar tal
comportamento, você tem que mudar apenas em
um lugar
  Você define um protocolo comum para
um grupo de classes
Estabelecendo
um Contrato
  A herança faz você garantir que todas as
classes agrupadas sobre certo supertipo,
tem todos os métodos que aquele
supertipo tem.*
  Você diz que qualquer animal
pode fazer estas 4 coisas
Usando “É UM”
e “TEM UM”
  Quando uma classe herda de outra, dizemos
que ela estende a superclasse
  Use o teste “É UM?” para saber se uma classe
deve estender de outra
  Triângulo É UMA Forma
  Gato É UM Felino
  Cirurgião É UM médico
O teste deve funcionar
na hierarquia toda
  Canino estende de Animal
  Lobo estende de Canino
  Lobo estende de Animal
  Canino É UM Animal
  Lobo É UM Canino
  Lobo É UM Animal
Usando “É UM”
e “TEM UM”
  Banheira estende de Banheiro?
  Aplique o teste “É UM”
  E o contrário?
  Banheiro TEM UMA Banheira
  Agregação
Polimorfismo
  Quando você define um supertipo para um
grupo de classes, qualquer subclasse daquele
supertipo pode substituí-la aonde o supertipo
é esperado
  Flexibilidade
  Código mais limpo
  Mais fácil de desenvolver estender
funcionamento
do POLIMORFISMO
  Os 3 passos para declaração e criação do objeto
Cachorro meuCachorro = new Cachorro();
IMPORTANTE:
funcionamento
do POLIMORFISMO
  Com polimorfismo a referência e o objeto
podem ser diferentes
Animal meuCachorro = new Cachorro();
funcionamento
do POLIMORFISMO
  Com polimorfismo, a referência do
objeto pode ser uma superclasse do tipo
do objeto atual
  TESTE É-UM
  Qualquer coisa que extends o tipo da variável de
referência declarada pode ser atribuída à variável
Polimorfismo
  Com Polimorfismo, você pode escrever
código que não precisa mudar quando
você introduz uma nova subclasse no
programa
Interfaces
  Interfaces
  Não é uma tela
  Os benefícios do polimorfismo
  Todos os métodos são abstratos
  Subclasses devem implementar todos os métodos
Padrões de Projeto OO
Padrões de Projeto OO

Más contenido relacionado

La actualidad más candente

Aula 01 - Fundamentos de Banco de Dados (2).pdf
Aula 01 - Fundamentos de Banco de Dados (2).pdfAula 01 - Fundamentos de Banco de Dados (2).pdf
Aula 01 - Fundamentos de Banco de Dados (2).pdfMarcelo Silva
 
Aula 12 - Gestão do Conhecimento
Aula 12 - Gestão do ConhecimentoAula 12 - Gestão do Conhecimento
Aula 12 - Gestão do ConhecimentoFilipo Mór
 
Aps lista de exercícios
Aps lista de exercíciosAps lista de exercícios
Aps lista de exercíciosGuilherme
 
Histórias de Usuário: Como escrever a história perfeita?
Histórias de Usuário: Como escrever a história perfeita?Histórias de Usuário: Como escrever a história perfeita?
Histórias de Usuário: Como escrever a história perfeita?Priscila Ribeiro Chagas
 
Design Thinking e Ferramentas de Inovação
Design Thinking e Ferramentas de InovaçãoDesign Thinking e Ferramentas de Inovação
Design Thinking e Ferramentas de InovaçãoMaristela Meireles
 
Desig thinking e confiança criativa
Desig thinking e confiança criativaDesig thinking e confiança criativa
Desig thinking e confiança criativaColaborativismo
 
Introducao a Arquitetura de Software
Introducao a Arquitetura de SoftwareIntroducao a Arquitetura de Software
Introducao a Arquitetura de SoftwareUFPA
 
Estrutura de Dados - Aula 01
Estrutura de Dados - Aula 01Estrutura de Dados - Aula 01
Estrutura de Dados - Aula 01thomasdacosta
 
1 requisitos funcionais e não funcionais ok
1  requisitos funcionais e não funcionais ok1  requisitos funcionais e não funcionais ok
1 requisitos funcionais e não funcionais okMarcos Morais de Sousa
 
Aula 1 requisitos
Aula 1   requisitosAula 1   requisitos
Aula 1 requisitoslicardino
 
Levantamento Ágil de Requisitos
Levantamento Ágil de RequisitosLevantamento Ágil de Requisitos
Levantamento Ágil de RequisitosPaulo Furtado
 
Algoritmos e Estrutura de Dados - Aula 01
Algoritmos e Estrutura de Dados - Aula 01Algoritmos e Estrutura de Dados - Aula 01
Algoritmos e Estrutura de Dados - Aula 01thomasdacosta
 
O Processo de Desenvolvimento de Software
O Processo de Desenvolvimento de SoftwareO Processo de Desenvolvimento de Software
O Processo de Desenvolvimento de SoftwareCamilo de Melo
 

La actualidad más candente (20)

Aula 01 - Fundamentos de Banco de Dados (2).pdf
Aula 01 - Fundamentos de Banco de Dados (2).pdfAula 01 - Fundamentos de Banco de Dados (2).pdf
Aula 01 - Fundamentos de Banco de Dados (2).pdf
 
Aula 12 - Gestão do Conhecimento
Aula 12 - Gestão do ConhecimentoAula 12 - Gestão do Conhecimento
Aula 12 - Gestão do Conhecimento
 
Aps lista de exercícios
Aps lista de exercíciosAps lista de exercícios
Aps lista de exercícios
 
Padrões de Projeto
Padrões de ProjetoPadrões de Projeto
Padrões de Projeto
 
Histórias de Usuário: Como escrever a história perfeita?
Histórias de Usuário: Como escrever a história perfeita?Histórias de Usuário: Como escrever a história perfeita?
Histórias de Usuário: Como escrever a história perfeita?
 
Design Thinking e Ferramentas de Inovação
Design Thinking e Ferramentas de InovaçãoDesign Thinking e Ferramentas de Inovação
Design Thinking e Ferramentas de Inovação
 
Exemplos de User Stories
Exemplos de User StoriesExemplos de User Stories
Exemplos de User Stories
 
Desig thinking e confiança criativa
Desig thinking e confiança criativaDesig thinking e confiança criativa
Desig thinking e confiança criativa
 
Introducao a Arquitetura de Software
Introducao a Arquitetura de SoftwareIntroducao a Arquitetura de Software
Introducao a Arquitetura de Software
 
Aula - Metodologias Ágeis
Aula - Metodologias ÁgeisAula - Metodologias Ágeis
Aula - Metodologias Ágeis
 
Estrutura de Dados - Aula 01
Estrutura de Dados - Aula 01Estrutura de Dados - Aula 01
Estrutura de Dados - Aula 01
 
6 estruturas de dados heterogêneas
6  estruturas de dados heterogêneas6  estruturas de dados heterogêneas
6 estruturas de dados heterogêneas
 
1 requisitos funcionais e não funcionais ok
1  requisitos funcionais e não funcionais ok1  requisitos funcionais e não funcionais ok
1 requisitos funcionais e não funcionais ok
 
Aula 1 requisitos
Aula 1   requisitosAula 1   requisitos
Aula 1 requisitos
 
Levantamento Ágil de Requisitos
Levantamento Ágil de RequisitosLevantamento Ágil de Requisitos
Levantamento Ágil de Requisitos
 
Algoritmos e Estrutura de Dados - Aula 01
Algoritmos e Estrutura de Dados - Aula 01Algoritmos e Estrutura de Dados - Aula 01
Algoritmos e Estrutura de Dados - Aula 01
 
Governança de TI - Aula01 Apresentação da disciplina
Governança de TI - Aula01 Apresentação da disciplinaGovernança de TI - Aula01 Apresentação da disciplina
Governança de TI - Aula01 Apresentação da disciplina
 
Diagramas de casos de uso - aula 2
Diagramas de casos de uso - aula 2Diagramas de casos de uso - aula 2
Diagramas de casos de uso - aula 2
 
Governança de TI - Aula02 - Conceitos em Governanca corporativa
Governança de TI - Aula02 - Conceitos em Governanca corporativaGovernança de TI - Aula02 - Conceitos em Governanca corporativa
Governança de TI - Aula02 - Conceitos em Governanca corporativa
 
O Processo de Desenvolvimento de Software
O Processo de Desenvolvimento de SoftwareO Processo de Desenvolvimento de Software
O Processo de Desenvolvimento de Software
 

Destacado

Abstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP DoctrineAbstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP DoctrineOtávio Calaça Xavier
 
Conhecendo Java
Conhecendo JavaConhecendo Java
Conhecendo JavaTI Infnet
 
Fundamentos de Java
Fundamentos de Java Fundamentos de Java
Fundamentos de Java jmosorio777
 
Web Semântica e bancos de dados NoSQL
Web Semântica e bancos de dados NoSQLWeb Semântica e bancos de dados NoSQL
Web Semântica e bancos de dados NoSQLOtávio Calaça Xavier
 
Fundamentos de java herbert schildt
Fundamentos de java   herbert schildtFundamentos de java   herbert schildt
Fundamentos de java herbert schildtRicardo Ramos
 
Introdução ao JPA com Hibernate
Introdução ao JPA com HibernateIntrodução ao JPA com Hibernate
Introdução ao JPA com HibernateDanilo Braga
 
Persistência com JPA usando o NetBeans 7
Persistência com JPA usando o NetBeans 7Persistência com JPA usando o NetBeans 7
Persistência com JPA usando o NetBeans 7Claudio Martins
 
The Power of Collaboration to Build Your Own Startup
The Power of Collaboration to Build Your Own StartupThe Power of Collaboration to Build Your Own Startup
The Power of Collaboration to Build Your Own StartupTaufan Erfiyanto
 
TDD - Prática com RSpec
TDD - Prática com RSpecTDD - Prática com RSpec
TDD - Prática com RSpecEduardo Mendes
 
Teste de Software - parte 1
Teste de Software - parte 1Teste de Software - parte 1
Teste de Software - parte 1Eduardo Mendes
 
Desenvolvimento web com PHP parte 3
Desenvolvimento web com PHP parte 3Desenvolvimento web com PHP parte 3
Desenvolvimento web com PHP parte 3Eduardo Mendes
 
Desenvolvimento Web com PHP parte 7
Desenvolvimento Web com PHP parte 7Desenvolvimento Web com PHP parte 7
Desenvolvimento Web com PHP parte 7Eduardo Mendes
 
Academia do Arquiteto Globalcode
Academia do Arquiteto GlobalcodeAcademia do Arquiteto Globalcode
Academia do Arquiteto GlobalcodeGlobalcode
 
Engenharia de Requisitos
Engenharia de RequisitosEngenharia de Requisitos
Engenharia de RequisitosEduardo Mendes
 

Destacado (20)

Padrões de Projeto - Design Patterns
Padrões de Projeto - Design PatternsPadrões de Projeto - Design Patterns
Padrões de Projeto - Design Patterns
 
GWT revista espirito
GWT revista espiritoGWT revista espirito
GWT revista espirito
 
Adote OpenJDK
Adote OpenJDKAdote OpenJDK
Adote OpenJDK
 
Abstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP DoctrineAbstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP Doctrine
 
Conhecendo Java
Conhecendo JavaConhecendo Java
Conhecendo Java
 
Fundamentos de Java
Fundamentos de Java Fundamentos de Java
Fundamentos de Java
 
Web Semântica e bancos de dados NoSQL
Web Semântica e bancos de dados NoSQLWeb Semântica e bancos de dados NoSQL
Web Semântica e bancos de dados NoSQL
 
Fundamentos de java herbert schildt
Fundamentos de java   herbert schildtFundamentos de java   herbert schildt
Fundamentos de java herbert schildt
 
Java - Aprenda rápido
Java - Aprenda rápidoJava - Aprenda rápido
Java - Aprenda rápido
 
Java para Leigos
Java para LeigosJava para Leigos
Java para Leigos
 
Introdução ao JPA com Hibernate
Introdução ao JPA com HibernateIntrodução ao JPA com Hibernate
Introdução ao JPA com Hibernate
 
Persistência com JPA usando o NetBeans 7
Persistência com JPA usando o NetBeans 7Persistência com JPA usando o NetBeans 7
Persistência com JPA usando o NetBeans 7
 
The Power of Collaboration to Build Your Own Startup
The Power of Collaboration to Build Your Own StartupThe Power of Collaboration to Build Your Own Startup
The Power of Collaboration to Build Your Own Startup
 
TDD - Prática com RSpec
TDD - Prática com RSpecTDD - Prática com RSpec
TDD - Prática com RSpec
 
Jquery
JqueryJquery
Jquery
 
Teste de Software - parte 1
Teste de Software - parte 1Teste de Software - parte 1
Teste de Software - parte 1
 
Desenvolvimento web com PHP parte 3
Desenvolvimento web com PHP parte 3Desenvolvimento web com PHP parte 3
Desenvolvimento web com PHP parte 3
 
Desenvolvimento Web com PHP parte 7
Desenvolvimento Web com PHP parte 7Desenvolvimento Web com PHP parte 7
Desenvolvimento Web com PHP parte 7
 
Academia do Arquiteto Globalcode
Academia do Arquiteto GlobalcodeAcademia do Arquiteto Globalcode
Academia do Arquiteto Globalcode
 
Engenharia de Requisitos
Engenharia de RequisitosEngenharia de Requisitos
Engenharia de Requisitos
 

Similar a Padrões de Projeto OO

pec-12-patterns-intro.ppt
pec-12-patterns-intro.pptpec-12-patterns-intro.ppt
pec-12-patterns-intro.pptssuser7025cf
 
Questionário sobre padrões de projeto revisão da tentativa
Questionário sobre padrões de projeto  revisão da tentativaQuestionário sobre padrões de projeto  revisão da tentativa
Questionário sobre padrões de projeto revisão da tentativaAluisioSantos4
 
Test-Driven Development - Introdução ao método de construção de software guia...
Test-Driven Development - Introdução ao método de construção de software guia...Test-Driven Development - Introdução ao método de construção de software guia...
Test-Driven Development - Introdução ao método de construção de software guia...Thiago Faria de Andrade
 
Introdução a Desenvolvimento Orientado a Testes ( TDD )
Introdução a Desenvolvimento Orientado a Testes ( TDD )Introdução a Desenvolvimento Orientado a Testes ( TDD )
Introdução a Desenvolvimento Orientado a Testes ( TDD )Iure Guimaraes
 
Padrões De Projeto e Anti Patterns
Padrões De Projeto e Anti PatternsPadrões De Projeto e Anti Patterns
Padrões De Projeto e Anti PatternsHerval Freire
 
Metodologias ageis
Metodologias ageisMetodologias ageis
Metodologias ageisrenersson
 
APSI 2 aulas - padroes arquiteturais - camadas PROF.TARCIANE
APSI 2   aulas  - padroes arquiteturais - camadas PROF.TARCIANEAPSI 2   aulas  - padroes arquiteturais - camadas PROF.TARCIANE
APSI 2 aulas - padroes arquiteturais - camadas PROF.TARCIANEFco Edilson Nascimento
 
Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?Maurício Aniche
 
design patterns - introdução
design patterns - introduçãodesign patterns - introdução
design patterns - introduçãoelliando dias
 
Test driven development
Test driven developmentTest driven development
Test driven developmentclauvane1708
 

Similar a Padrões de Projeto OO (20)

Aula4 TEES UFS: Orientação a Objetos
Aula4 TEES UFS: Orientação a ObjetosAula4 TEES UFS: Orientação a Objetos
Aula4 TEES UFS: Orientação a Objetos
 
Padrões de design orientado a objetos
Padrões de design orientado a objetosPadrões de design orientado a objetos
Padrões de design orientado a objetos
 
Padrões de Projeto (GoF)
Padrões de Projeto (GoF)Padrões de Projeto (GoF)
Padrões de Projeto (GoF)
 
pec-12-patterns-intro.ppt
pec-12-patterns-intro.pptpec-12-patterns-intro.ppt
pec-12-patterns-intro.ppt
 
Questionário sobre padrões de projeto revisão da tentativa
Questionário sobre padrões de projeto  revisão da tentativaQuestionário sobre padrões de projeto  revisão da tentativa
Questionário sobre padrões de projeto revisão da tentativa
 
Test-Driven Development - Introdução ao método de construção de software guia...
Test-Driven Development - Introdução ao método de construção de software guia...Test-Driven Development - Introdução ao método de construção de software guia...
Test-Driven Development - Introdução ao método de construção de software guia...
 
Introdução a Desenvolvimento Orientado a Testes ( TDD )
Introdução a Desenvolvimento Orientado a Testes ( TDD )Introdução a Desenvolvimento Orientado a Testes ( TDD )
Introdução a Desenvolvimento Orientado a Testes ( TDD )
 
Sld 4
Sld 4Sld 4
Sld 4
 
Padrões De Projeto e Anti Patterns
Padrões De Projeto e Anti PatternsPadrões De Projeto e Anti Patterns
Padrões De Projeto e Anti Patterns
 
Análise de sistemas oo 1
Análise de sistemas oo   1Análise de sistemas oo   1
Análise de sistemas oo 1
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
Metodologias ageis
Metodologias ageisMetodologias ageis
Metodologias ageis
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
APSI 2 aulas - padroes arquiteturais - camadas PROF.TARCIANE
APSI 2   aulas  - padroes arquiteturais - camadas PROF.TARCIANEAPSI 2   aulas  - padroes arquiteturais - camadas PROF.TARCIANE
APSI 2 aulas - padroes arquiteturais - camadas PROF.TARCIANE
 
[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
 
Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?
 
Diagrama de classes
Diagrama de classesDiagrama de classes
Diagrama de classes
 
design patterns - introdução
design patterns - introduçãodesign patterns - introdução
design patterns - introdução
 
Boas praticas de_programacao_oo
Boas praticas de_programacao_ooBoas praticas de_programacao_oo
Boas praticas de_programacao_oo
 
Test driven development
Test driven developmentTest driven development
Test driven development
 

Más de Eduardo Mendes

JavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosJavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosEduardo Mendes
 
Angular JS - Fundamentos
Angular JS - FundamentosAngular JS - Fundamentos
Angular JS - FundamentosEduardo Mendes
 
Singleton - Padrão de Projeto
Singleton - Padrão de ProjetoSingleton - Padrão de Projeto
Singleton - Padrão de ProjetoEduardo Mendes
 
Introdução à Internet, Http e HTML
Introdução à Internet, Http e HTMLIntrodução à Internet, Http e HTML
Introdução à Internet, Http e HTMLEduardo Mendes
 
Estimativas de Esforço - Engenharia de Software
Estimativas de Esforço - Engenharia de SoftwareEstimativas de Esforço - Engenharia de Software
Estimativas de Esforço - Engenharia de SoftwareEduardo Mendes
 
Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2Eduardo Mendes
 
Validações no Ruby on Rails
Validações no Ruby on Rails Validações no Ruby on Rails
Validações no Ruby on Rails Eduardo Mendes
 
Padroes Template-Method (Método Gabarito)
Padroes Template-Method (Método Gabarito)Padroes Template-Method (Método Gabarito)
Padroes Template-Method (Método Gabarito)Eduardo Mendes
 

Más de Eduardo Mendes (20)

JavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosJavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a Objetos
 
AngularJS - Rotas
AngularJS - RotasAngularJS - Rotas
AngularJS - Rotas
 
Angular JS - Fundamentos
Angular JS - FundamentosAngular JS - Fundamentos
Angular JS - Fundamentos
 
Singleton - Padrão de Projeto
Singleton - Padrão de ProjetoSingleton - Padrão de Projeto
Singleton - Padrão de Projeto
 
Layout Fluido
Layout FluidoLayout Fluido
Layout Fluido
 
Web Design Responsivo
Web Design ResponsivoWeb Design Responsivo
Web Design Responsivo
 
Html - Aula 4
Html - Aula 4Html - Aula 4
Html - Aula 4
 
Html - Aula 3
Html - Aula 3Html - Aula 3
Html - Aula 3
 
Introdução à Internet, Http e HTML
Introdução à Internet, Http e HTMLIntrodução à Internet, Http e HTML
Introdução à Internet, Http e HTML
 
ExtJS-4
ExtJS-4ExtJS-4
ExtJS-4
 
Jquery 2
Jquery 2Jquery 2
Jquery 2
 
Estimativas de Esforço - Engenharia de Software
Estimativas de Esforço - Engenharia de SoftwareEstimativas de Esforço - Engenharia de Software
Estimativas de Esforço - Engenharia de Software
 
Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2
 
Validações no Ruby on Rails
Validações no Ruby on Rails Validações no Ruby on Rails
Validações no Ruby on Rails
 
Padrão Iterator
Padrão IteratorPadrão Iterator
Padrão Iterator
 
Padroes Template-Method (Método Gabarito)
Padroes Template-Method (Método Gabarito)Padroes Template-Method (Método Gabarito)
Padroes Template-Method (Método Gabarito)
 
Padrão Command
Padrão CommandPadrão Command
Padrão Command
 
Padrão Fachada
Padrão FachadaPadrão Fachada
Padrão Fachada
 
Padrão Adapter
Padrão AdapterPadrão Adapter
Padrão Adapter
 
Web Design Responsivo
Web Design ResponsivoWeb Design Responsivo
Web Design Responsivo
 

Padrões de Projeto OO

  • 1.
  • 2. Agenda   Visão Geral   Histórico   Motivação   Fundamentos de Projeto Orientado a Objetos   Herança, Agregação, Interfaces, Polimorfismo, Delegação, Encapsulamento, Funcionalidade.   Classificações de padrões   Idiomas   Anti-padrões
  • 3. Existem várias maneiras para se construir uma aplicação
  • 4. Nos dias de hoje...   Construir software é complicado   Lento e Caro   Ainda não somos capazes de gerar software sem erro   Novas tecnologias e necessidades   Aumentam a complexidade dos sistemas   Diminuem o número de pessoas capacitadas   Processo e metodologia nem sempre são adequados ou não existem
  • 5. Problemas   Projetos cancelados   Sistemas não funcionam como planejado   Alto custo de desenvolvimento e manutenção   Baixa qualidade e produtividade   Os prazos muitas vezes são estourados   É difícil reutilizar   É difícil gerenciar a mudança
  • 6. uma luz no fim do túnel
  • 7. Fundamentos e Princípios OO   Abstração   Encapsulamento   Polimorfismo   Herança
  • 8. Conhecer OO != ser bom com OO   Conhecer os princípios de OO não significa dizer que seremos bons na construção de sistemas flexíveis, reutilizáveis e de fácil manutenção   Sistema OO   Possuem propriedades nem sempre óbvias
  • 9. Conhecer   Requer   Experiência   Trocar experiência   Para quê?   Sistemas possuem problemas semelhantes e recorrentes => Soluções semelhantes
  • 11. Explicando   Contexto   Situação à qual um padrão é aplicável   Recorrente   Problema   Objetivo que está se tentando atingir   + Limitações que ocorram no contexto   Solução   O que se pretende obter   Um design genérico que possa ser aplicado para qualquer pessoa contornar as limitações a atingir um objetivo
  • 12. Exemplo   Problema:   Como faço para não me atrasar para o trabalho?   Contexto:   Tranquei as chaves dentro do carro   Solução   Quebre a janela, entre no carro, ligue o motor e dirija para o trabalho
  • 13. Ops...   Padrão   Deve ser aplicado a um problema recorrente   Não é uma solução que possa ser aplicada diversas vezes   Custo
  • 14. Breve histórico   A idéia de armazenar informação sobre padrões observados em um contexto pode ser atribuída ao arquiteto Christopher Alexander e foi elaborada no contexto de arquitetura.   Nos anos 70, a arquitetura era considerada uma disciplina que requeria muita experiência.   O arquiteto Christopher Alexander e alguns colegas criaram alguns livros com o objetivo de fazer com que pessoas sem muita experiência em arquitetura pudessem criar seus projetos.
  • 15. Breve histórico   Os livros identificavam similaridades entre bons projetos e seus princípios comuns.   Eles chamaram essas soluções de patterns.
  • 16. Breve histórico   Em 1994, quatro autores – Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides – publicaram o primeiro catálogo de Design Patterns para programas orientado a objetos:   “Design Patterns – Elements of Reusable Object-Oriented Software”.   Os quatro autores acima ficaram conhecidos como GoF (Gang of Four).
  • 17. Características de um padrão   Descrevem e justificam soluções para problemas concretos e bem definidos   Não são estratégias de implementação   Devem ser comprovados, isto é, devem ter sido previamente experimentados e testados   Tratam problemas que ocorrem em diferentes contextos   Descrevem relações entre conceitos, estruturas e mecanismos existentes nos sistemas
  • 18. Características   Possuem pontos fortes e pontos fracos   Capturam a evolução e aprimoramento das soluções   Podem ser utilizados em conjunto com outros padrões, compondo linguagens de padrões, frameworks ou arquiteturas
  • 19. Benefícios   Facilitam a reutilização de projetos e arquiteturas   Ajudam a documentar a arquitetura de software   Introduzem um vocabulário comum   Propiciam compartilhamento de experiência entre profissionais   Permitem que os desenvolvedores concentrem seus esforços nos aspectos inéditos do problema
  • 20. Benefícios   Proporcionam uma solução comprovada   Ajudam a minimizar os erros   Reduz riscos   Possibilitam a redução de prazos
  • 21. Elementos essenciais de um padrão   Nome   A identificação importante   Vocabulário   Problema   Quando aplicar o padrão   Classe de problemas em que pode ser aplicado e seu contexto
  • 22. Elementos essenciais de um padrão   Solução   Elementos que fazem parte do design   Relacionamento   Responsabilidades   Colaborações   Conseqüências   Resultados   Efeitos
  • 23. Catálogo de Padrões   Descreve   Padrões :P   Relacionamentos   Sub-divisão em categorias   Exibidos em um formato específico   Design das classes   Como implementar   Exemplo
  • 24. Nome – apresenta o padrão de forma sucinta Classificação – agrupa o padrão de acordo com algumas categorias Intenção – O que o padrão faz. A descrição. Motivação – cenário concreto, descrevendo o problema e como ele foi equacionado pela solução Aplicabilidade – Situações em que o padrão pode ser utilizado Estrutura – Fornece um diagrama que ilustra a relação entre as classes participantes do padrão Participantes – Classes e objetos existentes no design. Descreve responsabilidades e papéis que desempenham no padrão. Conseqüências – Efeitos – positivos e negativos – que o uso do padrão pode gerar. Colaborações – Informa como os participantes interagem no padrão Exemplo – Trecho ou bloco de código que podem ser úteis na implementação Relacionados – Relacionamento deste com outros Usos conhecidos – Exemplos do uso em sistemas reais
  • 25. Organizando Padrões   Classificação em categorias para facilitar a organização   Classificações mais conhecidas:   Finalidade   Escopo
  • 26. Organizando Padrões finalidade   Finalidade   Refletem o que eles fazem Singleton Prototype Builder Factory-Method Abstract Factory Template Method Mediator Visitor Iterator Memento Command Strategy Interpreter State Observer Chain of Responsability Composite Decorator Proxy Facade Bridge Adapter Flyweigth
  • 27. Organizando Padrões finalidade Criação de instâncias de objetos Desconectam o cliente da criação de objetos Preocupam-se com a forma como as classes e objetos interagem e com a distribuição de responsabilidades Permite que você organize classes ou objetos em estruturas maiores
  • 28. Organizando Padrões escopo   Escopo   Se o padrão se aplica primariamente a classes ou objetos Descrevem se as relações entre classes são definidas através da herança. Relações estabelecidas em tempo de compilação. Descrevem os relacionamentos entre objetos e são definidos primariamente por composição. Relacionamentos criados em tempo de execução. Mais dinâmicos e flexíveis.
  • 29. Organizando Padrões escopo Factory-Method Template-Method Adapter Interpreter Template-Method Mediator Command Observer Visitor Iterator Memento Chain of Responsability Strategy Interpreter State
  • 30. Padrões Arquiteturais   Estilo geral de um sistema   Particionamento Físico   Considerações sobre a Infra-estrutura   Software   Idéia fundamental do esquema da organização do software   Soluções eficientes e elegantes para problemas comuns de projeto de software
  • 31. Padrões Arquiteturais   Mais conhecidos   MVC (Model-View-Controller)
  • 32. Padrões Arquiteturais   Mais conhecidos   Camadas   Pipes e Filtros   Broker
  • 33. Mais um pouco...   Anti-padrões   Soluções PÉSSIMAS adotadas em projetos   Documentação de más práticas   Indicações de como NÃO solucionar problemas   Diversas categorias   :D  Pode ser uma solução atraente   Explica porque é uma solução ruim a longo prazo   Sugere outros padrões aplicáveis
  • 34. Preparando   Herança   Interfaces   Agregação   Polifomorfismo
  • 36. Abstraio as características comuns e as ponha numa nova classe Forma
  • 37. Então eu ligo as outras 4 classes à classe Forma, criando a herança
  • 38. O que toda essa herança faz por você???   Você evita duplicar código   Ponha o código comum em apenas em um lugar e faça as subclasses herdarem aquele código da superclasse. Quando você quiser mudar tal comportamento, você tem que mudar apenas em um lugar   Você define um protocolo comum para um grupo de classes
  • 39.
  • 40. Estabelecendo um Contrato   A herança faz você garantir que todas as classes agrupadas sobre certo supertipo, tem todos os métodos que aquele supertipo tem.*   Você diz que qualquer animal pode fazer estas 4 coisas
  • 41. Usando “É UM” e “TEM UM”   Quando uma classe herda de outra, dizemos que ela estende a superclasse   Use o teste “É UM?” para saber se uma classe deve estender de outra   Triângulo É UMA Forma   Gato É UM Felino   Cirurgião É UM médico
  • 42. O teste deve funcionar na hierarquia toda   Canino estende de Animal   Lobo estende de Canino   Lobo estende de Animal   Canino É UM Animal   Lobo É UM Canino   Lobo É UM Animal
  • 43. Usando “É UM” e “TEM UM”   Banheira estende de Banheiro?   Aplique o teste “É UM”   E o contrário?   Banheiro TEM UMA Banheira   Agregação
  • 44. Polimorfismo   Quando você define um supertipo para um grupo de classes, qualquer subclasse daquele supertipo pode substituí-la aonde o supertipo é esperado   Flexibilidade   Código mais limpo   Mais fácil de desenvolver estender
  • 45. funcionamento do POLIMORFISMO   Os 3 passos para declaração e criação do objeto Cachorro meuCachorro = new Cachorro(); IMPORTANTE:
  • 46. funcionamento do POLIMORFISMO   Com polimorfismo a referência e o objeto podem ser diferentes Animal meuCachorro = new Cachorro();
  • 47. funcionamento do POLIMORFISMO   Com polimorfismo, a referência do objeto pode ser uma superclasse do tipo do objeto atual   TESTE É-UM   Qualquer coisa que extends o tipo da variável de referência declarada pode ser atribuída à variável
  • 48. Polimorfismo   Com Polimorfismo, você pode escrever código que não precisa mudar quando você introduz uma nova subclasse no programa
  • 49. Interfaces   Interfaces   Não é uma tela   Os benefícios do polimorfismo   Todos os métodos são abstratos   Subclasses devem implementar todos os métodos