Design patterns: Breve introdução aos padrões de projeto

Igor Chagas
Igor Chagas

Compartilhe

Imagem mostra uma mão segurando um bloco plástico de brinquedo, prestes a completar a montagem de uma uma parede de blocos plásticos coloridos

No cotidiano de um desenvolvedor de software são enfrentados diversos problemas computacionais, como precisar atualizar um sistema ou desenvolver uma aplicação.Porém, assim como na matemática, física ou química, nas quais foram desenvolvidas teorias para se resolver determinadas questões, a programação passou pelo mesmo processo.

Por isso, assim como um físico ou física não precisa se preocupar em desenvolver uma teoria para a queda livre, pois Galileu já cuidou disso séculos atrás, quem programa também não precisa se preocupar em resolver certos problemas, pois outras pessoas no passado já trabalharam nisso.

O nome que damos para essas fórmulas é design patterns (Padrões de projeto), que no final, se resumem a soluções típicas para problemas comuns em um projeto de software. Elas podem ser aplicadas independentemente da linguagem. Mas antes de mergulharmos de cabeça nesse tema precisamos definir alguns detalhes.

Afinal, o que são design patterns?

Os padrões de projeto (design patterns) são como plantas pré-projetadas de uma construção, que você pode alterar para se adequar melhor na resolução de um problema recorrente em seu código. O que diferencia os padrões de projeto das funções e bibliotecas é que você não pode simplesmente copiá-los direto para seu programa, já que eles não são um pedaço de código, mas sim um conceito que serve como uma solução.

Assim, para se implementar um padrão de projeto você deve seguir o conceito dos padrões escolhidos (dentre todos os existentes) e ajustá-lo ao problema que deseja resolver. Isso dependerá das características do projeto. Dessa forma, fazemos uma implementação que se encaixe exatamente à demanda da nossa aplicação.

Por qual motivo devo aprender?

No mercado de trabalho você irá encontrar diversos programadores experientes que não conhecem nenhum padrão de projeto, e que no entanto, já implementam alguns padrões sem nem mesmo saber. Portanto, você sairá na frente se souber os padrões a serem aplicados.

Além disso, a utilização deles claramente traz economia de tempo de trabalho, pois você reaproveita um caminho que já foi deixado anteriormente para ser seguido por outras pessoas desenvolvedoras. Um conselho que costumamos dar e receber na área de exatas é para evitarmos de reinventar a roda e ele consegue se encaixar bem nessa situação, pois não faz sentido gastar tempo analisando e criando quando já existe um “guia” pronto para ser seguido.

E o SOLID? Onde se encaixa?

Frequentemente as pessoas que iniciam os estudos de design patterns se deparam com esse termo. Mas afinal, do que se trata? Tem realmente a ver com padrões de projeto?

O SOLID é uma sigla em inglês para cinco princípios de projeto que possuem o objetivo de fazer programas mais compreensíveis, flexíveis e sustentáveis.

Não faz parte dos design patterns, mas por serem boas práticas que garantem diversos benefícios é bem comum de aprender ambos os temas ao mesmo tempo.

Veja abaixo uma breve definição destes princípios:

  • “S” Single Responsibility Principle (Princípio de responsabilidade única): uma classe deve ter uma e apenas uma razão para mudar.

  • “O” Open-Closed Principle (Princípio aberto/fechado): objetos devem estar disponíveis para extensão, mas fechados para modificação.

  • “L” Liskov Substitution Principle (Princípio de substituição de Liskov): uma subclasse deve ser substituível por sua superclasse.

  • “I” Interface Segregation Principle (Princípio de segregação de interface): uma classe não deve ser obrigada a implementar métodos e interfaces que não serão utilizadas.

  • “D” Dependency Inversion Principle (Princípio de inversão de dependência): dependa de abstrações e não de implementações.

Padrões de projeto: quais são?

Após surfar por alguns conceitos importantes, finalmente vamos dar um mergulho nos principais tópicos de padrões de projeto.

Os três principais padrões de projeto definidos pelo livro “Design Patterns: Elements of Reusable Object-Oriented Software” de 1994, escrito por GOF (Gang of Four: Rich Gamma, Richard Helm, Ralph Johnson e John Vlissides) são os padrões criacionais, estruturais e comportamentais. Esses padrões foram divididos e agrupados de acordo com a natureza do problema que eles solucionam.

Nuvem de palavras sobre o tema, com palavras como patterns (em tradução livre, padrões), creational (criacional) e behavioral(comportamental)  fazendo referência aos nomes de padrões de projetos mais conhecidos.

Tipos:

1) Padrões criacionais: estes padrões oferecem diversas alternativas de criação de objetos, o que aumenta a flexibilidade e a reutilização de código. Alguns dos principais padrões desse tipo são:

  • Factory Method
  • Abstract Factory
  • Builder

2) Padrões estruturais: Nos mostram como montar objetos e classes em estruturas maiores, sem perder a eficiência e flexibilidade. Alguns dos principais padrões desse tipo são:

  • Adapter
  • Bridge
  • Composite

3) Padrões comportamentais: Nos ajudam a trabalhar melhor com os algoritmos e com a delegação de responsabilidades entre os objetos. Os padrões que se destacam nesse tipo são:

  • Chain of Responsibility
  • Command
  • Interpreter

Conclusão:

Conhecer e utilizar design patterns é algo de muita importância no desenvolvimento de qualquer software. O uso desses padrões nos auxilia nos desafios mais recorrentes durante nosso desenvolvimento, além de nos oferecer uma maior produtividade e garantir que você saia na frente como profissional. Portanto, para os programadores que desejam alcançar um novo nível na carreira é importante ser um mergulhador de alta profundidade em padrões de projeto.

Caso você tenha interesse em aprender mais sobre esse tema, temos um podcast que pode ser do seu interesse:

E se você quiser aprender na prática como lidar com os padrões de projeto e SOLID, temos duas formações focadas nisso, uma em Java e outra em PHP:

Temos também alguns cursos em C# e Python sobre esse tema:

Igor Chagas
Igor Chagas

Estudante e entusiasta da linguagem Java, integrante do Scuba Team da Alura e universitário nas horas vagas.

Veja outros artigos sobre Programação