Blog Formação DEV

O que são padrões de projeto?

Neste artigo iremos falar sobre um conceito muito importante na área de desenvolvimento de software: padrões de projetos
O que são padrões de projeto?
Texto de: Letícia Garcez

Introdução

Um recurso muito utilizado na engenharia de softwares são os padrões de projeto, e neste artigo vamos conhecer como esse conceito surgiu e conheceremos diferentes tipos de padrões que podem ser utilizados nas nossas aplicações.

Como surgiram os padrões de projeto

Os padrões de projeto foram criados pelo arquiteto Christopher Alexander. Algo interessante de se mencionar, é que Christopher Alexander não era arquiteto de software, era arquiteto de casas e prédios mesmo. Ele conseguiu identificar diversos problemas que se repetiam com frequência no seu ramo de atuação e para os quais já existiam soluções conhecidas. Então, ele criou padrões de construção para evitar esses problemas.

Segundo ele, cada padrão de projeto descreve um problema que ocorre frequentemente em seu ambiente e o cerne da solução para aquele problema. Isso quer dizer que os padrões de projeto são uma espécie de modelo da solução para o problema. Esse “modelo” precisa então de algumas adaptações conforme a necessidade do projeto onde sua aplicação é feita.

Padrões de projeto em programação

Os padrões de projeto começaram a se popularizar na programação a partir de 1995, quando aconteceu o lançamento do livro Padrões de Projetos – Soluções Reutilizáveis de Software Orientados a Objetos. Embora o assunto de padrões de projetos esteja em constante evolução, esse livro ainda é a maior referência no assunto.

É importante dizer que o livro Padrões de Projetos – Soluções Reutilizáveis de Software Orientados a Objetos, como o próprio nome já diz, foca na programação orientada a objetos, embora seja possível fazer algumas adaptações em alguns padrões para permitir a utilização desses padrões em outros paradigmas de programação.

Neste mesmo livro, os autores detalham o total de 23 padrões de projetos divididos em três categorias que veremos em seguida: criacionais, estruturais e comportamentais.

Padrões criacionais

Os padrões criacionais fornecem diferentes formar de criar objetos, visando reduzir problemas relacionados à criação de objetos em uma aplicação. Esse tipo de padrão também oferece uma maior flexibilidade na criação de objetos e um maior reuso de código.

Alguns tipos de padrões criacionais são:

  • Singleton: Esse padrão recomenda a criação de apenas uma instância de classes, sendo que essa instância permite o acesso aos elementos da classe. Basicamente, a ideia aqui é criar uma classe para agrupar informações e permitir o acesso a essas informações. Claro que o padrão é um pouco mais complexo que isso, mas essa é uma abstração interessante.
  • Prototype: Esse padrão recomenda que o comportamento de cópia de um objeto seja de responsabilidade do próprio objeto. Esse é um comportamento interessante, pois como a cópia parte “do próprio objeto” ele pode ser copiado por completo, inclusive com atributos privados que não estariam disponíveis de outra forma.
  • Builder: Esse padrão recomenda a criação de objetos complexos em partes. Um exemplo que pode facilitar o entendimento é a criação de um bolo. Existem várias formas de fazer um bolo, e dependendo das etapas utilizadas, o resultado será diferente. No padrão Builder, a ideia é que possamos descrever os passos que levarão ao resultado, então poderíamos criar um bolo como new Bolo().comRecheioMorango().comCoberturaChocolate() e outro como new Bolo().comRecheioChocolate().semCobertura(), sendo que o resultado de cada construção seria um bolo diferente.

Padrões estruturais

Os padrões estruturais explicam como estruturar e organizar objetos e classes. Estes padrões são úteis para garantir que o software em desenvolvimento seja fácil de manter e de ser entendido, uma vez que as pessoas entendam o padrão sendo utilizado.

Alguns tipos de padrões estruturais são:

  • Adapter: Esse padrão consiste na criação de adaptadores que possam “converter” um determinado objeto para que este tenha uma estrutura que possa ser entendida por outra classe. Por exemplo, vamos supor que sua aplicação lê dados no formato XML, mas você recebeu um input no formado JSON. Neste caso, seria preciso implementar uma classe que convertesse o conteúdo do arquivo JSON para XML, ou seja, um adaptador.
  • Decorator: Esse padrão permite a adição de novos comportamentos a objetos já definidos uma vez que esses objetos já definidos sejam envolvidos por outro objeto que contém os comportamentos que se deseja adicionar.

Padrões comportamentais

Padrões comportamentais estão ligados ao comportamento que uma determinada classe terá, e como esta classe se comportará em conjunto com outras classes. Estes padrões também são utilizados para dividir as responsabilidades da aplicação entre os diferentes classes.

Alguns tipos de padrões estruturais são:

  • Observer: Esse padrão recomenda a criação de observadores para determinados eventos. Esses observadores vão ficar “de olho” em um determinado evento, e uma vez que este evento aconteça irão performar alguma ação.
  • Chain of Responsability: Esse padrão recomenda a criação de uma espécie de “cadeia de processamento” com diferentes etapas, onde cada etapa será responsável por uma única ação, podendo chamar a próxima etapa de processamento ou fazer o processamento dos dados recebidos.

Considerações finais

Neste artigo conhecemos origem dos padrões e projeto e sua a classificação. Este assunto é muito importante para todo mundo que deseja entrar no mercado de programação e com certeza merece ser estudado mais a fundo.

Sobre o autor
Cod3r

Cod3r

Com mais de 400 mil alunos, a Cod3r é uma das principais escolas de tecnologia do País. Um de seus produtos mais importantes é a Formação DEV, com objetivo de preparar os profissionais para o mercado.

Ótimo! Inscreveu-se com sucesso.

Bem-vindo de volta! Registou-se com sucesso.

Assinou com sucesso o Blog Formação DEV .

Sucesso! Verifique o seu e-mail para obter o link mágico para se inscrever.

As suas informações de pagamento foram atualizadas.

Seu pagamento não foi atualizado.