Estudo dos Conceitos e Paradigmas de Programação

Slides:



Advertisements
Apresentações semelhantes
Estruturação de Linguagens (Pascal e C++)
Advertisements

gerador de código intermediário
Paulo Marques Hernâni Pedroso
(Unified Modeling Language)
Paradigmas de Programação
Elsa Carvalho 49 Universidade da Madeira Departamento de Matemática e Engenharias Programação em Lógica e Funcional (2000/01) (Actualizado em 2005/06)
Software Básico Silvio Fernandes
Design Patterns Interpreter
Prof. Heloise Manica Paris Teixeira
JavaCC e JJTree Geração de compiladores implementados em Java
Rafael Pinto Frederico Corrêa
Tópicos Preliminares Prof. Alexandre Parra
Curso Sistemas de Informação Disciplina: Arquitetura de Software
Curso Sistemas de Informação Disciplina: Arquitetura de Software
Análise Léxica Supondo o trecho de programa abaixo:
Introdução à Programação
Robson Godoi / Sandra Siebra
Paradigmas de Linguagens de Programação Paradima da Programação Orientada à Objetos Professor: Armando Hage Belém-2008.
Universidade do Vale do Rio dos Sinos
Implementar Listas em Linguagem Funcional II
Análise léxica e sintática
Aula prática - análise contextual
DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso.
Prof. Daniel Aula 03.  Criar Projeto  Criar Pacote  Criando classes  Meu primeiro programa  Compilar  Comentários  Variáveis.
Teoria e Implementação de Linguagens Computacionais – IF688
Paradigmas de Linguagens de Programação
Paradigmas de Linguagens de Programação Linguagem Imperativa 2
Paradigmas de Linguagens de Programação BNF e Interpretador da Linguagem Orientada a Objetos Augusto Sampaio Jackson, Jean, Patrícia, Saulo Centro de Informática.
Semântica de Linguagens de Programação
DI UFPE Semântica de Java Towards na Operational Semantics and Proof of Type Soundness for Java Sophia Drossopoulou e Susan Eisenbach Imperial College.
Paradigmas de Linguagens de Programação Linguagem Imperativa 1
Linguagem Funcional 2 Linguagem Funcional 2 - LF2 Estende LF1 com funções de alta ordem Uma função passa a ser um valor O contexto inclui um único componente:
Paradigma Funcional Apresentação de LF1.
Paradigmas de Programação
Paradigmas de Linguagens de Programação Linguagem Orientada a Objetos 1 Augusto Sampaio e Paulo Borba Departamento de Informática Universidade Federal.
Linguagem de Expressões 2
Augusto Sampaio e Paulo Borba Centro de Informática
Augusto Sampaio e Paulo Borba Centro de Informática
Análise léxica e sintática
Augusto Sampaio e Paulo Borba Gustavo Pinto Marcelo Queiroz
Análise Léxica.
Aulas 2 e 3 – Java – Prof. Marcelo Heitor # O método main e argumentos na linha de comando; # Fluxo padrão de entrada e saída; # A classe JOptionPane;
Paradigma funcional.
Paradigmas de Linguagens de Programação Aula 2
© Ricardo Pereira e Silva
Analise Semântica aula-10-analise-semântica.pdf.
Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Modelos de Linguagem de Programação I Aula 06
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Lambda Cálculo & Programação Funcional
Lista Linear Base para outras estruturas
Faculdade Pernambucana - FAPE Setembro/2007
A Linguagem Formal de Especificação VDM-SL
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
COMPILADORES 04 Prof. Marcos.
Semântica de Linguagens de Programação
Copyright 2000, Departamento de Informática, UFPE. Todos os direitos reservados sob a legislação em vigor. Orientação a Objetos e Java.
Paradigmas de Linguagens de Programação Conceitos da Linguagem Imperativa 1 Augusto Sampaio e Paulo Borba Centro de Informática Universidade Federal de.
Introdução a linguagem de Programação Java. Linguagens de Programação Linguagens de máquina(muito difíceis de usar e compreender) – Comanda ações do computador.
PLP – JavaCC Java Compiler Compiler
Paradigmas de Programação
Padrão Visitor Paulo Mauricio Gonçalves Jr Rodrigo Teixeira Ramos Paradigmas de Linguagens de Programação Prof. Augusto Sampaio Julho de 2003.
Análise Semântica e Representação Intermédia
Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007.
Estrutura de Dados Prof. André Cypriano M. Costa
Análise Contextual Mauro Araújo Teoria e Implementação de Linguagens Computacionais - IF688 Centro de Informática – CIn Universidade Federal de Pernambuco.
1 Programação Multi-Paradigma Cristiano Bertolini – Ellison Siqueira – Guilherme Avelino –
Análise e Projeto de Sistemas Análise & modelagem conceitual Prof. Edjandir Corrêa Costa
Lógica de Programação Aula 06 Prof. Marcelo Marcony.
Transcrição da apresentaçã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 A modelagem dos interpretadores será um bom exemplo de projeto OO e um vasto exercício de Java

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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)

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

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

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