Visual Basic, VB .NET, ASP, Active X, Access, SQL Server

Programação e Estética

Já faz algum tempo venho pensando que seria interessante ter um artigo sobre este assunto no site,  mas a falta de conhecimentos para escrever sobre o tema sempre me desestimulou. No entanto, com o passar do tempo, a tentação venceu a inibição. Acredito que é sempre estimulante podermos compartilhar com outras pessoas, que exercem a mesma profissão, algumas experiências e pontos de vista sobre a estética do que fazemos.

Embora seja mais difícil de ser identificada, a poesia das idéias também existe, e é em atividades de manipulação de símbolos, como a programação, que se pode encontrar amostras de como uma concepção elegante nestas áreas pode ser tão bela quanto uma obra de arte plástica. Tudo depende dos critérios estéticos de cada um.

No que diz respeito aos critérios estéticos, acredito que as idéias se mostram mais elegantes quanto maior for o seu grau de estruturação. A estruturação é decorrente do modo como as partes se relacionam. Quando uma solução é o resultado apenas da justaposição de idéias para solucionar um problema particular, o grau de estruturação é baixo, porque as partes não podem se articularem para responderem a outras demandas além de solucionar aquele problema em particular. Além disto, não há o sentido de unidade no conjunto, já que não há nenhum nível interno de regulação do relacionamento entre as partes. Quando, porém, as partes são capazes de responderem em conjunto a qualquer tentativa de introdução de um elemento que desestabilize o seu relacionamento, estamos diante de um conjunto bem estruturado e auto-regulável. Um exemplo disto é uma classe que valida os dados atribuídos às suas propriedades e rejeita o que não é compatível com o seu bom funcionamento. Ou uma coleção que é a única capaz de criar os objetos que irá conter, podendo assim  garantir que estes objetos terão obrigatoriamente certas configurações.

Podemos encontrar idéias bem estruturadas em diversos níveis de complexidade. Desde metodologias gerais até pequenos truques de design que podem ser usados em várias ocasiões. A programação orientada a objetos é um exemplo de concepção muito elegante em termos de metodologia. A idéia de ter nas linguagens de programação entidades análogas às que fazem parte da nossa experiência mais cotidiana representou um grande avanço nas possibilidades de criação para os programadores. Poder manipular entidades de programação (objetos) de modo análogo ao que fazemos com objetos reais nos livra de ter que fazer muitas abstrações na hora de traduzir os problemas reais para as linguagens de programação. A orientação a eventos também vem a  contribuir muito para aumentar as possibilidades de relacionar objetos. A idéia de um objeto chamar um método em outro é, de muito, inferior à de um objeto disparar um evento que pode ou não ser tratado dentro de outro objeto. O objeto que dispara o evento não tem que saber quais nem quantos são os objetos que irão tratar aquele evento. O objeto que recebe o evento, pode escolher se o trata ou não. A relação entre os objetos tem flexibilidade máxima e pode mudar livremente durante a execução do programa mediante a criação e destruição de objetos, mudança de funções, etc. Por outro lado, há também os exemplos de pequenos truques que lançam mão indiretamente das características  da linguagem para resolverem toda uma classe de pequenos problemas. Um caso assim pode ser visto na classe CHourGlass, que ajusta automaticamente o cursor do mouse após ele ter sido mudado para ampulheta. A classe se aproveita do fato de que todo objeto, ao ser destruído na saída de um escopo, dispara o evento Terminate. Embutindo em uma classe o código que desfaz uma ação que queremos ver desfeita na saída de um escopo, basta escrever o código que desfaz a ação no evento Terminate da classe e declarar um objeto da classe dentro daquele escopo. Ao ser destruído na saída do escopo, o objeto dispara o evento Terminate e o código que desfaz a ação é executado. A classe CHourGlass faz isto para restaurar o cursor do mouse ao padrão. Com isto o programador não tem que se preocupar em escrever código em cada saída do escopo para voltar o cursor ao normal depois de tê-lo mudado para ampulheta.

As coisas ficam realmente bonitas quando ganham a forma de uma arquitetura de sistema. Quando conseguimos construir um modelo de relacionamento bem coordenado não apenas entre objetos, mas também entre programas, estamos diante de uma bela obra de arte. Neste aspecto, as técnicas usadas no desenvolvimento de aplicações em três ou mais camadas podem nos render bons exemplos.

( a ser continuado )