1 / 22

Estudo dos Conceitos e Paradigmas de Programação

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

olathe
Download Presentation

Estudo dos Conceitos e Paradigmas de Programação

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Estudo dos Conceitos e Paradigmas de Programação

  2. 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

  3. 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

  4. A linguagem objeto de estudo • A linguagem será apresentada de forma incremental: • Expressões • Funcional • Imperativa • Funcional Imperativa • Orientada a Objetos • Funcional Imperativa OO

  5. A linguagem objeto de estudo Expressão 1 Expressão 2 Funcional 1 Imperativa 1 Funcional 2 Imperativa 2 OO 1 Funcional Imperativa OO 2 Funcional Imperativa OO

  6. 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

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

  8. 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

  9. 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

  10. 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

  11. 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

  12. Linguagem Funcional Imperativa - LFI • Integra as linguagens LF2 e LI2 • Um programa é uma expressão ou um comando

  13. 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

  14. 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

  15. Linguagem Funcional Imperativa OO (LFIOO) • Integra as linguagens LF2 e LOO2 • Um programa é uma expressão ou um comando

  16. 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

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

  18. 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

  19. 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)

  20. 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

  21. 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

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

More Related