Ao pesquisar em torno de (livros, Wikipedia, perguntas semelhantes sobre SE, etc), eu entendi que a programação Imperative é um dos principais paradigmas de programação, onde você descreve uma série de comandos (ou instruções) para o computador executar (para você muita ordem para que ele tome ações específicas, daí o nome "imperativo"). Por enquanto, tudo bem.
A programação procedural, por outro lado, é um tipo (ou subconjunto) específico de programação Imperative, na qual você usa procedimentos (ou seja, funções) para descrever os comandos que o computador deve executar.
Primeira pergunta : Existe uma linguagem de programação imperativa que não é processual? Em outras palavras, você pode ter programação imperativa sem procedimentos?
Atualização : Esta primeira pergunta parece ter sido respondida. Uma linguagem pode ser imperativa sem ser processual ou estruturada. Um exemplo é a linguagem Assembly pura.
Então você também tem a programação estruturada, que parece ser outro tipo (ou subconjunto) de programação imperativa, que surgiu para remover a dependência da instrução GOTO.
Segunda pergunta : qual é a diferença entre programação processual e estruturada? Você pode ter um sem o outro e vice-versa? Podemos dizer que a programação procedural é um subconjunto da programação estruturada, como na imagem?
fonte
Primeira pergunta: Sim, muitas linguagens orientadas a objetos puras se qualificam. Embora tenham métodos muito próximos das funções, eles os veem em termos de mensagens e não lhes dão peso suficiente para chamar a linguagem de procedural.
Segunda pergunta: a diferença geralmente está em um escopo diferente. Você pode ter uma função com instruções goto em todo o lugar, que terão estilo processual, mas não programação estruturada. Por outro lado, a maioria das linguagens OO suporta e incentiva a programação estruturada, mas não a programação processual.
A programação processual descreve a ordem global do programa. Os programas de procedimento são aqueles que são mais efetivamente entendidos observando seus gráficos de chamada. A programação estrutural é uma propriedade local, aplica-se ao uso de if e while em oposição a goto.
Como tal, essas duas propriedades são disjuntas, você pode ter uma delas sem a outra.
fonte
unsafePerformIO
permite causar estragos). Outros brincam que Haskell é sua linguagem de programação imperativa favorita. Mas o fato é que um alto grau de código Haskell vive separado de maneira limpaIO
, não usa brechas fora do padrão para ocultar os efeitos colaterais e é puramente funcional.a maioria das línguas populares dos últimos 50 anos foi projetada em torno da arquitetura de computadores predominante, chamada arquitetura Von Neumann , em homenagem a um de seus criadores, John von Neumann.
Esses idiomas são chamados de idiomas imperativos.
Em um computador von Neumaan, os dados e os programas são armazenados na mesma memória. A CPU que executa as instruções é separada da memória. Portanto, instruções e dados devem ser transmitidos da memória para a CPU. Os resultados das operações na CPU devem ser retornados à memória. Quase todos os computadores digitais construídos desde a década de 1940 são baseados na arquitetura von Neumaan.
fonte
Receio que nenhuma das respostas dadas até o momento capture muito bem o núcleo dos conceitos.
Imperativo, procedural e estruturado não são propriedades mutuamente exclusivas, elas apenas se concentram em um único aspecto da lógica de modelagem.
Imperativo é a contraparte do declarativo Imperativo basicamente significa que você diz ao computador o que fazer , executando uma série de instruções fornecidas. Um programa declarativo, por outro lado, diz o que alcançar . Em outras palavras, defina etapas versus defina um resultado.
A programação procedural refere-se à capacidade do processador (hardware ou intérprete) de agrupar instruções em compostos, pular para um composto e retornar ao ponto após o salto, uma vez que o composto tenha sido executado. Isso pode parecer trivial e, segundo os padrões atuais, mas você precisa de algum suporte básico na máquina antes de fazer isso: a capacidade de pular, algum tipo de pilha para enviar um endereço que possa ser acionado e saltado para mais tarde. ponteiro de pilha. Os microprocessadores logo ofereceram esse recurso, mas você pode imaginar um processador primitivo capaz de executar instruções fornecidas sequencialmente, como uma fita perfurada ou um processador de cartões perfurados.
A programação estruturada é o próximo passo da capacidade de pular para outra instrução. Por fim, tudo se resume a saltos, mas se você pode ter saltos condicionais, pode criar instruções básicas de fluxo de controle como se-então, por enquanto, repita até e alterne. Aplicá-los é chamado de programação estruturada.
Em qualquer ambiente de programação moderno, você terá todas as opções acima e as tomará como garantidas, para que não falemos mais delas. As propriedades de diferenciação entre linguagens há muito mudaram para paradigmas de nível superior, como orientação a objetos e programação funcional.
A programação declarativa ainda não é comum, principalmente porque sempre será específica do domínio, pelo menos até certo ponto. Você não pode ter uma linguagem declarativa de uso geral. É por isso que ainda estamos presos às chamadas linguagens de terceira geração, nas quais a programação declarativa ou "modelagem" seria considerada de quarta geração.
fonte