Executando verificação de segurança...
Em resposta a [Não disponível]
1

Não só na minha, mas de outras pessoas também: https://pt.stackoverflow.com/q/141624/101.

Lá falo inclusive que esse é um dos conceitos mal defindos e onde a Wikipedia pode ajudar em um ponto, mas prejudicar em outro.

O que é paradigma?

Segundo a Wikipedia:

Paradigma (do latim tardio paradigma, do grego παράδειγμα, derivado de παραδείκνυμι «mostrar, apresentar, confrontare») é um conceito das ciências e da epistemologia (a teoria do conhecimento) que define um exemplo típico ou modelo de algo. É a representação de um padrão a ser seguido. É um pressuposto filosófico, matriz, ou seja, uma teoria, um conhecimento que origina o estudo de um campo científico; uma realização científica com métodos e valores que são concebidos como modelo; uma referência inicial como base de modelo para estudos e pesquisas.

Em verbete mais específico sobre programação:

A noção de paradigmas de programação é uma forma de classificar as linguagens de programação de acordo com o estilo de programação de computadores. Características de várias linguagens de programação determinam quais paradigmas elas pertencem; Como resultado, alguns idiomas caem em apenas em um paradigma, ao passo que outros cair em vários paradigmas. Alguns paradigmas estão preocupados principalmente com implicações para o modelo de execução da linguagem, como permitir que os efeitos secundários, ou se a sequência de operações é definido pelo modelo de execução. Outros paradigmas estão preocupados principalmente com a maneira que o código é organizado, como o agrupamento de código em unidades, juntamente com o estado que é modificado pelo código. No entanto, outros estão preocupados principalmente com o estilo de sintaxe e gramática.

Se tiver que resumir em uma frase: é apenas um estilo de como escrever um código. É o jeitão que o texto (código) ficará em linhas gerais.

Algumas pessoas preferem falar no paradigma de forma mais ampla e não só no código, aí é o estilo da solução como um todo.

Em geral existem algumas "regras" que determinam o que pode ou não ter no código indicando se ele é de um paradigma ou de outro. Algumas coisas são proibidas, algumas são obrigatórias.

Claro que a regra é livre, mas eu vejo algumas pessoas pegando um subset das regras do paradigma e dizer que algo foi escrito conforme aquele paradigma. Provavelmente é um equivoco. Inclusive porque alguns paradigmas são subsets de outros, aí você dá um nome para uma coisa quando na verdade é outra.

É comum as pessoas quererem que seu código seja do paradigma da moda, mesmo que ele nem passe perto daquilo.

Existe algum mais importante que outro?

Não dá para afirmar isso. Existem alguns mais populares (tecnicamente ou por marketing).

Algumas pessoas consideram que só existem três ou quatro paradigmas. Determinam isso através de um vetor com duas características que o código pode ter.

"Mas eu vi uma lista enorme no artigo da Wikipedia". Sim, existem diversos outros secundários que podem ser combinados com esses principais. Mas não perca de vista que eles são secundários, mesmo que algum deles seja mais famoso. Fama nada tem a ver com utilização efetiva. Alguns consideram um abuso chamá-los de paradigma.

As linguagens podem executar ou avaliar, focar no mecanismo ou na consequência.

  • Quando executa e foca no mecanismo tem-se o paradigma imperativo. É disparado o mais usado, para o bem ou para o mal seu uso é esmagador. Na prática a maioria dos programadores nunca experimentaram nada fora dele. A imensa maioria das linguagens são baseadas nele. Todas as fortemente mainstream.

  • Quando avalia e foca no mecanismo tem-se o paradigma funcional. Tem um nicho expressivo que o usa, mas é só isso (pelo menos em sua forma pura, se bem que dizem que não existe nenhum linguagem viável de fato puramente funcional). É muito comum pegar partes dele para complementar o imperativo. Lisp, ML, Haskell, são exemplos.

  • Quando avalia e foca na consequência tem-se o paradigma lógico. Sua utilização é extremamente restrita e a imensa maioria dos programadores nunca viram um código nele. A ascensão da inteligência artificial poderia aumentar ligeiramente o seu uso, mas não está acontecendo. Prolog é a linguagem mais clássica.

  • Quando executa e foca na consequência tem-se o paradigma de metas. Na prática não é usado em lugar algum, por isso alguns o desconsideram.

