No cotidiano do profissional que atua no
ramo da tecnologia, não é incomum se deparar com problemas arquiteturais
recorrentes nos mais distintos sistemas de software. Nesse contexto, a
experiência em resolver tais situações cotidianas é um fator importante que
permite ao desenvolvedor de software uma maior habilidade para criar estruturas
mais flexíveis e escaláveis que são de fácil entendimento para outros
profissionais que atuem futuramente sobre ela. Em geral, essa experiência
agregada é um diferencial capaz de produzir aplicações melhores, menos custosas
em relação à manutenção posterior e com maior probabilidade de atingirem um
determinado objetivo inicial pré-estabelecido. No sentido de compartilhar essa
experiência inerente ao desenvolvimento de aplicações melhores é que surgiram
os primeiros estudos sobre padrões de projeto.
Os padrões de projeto estão enraizados nas
pesquisas realizadas pelo arquiteto e urbanista austríaco chamado Christopher
Wolfgang Alexander. Ele foi responsável pela constatação, através de observação
sobre inúmeras cidades medievais, da existência de padrões que as tornavam mais
harmoniosas e belas. O interesse dele em traduzir tais padrões em maneiras de
fácil entendimento para a aplicação em projetos de construção futuros ou
melhoria dos pré-existentes resultou na publicação, em 1977, do seu livro mais
famoso: “A Pattern Language: Towns, Buildings, Construction”. Nesse livro, ele
enumerou as regras e fez o uso de ilustrações para promover métodos exatos para
construir desenhos práticos, seguros e atrativos que poderiam ser reaplicados
para os projetos de construção. Um dos grandes benefícios dessa obra foi que, ao
tornar os padrões reusáveis, serviu como grande auxiliar na tomada de decisões de
arquitetura. Essa característica inspirou engenheiros da computação e pesquisas
aplicadas a software.
O termo “padrão de projeto”, no contexto da
arquitetura de software, é considerado hoje como um efeito colateral da
publicação do livro “Design Patterns: Elements of Reusable Object-Oriented” de
Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides. Apesar disso, os
primeiros trabalhos relacionados à pesquisa de padrões para a arquitetura de
sistemas datam do final da década de oitenta, com as experimentações de Kent
Back e Ward Cunningham, pioneiros da metodologia de desenvolvimento ágil de
aplicações e da elaboração de aplicações baseadas em testes, Extreme
Programming (XP) e Test Driven Development (TDD).
Esses trabalhos tinham o interesse comum de
estudar e encontrar padrões em soluções amplamente empregadas em software para
catalogá-las de maneira a torná-las uma base para uma situação equivalente
futura. Assim, foram descritos os primeiros padrões de projeto para o
desenvolvimento de sistemas.
O padrão de projeto nada mais é do que um
modelo de uma experiência amplamente testada e aprovada que pode ser usado como
um guia para a resolução de problemas específicos de arquiteturas orientadas a
objetos. É uma alternativa reutilizável, baseada na abstração das escolhas bem
sucedidas para atender uma dificuldade conhecida que é composta de quatro
elementos essenciais: o nome, o problema que pretende resolver, a solução para
o problema e as consequências da aplicação dele.
Os quatro elementos são decisivos para o
sucesso de um padrão de projeto. Na grande maioria, os padrões descritos com
melhor qualidade são de fácil interpretação e possuem uma grande capacidade de
nos remeter aos benefícios de sua aplicação. Por exemplo, vejamos uma abstração
de padrão do ponto de vista de Christopher: a solução para atravessar por
dentro de uma montanha seria a construção de um túnel. O “Túnel” é um excelente
nome de um padrão porque pode ser reconhecido por todos os envolvidos no
projeto da construção, é também uma forma que já nos lembra do problema, ou
seja, que uma montanha impede uma passagem e que também já nos leva a uma
solução: a escavação. Além disso, ainda indica alguns benefícios, como não ter
a necessidade de usar uma maior quantidade de recursos para construir uma via
alternativa no entorno dela.
Atualmente, a quantidade de padrões de
projeto identificados e catalogados em diferentes obras é provavelmente
incalculável. Afinal, existem muitas situações onde existem padrões aplicados e
que poderiam ser estudados. Não à toa, encontramos padrões para instanciar
objetos, para lidar com problemas de concorrência ou até para construir web services.
Entre eles, os mais conhecidos são os padrões GRASP (General Responsibility Assignment Software Patterns), estudados por
Craig Lerman, e os padrões de projeto “GOF”.
Os
padrões de projeto GOF
Os padrões de projeto catalogados por Erich
Gamma e seus companheiros, no livro “Design Patterns: Elements of Reusable
Object-Oriented”, são conhecidos como padrões de projeto “GOF”, uma homenagem
direta aos quatro autores também conhecidos como a “gangue dos quatro” (em
inglês, “Gang of Four”). A obra é composta por uma coletânea de vinte e tr
...
Exibição do post interrompida. Para ler conteúdo completo,
clique aqui