E os objetos?

Onde estão os objetos em C ?

Sabemos que C é uma linguagem bem versátil e que permitiu ainda permite a criação de ferramentas muito úteis em todos os setores de tecnologia.

Tenho visto estatísticas e apesar de não confiar muito nelas, vemos a ascensão de linguagens que oferecem suporte completo ao paradigma da orientação a objetos.

Há crescimento do Java, Python, Ruby, Php, C++, .Net, etc. Surgimento de frameworks escritos em todo o tipo de script que se possa imaginar e eu me pergunto: qual o objetivo desta profusão de linguagens?

Esta pergunta fica dançando na minha cabeça há tempos e a melhor resposta que pude resumir é: porque existem humanos e tecnologia barata à disposição. Sendo humanos, todos querem ter o seu minuto de janela neste universo. Portanto, utilizam a tecnologia barata à disposição.

O resultado desta salada é um conjunto de bobagens linguagens umangleltra especializadas que distorcem os conceitos matemáticos existentes por detrás da Ciência da Computação, e aplicam camadas de “gírias” sobre o bom e velho latim.

Se filtrarmos estas linguagens de seus dialetos encontraremos as raízes no trabalho de alguns cientistas que trabalharam durante a primeira metade do século XX, resolvendo estes problemas, assim como resolveram outros em física, matemática, biologia, etc. Criaram soluções, demonstraram possibilidades, levantaram hipóteses e teorizaram bastante. No fim dos anos 60, início dos 70, a tecnocracia existente resolveu reaver o dinheiro empregado nas pesquisas feitas por aqueles cientistas e começaram a empacotar “produtos” comercializáveis. Daí as primeiras gerações de Unix, Computadores Pessoais, Suítes de Escritórios, Bancos de Dados, enfim tudo aquilo que utilizamos hoje só que numa versão “preto e branco” ainda não refinada.

Passados vinte anos, começaram a reinventar a roda e “travestir” a matemática, feita nos quadros negros com giz branco, em janelas coloridas manipuláveis com mouse. A peça principal que antes existia – o Professor – foi substituído por uma entidade onipresente, onipotente e onisciente: o Google!  Ótimo, agora todos são cientistas, cineastas, fotógrafos, jornalistas, radialistas e querem deixar a sua marca face no “book” da tecnologia.

E onde está o foco deste artigo, MaRZ?

Voltando ao ponto central. Eu busco ver isto tudo como evolução e o preço que pagamos por ela é o da assimilação. Trata-se de um processo de digestão. Devemos “comer” toda a informação, mastigar bem, digerir e …

Existem certos sistemas operacionais, linguagens e “tablets” que devem ter o mesmo destino do subproduto de uma digestão.

No processo digestivo, entretanto, absorvemos certos nutrientes que deram tempero e são saudáveis. Entre eles eu considero o paradigma da orientação a objetos e alguns padrões de desenvolvimento. O padrão MVC é um que eu realmente acho interessante.

Daí surge um problema que me atormenta há anos. Como utilizar OOP em projetos simples e rápidos sem abrir mão das raízes matemáticas de linguagens funcionais?

Em primeiro lugar, devemos entender o que é orientação a objetos e isto é um assunto extenso, que não consigo resumir e, confesso, não sou um expoente deste conhecimento. Somente sei que aplico alguns conceitos e gostaria de evoluir mais com isto.

Só para registrar, dizem que uma linguagem deve possuir meios de implementar a tríade – Encapsulamento, Polimorfismo e Herança – para ser considerada uma linguagem orientada à objetos “de facto”. Há controvérsias, pois penso que estes trẽs itens são conceitos e não artifícios. Podem existir nestas linguagens certos artifícios que facilitem a implementação do conceito. Mas como todo conceito acaba sendo subjetivo, surgem as guerras sobre qual a linguagem que se aplica melhor ao conceito. E assim filosofia fluirá nos guardanapos ad eternum, no seu passo de automato: hipótese, síntese e antítese.

Recentemente, num projeto pequeno que estou fazendo, senti necessidade de aplicar o MVC para agilizar o processo. Mas somente fiz isto após definir bem algumas funções de chamadas às bibliotecas pré-existentes, testes de regressão e alguma otimização. Mas ficou – e ainda está – faltando uma “cola” que una de forma simples o meu conjunto de código já existente.

Neste ponto é que percebo onde a linguagem C é ineficiente, até mesmo frustrante. Falta alguma coisa!

  • Usar C++ ? Não, isto muda o conceito de “pequeno” para grande e o meu “pequeno projeto” vira um elefante branco descontrolado.
  • Criar extensões em linguagens que já contenham o paradigma? Não, isto cria “pontos de dilatação” muito sensíveis. Teria que se lidar não com uma, mas duas ou mais linguagens e, convenhamos, dar manutenção nisto é muito desagradável.
  • Usar um Framework? Não. Deixo de aprender uma linguagem e passo a ter que ler manual de um produto. Confesso que não gosto de ler manual, principalmente sabendo que o produto vai ficar obsoleto em questão de meses.

A opção menos áspera, estou investigando ainda, me parece ser a de aplicar os conceitos de OOP, utilizando-se os recursos que se tem em mãos. Este conceito começa a existir na imaginação e não se impõe ao código, mas trabalha junto com ele.

Dou um exemplo disto usando o Lego.

Consguimos fazer uma esfera com ele, mas para ficar perfeita o quão queira, a peça, no caso a bola, teria que crescer mais e mais. Quanto maior, mais perfeita, mas sempre seria composta de blocos retangulares.

O ponto chave, na minha opinião é: você deve enxergar uma bola, mesmo na primeira peça a ser montada. Isto é muito fácil para uma criança pois ela, sendo dotada de muita imaginação, não possui os limites de realidade impostos aos adultos. E, para um adulto, isto é muito complexo pois gera grandes desconfortos: quantas peças eu tenho para montar esta bola? Quão redonda eu necessito e posso pagar por ela? Será que vai agradar? Eu poderia ter um Lego com peças especializadas ou mesmo menores?

Nesta abstração, enxergar a bola na primeira peça que é a parte díficil.

Na prática, ainda estou estudando este assunto mas encontrei alguma luz no fim do túnel aqui: Object-oriented programming in C.

No mais, o resto é atitude pragmática e desprendimento de pré-conceitos.

  • Não sou matemático, mas gosto e uso matemática no meu ofício
  • Não sou carpinteiro, mas gosto de construir objetos, além de somente conceitos e idéias
  • Gosto de C e não quero chafurdar no pântano de tecnologias sem sentido “só porque estão aí” ou acadêmicas demais
  • Não sou gerente, mas gosto de produtividade e medir a quantas anda a minha

{}’s

MaRZ

Anúncios

Um comentário sobre “E os objetos?

Deixe um comentário

Faça o login usando um destes métodos para comentar:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s