Introdução aos Padrões de Projeto (Design Patterns)

Computação II - Ciência da Computação


Prof.: Danilo S. Carvalho

Nessa aula, aprenderemos sobre o que são os padrões de projeto, e porque deveriamos utilizá-los em nossos programas.


Ao final da aula, conheceremos os tipos de padrão de projeto e como são organizados.

Durante nosso trabalho envolvendo programação, muitas vezes nos deparamos com problemas comuns, os quais nós, ou outros, já encontraram uma solução satisfatória e reutilizável.


Conhecer esses problemas é importante, pois aprendemos a identificar suas variações e a aplicar as soluções conhecidas mais rapidamente e eficientemente.


Por exemplo, há casos em que a informação necessária para criação de certos objetos no programa é externa aos objetos, e é obtida da combinação dos estado de vários outros objetos. Isso pode ser resolvido com um padrão de projeto.

Padrões de projeto (Design Patterns) descrevem problemas recorrentes no projeto de sistemas e suas soluções em termos de interfaces e objetos.


  • Ajudam a construir software confiável, usando aquilo que já foi testado.
  • Promovem a reutilização do código de maneira organizada.
  • Estabelecem um vocabulário comum entre os desenvolvedores.

Os padrões de projeto são descritos através de:

  • Nome e classificação
    • Termo canônico pelo qual os desenvolvedores se referem ao padrão e como é classificado entre os demais.
  • Apelidos / Nomes secundários
    • Outros nomes pelos quais os desenvolvedores conhecem o padrão.
  • Propósito
    • O que o padrão faz e qual tipo de problema ele trata.
  • Motivação
    • Cenário que ilustra o problema resolvido pelo padrão e como as estruturas definidas no padrão o resolvem.

Os padrões de projeto são descritos através de:

  • Aplicação
    • Em que situações o padrão pode ser aplicado e como identificar tais situações.
  • Estrutura
    • Representação das estruturas (classes, interfaces, objetos) que compoem o padrão.
  • Participantes
    • Listagem das responsabilidades de cada uma das estruturas que participam do padrão.
  • Colaborações
    • As interações entre as estruturas participantes e seus papéis.

Os padrões de projeto são descritos através de:

  • Consequências
    • Resultados esperados da aplicação do padrão.
  • Exemplos de código
    • Exemplos práticos que ilustram a aplicação do padrão em uma ou mais linguagens de programação.

Os padrões de projeto vem sendo catalogados oficialmente desde o lançamento do livro
"Design Patterns: Elements of Reusable Object-Oriented Software" (Erich Gamma, Richard Helm, Ralph Johnson, e John Vlissides -- Addison-Wesley, 1995).

Os autores desse livro são conhecidos como "the gang of four" (GoF), e trabalharam na organização dos padrões para promover uma linguagem comum aos desenvolvedores, em projetos de software.


Os padrões descritos nesse livro e suas derivações são conhecidos como padrões GoF.

Os padrões de projeto podem ser classificados com relação ao seu propósito em:

  • Padrões de criação (criacionais)
    • Tratam da melhor maneira como instanciar objetos.
  • Padrões de estrutura (estruturais)
    • Tratam de como as classes e objetos podem ser combinados para formar estruturas mais complexas.
  • Padrões de comportamento (comportamentais)
    • Tratam da interação/comunicação entre objetos e sua respectiva descrição pelas classes/interfaces.

Abaixo estão alguns exemplos de padrões GoF. Clique em cada um para ver sua descrição:

Ganhamos agora uma noção acerca dos princípios e da necessidade dos padrões de projeto.


Nas próximas aulas falaremos um pouco sobre padrões específicos e como podemos nos beneficiar de seu uso.


Recomendo a leitura do material do Refactoring Guru, sobre esse assunto.

Perguntas:

  1. Quais padrões dessa aula já vimos ser aplicados nesse curso?
  2. Dê um exemplo de situação onde podemos aplicar o padrão Abstract factory.

Até a próxima aula!