estudo dos conceitos e paradigmas de programação
TRANSCRIPT
![Page 1: Estudo dos Conceitos e Paradigmas de Programação](https://reader035.vdocuments.net/reader035/viewer/2022062318/552fc141497959413d8df59c/html5/thumbnails/1.jpg)
Estudo dos Conceitos e Paradigmas de Programação
![Page 2: Estudo dos Conceitos e Paradigmas de Programação](https://reader035.vdocuments.net/reader035/viewer/2022062318/552fc141497959413d8df59c/html5/thumbnails/2.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062318/552fc141497959413d8df59c/html5/thumbnails/3.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062318/552fc141497959413d8df59c/html5/thumbnails/4.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062318/552fc141497959413d8df59c/html5/thumbnails/5.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062318/552fc141497959413d8df59c/html5/thumbnails/6.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062318/552fc141497959413d8df59c/html5/thumbnails/7.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062318/552fc141497959413d8df59c/html5/thumbnails/8.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062318/552fc141497959413d8df59c/html5/thumbnails/9.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062318/552fc141497959413d8df59c/html5/thumbnails/10.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062318/552fc141497959413d8df59c/html5/thumbnails/11.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062318/552fc141497959413d8df59c/html5/thumbnails/12.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062318/552fc141497959413d8df59c/html5/thumbnails/13.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062318/552fc141497959413d8df59c/html5/thumbnails/14.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062318/552fc141497959413d8df59c/html5/thumbnails/15.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062318/552fc141497959413d8df59c/html5/thumbnails/16.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062318/552fc141497959413d8df59c/html5/thumbnails/17.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062318/552fc141497959413d8df59c/html5/thumbnails/18.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062318/552fc141497959413d8df59c/html5/thumbnails/19.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062318/552fc141497959413d8df59c/html5/thumbnails/20.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062318/552fc141497959413d8df59c/html5/thumbnails/21.jpg)
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](https://reader035.vdocuments.net/reader035/viewer/2022062318/552fc141497959413d8df59c/html5/thumbnails/22.jpg)
Leitura
Programming Language Concepts and Paradigms • Seções 2.1, 2.2, 2.3 e 2.4