SlideShare uma empresa Scribd logo
1 de 58
Introdução a Design Pattern Ricardo Alexandre Schulze rick.ale.sc@hotmail.com
Agenda História Conceito Padrões de Criação Padrões Estruturais Padrões Comportamentais Conclusão Referências
História Conceito criado na década de 70 por Christopher Alexander. Em 1987, Kent Beck e Ward Cunningham, na época programadores, propuseram os primeiros padrões de projetos, para construção de janelas em linguagem Smalltalk. Em 1995 o conceito de padrão de projeto ganhou popularidade com o lançamento do livro Design Patterns: ElementsofReusableObject-Oriented Software. Escrito pelo grupo conhecido com GoF. GoF (Gang Of Four), Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, estes criarão os padrões GoF, composto por 23 padrões divididos em 3 grupos: Padrões de Criação(5), Padrões Estruturais(7), Padrões Comportamentais(11).
História Devido a esse ganho de popularidade, surgiram outros livros como o, Applying UML andPatterns: AnIntroductiontoObject-OrientedAnalysisand Design andIterativeDevelopment. Esse segundo livro deu origem aos Padrões GRASP (General ResponsibilityAssignment Software Patterns), que é composto de 7 padrões.   Em 2009 mais  de 30 Colaboradores participaram na criação do livro de Thomas Erl – SOA Design patterns . O objetivo desse livro era o de fazer um catálogo dos design patterns para SOA (Service OrientedArchitecture). Mais  de 200 profissionais de TI ao redor do mundo participaram da revisão do livro de Thomas Erl. Esses Design Patterns estão publicados e discutidos no site    http://www.soapatterns.org/
Conceito “Um Pattern descreve uma solução comprovada para um problema de desenho recorrente, dando ênfase particular no contexto e forçando a aproximação do problema, consequências e o impacto de sua solução.” GlaucioSheibel. Idealmente, um pattern deve ter as seguintes Características: Encapsulamento: um padrão encapsula um problema/solução bem definido, independente, específico e bem formulado. Generalidade: deve permitir a construção de outras realizações a partir dele. Equilíbrio: dá a razão, relacionada com cada restrição, de cada passo do projeto, com análise de abstração de dados empíricos. Abstração: representam a abstração do cotidiano ou da experiência empírica. Abertura: deve permitir sua expansão para níveis mais baixo de detalhes. Combinatoriedade: relacionamento hierárquico, padrões de alto nível, podem ser compostos, ou ser relacionados com padrões de níveis mais baixos.
Conceito Além das características, um design pattern deve ter um formato descrito em 5 partes: Nome: Descrição da solução, mais do que do problema e do contexto. Exemplos: figuras, diagramas ou descrições que ilustrem um protótipo. Contexto: descrições nas quais o padrão se aplica. Problema: descrição das forças e restrições e suas interações. Solução: relacionamentos estáticos e regras dinâmicas, descrevendo como construir uma solução usando o padrão, podendo citar, suas variações e ajustes.
Padrões de Criação Ao todo são 5 padrões de criação são eles: Abstract Factory. FactoryMethod. Singleton. Builder. Prototype. Padrões de criação as vezes competem entre si. Existem situações onde podem ser usados Abstract Facthory ou Prototype por exemplo. Padrões de criação também podem complementar um ao outro. Exemplo, uma Abstract Factory pode armazenar um set de Prototype.
Abstract Factory Definição  É um padrão que permite a criação de famílias de objetos relacionados ou dependentes, através de uma única interface, sem que a classe concreta seja especificada. UTILIZAÇÃO Padrão utilizado, quando a criação de um objeto pai depende da criação de seus objetos filhos. Exemplo, para um carro existir, é preciso que existam motor, rodas, portas, etc… e o contrário também se aplica, um motor precisa de um carro. Este é apenas um dos exemplos. Outro exemplo de usabilidade deste padrão é na criação de uma Toolkit que disponibilize controles para diferentes interfaces gráficas.
Abstract Factory
FactoryMethod Definição  Define uma interface para criar um objeto, mas é a subclasse quem decide qual objeto será instanciado. O factorymethod permite adiar a instanciação para as subclasses. Utilização Imagine por exemplo, uma fábrica de brinquedos, esta fábrica possui vários moldes (carro,cavalo,figurinhas).  Uma pessoa é responsável por fazer a mistura do plástico, e injeta-la na máquina, a máquina por sua vez injetara o plástico, porém o que definira qual brinquedo será produzido, é o Molde.
FactoryMethod
Singleton Definição  Este padrão garante a existência de apenas uma instância de uma classe, mantendo um ponto global de acesso ao seu objeto. Utilização Bem como a definição explica, ele garante que o objeto será único, exemplos, o Presidente da República é único, assim como o presidente de uma determinada empresa. O padrão singleton, não serve apenas para isso, ele pode complementar outros padrões, um exemplo seria o Factory, no exemplo do carro, poderíamos definir por exemplo, que o motor do carro seria único.
Singleton
Builder Definição  Separa a construção de um objeto complexo de sua representação. Utilização Um bom exemplo seria uma rede de fastfood, onde um cliente pode pedir um item principal ,exemplo os combos. Os combos são constituídos de um item principal (o lanche), um item secundário (o acompanhamento), um item terciário (a bebida), e um quarto item que pode variar (o brinquedo). Portanto, quando o cliente pede esse combo ao caixa, o caixa demanda a construção do combo(item por item) e ao final o cliente recebe o Combo (e não o lanche, o acompanhamento, a bebida).
Builder
Prototype Definição Específica o tipo de objeto a ser criado através de uma instância de objeto protótipo. Utilização Em sistemas que usam Abstract Factory, que as vezes podem ser complexas, e o Prototype pode facilitar em algumas situações. Em sistemas que utilizam classes definidas em tempo de execução. Podemos citar o exemplo de uma divisão celular, onde a partir de uma célula, vão ser criadas duas células , ou seja, ela faz um clone dela mesma.
Prototype
Padrões Estruturais Ao todo são 7 padrões estruturais, são eles: Adapter. Bridge. Composites. Proxy. Façade. Flyweight. Decorator. Consiste Basicamente de classes que utilizam Herança para compor interfaces. Define formas de compor objetos para que possamos obter novas funcionalidades.
Adapter Definição Como o nome já diz, o adapter, adapta a interface de uma classe, para que ela possa interagir com outras. Utilização Como sua definição explica, ele ‘adapta’ uma interface a outra, por intermédio de uma nova interface, que fara a adaptação, um exemplo é esta figura acima, que explícita bem, a função de um adapter.
Adapter
Bridge Definição Padrão que faz a interface variar independentemente das suas implementações. Utilização Um exemplo de utilização de um padrão bridge é o quadro de luz de uma casa, que possui, por exemplo, interruptores para diferentes tipos de objetos (Lâmpada, Ventilador, etc). A intenção do switch é de apenas ligar e desligar os objetos, sendo que esse switch pode ser implementado de diferentes maneiras.
Bridge
Composites Definição Possibilita enxergar um conjunto (composição) de objetos como se fosse um só. Representa estrutura de objetos agrupados hierarquicamente. Utilização Compõe objetos em três estruturas e permite que o cliente trate objetos individuais, e a composição uniforme. Um exemplo, de utilização é uma expressão aritmética, 2 + 3  e (2 + 3) + (4 * 6), ambas são validas.
Composites
Proxy Definição De forma geral funciona de interface para outra classe. Um proxy pode conectar-se a diferentes tipos de objetos. Utilização Um exemplo bem simples da utilização de proxy, é uma movimentação bancária, por exemplo, um cliente de banco utiliza um cheque para pagar uma conta, ao invés de pagar em dinheiro, por fim, controla o acesso ao dinheiro da conta do cliente.
Proxy
Flyweight Definição Similar a um pool. Define como compartilhar objetos para que os mesmos possam ser usados em vários locais ao mesmo tempo, sendo assim, o padrão flyweight atua de forma independente em cada local. Utilização Apropriado quando vários objetos devem ser manipulados, e esses não suportam dados adicionais. Não existem ponteiros para os métodos do dado, diminuindo o consumo de memória. Em contrapartida são chamadas sub-rotinas diretamente para acessar o dado. Um exemplo de Flyweight é a rede telefônica, onde vários usuários estão conectados, porém quando alguém pega o telefone para discar, a ele não importa quantas pessoas estão conectadas, e sim, o fato de que ele precisar receber um tom de ligação, que ele precisa enviar os dígitos, e  completar a ligação.
Flyweight
Façade Definição É um objeto que disponibiliza uma interface para uma grande quantidade de funcionalidades de uma API. Utilização O padrão façade define uma interface indefinida de alto nível, para um subsistema mais fácil de se interagir. Um exemplo é o de um comprador que liga para um número e fala com uma representante de comprador, esse representante age como um façade, providenciando uma interface para o setor de pagamento e para o setor de envio.
Facade
Decorator Definição Anexa responsabilidades adicionais a um objeto dinamicamente. Alternativa flexível as subclasses extendendo sua funcionalidade. Amplia as funcionalidades através da composição. Utilização Imagine que você tem uma árvore. Ai começam a pendurar itens nessa árvore, como bolas, luzes, e outras coisas, a árvore ainda esta lá inalterada. Porém ela agora é conhecida como árvore de natal, e tem um método adicional, proporcionado pela luz, dentre outros atributos.
Decorator
Padrões Comportamentais Ao todo são 11 padrões comportamentais Chain ofResponsibility. Command. Interpreter. Iterator. Mediator. Memento. Observer. State. Strategy. TemplateMethod. Visitor.
Chain ofResponsability Definição Representa o encadeamento de objetos receptores para o processamento de uma sério de solicitações diferentes. Esses receptores passam a solicitação ao longo da cadeia até que um ou vários objetos a tratem. Utilização Imagine um sistema de coleta de moedas de um banco, esse sistema funciona como uma cadeia, ou seja, ao invés de ter vários slots de moeda atrelados a um identificador, o padrão Chain utiliza apenas um slot, quando a moeda é jogada no sistema, mecanismos a identificam e encaminham para o receptor apropriado.
Chain ofResponsability
Command Definição Encapsula uma solicitação como um objeto. Desta forma permite que clientes realizem diferentes solicitações. Enfileira ou faz o registro de solicitações e suporta operações que podem ser desfeitas. Utilização Um exemplo bem simples da utilização do Command, é quando você vai ao restaurante,  ai o garçom pega seu pedido (command) e o encapsula num papel, ai ele coloca esse papel numa fila de espera. Você pode fazer novos pedidos (command) a qualquer momento.
Command
Interpreter Definição Um padrão interpreter define a linguagem, assim como representações para gramáticas e abstrações para análises sintáticas. Utilização Os músicos são um exemplo de interpreter, o tempo e a note de uma música podem ser anotados em uma linguagem de notas, e posteriormente em linguagem de música como mostra o exemplo a  a seguir.
Interpreter
Iterator Definição permite a iteração, e um modo de acesso a elementos de um agregado de objetos, sequencialmente, sem exposição de estruturas internas. Utilização Um Exemplo simples de iterator, é uma televisão, onde o usuário, passa pelos canais, sendo que para este usuário o número do canal não é importante e sim sua programação, logo, o usuário interage com o controle, que por sua vez interage com a televisão, dessa forma comprovando o agregado  de objetos sequenciais.
Iterator
Mediator Definição É um padrão que desacopla e gerencia as colaborações entre um grupo de objetos. Define um objeto que encapsula as interações entre esse grupo. Utilização Esse padrão encaixa perfeitamente em um aeroporto, como um controlador de voo, por exemplo, ao invés dos aviões conversarem entre si um a um, eles intermediam essa ’conversa’ com uma torre de controle, ou seja, todos os aviões conversam com a torre de controle, e os aviões não conversam entre si.
Mediator
Memento Definição armazenar o estado interno de um objeto em um determinado momento, para que seja possível retorná-lo a este estado, caso necessário. Utilização Serve para você manter o estado de um objeto, como um parâmetro. Exemplo você pretende trocar os freios de seu carro em casa, remove o pneu dos dois lados, ai você mantém um dos freios intactos, a fim de, usar como parâmetro na remontagem do freio.
Memento
Observer Definição Relação um para todos, dessa forma quando este um altera seu status, todos atualizam automaticamente. Utilização Exemplos de leilão, onde você tem um auditor que define um preço e os compradores, que levantam as placas para confirmar sua oferta, dessa forma, o auditor aumenta o valor das ofertas, então novamente os compradores reagem a mais está ação.
Observer
State Definição É usado para permitir que um objeto altere seu comportamento quando um estado muda. Usa o objeto como um estado. Utilização A utilização deste padrão aparece em máquinas de venda  (amendoins, refrigerantes etc..) essas maquinas tem estados baseados no que elas tem a disposição e na quantidade de dinheiro colocado. Quando o dinheiro é depositado, uma seleção é feita,  a máquina por sua vez, ira atuar de duas formas, entregar o produto sem troco, ou entregar o produto com troco, ou não entregar o produto (dinheiro depositado insuficiente), ou não entregar o produto e devolver o dinheiro  (devido a falta do produto).
State
Strategy Definição Definir uma família de algoritmos e encapsula cada algoritmo como uma classe, permitindo assim que elas possam ser trocados entre si. Este padrão permite que o algoritmo possa variar independentemente dos clientes que o utilizam. Utilização Pattern bem representado por meios de se chegar a um aeroporto, o viajante poderá escolher entre diversas opções, como ir com seu próprio carro, ônibus, limusine, entre diversos tipos de locomoção, todos eles vão levar o viajante para o aeroporto, e eles podem ser usados alternadamente.
Strategy
TemplateMethod Definição Define o esqueleto de um algoritmo numa operação, passando alguns passos para as subclasses. A classe base declara o placeholder e as subclasses preenchem esses placeholders. Permite que  a subclasse mude certos passos sem mudar a estrutura do algoritmo. Utilização A seguir esta sendo usado um exemplo de planta de casa, onde várias outras casas herdam de um template de casa, elas podem adicionar outras coisas, mudar a cor etc, porém sem alterar o template original da casa, removendo ou alterando algo.
TemplateMethod
Visitor Definição Realiza uma operação sobre elementos da estrutura de um objeto. Permite que se crie uma nova operação sem alterar a classe dos elementos sobre os quais ela atua habilidade de adicionar novas funcionalidades a estruturas de um objeto pré-existente sem a necessidade de modificá-las. Utilização Aplica-se para problemas semelhantes ao de uma empresa de taxi, quando um cliente liga para a empresa de taxi solicitando o taxi, o cliente esta aceitando um visitor, quando o cliente entra no taxi, ele não esta mais em controle de sua movimentação e sim o Visitor.
Visitor
Conclusão Espero que esta abordagem, sobre design patterns tenha sido útil, de fácil compreensão, já que o intuito para este momento não era o de aprofundar-se sobre cada Design pattern. Creio que os objetivos deste material, foram satisfatórios, abrindo um leque de opções a serem estudas de maneira mais específica. Em breve estarei pesquisando mais sobre cada design, me aprofundando mais em suas Utilizações. Fazendo uma apresentação mais específica sobre cada um deles.
Referências http://www.slideshare.net/gscheibel/design-patterns http://pt.wikipedia.org/wiki/Bridge_(padr%C3%A3o_de_projeto_de_software) http://www.vincehuston.org/dp/bridge.html

