3 Paradigmas e Linguagens de Programação
Paradigma de programação Um paradigma de programação é um estilo paradigmático de programar Um paradigma de programação (e determina) a visão que o programador tem da execução de um programa Exemplos Orientada a objetos Funcional
Paradigmas de Programação Imperativo Declarativo Funcional Baseado em Lógica Orientação a Objetos Multi-paradigma? Linguagens podem ser classificadas? Nenhum critério de classificação atende plenamente
Linguagem imperativa Uma linguagem que opera através de uma sequência de comandos que modificam o valor dos elementos de dados Características principais: Comandos de atribuição Comandos de iteração
Linguagem procedimental Uma linguagem que define como computar o resultado/solução para um dado problema Inclui linguagens imperativas e funcionais
Linguagem declarativa Uma linguagem que opera através de comandos descritivos sobre dados e relações entre dados O algoritmo fica escondido na semântica da linguagem Inclui linguagens aplicativas e lógicas
Linguagem aplicativa Uma linguagem que opera através da aplicação de funções a valores, sem efeitos colaterais. Inclui linguagens funcionais no sentido amplo.
Linguagem funcional Em um sentido estrito, uma linguagem funcional opera através do uso de funções de mais alta ordem (higher-order functions), construindo operadores que manipulam funções diretamente sem aparentar que manipulam dados.
Linguagem lógica Uma linguagem lógica lida com predicados ou relações p(X,Y). Um programa consiste em um conjunto de cláusulas de Horn: fatos - p(X,Y) é verdade regras - p é verdade se q1e q2 e ...qn for verdade consultas – É verdade que g1 e g2 e ...gn? (gi's são goals.) Cláusulas adicionais são inferidas através de resolução.
Exemplos de paradigmas de programação Imperative programming, compared to Functional programming Procedural programming, compared to Declarative programming Class-based programming, compared to Prototype-based programming (within the context of Object-oriented programming) Aspect-oriented programming (as in AspectJ) Symbolic programming (as in Mathematica) Post-object programming Subject-oriented programming ...