Paradigmas

Outros paradigmas basicamente não podem existir sem que estes estejam na base. Por isso os demais são ortogonais e estes não o são entre eles (ainda que se possa misturar alguns elementos, mas não todo o paradigma).

Há quem diga que só há o imperativo e o declarativo. Posso aceitar essa definição.

Há um definição que a linguagem só pode ter um paradigma, o resto são features extras. Faz sentido. E aí é melhor definir só os principais, se tentar definir todas combinações possíveis vira uma loucura.

OOP

"Mas ouço tanto de orientação a objeto, ele não é importante?". Não. Ele é útil. Para alguns problemas, é uma escolha altamente desejável. Outras vezes um paradigma parecido, ou uma combinação de outros paradigmas, é mais adequado.

Mesmo em linguagens ditas puramente orientadas a objeto (estou falando de Smalltalk, nem de Java, Ruby e coisas do tipo que chega ser risível usar as palavras "OO" e "pura" junto com seus nomes) no fundo o paradigma base é imperativo com forte influência da orientação a objeto. É verdade que o imperativo tenta ser escondido, mas ainda está lá.

Sua importância está mais na cabeça das pessoas (ainda que a maioria nem entende o que o paradigma quer dizer e como usá-lo, até porque há controvérsias sobre o que ele é de fato) do que na capacidade de definir algo útil para o código. Ele é útil em pontos bem específicos. Correndo o risco da resposta ficar datada, ele é o Trump da programação. Todos falam dele, poucos o entendem. Muitos o apoiam, poucos precisam disto na maior parte do tempo. Ele é útil, mas não para protagonismo.

Se você for dos que consideram que os secundários nem são paradigmas, então OO não é um paradigma :P

Paradigmas secundários

Alguns passam raspando como paradigma. Se achar que só é paradigma se puder existir de forma independente então talvez nenhum destes sejam paradigmas de fato.

Grande parte deles referem-se à organização do código (em geral às estruturas de dados) ou a um mecanismo específico, portanto ele só pode ser aplicado em parte do código. Por isso muitas vezes se usa a expressão "orientado a".

Já falei do mais famoso.

Meta programação é um usado em algumas linguagens e tende ser usado cada vez mais para dar flexibilidade e expressividade ao código, quando os problemas estão cada vez mais complexos e vão achando boas soluções. Uma parte disso é a reflexão. A programação genérica é outro que é um subset deste. Já a orientação à linguagem é provavelmente um superset.

Um mecanismo importante é o evento. Outro, em alguns problemas, é o agente.

Outro mecanismo bem interessante ganhando um pouco de popularidade é o orientado a aspecto.

É comum existirem pontos específicos para facilitar o paralelismo e a concorrência.

Cada vez mais é usado o de contrato. Nem todos consideram um paradigma, mas se não for, a maioria dos secundários não é.

Algumas linguagens adotam algum mecanismo bem específico. Até o paradigma genético existe.

As pessoas deveriam conhecer mais o paradigma modular (mais informações). Em certo aspecto é um superset de OOP.

Enfim, só para citar alguns.

Há quem considere que não existem paradigmas. Eu discordo.

Diagrama mostrando os principais paradigmas:

Paradigmas de programação

É a mesma coisa que design pattern?

Não é a mesma coisa. Um padrão de projeto é algo mais específico, resolve algo mais contido e tem um exemplo mais concreto de como implementar uma solução para o problema. Está mais para um gabarito.

Muitas vezes um padrão de projeto é implementado na linguagem de forma transparente, ajudando atingir um objetivo de um paradigma.

Se a solução envolver um nível acima de abstração do problema provavelmente ele será chamado padrão de arquitetura.

É o mesmo que idioma?

São técnicas mais específicas, normalmente dentro de um paradigma. É comum se aplicar apenas a uma linguagem específica. Digamos que fica em um meio termo entre o padrão de projeto e o paradigma.

Coloquei no GitHub para referência futura.

Espero ter ajudado.


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).

Carregando publicação patrocinada...