Mais conteúdo relacionado

Mais procurados

Apresentação programação orientada à objetos
Apresentação   programação orientada à objetosApresentação   programação orientada à objetos
Apresentação programação orientada à objetossoncino
 
Introdução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoIntrodução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoMarconi Rodrigues
 
Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a ObjetosOrlando Junior
 
Conceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vba
Conceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vbaConceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vba
Conceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vbaWanderlei Silva do Carmo
 
Curso : Introdução Orientação a Objetos
Curso : Introdução Orientação a ObjetosCurso : Introdução Orientação a Objetos
Curso : Introdução Orientação a Objetosdanielrpgj30
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetosCleyton Ferrari
 
Java programação orientada a objetos
Java   programação orientada a objetosJava   programação orientada a objetos
Java programação orientada a objetosPaulo Carvalho
 
Conceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetosConceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetosLeonardo Melo Santos
 
Java - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosJava - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosMoises Omena
 
Apostila PhP com Wamp, 4a Parte
Apostila PhP com Wamp, 4a ParteApostila PhP com Wamp, 4a Parte
Apostila PhP com Wamp, 4a ParteIlton Barbosa
 
02 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.502 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.5César Augusto Pessôa
 
Conceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaConceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaCharles Jungbeck
 
POO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosPOO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosLudimila Monjardim Casagrande
 
