Padrões de Projeto: O que são e pra que servem?
Quando começamos o projeto em Action Script 2.0, começamos a ter problemas com o Flash, já que não tínhamos prática para montar um projeto mais robusto. Foi quando o Douglas (naquela época o Mário não estava ainda com a gente) começou a recorrer aos grandes fórums sobre o assunto, para resolver problemas de boa programação. Depois das 4 primeiras respostas, o meu mundo mudou completamente.
Foi impossível não notar uma característica chave em todos os locais onde procuramos informações: os “grandes usuários” desses locais não sabiam absolutamente NADA de POO (Programação Orientada a Objetos) e SEMPRE criticavam nosso código, dando para a gente uma solução POG (Programação Orientada à Gambiarras).
“Tiago, você está falando a maior besteria da tua vida” vocês podem dizer, mas antes de qualquer coisa, o exemplo clássico do que eu estou falando foi quando estávamos com o clássico problema de escopo do AS2.0, onde o “this” dentro de um método sobrecarregado apontava para a classe de onde ele veio, ao invés de apontar para a classe que o sobrecarregava. Antes de encontrarmos o Ellipsis (um pacotão de atualizações) e a classe Delegate, nos foi dada a seguinte resposta por um dos “grandes usuários”: “Teu código está muito burocrático. Pega todos os métodos, bota num script na 1ª frame que ele vai funcionar”. Lindo, não???
É CLARO que eu não vou falar onde nem quem mandou fazermos tamanha bizonhice, mas não posso deixar de comentar a baixa qualidade geral dos códigos que vejo por aí. Variáveis Globais pra tudo q é lado, programação monolítica (um arquivo único de 15mil linhas) e, principalmente, ignorância absoluta sobre a existência dos Padrões de Projeto, o básico do básico em qualquer aplicação com qualidade e profissionalismo.
O conceito de Padrões de Projeto (Design Patterns, em inglês, também chamados de padrões de projeto de software ou padrões de desenho de software) vem da década de 70, mas foram realmente implementados catalogados mesmo lá pro final da década de 80, por Kent Beck e Ward Cunningham. Os Padrões são conjuntos de soluções para determinados problemas no desenvolvimento do seu software. Essas soluções já foram tão testadas por aí que foram padronizadas, recebendo um nome, o problema que ele resolve, a forma com que ele resolve e as conseqüências do seu uso. A idéia era que, quando falássemos do padrão X, soubéssemos exatamente sobre o que falamos.
Um padrão de projeto possui sempre um Diagrama de Classes (como esses aqui) relacionado a ele, usado para mostrar para os programadores como o código deve ficar. Uma vez conhecido o padrão e entendido como programá-lo, fica muito fácil resolver problemas graves ou que geram muita programação inútil.
Há uma reserva quanto ao uso de Padrões de Projeto: mesmo aumentando a reutilização das soluções enquanto você ainda está projetando o software, eles diminuem consideravelmente a reutilização de blocos pequenos de software, já que você vai ter que gastar um tempinho extra na manutenção das classes. Nada que a gente já não faça, mas o uso indiscriminado pode fazer com que seu projeto fique muito pouco reaproveitável.
Apesar disso, o verdadeiro maior problema que encontramos para adicionar os padrões ao nosso projeto foi que a Orientação a Objetos do AS2.0 era falha: existia, mas o foco ainda era a estruturação. Talvez por isso as pessoas fizessem gambiarras híbridas sem a menor pena. Em compensação, quando migramos para o AS3.0 e nos deparamos com OO pura, vimos que ele está completamente preparado para a confecção de softwares de nível profissional.
Então, daqui pra frente, quando disserem pra vocês que o Action Script 3.0 é uma linguagem de programação inferior, podem bater de frente. Eu mesmo vou colocar aqui algumas matérias sobre padrões de projeto aqui. Já estou preparando algumas sobre os padrões State, Concrete Factory e Singleton (em parceiria com os verdadeiros programadores do meu projeto, claro) e, se mais algum leitor programar em AS3.0 e quiser fazer o mesmo, me mande o link que vou colocá-lo aqui.
Artigos Relacionados:
Sem artigos relacionados.

By Douglas, 17/09/2007 @ 21:30
Quando se aprende a usar um padrão de projeto, você percebe a beleza na POO!
Muito bom o artigo! Se tem algum conselho que posso dar pra quem ta começando é o seguinte: conheça, leia, treine muito e aprenda efetivamente UM padrão por vez. Não se confunda com as dezenas de padrões que existem. Se isso acontecer, você vai acabar nunca usando nenhum.
-Douglas
By Mário Marinato, 18/09/2007 @ 00:04
Ótimo artigo, Frossard, ficou porreta. Mas me permite uma correção?
Primeiro, quando você diz que os padrões de projeto foram “realmente implmentados” por Kent Beck e Ward Cunningham. Na verdade, eles não foram implementados, foram sim catalogados formalmente.
Exatamente por serem padrões, já eram coisas que tinham sido implementadas várias e várias e várias vezes. O trabalho deles foi apenas de ter o estalo:
- Puts, já notou que todo mundo resolve esse problema deste mesmo jeito? e este aqui também? e este? e este?
- É mesmo!
- E se a gente escrevesse um livro catalogando isso e ganhasse uma grana boa em cima!?
O resto é história.
Acho importante ressaltar isso porque senão os novatos (nós) podem acabar pensando que podem “inventar” um padrão novo, quando “padrão novo” é um pleonasmo tão feio quanto “subir pra cima”.
By Tiago Frossard, 18/09/2007 @ 00:28
Corrigido o artigo, Mário. Valeu pelo toque.
By Romulo De Lazzari, 18/09/2007 @ 15:55
Excelente post! Eu sou meio (quer dizer muito) capenga nesta área, admito que meus código estão inclinados para a POG, mas espero mudar daqui pra frente.
Abraço!
By Tiago Frossard, 20/09/2007 @ 02:43
Então Romulo. Se você escrever alguma coisa sobre o assunto, me avisa pr’eu linkar aqui.
By Diego, 27/03/2008 @ 18:37
ola galera estou com dificuldades a utilizar o as 3.0 nao e nada de programacao nem nada… eu estou aprendendo a mecher ainda no as3.0
mais o meu problema eh o seguinte, meu arquivo flash nao funciona em browser, so em desktop. quando abro no browser ele nao dicionar os restante das coisas (stage.addChild(new Classe()), por exemplo nao aparece o movieclip no palco). Tem alguma coisa errada por se eu abrir o swf no flash player ele funciona normal. alguem sabe o porq?
se alguem souber me avisa: diegocleir@gmail.com
esse as 3.0 ficou do caralho… muito foda mesmo… to gostando.
vlw
By Tiago Frossard, 28/03/2008 @ 15:39
Kra, eu não faço idéia do q vc tá fzendo prá isso. Alguém ae sabe?