quinta-feira, 10 de dezembro de 2009

Objetos versus Procedimentos



De tempos em tempos encontro uma discussão relacionada com os conceitos iniciais de programação que devem ser apresentados em uma disciplina introdutória. Inevitavelmente, o foco acaba destacando uma antiga (agora) discussão: seguir a trilha das linguagens procedimentais ou seguir a trilha das linguagens OO.

Solução de Problemas

Acredito que um ponto importante a ser considerado é aquele que se relaciona com o tema "solução de problemas" no nível abstrato. Esse tema conduz, naturalmente, ao estudo dos algoritmos [Vega, 2008]. Ou seja, quais técnicas auxiliam na descoberta de instruções que resolvem um problema? Quais técnicas auxiliam a organizar tais instruções para que o problema seja resolvido? Como saber se o algoritmo, ao ser executado (em uma máquina abstrata) resolve o problema? O estudo das estruturas de controle (sequencia, decisão e repetição) não pode ser excluído. Como, também, as diferentes maneiras de se organizar as informações manipuladas pelas instruções do algoritmo.

Codificação

Por outro lado, a codificação do algoritmo (e das estruturas de dados), revela um outro tema, de natureza diferente ao de "solução de problemas". Preocupa-se com a geração de um código que resolve um problema ao ser executado em uma máquina concreta (física ou virtual). Quais técnicas são apropriadas para gerar o código? Como coordenar os esforços de vários programadores, quando da geração de trechos de código que devem ser posteriormente integrados?

Seriam as questões relacionadas à solução de problemas e de codificação tratadas em um momento introdutório? Certamente. E como fazer isso? Qual o papel das linguagens de programação?

3 comentários:

  1. Não devemos considerar que a performance também é um problema? Apesar de eu ser mais a favor do uso da linguagem OO, eu percebi que o melhor depende da situação.
    Existem momentos em que a performance de um programa fica melhor em linguagem OO, mas também há momentos em que a performance melhor só é possível ao se usar uma linguagem de baixo nível, procedural... Certo?

    Abs!

    ResponderExcluir
  2. Sim, performance é uma das categorias de requisitos não-funcionais que devem ser resolvidos pela arquitetura computacional. Entretanto, antes mesmo de chegar a este ponto de discussão, um iniciante deve ter contato com o conceito de "programação de computadores". Aparentemente, o paradigma procedimental cria a sensação que o problema de implementação é mais simples: basta codificar o algoritmo proposto pela etapa de "solução de problemas". É comum a preocupação em se otimizar uma computação descrita por um código que sequer resolve o problema do usuário...

    ResponderExcluir
  3. Hahaha! É verdade! Tem programas que caem nesse conceito de "performance ótima, contanto que não resolva o problema inicial", hehehe...

    ResponderExcluir