estudo dos conceitos e paradigmas de programação

22
Estudo dos Conceitos e Paradigmas de Programação

Upload: internet

Post on 19-Apr-2015

113 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Estudo dos Conceitos e Paradigmas de Programação

Estudo dos Conceitos e Paradigmas de Programação

Page 2: Estudo dos Conceitos e Paradigmas de Programação

Abordagem e Escopo

Estudo de linguagens e paradigmas através de ambientes de execução (interpretação)

Implementação (incremental) de uma única linguagem: funcional, imperativa e OO

A modelagem dos interpretadores será um bom exemplo de projeto OO e um vasto exercício de Java

Page 3: Estudo dos Conceitos e Paradigmas de Programação

Abordagem e Escopo A modelagem dos interpretadores

inclui os seguintes aspectos:• Um parser realiza análise léxica e

sintática e efetua a redução (conversão da sintaxe concreta em uma sintaxe abstrata modelada por classes em Java)

• Métodos para análise semântica (verificação de tipos)

• Métodos para avaliação e execução de expressões e comandos

Page 4: Estudo dos Conceitos e Paradigmas de Programação

A linguagem objeto de estudo A linguagem será apresentada de

forma incremental: Expressões Funcional Imperativa Funcional Imperativa Orientada a Objetos Funcional Imperativa OO

Page 5: Estudo dos Conceitos e Paradigmas de Programação

A linguagem objeto de estudo

Expressão 1Expressão 1

Expressão 2Expressão 2

Funcional 1Funcional 1 Imperativa 1Imperativa 1

Funcional 2Funcional 2 Imperativa 2Imperativa 2

OO 1OO 1

OO 2OO 2Funcional Imperativa OO

Funcional Imperativa

Page 6: Estudo dos Conceitos e Paradigmas de Programação

Linguagem de Expressões 1 - LE1 Inclui apenas constantes (valores)

e operações sobre valores Valores e operações sobre inteiros,

booleanos e string são admitidos Um programa é uma expressão

Page 7: Estudo dos Conceitos e Paradigmas de Programação

Linguagem de Expressões 2 - LE2

Estende LE1 com identificadores (variáveis) que possuem um valor (constante)

Durante a verificação de tipos e interpretação surge a necessidade de um contexto: • mapeamento entre identificadores e tipos• mapeamento entre identificadores e valores

Na avaliação de uma expressão, a ocorrência de um identificador é substituída pelo valor associado ao identificador

Um programa é uma expressão

Page 8: Estudo dos Conceitos e Paradigmas de Programação

Linguagem Funcional 1 - LF1

Estende LE2 com funções parametrizadas e recursivas

O corpo de uma função é uma expressão e a aplicação da função a um argumento retorna um valor

O contexto de execução inclui dois componentes: • mapeamento de identificadores em valores • mapeamento de identificadores (nomes de

função) em definições de função Um programa é uma expressão

Page 9: Estudo dos Conceitos e Paradigmas de Programação

Linguagem Funcional 2 - LF2 Estende LF1 com funções de alta ordem Uma função passa a ser um valor O contexto de execução inclui um único

componente:• mapeamento de identificadores em valores

Portanto, o resultado da avaliação de uma expressão pode ser uma função, uma função pode ser argumento de outra função, ...

Um programa é uma expressão

Page 10: Estudo dos Conceitos e Paradigmas de Programação

Linguagem Imperativa 1 - LI1

Estende LE1 com identificadores (variáveis) e comandos de atribuição, entrada/saída e controle de fluxo

O contexto de execução inclui três componentes:• um mapeamento (dinâmico) de identificadores em

valores• uma lista de valores de entrada• uma lista de valores de saída

Um programa é um comando

Page 11: Estudo dos Conceitos e Paradigmas de Programação

Linguagem Imperativa 2 - LI2

Estende LI1 com procedimentos parametrizados e recursivos