Programação Orientada á Objeto - Paradigmas e Implementação
Programação Orientada á Objeto - Paradigmas e ImplementaçãoProgramação Orientada á Objeto - Paradigmas e Implementação
Programação Orientada á Objeto - Paradigmas e ImplementaçãoEvandro Júnior
 
Orientação a Objetos - Conceitos
Orientação a Objetos - ConceitosOrientação a Objetos - Conceitos
Orientação a Objetos - ConceitosMayron Cachina
 

Mais procurados (20)

Apresentação programação orientada à objetos
Apresentação   programação orientada à objetosApresentação   programação orientada à objetos
Apresentação programação orientada à objetos
 
Introdução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoIntrodução a programação Orientada a Objeto
Introdução a programação Orientada a Objeto
 
Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a Objetos
 
Conceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vba
Conceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vbaConceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vba
Conceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vba
 
Curso : Introdução Orientação a Objetos
Curso : Introdução Orientação a ObjetosCurso : Introdução Orientação a Objetos
Curso : Introdução Orientação a Objetos
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 
Java programação orientada a objetos
Java   programação orientada a objetosJava   programação orientada a objetos
Java programação orientada a objetos
 
Conceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetosConceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetos
 
Java - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosJava - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a Objetos
 
POO - 17 - Interfaces
POO - 17 - InterfacesPOO - 17 - Interfaces
POO - 17 - Interfaces
 
