Diferença entre as programações Orientação-objetos, Imperativa e Funcional

OO, IMPERATIVA E FUNCIONAL

Hoje eu quero explicar um pouco melhor essa diferença entre Programação Funcional, Orientação-objetos e Imperativa.

Primeiro, todos os paradigmas são interessantes e importantes, mas antes de falarmos sobre cada um deles, o que é um paradigma?

Ele vai dizer como você abstrai seu problema do “mundo real” para a computação. Por exemplo, se você vende doces, como você transformar essa venda em uma forma computadorizada. O problema é que na primeira abordagem, que foi a ‘Imperativa’, nós simplesmente executávamos códigos, como comandos diretos, mas foi chegando em uma situação onde ficava muito complexo para entender, não existia uma forma de classificar esse código que deixasse ele um pouco mais fácil de dar manutenção.

Uma das formas que surgiram para resolver isso foi a orientação-objetos. Ela tenta abstrair os objetos que estão envolvidas nos problemas e então agrupamos essas funções e dados dentro desses objetos. Por exemplo, eu quero modelar um produto, ele é uma classe, quando eu quiser instanciar essa classe eu vou ter um objeto, que são os valores dentro dessa classe. O problema é que para você programar com orientação-objetos, você tem que conhecer algumas regras ou boas práticas, como patterns, mas o problema maior é quando o pessoal programa em uma linguagem orientada objeto, porém ainda faz imperativa. Para dominar o orientado objeto demora para conseguir fazer essa abstração de maneira interessante.

Quando pegamos uma linguagem funcional, o pessoal aplica o mesmo conceito de orientação-objetos dentro do funcional, isso é algo que não me agrada. Você trazer muita coisa de orientação-objeto para um paradigma diferente. Cada paradigma tem suas próprias características.

Fazendo isso, nós começamos a classificar as coisas cedo demais. Algo que eu acho muito legal da programação funcional é que conseguimos construir pequenos blocos, que são as funções, podemos passar elas como parâmetros, por exemplo. O legal disso é que não assumimos nenhuma classificação inicial para isso. Caso a gente queira fazer tudo em um arquivo só e depois ir quebrando em funções, é possível. Fazendo isso nós podemos amadurecer e estabilizar melhor para depois organizar. Não precisamos ter isso de começo, porque muitas vezes uma arquitetura te impõe erros, pois temos uma arquitetura muito bem definida mas tem coisas que não se encaixam em nem um lugar nem em outro.

Para não acontecer isso em programação funcional, é interessante não trazer esses conceitos e apenas a ideia desse pattern.

Mas o maior problema que eu vejo hoje em orientação-objetos é exatamente a questão de que, quando ele começa a crescer, existem coisas que não se encaixam em nenhum lugar dentro da arquitetura.

Então a grande vantagem para as três abstrações é saber utilizar elas do jeito delas e não tentar aplicar esse paradigma em outro.

Deixe suas dúvidas e sugestões nos comentários. Curta o DevPleno no Facebook, se inscreva no canal no YouTube e cadastre seu e-mail para não perder as atualizações. Abraço!