Title: Paradigmas de Linguagens de Programa
1Paradigmas de Linguagens de Programação
Augusto Sampaio acas_at_cin.ufpe.br http//www.cin.uf
pe.br/acas
Recife, primeiro semestre de 2015
2Objetivos
- Análise crítica de paradigmas e linguagens de
programação - Visão geral dos paradigmas imperativo, orientado
a objetos e funcional - Discutir alternativas de projeto de linguagens
- Estudo de linguagens através de ambientes de
execução (interpretação)
3Tópicos a serem apresentados
- Visão geral de linguagens e paradigmas
- Uma linguagem de expressões e sua implementação
em Java - Introdução à programação funcional
- Implementando funções
- Uma linguagem de comandos
4Tópicos a serem presentados
- Implementando estruturas de controle, I/O e
atribuição - Procedimentos e passagem de parâmetros
- Implementando procedimentos
- Tipos abstratos de dados
- Implementando tipos abstratos de dados e classes
- Implementando subtipos e herança
- Outros conceitos e paradigmas apresentados nos
projetos
5Metodologia de Ensino
- A ênfase do curso é em conceitos
- Java será utilizada como uma ferramenta prática
de apoio - para ilustrar o paradigma OO
- como meta-linguagem para construir
interpretadores - Os conceitos estudados serão sedimentados através
da implementação incremental de construções de
linguagens dos diversos paradigmas
6Avaliação
- 2 projetos em equipe (de até 3 pessoas) a serem
realizados durante o decorrer do curso, ou um
único projeto de maior complexidade - Prova explorando aspectos conceituais e de
implementação das construções - Os projetos valem 50 e a prova 50 da média final
7Bibliografia
- Conceitos e Paradigmas de Programação via Projeto
de Interpretadores. Augusto Sampaio e Antônio
Maranhão - Programming Language Design Concepts, David Watt
and W. Findlay, John Wiley Sons - Programming Language Concepts and Paradigms,
David Watt, Prentice Hall - Programming Language, An Interpreter-Based
Approach, Samuel Kamin, Addison Wesley - http//www.mozart-oz.org/
- Concepts, techniques and models of computer
programming, Peter Van Roy and Seif Haridi - Introduction to Functional Programming, R. Bird
and P. Wadler, Prentice Hall - Seu livro favorito sobre Java (Java 1.5 ou
posterior)
8Visão Geral de LinguagenseParadigmas de
Programação
9O que caracteriza uma Linguagem de Programação?
- Gramática e significado bem definidos
- Implementável (executável) com eficiência
aceitável - Universal deve ser possível expressar todo
problema computável - Natural para expressar problemas (em um certo
domínio de aplicação)
10Aspectos do estudo de linguagens
- Sintaxe gramática (forma)
- Semântica significado
- Pragmática (ex. metodologias)
- Processadores
compiladores, interpretadores, editores,
ambientes visuais ...
11Por que tantas linguagens?
- Propósitos diferentes
- Avanços tecnológicos
- Interesses comercias
- Cultura e background científico
12O que é um paradigma de programação?
- Modelo, padrão ou estilo de programação
suportado por linguagens que agrupam certas
características comuns - A classificação de linguagens em paradigmas é uma
conseqüência de decisões de projeto que impactam
radicalmente a forma na qual uma aplicação real é
modelada do ponto de vista computacional
13O Paradigma Imperativo
- Programas centrados no conceito de um estado
(modelado por variáveis) e ações (comandos) que
manipulam o estado - Paradigma também denominado de procedural, por
incluir subrotinas ou procedimentos como
mecanismo de estruturação - Primeiro paradigma a surgir e ainda é o dominante
14Modelo Computacional do Paradigma Imperativo
Entrada
Saída
Programa
Estado
15Vantagens do modelo imperativo
- Eficiência (embute modelo de Von Neumann)
- Modelagem natural de aplicações do mundo real
- Paradigma dominante e bem estabelecido
16Desvantagens do paradigma imperativo
- Relacionamento indireto entre E/S resulta em
- difícil legibilidade
- erros introduzidos durante manutenção
- descrições demasiadamente operacionais
focalizam o como e não o que
17O Paradigma Orientado a Objetos
- Não é um paradigma no sentido estrito é uma
subclassificacão do imperativo - A diferença é mais de metodologia quanto à
concepção e modelagem do sistema - A grosso modo, uma aplicação é estruturada em
módulos (classes) que agrupam um estado
(atributos) e operações (métodos) sobre este - Classes podem ser estendidas e/ou usadas como
tipos (cujos elementos são objetos)
18Modelo Computacional do Paradigma Orientado a
Objetos
...
. . .
. . .
. . .
19Vantagens do Paradigma Orientado a objetos
- Todas as do estilo imperativo
- Classes estimulam projeto centrado em dados
modularidade, reusabilidade e extensibilidade - Aceitação comercial crescente
20Problemas do Paradigma OO
- Semelhantes aos do paradigma imperativo, mas
amenizadas pelas facilidades de estruturação
21O Paradigma Orientado a Aspectos
- Não é um paradigma no sentido estrito
- A diferença é mais de metodologia quanto à
concepção e modelagem do sistema - É uma nova forma de modularização
- Para requisitos que afetam várias partes de
uma aplicação
22O Paradigma Orientado a Aspectos
- A grosso modo, uma aplicação é estruturada em
módulos (aspectos) que agrupam pontos de
interceptação de código (pointcuts) que afetam
outros módulos (classes) ou outros aspectos,
definindo novo comportamento (advice) - Aspectos podem ser estendidos e/ou usados como
tipos
23Modelo Computacional do Paradigma Orientado a
Aspectos
Aspecto
Aspecto
...
. . .
. . .
. . .
24Vantagens do Paradigma Orientado a Aspectos
- Todas as do paradigma OO
- Útil para modularizar conceitos que a Orientação
a Objetos não consegue (crosscutting concerns) - Em especial, aqueles ligados a requisitos não
funcionais - Aumenta a extensibilidade e o reuso
25Problemas do Paradigma Orientado a Aspectos
- Semelhantes aos do OO
- Ainda é preciso diminuir a relação entre classes
e aspectos - Problemas de conflito entre aspectos que afetam a
mesma classe
26O Paradigma Funcional
- Programas são funções que descrevem uma relação
explícita e precisa entre E/S - Estilo declarativo não há o conceito de estado
nem comandos como atribuição - Conceitos sofisticados como polimorfismo, funções
de alta ordem e avaliação sob demanda - Aplicação prototipação em geral, IA,
concorrência, core de várias soluções ...
27Modelo Computacional do Paradigma Funcional
Entrada
Saída
Programa
28Visão Crítica do Paradigma Funcional
- Vantagens
- Manipulação de programas mais simples
- - Prova de propriedades
- - Transformação (exemplo otimização)
- - Concorrência explorada de forma natural
- Problemas
- O mundo não é funcional!
- Implementações ineficientes
- Mecanismos primitivos de E/S e formatação
29O Paradigma Lógico
- Programas são relações entre E/S
- Estilo declarativo, como no paradigma funcional
- Abstração não determinismo
- Na prática, inclui características imperativas,
por questão de eficiência - Aplicações prototipação em geral, sistemas
especialistas, banco de dados, ...
30Modelo Computacional do Paradigma Lógico
Entrada
Saída
Programa
31Visão Crítica do Paradigma Lógico
- Vantagens
- Em princípio, todas do paradigma funcional
- Permite concepção da aplicação em um alto nível
de abstração (através de associações entre E/S) - Problemas
- Em princípio, todos do paradigma funcional
- Linguagens usualmente não possuem tipos, nem são
de alta ordem
32Outros Paradigmas
- Agentes
- Linguagens de domínio específico
- ...
- Desenvolvimento baseado em componentes? Linhas de
produtos de software? - Desenvolvimento de sistemas de sistemas?
- Paradigmas de desenvolvimento, não de programação
33Tendência integração de paradigmas
- A principal vantagem é combinar facilidades de
mais de um paradigma, aumentando o domínio de
aplicação da linguagem - Exemplos linguagens lógicas ou funcionais com o
conceito de estado e comandos - A integração deve ser conduzida com muita
cautela, para que não se viole os princípios
básicos de cada paradigma.
34Outras Classificações
- Linguagens de 1a., 2a., 3a. 4a. e 5a. gerações
- Programação seqüencial versus concorrente
- Programação linear versus programação visual
(visual programming) - Metaprogramação e reflexão
- Linguagens de script
- ...
35Um breve histórico
Smalltalk
C PROLOG
1980....................Ada...........DBASE-II....
..............................................
1990..........................................
...........................Haskell..........Godel.
..
CommonLISP Erlang F Lua
2000...C.....................................
..................................................
.......
Imperativo
Funcional
Lógico
Orientado a objetos
36Um breve histórico
- Para mais detalhes, inclusive de versões das
linguagens - http//www.levenez.com/lang/
37Evolução centrada em níveis crescentes de
abstração
- Linguagens de máquina
- Endereços físicos e operation code
- Linguagens Assembly
- Mnemônicos e labels simbólicos
- Linguagens de alto nível
- Variáveis e atribuição (versus acesso direto à
memória) - Estruturas de dados (versus estruturas de
armazenamento)
38Evolução centrada em níveis crescentes de
abstração
- Estruturas de controle (versus jumps e gotos)
- Estrutura de blocos como forma de encapsulamento
- Generalização e parametrização (abstração de
tipos de valores) - Classes, processos, aspectos, ...