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 comonew 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.