Executando verificação de segurança...
5

Alguns Paradigmas de programação! Você conhece todos?

Hoje quero mostrar algun tipo de Paradigmas de programação. Incluindo os bem conhecidos!

Imperativo : Programação com uma sequência explícita de comandos que atualizam o estado.

Declarativo : Programação especificando o resultado que você deseja, não como obtê-lo.

Estruturado: Programação com estruturas de controle aninhadas limpas, goto-free.

Processual : Programação imperativa com chamadas de procedimento.

Funcional (Aplicativo): Programação com chamadas de funções que evitam qualquer estado global.

Nível de Função (Combinator): Programação sem nenhuma variável.

Orientado a Objetos : Programação definindo objetos que enviam mensagens uns aos outros. Os objetos têm seu próprio estado interno (encapsulado) e interfaces públicas. A orientação a objetos pode ser:

  • Baseado em classe : os objetos obtêm estado e comportamento com base na participação em uma classe.
  • Baseado em protótipo : os objetos obtêm o comportamento de um objeto de protótipo.

Orientado a Eventos : Programação com emissores e ouvintes de ações assíncronas.

Flow-Driven : Processos de programação que se comunicam uns com os outros através de canais predefinidos.

Lógica (baseada em regras): Programação especificando um conjunto de fatos e regras. Um mecanismo infere as respostas às perguntas.

Restrição: Programação especificando um conjunto de restrições. Um mecanismo encontra os valores que atendem às restrições.

Aspect-Oriented : Preocupações transversais de programação aplicadas de forma transparente.

Reflexivo: Programação manipulando os próprios elementos do programa.

Array : Programação com poderosos operadores de array que geralmente tornam os loops desnecessários.

Os paradigmas não devem ser mutuamente exclusivos; um único programa pode apresentar vários paradigmas!

Poucas linguagens implementam um paradigma 100%. Quando o fazem, são puros. É incrivelmente raro ter uma linguagem “OOP pura” ou uma linguagem “funcional pura”. Muitos idiomas têm alguns escapes; por exemplo, no OCaml, você programará com funções 90% ou mais do tempo, mas se precisar de estado, poderá obtê-lo. Outro exemplo: pouquíssimas linguagens implementam OOP da maneira que Alan Kay imaginou.

Muitas linguagens facilitarão a programação em um ou mais paradigmas. No Scala, você pode fazer programação imperativa, orientada a objetos e funcional com bastante facilidade. Se uma linguagem é propositadamente projetada para permitir a programação em muitos paradigmas, ela é chamada de linguagem multiparadigma. Se uma linguagem suporta apenas acidentalmente vários paradigmas, não temos uma palavra especial para isso.

Carregando publicação patrocinada...
4

Eu sempre agradeço quando alguém aborda um tema importante para discutir e por isso costumo votar na postagem original, mesmo quando não concordo com tudo o que está escrito nela.

Há controvérsias sobre o que é paradigma de programação ou não. Até mesmo há quem questione se o que chamam de paradigma é de fato.

Eu dei uma boa estudada sobre o assunto. Nada que permita eu escrever uma tese, mas a minha conclusão é que esse é mais um daqueles assuntos que ninguém sabe de nada, inclusive eu, claro.

A página da Wikipedia sobre o assunto é uma colcha de retalhos escrita por "trocentas" mãos e amplamente inconsistente. Portanto não é confiável e é uma das fontes ruins.

O problema é que é bem difícil achar fontes boas.

Eu adotei uma definição que encontrei em discussões entre alguns dos melhores desenvolvedores de softwares do mundo e postei sobre isso, não vou repetir tudo aqui. De lá dá para ir para outras respostas que dou mais detalhes para quem quer se aprofundar e entender melhor.

Em resumo (não, isto não é o ChatGPT :D), só existem os paradigmas imperativo, funcional e lógico. O resto até pode ser considerado paradigma, mas secundário. Em geral as orientações não deveriam ser chamadas de paradigma.

E sim, orientação a objeto não é paradigma, muito menos é importante como as pessoas acham. Elas usam OOP de fato muito menos do que elas mesmas acham que usam. É impossível usar OOP o tempo todo, o grosso do código trata de outras coisas. As pessoas mais gostam de afirmar que usam OOP do que usam de fato, até por não entender o que estão usando. É uma questão de estar na moda e não de entender sobre a ciência/engenharia da coisa. Nem vou falar muito sobre o fato OOP nem ter definição universal que alguns acham, inclusive a falha de crer no que o Alan kay falou, para não desviar o foco aqui. Quem quiser saber mais pesquise porque já respondi sobre isso em diversos lugares.

E sim, os paradigmas são mutuamente exclusivos, o que pode ser usado em conjunto não é paradigma, segundo a definição que eu adotei, porque ela pareceu fazer sentido pra mim em 40 anos trabalhando com isso e sendo bastante questionador e estudioso do assunto. A definição de paradigma demonstra que um jeito elimina o outro.

Você não consegue fazer algo imperativo e funcional ao mesmo tempo, embora possa em partes diferentes cada um deles de forma limitada. Você pode usar OO junto com imperativo ou com funcional, porque OO não é paradigma.

A maioria das linguagens implementam 100% do paradigma imperativo. Algumas poucas implementam 100% do paradigma funcional, com algum escape em IO (em geral com Monads) porque seria impraticável de outra forma. Quase não há linguagens lógicas e não sei dizer sobre a implementação delas. Assim como o potencial paradigma de metas não tem implementação conhecida.

Algumas linguagens são puras em um destes três paradigmas. Nenhuma é pura em paradigmas secundários, precisam de um dos principais, o que mostra mais ainda como eles não podem ser tratados da mesma forma. Não existe linguagem puramente orientada a objeto.

OCaml é híbrida, não é só questão de escape, ela permite o imperativo desde que em momentos distintos.

Todas as linguagens de programação possuem estados e são acessados, a forma de manipulá-los é que muda.

No paradigma funcional, quase sempre a maior parte do código não é função, mas ela é o centro de como se codifica. No imperativo se usa função quase tanto quanto no paradigma funcional, mas ela não é o centro da atenção, especialmente não se costuma usar para fazer repetições.

Há questiuonamentos até se é certo chamar uma linguagem desse ou daquele paradigma, apesar de ser amplamente usado (popularidade não torna algo correto). Mas se for feito então deveria se concentrar nos paradigmas principais, já que em geral os secundários podem não ser usados mesm oque a linguagem entregue facilidade e influencie em favor deles, ou seja possível adotar o secundário em linguagens que não o suportem nativamente com facilidade. Você consegue fazer OO em C com algum esforço, e não usar OO em C# com alguma dificuldade, mas não consegue deixar o imperativo nelas.

E eu não conheço todos, nem mesmo de nome.

Eu não brigo com quem quer usar outras definições, acho um direito usar outras fontes, mas gostaria que a pessoa aos menos justificasse a escolha, colocasse as fontes, para não ser só a repetição de algo publicado sem uma análise mais profunda, não ser só um "Maria vai com as outras".

Estou à disposição se tiverem dúvidas sobre o assunto e até de paradigmas específicos, ele não é tão simples quanto parece e há muita confusão na internet e até em livros. Entender isso e estudar linguagens de diferentes paradigmas aumenta muito a capacidade de programação das pessoas, recomendo!

Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).

1
0