paradigmas de linguagens de programação augusto sampaio [email protected] acas recife, primeiro...

37
Paradigmas de Linguagens de Programação Augusto Sampaio [email protected] http://www.cin.ufpe.br/ ~acas Recife, primeiro semestre de 2013

Upload: internet

Post on 19-Apr-2015

108 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br acas Recife, primeiro semestre de 2013

Paradigmas de Linguagens de Programação

Augusto [email protected]

http://www.cin.ufpe.br/~acas

Recife, primeiro semestre de 2013

Page 2: Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br acas Recife, primeiro semestre de 2013

Objetivos

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)

Page 3: Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br acas Recife, primeiro semestre de 2013

Tó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

Page 4: Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br acas Recife, primeiro semestre de 2013

Tó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

Page 5: Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br acas Recife, primeiro semestre de 2013

Metodologia 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

Page 6: Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br acas Recife, primeiro semestre de 2013

Avaliação

• 2 projetos em equipe (de até 4 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

Page 7: Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br acas Recife, primeiro semestre de 2013

Bibliografia

– 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)

Page 8: Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br acas Recife, primeiro semestre de 2013

Visão Geral de Linguagense

Paradigmas de Programação

Page 9: Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br acas Recife, primeiro semestre de 2013

O 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)

Page 10: Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br acas Recife, primeiro semestre de 2013

Aspectos do estudo de linguagens

• Sintaxe: gramática (forma)• Semântica: significado• Pragmática (ex.: metodologias)• Processadores:

compiladores, interpretadores, editores, ambientes visuais ...

Page 11: Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br acas Recife, primeiro semestre de 2013

Por que tantas linguagens?

• Propósitos diferentes• Avanços tecnológicos• Interesses comercias• Cultura e background científico

Page 12: Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br acas Recife, primeiro semestre de 2013

O 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

Page 13: Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br acas Recife, primeiro semestre de 2013

O 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

Page 14: Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br acas Recife, primeiro semestre de 2013

Modelo Computacional do Paradigma Imperativo

Entrada Programa Saída

Estado

Page 15: Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br acas Recife, primeiro semestre de 2013

Vantagens do modelo imperativo

• Eficiência (embute modelo de Von Neumann)

• Modelagem “natural” de aplicações do mundo real

• Paradigma dominante e bem estabelecido

Page 16: Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br acas Recife, primeiro semestre de 2013

Desvantagens 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

Page 17: Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br acas Recife, primeiro semestre de 2013

O 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)

Page 18: Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br acas Recife, primeiro semestre de 2013

Modelo Computacional do Paradigma Orientado a

Objetos

Entrada Programa Saída

Estado

......

......

Estado

Entrada Programa Saída

Estado

Entrada Programa Saída

Estado

Entrada Programa Saída

Estado

Entrada Programa Saída

Page 19: Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br acas Recife, primeiro semestre de 2013

Vantagens do Paradigma Orientado a objetos

• Todas as do estilo imperativo• Classes estimulam projeto

centrado em dados: modularidade, reusabilidade e extensibilidade

• Aceitação comercial crescente

Page 20: Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br acas Recife, primeiro semestre de 2013

Problemas do Paradigma OO

• Semelhantes aos do paradigma imperativo, mas amenizadas pelas facilidades de estruturação

Page 21: Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br acas Recife, primeiro semestre de 2013

O 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

Page 22: Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br acas Recife, primeiro semestre de 2013

O 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

Page 23: Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br acas Recife, primeiro semestre de 2013

Modelo Computacional do Paradigma Orientado a

AspectosEntrada Programa Saída

Estado

......

......

Estado

Entrada Programa Saída

Estado

Entrada Programa Saída

Estado

Entrada Programa Saída

Estado

Entrada Programa Saída

AspectoAspecto

AspectoAspecto

Page 24: Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br acas Recife, primeiro semestre de 2013

Vantagens 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

Page 25: Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br acas Recife, primeiro semestre de 2013

Problemas 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

Page 26: Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br acas Recife, primeiro semestre de 2013

O 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, ...

Page 27: Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br acas Recife, primeiro semestre de 2013

Modelo Computacional do Paradigma Funcional

Entrada Programa Saída

Page 28: Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br acas Recife, primeiro semestre de 2013

Visã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

Page 29: Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br acas Recife, primeiro semestre de 2013

O Paradigma Lógico

• Programas são relações entre E/S• Estilo declarativo, como no

paradigma funcional• Na prática, inclui características

imperativas, por questão de eficiência

• Aplicações: prototipação em geral, sistemas especialistas, banco de dados, ...

Page 30: Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br acas Recife, primeiro semestre de 2013

Modelo Computacional do Paradigma Lógico

Entrada Programa Saída

Page 31: Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br acas Recife, primeiro semestre de 2013

Visã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

Page 32: Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br acas Recife, primeiro semestre de 2013

Outros “Paradigmas”

• Agentes• Linguagens de domínio específico• ...

Page 33: Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br acas Recife, primeiro semestre de 2013

Tendê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.

Page 34: Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br acas Recife, primeiro semestre de 2013

Outras 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)

• ...

Page 35: Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br acas Recife, primeiro semestre de 2013

Smalltalk C PROLOG

1980....................Ada...........DBASE-II..................................................

1990.....................................................................Haskell..........Godel...

1950........................................................................................................

FORTRAN1960.......................ALGOL-60...........COBOL......LISP.........................

SIMULA ALGOL-68 PL/I BASIC 1970..................Pascal............................................................................

Modula-2 ML

MirandaEifell C++

Delphi Java C#

Imperativo Funcional LógicoOrientado a objetos

Um breve histórico

Erlang F#Erlang F#

Page 36: Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br acas Recife, primeiro semestre de 2013

Evoluçã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)

Page 37: Paradigmas de Linguagens de Programação Augusto Sampaio acas@cin.ufpe.br acas Recife, primeiro semestre de 2013

Evoluçã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)