Paradigmas de Linguagem
Paradigmas de programação são os estilos fundamentais que organizam como a computação é expressa, desde a mutação de estado imperativa até modelos funcionais, lógicos e declarativos.
Definition
Um paradigma de programação é um conjunto coerente de conceitos e princípios estruturantes para organizar a computação dentro de uma linguagem, definindo quais são as unidades básicas de um programa (instruções, expressões, objetos, relações) e como elas se compõem.
Scope
Esta área abrange os principais paradigmas das linguagens de programação e os modelos computacionais que os sustentam: programação imperativa e orientada a objetos construída sobre estado mutável e passagem de mensagens; programação funcional construída sobre avaliação de expressões e funções de ordem superior; programação lógica e por restrições construída sobre relações e busca; e metaprogramação, onde os programas manipulam programas. Aborda como os paradigmas moldam o design da linguagem, as compensações que incorporam e como as linguagens multi-paradigma modernas os combinam.
Sub-topics
Core questions
- O que distingue um paradigma de outro, e essas distinções são nítidas ou questões de ênfase?
- Como os paradigmas afetam a correção, modularidade e raciocínio do programa?
- Estilos imperativos e declarativos podem ser unificados, e o que se ganha ou se perde ao misturá-los?
- Como o modelo computacional subjacente (máquina de von Neumann, cálculo lambda, resolução) influencia um paradigma?
Key theories
- Programação funcional como álgebra de programas
- Backus argumentou que a programação funcional, baseada em combinadores, liberta as linguagens do gargalo de von Neumann, fornecendo aos programas uma álgebra de leis equacionais para raciocínio e transformação.
- Algoritmo = Lógica + Controle
- A separação de Kowalski da especificação lógica de um problema da estratégia de controle usada para resolvê-lo fundamenta o paradigma declarativo/lógico e esclarece o que o distingue do código procedural.
- Estrutura de linguagem-núcleo multi-paradigma
- Van Roy e Haridi apresentam paradigmas como extensões incrementais de uma pequena linguagem-núcleo, mostrando como conceitos como estado, concorrência e avaliação preguiçosa podem ser adicionados ou removidos para recuperar cada paradigma.
Clinical relevance
A escolha do paradigma tem consequências práticas para a engenharia de software: estilos funcionais e declarativos auxiliam no raciocínio equacional, testabilidade e paralelização, enquanto a decomposição orientada a objetos suporta modularidade em larga escala. As linguagens modernas combinam cada vez mais paradigmas, de modo que a compreensão de suas compensações informa a seleção da linguagem e o design idiomático.
History
A programação imperativa descende da arquitetura von Neumann de programa armazenado e de linguagens iniciais como Fortran e Algol. Lisp (1958) introduziu ideias funcionais enraizadas no cálculo lambda. A década de 1970 viu a programação lógica (Prolog) e a ascensão da programação estruturada e, posteriormente, orientada a objetos (Simula, Smalltalk). A palestra de Turing Award de Backus em 1977 cristalizou a crítica funcional ao estilo imperativo, e as décadas subsequentes produziram linguagens cada vez mais multi-paradigma.
Debates
- Imperativo versus declarativo como princípio organizador primário
- Um debate de longa data pesa a diretividade e o controle de desempenho do código imperativo contra as vantagens de raciocínio e composibilidade dos estilos declarativos e funcionais; a maioria das linguagens modernas o resolve suportando ambos.
Key figures
- John Backus
- Robert Kowalski
- Peter Van Roy
- Harold Abelson
- Gerald Jay Sussman
Related topics
Seminal works
- backus1978
- kowalski1979
- vanroy2004
- abelson1996
Frequently asked questions
- A programação orientada a objetos é um paradigma separado da programação imperativa?
- A programação orientada a objetos é geralmente tratada como uma disciplina de estruturação sobreposta ao paradigma imperativo: ela organiza o estado mutável em objetos com comportamento encapsulado, mas ainda depende da mudança de estado e sequenciamento.
- Os paradigmas são mutuamente exclusivos?
- Não. Muitas linguagens amplamente utilizadas são multi-paradigma, combinando recursos funcionais, orientados a objetos e imperativos para que os programadores possam escolher o estilo mais adequado para cada tarefa.