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 • Paradigmas • Multi-paradigma? – Imperativo – Declarativo • Funcional • Baseado em Lógica – Orientação a Objetos • 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 procedimental imperativa funcional • 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 declarativa aplicativa lógica • 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. aplicativa funcional • 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 Prototypebased programming (within the context of Objectoriented programming) • Aspect-oriented programming (as in AspectJ) • Symbolic programming (as in Mathematica) • Post-object programming • Subject-oriented programming • ...