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.