Apostila PhP com Wamp, 4a Parte
Apostila PhP com Wamp, 4a ParteApostila PhP com Wamp, 4a Parte
Apostila PhP com Wamp, 4a Parte
 
Java - Boas práticas
Java - Boas práticasJava - Boas práticas
Java - Boas práticas
 
02 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.502 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.5
 
Conceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaConceitos Básicos de OO e Java
Conceitos Básicos de OO e Java
 
Poo padadigmas
Poo padadigmasPoo padadigmas
Poo padadigmas
 
Classes e Objectos JAVA
Classes e Objectos JAVAClasses e Objectos JAVA
Classes e Objectos JAVA
 
POO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosPOO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a Objetos
 
POO - 06 - Encapsulamento
POO - 06 - EncapsulamentoPOO - 06 - Encapsulamento
POO - 06 - Encapsulamento
 
Programação Orientada á Objeto - Paradigmas e Implementação
Programação Orientada á Objeto - Paradigmas e ImplementaçãoProgramação Orientada á Objeto - Paradigmas e Implementação
Programação Orientada á Objeto - Paradigmas e Implementação
 
Orientação a Objetos - Conceitos
Orientação a Objetos - ConceitosOrientação a Objetos - Conceitos
Orientação a Objetos - Conceitos
 

Destaque

Controlo de Versões Distribuído com Git - C. Augusto Proiete
Controlo de Versões Distribuído com Git - C. Augusto ProieteControlo de Versões Distribuído com Git - C. Augusto Proiete
Controlo de Versões Distribuído com Git - C. Augusto ProieteComunidade NetPonto
 
Desvendando padrões para desenvolvimento web, base para o sucesso
Desvendando padrões para desenvolvimento web, base para o sucessoDesvendando padrões para desenvolvimento web, base para o sucesso
Desvendando padrões para desenvolvimento web, base para o sucessoUbiratan Z. do Nascimento
 
Design Patterns - Conhecendo os padrões de projeto
Design Patterns - Conhecendo os padrões de projetoDesign Patterns - Conhecendo os padrões de projeto
Design Patterns - Conhecendo os padrões de projetoVinicius Quaiato
 
Fluxo de desenvolvimento de software utilizando Git
Fluxo de desenvolvimento de software utilizando GitFluxo de desenvolvimento de software utilizando Git
Fluxo de desenvolvimento de software utilizando GitBruno Ricardo Siqueira
 
Banca: Proposta de Arquitetura de Desenvolvimento Web Baseada em PHP Utilizan...
Banca: Proposta de Arquitetura de Desenvolvimento Web Baseada em PHP Utilizan...Banca: Proposta de Arquitetura de Desenvolvimento Web Baseada em PHP Utilizan...
Banca: Proposta de Arquitetura de Desenvolvimento Web Baseada em PHP Utilizan...Fernando Geraldo Mantoan
 