O corpo de um procedimento é um comando e a chamada de um procedimento idem

O contexto também é estendido com:• um mapeamento de identificadores (nomes de

procedimentos) em definições de procedimentos Procedimentos não possuem o status de valor Um programa é um comando

Page 12: Estudo dos Conceitos e Paradigmas de Programação

Linguagem Funcional Imperativa - LFI

Integra as linguagens LF2 e LI2 Um programa é uma expressão ou

um comando

Page 13: Estudo dos Conceitos e Paradigmas de Programação

Linguagem OO 1 - LOO1 Estende LI2 com classes e objetos Procedimentos passam a ocorrer

exclusivamente como métodos das classes

O contexto também é estendido com:• um mapeamento de identificadores

(nomes de classes) em definições de classes

Um programa é um comando

Page 14: Estudo dos Conceitos e Paradigmas de Programação

Linguagem OO 2 Estende LOO1 com herança e

subtipos Procedimentos (métodos) podem ser

redefinidos O contexto também é estendido

com:• uma estrutura para registrar a

hierarquia de classes Um programa é um comando

Page 15: Estudo dos Conceitos e Paradigmas de Programação

Linguagem Funcional Imperativa OO (LFIOO)

Integra as linguagens LF2 e LOO2 Um programa é uma expressão ou

um comando

Page 16: Estudo dos Conceitos e Paradigmas de Programação

Interpretando as Linguagens Para cada linguagem foi construída

uma BNF que define sua gramática O projeto (OO) de cada interpretador:

• Cada item da BNF é uma classe, interface ou classe abstrata de Java

• A hierarquia da BNF é modelada através de herança e subtipos (extends e implements)

• Classes adicionais são introduzidas para modelar estruturas internas do interpretador, como contexto

• As BNFs e os interpretadores estão disponibilizados na homepage do curso

Page 17: Estudo dos Conceitos e Paradigmas de Programação

Apresentação da Linguagem de Expressões 1 - LE1 http://www.cin.ufpe.br/~in1007

Page 18: Estudo dos Conceitos e Paradigmas de Programação

Exercícios

Estender a LE1 com ValorChar (caracter) e uma operação que retorna a ordem (ascii) do caracter

Implementar ValorReal e as operações aritméticas usuais sobre os reais

Implementar operadores relacionais como menor que, maior que, ..., para valores inteiros

Page 19: Estudo dos Conceitos e Paradigmas de Programação

Explorando Conceitos na LE1

O componente mais básico é valor• Um valor é algo que pode ser avaliado,

armazenado, incorporado em estruturas de dados, passado como parâmetro, retornado como resultado, ...

• Ou seja, um valor é uma entidade que existe durante uma computação

• Decidir que construções da linguagem têm o status de valor pode impactar radicalmente o poder de expressão da linguagem (ex. Funções como valor)

Page 20: Estudo dos Conceitos e Paradigmas de Programação

Explorando Conceitos na LE1

É conveniente agrupar valores em tipos• Tipos são conjuntos de valores e operações

associadas• Valores de um tipo devem exibir

comportamento uniforme em relação às operações sobre o tipo

• O conceito de tipos permite a definição de restrições contextuais que eliminam vários erros já durante uma análise estática (compilação)

• LE1 agrupa valores em tipos e a verificação de tipos foi implementada

Page 21: Estudo dos Conceitos e Paradigmas de Programação

Explorando Conceitos na LE1

Os tipos podem ser caracterizados como• Primitivos (booleanos, inteiros, reais,

strings, ...)• Compostos (registros, vetores, listas,

conjuntos, ...)• Recursivos (listas, árvores, ...)

LE1 inclui apenas valores de tipos primitivos

Valores compostos e recursivos serão introduzidos como exercício

Page 22: Estudo dos Conceitos e Paradigmas de Programação

Leitura

Programming Language Concepts and Paradigms • Seções 2.1, 2.2, 2.3 e 2.4