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

Conceitos de Paradigmas de Programação: Procedural e Estruturado, diferenças

Estou estudando a evolução dos Paradigmas de Programação, e esbarrei em algumas informações confusas.
Darei uma breve explicação de conceitos e ideias das quais aprendi, e em seguida farei algumas perguntas, mas gostaria que, se estiver errado meu texto base, também apontem seus erros e os motivos.

Paradigma de Programação é um meio de se classificar as linguagens de programação baseado em suas funcionalidades, conceitos e ideias. As linguagens podem ser classificadas em vários Paradigmas.
Paradigmas de Programação são abordagens ou estilos de organização, estruturação e criação do código-fonte de um programa, um "conjunto de ideias" de como fazer isso. Como conseguiríamos modelar a resolução de um problema em um software, ou seja, é uma forma de estruturar e organizar uma solução. Cada Paradigma envolve seus próprios conceitos, técnicas e estruturas.

Durante meu estudos, aprendi que o Paradigma Imperativo foi o primeiro paradigma a ser usado na computação, com o Paradigma Declarativo sendo usado logo depois.
Com o passar do tempo e a evolução dos compiladores, a programação Procedural foi concebida, onde o uso de funções foi implementado.
Momentos mais tarde, nasce o Paradigma Estruturado, que visava eliminar os desvios incondicionais da programação procedural, os famosos "GOTO", propagando apenas os desvios condicionais, os populares "if, else, ..." que conhecemos hoje, além de propor melhor organização do código.
E por fim, sendo um dos mais usados atualmente, a Orientação a Objetos se torna "a evolução" do Paradigma Estruturado.

Note que ignorei propositalmente o Paradigma Declarativo e todas suas derivações, como o Lógico e o Funcional, pois o foco por agora é o Imperativo.

Com base nisso, eu tenho algumas perguntas:

Uma linguagem puramente imperativa continha condicionais, loops e todas estas estruturas de controle que conhecemos hoje? Sei que em Assembly, a linguagem que mais se assemelha com a "pureza" da programação imperativa, atualmente, possui "jump if equal" e outros tipos de controle de fluxo, mas isto existia nas mais primitivas versões, ou foram concebidas com a programação Procedural? Se elas não existiam, quais eram as soluções usadas para substituir estes recursos?

Qual exatamente veio primeiro e qual exatamente é considerada "uma evolução" da outra, a programação Procedural, ou a programação Estruturada?

Qual seria as definições mais corretas do Paradigma Procedural e do Paradigma Estruturado? Qual suas maiores diferenças?

Se a programação estruturada tiver sido concebida depois da procedural, além da eliminação dos desvios incondicionais (GOTO), quais outras mudanças foram feitas?

De forma rude e grosseira, podemos dizer que atualmente, os mais populares paradigmas derivam de dois paradigmas fundamentais: o Imperativo e o Declarativo?

Note que eu sei que todos estes paradigmas, na maior parte das vezes NÃO são mutualmente exclusivos, e que no fim, as linguagens implementam vários recursos e vários paradigmas ao mesmo tempo.

Carregando publicação patrocinada...
2

Para ajudar:

E por fim, sendo um dos mais usados atualmente, a Orientação a Objetos se torna "a evolução" do Paradigma Estruturado.

Não, há uma distância enorme entre os dois. Não dá para comparar, porque cada um deles atuam em áreas diferentes do código e são completamente ortogonais. Não há a menor chance de um ser a evolução de outro. Mesmo considerar OO uma evolução do procedural seria incorreto, ainda que mais próximo. Na verdade, o parágrafo anterior da postagem original mostra que não há como relacionar os OO com PE.

O paradigma mais usado atualmente é o imperativo. O tempo todo, em quase todos os códigos. OO é secundário. Ele é mais falado do que usado. E só é usado corretamente quando há completo entendimento dele, o que é bem mais difícil do que parece, fazer OO errado é fácil, fazer certo não é. As pessoas querem fazer OO porque todo mundo fala que faz OO. Por isso é muito comum a pessoa postar "dúvidas de OO", segundo ela, quando o problema dela é no if.

Conforme postei em https://www.tabnews.com.br/brunohfdev/em-suas-palavras-defina-paradigma-de-programacao, esses são praticamente os dois paradigmas que se usa hoje em dia (na verdade quase só o imperativo), mas não há uma hierarquia clara de evolução. São coisas distintas. Outros podem ser usados junto com um deles, mas não é uma derivação. Para ser derivação precisa ser a mesma coisa, com algo a mais (viu como OO é difícil?, é extremamente comum as pessoas criarem hierarquias programando OO quando elas não cabem e ferem Liskov).

Inclusive para algo ser evolução não deveria ter perda, e OO tem perdas em relação ao procedural. Pode ter ganhos, podem ser muitos, mas a perda mostra que é só algo diferente, está do lado, não abaixo (ou acima dependendo do ponto de vista).

Da minha palestra:

4 paradigmas primários, e dezenas secundários

Ali tem cópia da Wikipedia, mostrando como tem muitos paradigmas, que as pessoas nunca ouviram falar, e OO é só um deles, sem nada demais. Em geral, nenhum tem relação direta com outro. Algumas pessoas consideram que orientação sequer é paradigma. Só cuidado, porque slides servem para ilustar algo que é falado com mais detalhes no momento da palestra.

Faz sentido para você?

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

1

Obrigado Maniero, me ajudou muito! Tanto nessa postagem quanto na minha anterior.
Assim que eu tiver uns Tabcoins eu volto pra agradecer!