#1 - Git - Introdução
#1 - Git - Introdução#1 - Git - Introdução
#1 - Git - IntroduçãoRodrigo Branas
 
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo BranasNode.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo BranasRodrigo Branas
 
Exemplos de Design Patterns em Java
Exemplos de Design Patterns em JavaExemplos de Design Patterns em Java
Exemplos de Design Patterns em Javaalexmacedo
 
Orientação a Objetos com PHP
Orientação a Objetos com PHPOrientação a Objetos com PHP
Orientação a Objetos com PHPAugusto Pascutti
 

Destaque (16)

Controlo de Versões Distribuído com Git - C. Augusto Proiete
Controlo de Versões Distribuído com Git - C. Augusto ProieteControlo de Versões Distribuído com Git - C. Augusto Proiete
Controlo de Versões Distribuído com Git - C. Augusto Proiete
 
Desvendando padrões para desenvolvimento web, base para o sucesso
Desvendando padrões para desenvolvimento web, base para o sucessoDesvendando padrões para desenvolvimento web, base para o sucesso
Desvendando padrões para desenvolvimento web, base para o sucesso
 
Design Patterns - Conhecendo os padrões de projeto
Design Patterns - Conhecendo os padrões de projetoDesign Patterns - Conhecendo os padrões de projeto
Design Patterns - Conhecendo os padrões de projeto
 
Introdução ao Git
Introdução ao Git   Introdução ao Git
Introdução ao Git
 
Fluxo de desenvolvimento de software utilizando Git
Fluxo de desenvolvimento de software utilizando GitFluxo de desenvolvimento de software utilizando Git
Fluxo de desenvolvimento de software utilizando Git
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Banca: Proposta de Arquitetura de Desenvolvimento Web Baseada em PHP Utilizan...
Banca: Proposta de Arquitetura de Desenvolvimento Web Baseada em PHP Utilizan...Banca: Proposta de Arquitetura de Desenvolvimento Web Baseada em PHP Utilizan...
Banca: Proposta de Arquitetura de Desenvolvimento Web Baseada em PHP Utilizan...
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Git vs. SVN
Git vs. SVNGit vs. SVN
Git vs. SVN
 
#1 - Git - Introdução
#1 - Git - Introdução#1 - Git - Introdução
#1 - Git - Introdução
 
Design Patterns com PHP
Design Patterns com PHPDesign Patterns com PHP
Design Patterns com PHP
 
Padrões de Projeto
Padrões de ProjetoPadrões de Projeto
Padrões de Projeto
 
Webstandards
WebstandardsWebstandards
Webstandards
 
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo BranasNode.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
 
Exemplos de Design Patterns em Java
Exemplos de Design Patterns em JavaExemplos de Design Patterns em Java
Exemplos de Design Patterns em Java
 
Orientação a Objetos com PHP
Orientação a Objetos com PHPOrientação a Objetos com PHP
Orientação a Objetos com PHP
 

Semelhante a Introdução aos Padrões de Projeto

Apresentação Introdução Design Patterns
Apresentação Introdução Design PatternsApresentação Introdução Design Patterns
Apresentação Introdução Design PatternsLucas Simões Maistro
 
design patterns - introdução
design patterns - introduçãodesign patterns - introdução
design patterns - introduçãoelliando dias
 
Padrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgePadrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgeLorran Pegoretti
 
Construção de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaConstrução de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaFernando Camargo
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfAndreCosta502039
 
Padroes de projetos gof
Padroes de projetos gofPadroes de projetos gof
Padroes de projetos gofYan Justino
 
pec-12-patterns-intro.ppt
pec-12-patterns-intro.pptpec-12-patterns-intro.ppt
pec-12-patterns-intro.pptssuser7025cf
 
5507 os principais design patterns
5507   os principais design patterns5507   os principais design patterns
5507 os principais design patternsAndre Baltieri
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projetoejdn1
 
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
 
Arquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhrArquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhrThiago Boufleuhr
 

Semelhante a Introdução aos Padrões de Projeto (20)

Apresentação Introdução Design Patterns
Apresentação Introdução Design PatternsApresentação Introdução Design Patterns
Apresentação Introdução Design Patterns
 
design patterns - introdução
design patterns - introduçãodesign patterns - introdução
design patterns - introdução
 
Padrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgePadrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e Bridge
 
Construção de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaConstrução de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em Java
 
Quick reference
Quick referenceQuick reference
Quick reference
 
Aula1
Aula1Aula1
Aula1
 
Interface
InterfaceInterface
Interface
 
Travalho versao final
Travalho versao finalTravalho versao final
Travalho versao final
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdf
 
Padroes de projetos gof
Padroes de projetos gofPadroes de projetos gof
Padroes de projetos gof
 
Padrões de Projeto de Software
Padrões de Projeto de SoftwarePadrões de Projeto de Software
Padrões de Projeto de Software
 
pec-12-patterns-intro.ppt
pec-12-patterns-intro.pptpec-12-patterns-intro.ppt
pec-12-patterns-intro.ppt
 
5507 os principais design patterns
5507   os principais design patterns5507   os principais design patterns
5507 os principais design patterns
 
