ScholarGate
Assistente

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.

Encontrar tema com PaperMindEm breveFind papers & topics
Tools & resources
Baixar slides
Learn & explore
VídeoEm breve

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.

Methods for this concept

Related concepts