Java aula 2
Java aula 2Java aula 2
Java aula 2
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projeto
 
Java7
Java7Java7
Java7
 
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
 
Curso Básico de UML
Curso Básico de UMLCurso Básico de UML
Curso Básico de UML
 
Arquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhrArquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhr
 

Introdução aos Padrões de Projeto

  • 1. Introdução a Design Pattern Ricardo Alexandre Schulze rick.ale.sc@hotmail.com
  • 2. Agenda História Conceito Padrões de Criação Padrões Estruturais Padrões Comportamentais Conclusão Referências
  • 3. História Conceito criado na década de 70 por Christopher Alexander. Em 1987, Kent Beck e Ward Cunningham, na época programadores, propuseram os primeiros padrões de projetos, para construção de janelas em linguagem Smalltalk. Em 1995 o conceito de padrão de projeto ganhou popularidade com o lançamento do livro Design Patterns: ElementsofReusableObject-Oriented Software. Escrito pelo grupo conhecido com GoF. GoF (Gang Of Four), Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, estes criarão os padrões GoF, composto por 23 padrões divididos em 3 grupos: Padrões de Criação(5), Padrões Estruturais(7), Padrões Comportamentais(11).
  • 4. História Devido a esse ganho de popularidade, surgiram outros livros como o, Applying UML andPatterns: AnIntroductiontoObject-OrientedAnalysisand Design andIterativeDevelopment. Esse segundo livro deu origem aos Padrões GRASP (General ResponsibilityAssignment Software Patterns), que é composto de 7 padrões. Em 2009 mais de 30 Colaboradores participaram na criação do livro de Thomas Erl – SOA Design patterns . O objetivo desse livro era o de fazer um catálogo dos design patterns para SOA (Service OrientedArchitecture). Mais de 200 profissionais de TI ao redor do mundo participaram da revisão do livro de Thomas Erl. Esses Design Patterns estão publicados e discutidos no site http://www.soapatterns.org/
  • 5. Conceito “Um Pattern descreve uma solução comprovada para um problema de desenho recorrente, dando ênfase particular no contexto e forçando a aproximação do problema, consequências e o impacto de sua solução.” GlaucioSheibel. Idealmente, um pattern deve ter as seguintes Características: Encapsulamento: um padrão encapsula um problema/solução bem definido, independente, específico e bem formulado. Generalidade: deve permitir a construção de outras realizações a partir dele. Equilíbrio: dá a razão, relacionada com cada restrição, de cada passo do projeto, com análise de abstração de dados empíricos. Abstração: representam a abstração do cotidiano ou da experiência empírica. Abertura: deve permitir sua expansão para níveis mais baixo de detalhes. Combinatoriedade: relacionamento hierárquico, padrões de alto nível, podem ser compostos, ou ser relacionados com padrões de níveis mais baixos.
  • 6. Conceito Além das características, um design pattern deve ter um formato descrito em 5 partes: Nome: Descrição da solução, mais do que do problema e do contexto. Exemplos: figuras, diagramas ou descrições que ilustrem um protótipo. Contexto: descrições nas quais o padrão se aplica. Problema: descrição das forças e restrições e suas interações. Solução: relacionamentos estáticos e regras dinâmicas, descrevendo como construir uma solução usando o padrão, podendo citar, suas variações e ajustes.
  • 7.
  • 8. Padrões de Criação Ao todo são 5 padrões de criação são eles: Abstract Factory. FactoryMethod. Singleton. Builder. Prototype. Padrões de criação as vezes competem entre si. Existem situações onde podem ser usados Abstract Facthory ou Prototype por exemplo. Padrões de criação também podem complementar um ao outro. Exemplo, uma Abstract Factory pode armazenar um set de Prototype.
  • 9. Abstract Factory Definição É um padrão que permite a criação de famílias de objetos relacionados ou dependentes, através de uma única interface, sem que a classe concreta seja especificada. UTILIZAÇÃO Padrão utilizado, quando a criação de um objeto pai depende da criação de seus objetos filhos. Exemplo, para um carro existir, é preciso que existam motor, rodas, portas, etc… e o contrário também se aplica, um motor precisa de um carro. Este é apenas um dos exemplos. Outro exemplo de usabilidade deste padrão é na criação de uma Toolkit que disponibilize controles para diferentes interfaces gráficas.
  • 11. FactoryMethod Definição Define uma interface para criar um objeto, mas é a subclasse quem decide qual objeto será instanciado. O factorymethod permite adiar a instanciação para as subclasses. Utilização Imagine por exemplo, uma fábrica de brinquedos, esta fábrica possui vários moldes (carro,cavalo,figurinhas). Uma pessoa é responsável por fazer a mistura do plástico, e injeta-la na máquina, a máquina por sua vez injetara o plástico, porém o que definira qual brinquedo será produzido, é o Molde.
  • 13. Singleton Definição Este padrão garante a existência de apenas uma instância de uma classe, mantendo um ponto global de acesso ao seu objeto. Utilização Bem como a definição explica, ele garante que o objeto será único, exemplos, o Presidente da República é único, assim como o presidente de uma determinada empresa. O padrão singleton, não serve apenas para isso, ele pode complementar outros padrões, um exemplo seria o Factory, no exemplo do carro, poderíamos definir por exemplo, que o motor do carro seria único.
  • 15. Builder Definição Separa a construção de um objeto complexo de sua representação. Utilização Um bom exemplo seria uma rede de fastfood, onde um cliente pode pedir um item principal ,exemplo os combos. Os combos são constituídos de um item principal (o lanche), um item secundário (o acompanhamento), um item terciário (a bebida), e um quarto item que pode variar (o brinquedo). Portanto, quando o cliente pede esse combo ao caixa, o caixa demanda a construção do combo(item por item) e ao final o cliente recebe o Combo (e não o lanche, o acompanhamento, a bebida).
  • 17. Prototype Definição Específica o tipo de objeto a ser criado através de uma instância de objeto protótipo. Utilização Em sistemas que usam Abstract Factory, que as vezes podem ser complexas, e o Prototype pode facilitar em algumas situações. Em sistemas que utilizam classes definidas em tempo de execução. Podemos citar o exemplo de uma divisão celular, onde a partir de uma célula, vão ser criadas duas células , ou seja, ela faz um clone dela mesma.
  • 19. Padrões Estruturais Ao todo são 7 padrões estruturais, são eles: Adapter. Bridge. Composites. Proxy. Façade. Flyweight. Decorator. Consiste Basicamente de classes que utilizam Herança para compor interfaces. Define formas de compor objetos para que possamos obter novas funcionalidades.
  • 20. Adapter Definição Como o nome já diz, o adapter, adapta a interface de uma classe, para que ela possa interagir com outras. Utilização Como sua definição explica, ele ‘adapta’ uma interface a outra, por intermédio de uma nova interface, que fara a adaptação, um exemplo é esta figura acima, que explícita bem, a função de um adapter.
  • 22. Bridge Definição Padrão que faz a interface variar independentemente das suas implementações. Utilização Um exemplo de utilização de um padrão bridge é o quadro de luz de uma casa, que possui, por exemplo, interruptores para diferentes tipos de objetos (Lâmpada, Ventilador, etc). A intenção do switch é de apenas ligar e desligar os objetos, sendo que esse switch pode ser implementado de diferentes maneiras.
  • 24. Composites Definição Possibilita enxergar um conjunto (composição) de objetos como se fosse um só. Representa estrutura de objetos agrupados hierarquicamente. Utilização Compõe objetos em três estruturas e permite que o cliente trate objetos individuais, e a composição uniforme. Um exemplo, de utilização é uma expressão aritmética, 2 + 3 e (2 + 3) + (4 * 6), ambas são validas.
  • 26. Proxy Definição De forma geral funciona de interface para outra classe. Um proxy pode conectar-se a diferentes tipos de objetos. Utilização Um exemplo bem simples da utilização de proxy, é uma movimentação bancária, por exemplo, um cliente de banco utiliza um cheque para pagar uma conta, ao invés de pagar em dinheiro, por fim, controla o acesso ao dinheiro da conta do cliente.
  • 27. Proxy
  • 28. Flyweight Definição Similar a um pool. Define como compartilhar objetos para que os mesmos possam ser usados em vários locais ao mesmo tempo, sendo assim, o padrão flyweight atua de forma independente em cada local. Utilização Apropriado quando vários objetos devem ser manipulados, e esses não suportam dados adicionais. Não existem ponteiros para os métodos do dado, diminuindo o consumo de memória. Em contrapartida são chamadas sub-rotinas diretamente para acessar o dado. Um exemplo de Flyweight é a rede telefônica, onde vários usuários estão conectados, porém quando alguém pega o telefone para discar, a ele não importa quantas pessoas estão conectadas, e sim, o fato de que ele precisar receber um tom de ligação, que ele precisa enviar os dígitos, e completar a ligação.
  • 30. Façade Definição É um objeto que disponibiliza uma interface para uma grande quantidade de funcionalidades de uma API. Utilização O padrão façade define uma interface indefinida de alto nível, para um subsistema mais fácil de se interagir. Um exemplo é o de um comprador que liga para um número e fala com uma representante de comprador, esse representante age como um façade, providenciando uma interface para o setor de pagamento e para o setor de envio.
  • 32. Decorator Definição Anexa responsabilidades adicionais a um objeto dinamicamente. Alternativa flexível as subclasses extendendo sua funcionalidade. Amplia as funcionalidades através da composição. Utilização Imagine que você tem uma árvore. Ai começam a pendurar itens nessa árvore, como bolas, luzes, e outras coisas, a árvore ainda esta lá inalterada. Porém ela agora é conhecida como árvore de natal, e tem um método adicional, proporcionado pela luz, dentre outros atributos.
  • 34. Padrões Comportamentais Ao todo são 11 padrões comportamentais Chain ofResponsibility. Command. Interpreter. Iterator. Mediator. Memento. Observer. State. Strategy. TemplateMethod. Visitor.
  • 35. Chain ofResponsability Definição Representa o encadeamento de objetos receptores para o processamento de uma sério de solicitações diferentes. Esses receptores passam a solicitação ao longo da cadeia até que um ou vários objetos a tratem. Utilização Imagine um sistema de coleta de moedas de um banco, esse sistema funciona como uma cadeia, ou seja, ao invés de ter vários slots de moeda atrelados a um identificador, o padrão Chain utiliza apenas um slot, quando a moeda é jogada no sistema, mecanismos a identificam e encaminham para o receptor apropriado.
  • 37. Command Definição Encapsula uma solicitação como um objeto. Desta forma permite que clientes realizem diferentes solicitações. Enfileira ou faz o registro de solicitações e suporta operações que podem ser desfeitas. Utilização Um exemplo bem simples da utilização do Command, é quando você vai ao restaurante, ai o garçom pega seu pedido (command) e o encapsula num papel, ai ele coloca esse papel numa fila de espera. Você pode fazer novos pedidos (command) a qualquer momento.
  • 39. Interpreter Definição Um padrão interpreter define a linguagem, assim como representações para gramáticas e abstrações para análises sintáticas. Utilização Os músicos são um exemplo de interpreter, o tempo e a note de uma música podem ser anotados em uma linguagem de notas, e posteriormente em linguagem de música como mostra o exemplo a a seguir.
  • 41. Iterator Definição permite a iteração, e um modo de acesso a elementos de um agregado de objetos, sequencialmente, sem exposição de estruturas internas. Utilização Um Exemplo simples de iterator, é uma televisão, onde o usuário, passa pelos canais, sendo que para este usuário o número do canal não é importante e sim sua programação, logo, o usuário interage com o controle, que por sua vez interage com a televisão, dessa forma comprovando o agregado de objetos sequenciais.
  • 43. Mediator Definição É um padrão que desacopla e gerencia as colaborações entre um grupo de objetos. Define um objeto que encapsula as interações entre esse grupo. Utilização Esse padrão encaixa perfeitamente em um aeroporto, como um controlador de voo, por exemplo, ao invés dos aviões conversarem entre si um a um, eles intermediam essa ’conversa’ com uma torre de controle, ou seja, todos os aviões conversam com a torre de controle, e os aviões não conversam entre si.
  • 45. Memento Definição armazenar o estado interno de um objeto em um determinado momento, para que seja possível retorná-lo a este estado, caso necessário. Utilização Serve para você manter o estado de um objeto, como um parâmetro. Exemplo você pretende trocar os freios de seu carro em casa, remove o pneu dos dois lados, ai você mantém um dos freios intactos, a fim de, usar como parâmetro na remontagem do freio.
  • 47. Observer Definição Relação um para todos, dessa forma quando este um altera seu status, todos atualizam automaticamente. Utilização Exemplos de leilão, onde você tem um auditor que define um preço e os compradores, que levantam as placas para confirmar sua oferta, dessa forma, o auditor aumenta o valor das ofertas, então novamente os compradores reagem a mais está ação.
  • 49. State Definição É usado para permitir que um objeto altere seu comportamento quando um estado muda. Usa o objeto como um estado. Utilização A utilização deste padrão aparece em máquinas de venda (amendoins, refrigerantes etc..) essas maquinas tem estados baseados no que elas tem a disposição e na quantidade de dinheiro colocado. Quando o dinheiro é depositado, uma seleção é feita, a máquina por sua vez, ira atuar de duas formas, entregar o produto sem troco, ou entregar o produto com troco, ou não entregar o produto (dinheiro depositado insuficiente), ou não entregar o produto e devolver o dinheiro (devido a falta do produto).
  • 50. State
  • 51. Strategy Definição Definir uma família de algoritmos e encapsula cada algoritmo como uma classe, permitindo assim que elas possam ser trocados entre si. Este padrão permite que o algoritmo possa variar independentemente dos clientes que o utilizam. Utilização Pattern bem representado por meios de se chegar a um aeroporto, o viajante poderá escolher entre diversas opções, como ir com seu próprio carro, ônibus, limusine, entre diversos tipos de locomoção, todos eles vão levar o viajante para o aeroporto, e eles podem ser usados alternadamente.
  • 53. TemplateMethod Definição Define o esqueleto de um algoritmo numa operação, passando alguns passos para as subclasses. A classe base declara o placeholder e as subclasses preenchem esses placeholders. Permite que a subclasse mude certos passos sem mudar a estrutura do algoritmo. Utilização A seguir esta sendo usado um exemplo de planta de casa, onde várias outras casas herdam de um template de casa, elas podem adicionar outras coisas, mudar a cor etc, porém sem alterar o template original da casa, removendo ou alterando algo.
  • 55. Visitor Definição Realiza uma operação sobre elementos da estrutura de um objeto. Permite que se crie uma nova operação sem alterar a classe dos elementos sobre os quais ela atua habilidade de adicionar novas funcionalidades a estruturas de um objeto pré-existente sem a necessidade de modificá-las. Utilização Aplica-se para problemas semelhantes ao de uma empresa de taxi, quando um cliente liga para a empresa de taxi solicitando o taxi, o cliente esta aceitando um visitor, quando o cliente entra no taxi, ele não esta mais em controle de sua movimentação e sim o Visitor.
  • 57. Conclusão Espero que esta abordagem, sobre design patterns tenha sido útil, de fácil compreensão, já que o intuito para este momento não era o de aprofundar-se sobre cada Design pattern. Creio que os objetivos deste material, foram satisfatórios, abrindo um leque de opções a serem estudas de maneira mais específica. Em breve estarei pesquisando mais sobre cada design, me aprofundando mais em suas Utilizações. Fazendo uma apresentação mais específica sobre cada um deles.