Conceitos de Linguagens de Programação

Tamanho: px
Começar a partir da página:

Download "Conceitos de Linguagens de Programação"

Transcrição

1 Faculdade de Ciências e Tecnologia Departamento de Matemática e Computação Bacharelado em Ciência da Computação Conceitos de Linguagens de Programação Aula 01 (rogerio@fct.unesp.br) Metodologia Aulas expositivas teórico-práticas; Exercícios práticos; Projetos individuais e/ou em grupo; Seminários, individuais e em grupo, sobre tópicos abordados e relacionados. 2 Prof. Dr. 1

2 Bibliografia Básica SEBESTA, R. W. Conceitos de Linguagens de Programação, 5ª ed., Bookman, GHEZZI, C. e JAZEYERI, M. Conceitos de linguagens de programação, Campus, VAREJÃO, F. M. Linguagem de Programação: conceitos e técnicas, Rio de Janeiro: Elsevier (Campus), Avaliação 4 As notas de todas as atividades entre 0 (zero) e 10,0 (dez) serão atribuídas individualmente, mesmo em atividades em grupo; A média final será calculada da seguinte maneira: MA = (NP1 + 2*NP2)/3 Mt = (NT1 + NT NTn) / n MT = (7 * NPJ + 3 * Mt) Média Final: MF = (MA + MT)/2 SE E SOMENTE SE (MA>=5 E MT>=5) Caso contrário (MA<5 OU MT<5) MF = Menor Nota (MA ou MT) Onde: MF = Média Final. MA = Média de Provas MP = Média de Trabalhos e Projeto Mt = Média de Trabalho (Listas de Exercícios) NPJ = Nota Projeto (Seminário) MT = Média final dos trabalhos (parte prática) Caso o aluno não obtenha a nota mínima para aprovação, será oferecida uma terceira avaliação (EXAME) e a Média Final passa a ser obtida pela expressão: MFnova = (MFanterior + EXAME)/2 Prof. Dr. 2

3 Tópicos da Disciplina 5 Histórico da Evolução das Linguagens de Programação: tradução (interpretação e compilação); Paradigma Imperativo, Orientado a Objeto, Funcional e Lógico; principais representantes de cada um dos paradigmas; Revisão do Processo de Compilação (Compilação versus Interpretação); Programação Imperativa: Vantagens e desvantagens da programação imperativa; Linguagens de Programação Lógicas: Apresentação de uma linguagem lógica; cálculo de predicados; resolução de problemas e aplicações usando programação lógica; análise de independência e reusabilidade de programas lógicos. Aspectos Sintáticos e Semânticos: Descrição Sintática, Métodos Formais, Descrição Semântica; Tipos de Dados: Definição de dados; Representação Interna; Escopo de Definições; Bindings Expressões e instruções de atribuição; operadores sobrecarregados; conversões de tipo; Expressões Relacionais e Booleanas; Estruturas de Controle; Instrução de Seleção; Instruções Iterativas; Subprogramas; Questões de Projeto; Ambientes de Referência; Métodos de Passagem de Parâmetros; Compilação Separada; Alocação Dinâmica: Gerenciamento de Memória Suporte a Programação Orientada a Objetos: Aspectos sintáticos e semânticos de objetos e classes, classes derivadas e heranças, polimorfismo, controles de acesso; funções membros e sobrecarga. Linguagens de Programação Funcionais: Apresentação de uma linguagem funcional; funções como valores de primeira ordem; recursão simples e recursão de cauda usando programação funcional; Resolução de problemas e aplicações usando programação funcional; análise da independência e reusabilidade de programas funcionais. Planejamento Ver na página da disciplina 6 Prof. Dr. 3

4 Linguagens de Programação Processo de Compilação (Compilação versus Interpretação) Conceitos de LP; Domínios de Programação; Critérios de Avaliação; Categorias de LP e Classificação de LP A Histórico da Evolução das Linguagens de Programação: tradução (interpretação e compilação) Os Paradigmas: Paradigma Imperativo, Orientado a Objeto, Funcional e Lógico; principais representantes de cada um dos paradigmas 7 Linguagens Formais Formalmente as gramáticas, são caracterizadas como quádruplas ordenadas onde: G = ( Vn, Vt, P, S) Vn representa o vocabulário não terminal da gramática. Este vocabulário corresponde ao conjunto de todos os símbolos dos quais a gramática se vale para definir as leis de formação das sentenças da linguagem. 8 Prof. Dr. 4

5 Linguagens Formais Vt é o vocabulário terminal, contendo os símbolos que constituem as sentenças da linguagem. Dá-se o nome de terminais aos elementos de Vt. 9 P representa o conjunto de todas as leis de formação utilizadas pela gramática para definir a linguagem. Para tanto, cada construção parcial, representada por um não-terminal, é definida como um conjunto de regras de formação relativas à definição do nãoterminal a ela referente. A cada uma destas regras de formação que compõem o conjunto P dá-se o nome de produção da gramática. 10 Linguagens Formais Cada produção P tem a forma: α β α (Vn Vt) + ; β (Vn Vt)* SєVn denota a principal categoria gramatical de G; é dito o símbolo inicial ou o axioma da gramática. Indica onde se inicia o processo de geração de sentenças. Exemplo: G = ({S, A, B}, {a, b}, P, S) P: S AB A a B b Prof. Dr. 5

6 Compiladores e Linguagens Um Compilador C é um programa que tem a finalidade de traduzir ou converter um programa P f (fonte) escrito numa linguagem L f linguagem fonte - para um programa P o (objeto) escrito numa outra linguagem L o - linguagem objeto; P o é o resultado da tradução. L m, a linguagem na qual o compilador é escrito, é em geral, a linguagem de máquina do computador onde ele é processado. Na maioria das vezes, C não é programado em L m, sendo convertido para ela por meio de uma compilação. Entrada P f /L f Computador C/L m Saída P o /L o Prog. Fonte Compilador Prog. Objeto L o = L m 11 Compiladores e Linguagens Em geral, L f é uma linguagem de alto nível como ALGOL, COBOL, PASCAL, etc. L o não é necessariamente uma linguagem de máquina. Por exemplo, L o pode ser uma Linguagem de Montagem ("Assembler") L a.nesse caso, é necessário ter-se mais uma fase de tradução de L a para a linguagem de máquina L m do computador a ser utilizado para processar o programa objeto. P f /L f C/L m P o /L a C/L m P o /L m 12 Prog. Fonte Compilador Prog. Objeto Compilador Montador Prog. Objeto Prof. Dr. 6

7 Arquitetura Básica de um Compilador Análise Análise Léxica Análise Sintática Análise Semântica Tratamento de Erros Síntese Otimização Global Tabelas Geração de Código 13 Otimização Local Tradução de uma LP A tradução pode ser: Interpretação Compilação 14 Prof. Dr. 7

8 Interpretador Traduz uma linha de comando por vez e chama uma rotina para execução; Os interpretadores servem para uma prototipação rápida; Tem como desvantagem certa lentidão na execução; Não geram código executável, mantendo dependência quanto ao ambiente para execução; 15 Compilador Traduz o programa fonte inteiro, produzindo um outro programa equivalente, em linguagem executável. Traduz um comando apenas uma única vez, não importando quantas vezes ele será executado. Gera código definitivo (eficiente) de um programa. 16 Prof. Dr. 8

9 Tradutores, em geral Há outros tipos importantes de tradutores: se a L f é uma linguagem montadora e a L o é uma linguagem de máquina, então o tradutor é chamado assembler se a L f é uma linguagem de alto nível e a L o é também de alto nível, então o tradutor é chamado pré-processador. Por exemplo, há muitos préprocessadores Fortran que mapeiam versões de Fortran "estruturado" em Fortran Convencional 17 Aspectos Considerados Fonte Blá Blá Blá Quanto à identificação correta das construções SINTÁTICO Quanto ao significado a ser refletido em código de máquina SEMÂNTICO Quanto à integração com o computador hospedeiro PRAGMÁTICO 18 Prof. Dr. 9

10 Arquitetura Básica de um Compilador Análise Análise Léxica Análise Sintática Análise Semântica Tratamento de Erros Síntese Otimização Global Tabelas Geração de Código 19 Otimização Local Arquitetura Básica de um Compilador Análise Análise Léxica Análise Sintática Análise Semântica Tratamento de Erros Síntese Otimização Global Tabelas Geração de Código 20 Otimização Local Prof. Dr. 10

11 Análise Léxica Seu objetivo é analisar a entrada dada (programa fonte) e dividi-la em seqüências considerando os tokens da linguagem, definidos por expressões regulares. Cada token é normalmente formado por seu tipo (se é um operador lógico, um identificador, um número inteiro, etc.) e pelo seu valor. Este valor vai depender do tipo do token e normalmente corresponde à seqüência de caracteres realmente lida da entrada. 21 Analisador Léxico Deve, a partir do código fonte, fragmentá-lo em seus componentes básicos, identificando trechos elementares completos e com identidade própria, porém individuais para efeito de análise. Cada partícula deve ser classificada, pois o analisador sintático não refere-se diretamente ao fonte. 22 Prof. Dr. 11

12 Analisador Léxico Às partículas classificadas dá-se o nome de átomo Os átomos, extraídos do código fonte, são representados na metalinguagem, que descreve a linguagem-fonte, na mesma ordem que aparecem no texto do código-fonte 23 Exemplo Validação de 2*8/12: 2 * 8 / 1 2 = <dígito> <operador> <dígito> <operador> <dígito> <dígito> <semsinal> <semsinal> <semsinal> <número> <número> <semsinal> <valor> <valor> <número> <valor> <expressão <expressão> <expressão> 24 <cálculo> Prof. Dr. 12

13 Funções do Analisador Léxico Extração e Classificação de Átomos Eliminação de comentários Conversão Numérica Tratamento de Identificadores Identificação de Palavras Reservadas Recuperação de Erros Funções do Analisador Léxico Listagens Geração de Tabelas de Referências Cruzadas Definição e Expansão de Macros Interação com o Sistema de Arquivos Compilação Condicional Controle de listagens Prof. Dr. 13

14 Analisador Léxico Deve, a partir do código fonte, fragmentá-lo em seus componentes básicos, identificando trechos elementares completos e com identidade própria, porém individuais para efeito de análise. Cada partícula deve ser classificada, pois o analisador sintático não refere-se diretamente ao fonte. 27 Extração e Classificação de Átomos Classes de átomos mais comuns: identificadores; palavras reservadas; números inteiros sem sinal; números reais; cadeias de caracteres; sinais de pontuação e de operação; caracteres especiais; símbolos compostos de dois ou mais caracteres especiais; comentários; etc. 28 Prof. Dr. 14

15 Eliminação de Comentários O analisador léxico desconsidera o trecho do código fonte que encontra-se entre delimitadores de comentários. Além disso, ele desconsidera espaços em branco colocados pelos programadores a fim de melhorar a legibilidade do código fonte (endentação). 29 Conversão Numérica Cadeias de caracteres que representam números são convertidas em valores numéricos seguindo as notações possíveis. A cadeia de caracteres é convertida em um número de tamanho fixo a ser tratado pelos outros componentes do compilador ou utilizase de uma tabela de constantes numéricas, armazenando no átomo o índice do número. 30 Prof. Dr. 15

16 Arquitetura Básica de um Compilador Análise Análise Léxica Análise Sintática Análise Semântica Tratamento de Erros Síntese Otimização Global Tabelas Geração de Código 31 Otimização Local Arquitetura Básica de um Compilador Análise Análise Léxica Análise Sintática Análise Semântica Tratamento de Erros Síntese Otimização Global Tabelas Geração de Código 32 Otimização Local Prof. Dr. 16

17 Análise Sintática Esta é responsável por verificar se a entrada dada está ou não de acordo com as regras definidas pela gramática da linguagem, implementando o conceito de autômato de pilha, por exemplo. Para realizar tal reconhecimento, esta fase busca montar a árvore de derivação que gerou a entrada dada, a partir das regras definidas Funções do Analisador Sintático Identificação de Sentenças Detecção de Erros de Sintaxe Recuperação de Erros Correção de Erros Montagem da Árvore Abstrata da Sentença Ativação do Analisador Léxico Prof. Dr. 17

18 Funções do Analisador Sintático Identificação de Sentenças Detecção de Erros Sintaxe Identificação de cadeias, cujo conjunto forma Recuperação a linguagem de Errosa que se refere o analisador. Correção de Erros Montagem da Árvore Abstrata da Sentença Ativação do Analisador Léxico Funções do Analisador Sintático Identificação de Sentenças Detecção de Erros de Sintaxe Recuperação de Erros Dada uma de cadeia que não pertence à linguagem Correção a que de Erros se refere, o analisador sintático deve Montagem acusar a da presença Árvore Abstrata de errosda desentença sintaxe, de preferência Ativação do identificando Analisador Léxico o tipo de erro e a possível causa. Prof. Dr. 18

19 Funções do Analisador Sintático Identificação de Sentenças Detecção de Erros de Sintaxe Recuperação de Erros Apartir Correção do ponto de Erros em que ocorre erro em uma cadeia Montagem deve-sedarestabelecer Árvore Abstrata um novo da Sentença ponto de partida Ativação paradoo Analisador analisador. Léxico Dessa forma, é necessário a incorporação de meios para ressincronizar o reconhecedor,permitindo que o restante do texto-fonte seja analisado Funções do Analisador Sintático Identificação de Sentenças Detecção de Erros de Sintaxe Recuperação de Erros Correção de Erros Compiladores Montagem damais Árvore sofisticados, Abstrata da Sentença em seu mecanismo Ativação do de Analisador recuperação Léxico de erros, incluem recursos que sugerem ou até mesmo modificam o texto-fonte, para que os mesmos se tornem sintaticamente corretos. Prof. Dr. 19

20 39 Funções do Analisador Sintático Identificação de Sentenças Detecção de Erros de Sintaxe Recuperação de Erros Correção de Erros Montagem da Árvore Abstrata da Sentença Conceitualmente, Ativação do Analisador o analisador Léxico sintático deveria, com base na gramática, levantar, para a cadeia de entrada, sua respectiva seqüência de derivação. Existem outras atividades que equivalentes e menos onerosas. Funções do Analisador Sintático Em Identificação muitas de implementações, Sentenças devido ao progresso Detecçãodo de Erros reconhecimento de Sintaxe do fonte, o analisador sintático detecta a necessidade de Recuperação de Erros novos átomos e ativa o analisador léxico, comandando Correção dedessa Erros maneira, em função da sintaxe, Montagem a operação da Árvore da análise Abstrata léxica. da Sentença Ativação do Analisador Léxico 40 Prof. Dr. 20

21 Funções do Analisador Sintático Comando de Operação do Analisador Léxico Ativação de Rotinas da Análise Referente às Dependências de Contexto da Linguagem Ativação das Rotinas da Análise Semântica Ativação das Rotinas de Síntese do Código Objeto Funções do Analisador Sintático Comando de Operação do Analisador Léxico Ativação de Rotinas da Análise Referente às Quando os átomos não se apresenta em Dependências de Contexto da Linguagem formato uniforme, existindo regras Ativação diferentes das para Rotinas sua identificação, da Análise Semântica conforme Ativação o contextodas emrotinas que sãode encontrados, Síntese docabe Código ao Objeto AS decidir sobre eventuais parametrizações para adequar a extração de átomos às necessidades do contexto. Prof. Dr. 21

22 43 Funções do Analisador Sintático Comando de Operação do Analisador Léxico Ativação de Rotinas da Análise Referente às Dependências de Contexto da Linguagem Ativação Como complemento das Rotinas da da Análise análise Semântica livre de Ativação contexto, das em geral Rotinas sãode necessárias Síntese doanálises Código Objeto dependentes do contexto. Ex: verificação do escopo de variáveis, da coerência de tipos de dados em expressões, do relacionamento entre as declarações e os comandos executáveis, etc. Funções do Analisador Sintático Comando de Operação do Analisador Léxico Ativação de Rotinas da Análise Referente às Dependências de Contexto da Linguagem Ativação das Rotinas da Análise Semântica Ativação das Rotinas de Síntese do Código Estas rotinas encarregam-se de produzir o Objeto código-objeto correspondente ao textofonte cuja tradução se deseja. 44 Prof. Dr. 22

23 45 Funções do Analisador Sintático Comando de Operação do Analisador Léxico Ativação de Rotinas da Análise Referente às Dependências de Contexto da Linguagem Ativação das Rotinas da Análise Semântica Ativação das Rotinas de Síntese do Código Tais rotinas são responsáveis pelo Objeto gerenciamento dos objetos da linguagem, alocação das áreas para os mesmos, ligação entre os objetos e os comandos que os manipulam. Esse gerenciamento é efetuado em tempo de compilação. Definição Regular Exemplo: Gramática de uma linguagem de calcular em BNF (Backus Naur Form): P: 46 <cálculo> ::= <expressão> = <expressão> ::= <valor> <valor><operador><expressão> <valor> ::= <número> <sinal><número> <número> ::= <semsinal> <semsinal>.<semsinal> <semsinal> ::= <dígito> <dígito><semsinal> <dígito>::= <sinal> ::= + - <operador> ::= + - / * Prof. Dr. 23

24 Autômato Finito (Para reconhecimento de números reais) Diagrama de Transição dígito dígito dígito 12 dígito dígito15 E 16 + ou -17 dígito18 outro 19 * E dígito Prof. Dr. 24

25 Exemplo do Resultado do Analisador Sintático MIN(A,B+C*SEN(K*PI/2)) PI 2 / K * SEN C * B + A MIN Em notação Polonesa!!! 49 Exemplo do Resultado do Analisador Sintático PI 2 / K * SEN C * B + A MIN Tabela de Símbolos: PI(constante, 3.14) K(int,...) Prof. Dr. 25

26 Arquitetura Básica de um Compilador Análise Análise Léxica Análise Sintática Análise Semântica Tratamento de Erros Síntese Otimização Global Tabelas Geração de Código 51 Otimização Local Arquitetura Básica de um Compilador Análise Análise Léxica Análise Sintática Análise Semântica Tratamento de Erros Síntese Otimização Global Tabelas Geração de Código 52 Otimização Local Prof. Dr. 26

27 53 Analisador Semântico A árvore de derivação é decorada na Análise Semântica, que é responsável por realizar as verificações semânticas sobre a entrada dada, tratando os pontos de uma linguagem de programação que não podem ser cobertos pela definição formal de uma Gramática Livre de Contexto. Ela inclui na árvore de derivação os atributos de terminais e não-terminais, realiza verificações e conversões de tipo, além de controlar declarações de variáveis, entre outras funções. Funções de um Analisador Semântico Criação e manutenção de tabelas de símbolos Associar aos símbolos os correspondentes atributos Manter informações sobre o escopo dos identificadores Representar tipos de Dados 54 Prof. Dr. 27

28 Funções de um Analisador Semântico Criação e manutenção de tabelas de símbolos Tarefa Associar geralmente aos símbolos executada os correspondentes pelo analisador léxico, atributos porém em alguns compiladores os analisadores Manter informações léxicos fazem sobreo oestritamente escopo dos necessário, identificadores ficando para o analisador semântico Representar essa tarefa, tipos de dentre Dadosoutras Funções de um Analisador Semântico Criação e manutenção de tabelas de símbolos Associar aos símbolos os correspondentes atributos Uma Manter tabela de informações símbolos é apenas sobre uma o escopo coleção dos identificadores que aparecem no texto-fonte. Assim, torna-se necessário acrescentar, para cada um deles, um Representar conjunto de tipos informações de Dados que seja suficiente para caracterizá-lo como sendo correspondente a um determinado objeto. Deve-se identificar todas as características necessárias à geração de código. Prof. Dr. 28

29 57 Funções de um Analisador Semântico Criação e manutenção de tabelas de símbolos Associar aos símbolos os correspondentes atributos Manter informações sobre o escopo dos identificadores Para que o compilador associe os identificadores aos escopos correspondentes, atribuindo-lhes o significado correto em todos os pontos do texto-fonte, torna-se necessário que o compilador organize a tabela de símbolos conforme uma hierarquia a que pertencem os identificadores nela registrados. Em alguns compiladores, encontrar a fronteira de um identificador é uma tarefa do analisador sintático, que passa ao analisador léxico tal informação. Em outros, as ações semânticas associadas às mudanças de escopo promovem a execução de tais operações. Representar tipos de Dados Funções de um Analisador Semântico Criação e manutenção de tabelas de Osímbolos compilador deve registrar as especificações de diversos Associar tipos aos símbolos de dados, correspondentes utilizados pelo programa. atributos Vale ressaltar que diferentes linguagens possuem tipos de dados diferentes e ainda, Manterpermitem informações que osobre programador o escopodefina dos novos identificadores tipo homogêneos ou heterogêneos. Representar tipos de Dados 58 Prof. Dr. 29

30 Funções de um Analisador Semântico Analisar restrições quanto à utilização de identificadores Verificar o escopo dos identificadores Identificar declarações contextuais Verificar a compatibilidade de tipos Efetuar o gerenciamento de memória Representar o ambiente de execução dos procedimentos Funções de um Analisador Semântico Analisar restrições quanto à utilização de identificadores Verificar Dependendo o escopo do dos contexto identificadores em que são Identificar empregados, declarações os identificadores contextuaisdevem ou Verificar não exibir a compatibilidade certos atributos. de tiposcabe ao compilador, através de ações semânticas, Efetuar verificar o gerenciamento a coerência de de utilização memória de cada Representar identificador. o ambiente de execução dos procedimentos Prof. Dr. 30

31 Funções de um Analisador Semântico Analisar restrições quanto à utilização de identificadores Verificar o escopo dos identificadores Identificar declarações contextuais Deve-se garantir que todos os identificadores utilizados Verificar no a compatibilidade texto-fonte correspondam de tipos a objetos Efetuar definidos o gerenciamento nos pontos dedos memória programas em Representar que seus identificadores o ambiente ocorreram. de execução dos procedimentos Funções de um Analisador Semântico Analisar restrições quanto à utilização de identificadores Verificar o escopo dos identificadores Identificar declarações contextuais Algumas Verificar alinguagens compatibilidade permitem de tiposque a declaração Efetuar o gerenciamento seja feita de modo de memória implícito. O compilador deve localizar tais Representar o ambiente de execução dos identificadores procedimentos e situá-lo em seu contexto sintático. Prof. Dr. 31

32 63 Funções de um Analisador Semântico Analisar restrições quanto à utilização de identificadores Verificar o escopo dos identificadores Identificar declarações contextuais Verificar a compatibilidade de tipos Efetuar A verificação o gerenciamento de tipo é de importante memória para a Representar geração deo ambiente código pois de execução identificados a procedimentos possibilidade de necessidade de conversões. Funções de um Analisador Semântico Analisar restrições quanto à utilização de identificadores O compilador deve incorporar os mecanismos necessários para a alocação de memória em Verificar tempo deoexecução. escopo dos Os identificadores requisitos podem ser Identificar estáticos (independente declarações contextuais da execução) ou dinâmicos (dependente dos dados e da execução Verificar - recursividade, a compatibilidade gerenciamentode dotipos heap, etc) Efetuar o gerenciamento de memória Representar o ambiente de execução dos procedimentos 64 Prof. Dr. 32

33 Funções de um Analisador Semântico Analisar restrições quanto à utilização de identificadores O compilador deve interpretar corretamente o contexto de execução. Para isso, o mecanismo de Verificar o escopo dos identificadores passagem de parâmetro (por nome, valor, Identificar referência) declarações e retornocontextuais do(s) resultado(s) de Verificar execução ao a compatibilidade contexto chamadorde é importante, tipos além de outros programas, S.O., módulos compilados Efetuar separadamente, o gerenciamento etc. de memória Representar o ambiente de execução dos procedimentos 65 Funções de um Analisador Semântico Efetuar a tradução do programa Implementação de um ambiente de execução Comunicação entre dois ambientes de execução 66 Prof. Dr. 33

34 Funções de um Analisador Semântico Efetuar a tradução do programa Implementação de um ambiente de execução Criar uma interpretação do texto-fonte expresso em alguma notação adequada, Comunicação entre dois ambientes de não obrigatoriamente em alguma execução linguagem de máquina. Em geral utiliza-se de uma linguagem intermediária Funções de um Analisador Semântico Efetuar a tradução do programa Implementação de um ambiente de execução Comunicação Trata dos recursos entre necessários dois ambientes à criação de execução de procedimentos que se comuniquem entre si, pela passagem de parâmetros, mesmo pertencentes a escopos diferentes, podendo coexistir (processos paralelo), comunicando-se através de troca de mensagens. Prof. Dr. 34

35 69 Funções de um Analisador Semântico Efetuar a tradução do programa Implementação de um ambiente de execução Comunicação entre dois ambientes de execução Trata dos recursos necessários à criação de procedimentos que se comuniquem entre si, pela passagem de parâmetros, mesmo pertencentes a escopos diferentes, podendo coexistir (processos paralelos), comunicando-se através de troca de mensagens. Arquitetura Básica de um Compilador Análise Análise Léxica Análise Sintática Análise Semântica Tratamento de Erros Síntese Otimização Global Tabelas Geração de Código 70 Otimização Local Prof. Dr. 35

36 Arquitetura Básica de um Compilador Análise Análise Léxica Análise Sintática Análise Semântica Tratamento de Erros Síntese Otimização Global Tabelas Geração de Código 71 Otimização Local Otimização Global Procura introduzir melhorias que independem da linguagem de máquina, como por exemplo eliminação de cálculos repetidos, eliminação de sub-expressões comuns, a fatoração do cálculo de sub- expressões, etc. 72 Prof. Dr. 36

37 Arquitetura Básica de um Compilador Análise Análise Léxica Análise Sintática Análise Semântica Tratamento de Erros Síntese Otimização Global Tabelas Geração de Código 73 Otimização Local Geração de Código Tradução do programa que está em linguagem intermediária em código-objeto. Via de regra, o código-objeto gerado é relocável, para que seja possível a ligação com outros módulos desenvolvidos em separado. 74 Prof. Dr. 37

38 Geração de Código int a,b; a=20; b=10; a=a+b; a int... b int... ;Obter endereço de a ;Atribuir 20 ao endereço de a 75 mov [BX+Desl_A], 20 add [BX+Desl_A], [BX+Desl_B] Arquitetura Básica de um Compilador Análise Análise Léxica Análise Sintática Análise Semântica Tratamento de Erros Síntese Otimização Global Tabelas Geração de Código 76 Otimização Local Prof. Dr. 38

39 Otimização Local Refere-se, em geral, a melhorias de códigoobjeto que aproveitam o repertório de instruções de um dado computador hospedeiro. 77 Linguagens de Programação (lembra?) Processo de Compilação (Compilação versus Interpretação) Conceitos de LP; Domínios de Programação; Critérios de Avaliação; Categorias de LP e Classificação de LP A Histórico da Evolução das Linguagens de Programação: tradução (interpretação e compilação) Os Paradigmas: Paradigma Imperativo, Orientado a Objeto, Funcional e Lógico; principais representantes de cada um dos paradigmas 78 Prof. Dr. 39

40 Métodos de Implementação Compilada Interpretada Híbrida 79 Linguagens de Programação Na programação de computadores, uma linguagem de programação serve como meio de comunicação entre o indivíduo que deseja resolver um determinado problema e o computador escolhido para ajuda-lo na solução. Formalização de Idéias A linguagem de programação deve fazer a ligação entre o pensamento humano (muitas vezes de natureza não estruturada) e a precisão requerida para o processamento pela máquina. LP 80 Prof. Dr. 40

41 Objetivos de uma LP Auxiliar o programador no processo de desenvolvimento de software. Isso inclui auxílio no: Projeto, Implementação, Teste, Verificação e Manutenção do software Algumas características contribuem para isso 81 Definição Uma LP (Linguagem de Programação) é uma linguagem destinada a ser usada por uma pessoa para expressar um processo através do qual um computador pode resolver um problema. Os quatro modelos (paradigmas) de LP correspondem aos pontos de vista dos quatro componentes citados. A eficiência na construção e execução de programas depende da combinação dos quatro pontos de vista. 82 Prof. Dr. 41

42 Linguagens de Programação Para que se tornem operacionais, os programas escritos em linguagens de alto nível devem ser traduzidos para linguagem de máquina. Essa conversão é realizada através de sistemas especializados compiladores ou interpretadores que aceitam (como entrada) uma representação textual da solução de um problema, expresso em uma linguagem fonte, e produzem uma representação do mesmo algoritmo expresso em outra linguagem, dita linguagem objeto. 83 Linguagens de Programação Razões para se estudar os conceitos de LP: Aumento da capacidade de expressar idéias Maior conhecimento para escolha de linguagens apropriadas Entender melhor a importância da implementação Maior capacidade para aprender novas linguagens Aumento da capacidade de projetar novas linguagens Avanço global da comunicação 84 Prof. Dr. 42

43 Razões para se estudar os conceitos de LP Aumento da capacidade de expressar idéias: Capacidade intelectual pode ser influenciada pelo poder expressivo da linguagem Uma maior compreensão de uma LP pode aumentar nossa habilidade em pensar em como atacar os problemas. Tanto melhor se dominarmos os vários modelos de LP Conhecimento amplo dos recursos de linguagem reduz as limitações no desenvolvimento de softwares A melhor compreensão das funções e implementação das estruturas de uma LP nos leva a usar a LP de modo a extrair o máximo de sua funcionalidade e eficiência Recursos ou facilidades podem ser simulados 85 Razões para se estudar os conceitos de LP Maior conhecimento para escolha de linguagens apropriadas: Escolher a melhor linguagem para um problema específico devido ao conhecimento de novos recursos é difícil para: Programadores antigos Desenvolvedores sem educação formal 86 Prof. Dr. 43

44 Razões para se estudar os conceitos de LP Entender melhor a importância da implementação: Leva um entendimento do PORQUÊ das linguagens serem projetadas de determinada maneira. Melhora as escolhas que podemos fazer entre as construções de LP e as conseqüências das opções. 87 Razões para se estudar os conceitos de LP Maior capacidade para aprender novas linguagens: Aprendizado contínuo é fundamental, a computação é uma ciência nova Compreender os conceitos gerais das linguagens torna mais fácil entender como eles são incorporados na linguagem que está sendo aprendida. 88 Prof. Dr. 44

45 Razões para se estudar os conceitos de LP Aumento da capacidade de projetar novas linguagens: Ajuda no desenvolvimento de sistemas complexos 89 Razões para se estudar os conceitos de LP Avanço global da comunicação: Nem sempre as linguagens mais populares são melhores, por quê? Por que existem várias linguagens de programação? 90 Prof. Dr. 45

46 Domínios de Programação Áreas: Aplicações científicas Aplicações comerciais Inteligência artificial Programação de Sistemas Aplicações Internet e scripts Linguagens para propósitos especiais expressiva, eficiente, IDEs desenvolvedores usuários GUIS, portabilidade... aplicações expressiva, simples 91 Domínios de Programação Aplicações Científicas Início: década de 40. Foco: eficiência. Nesta categoria se enquadram todos os problemas que necessitam um grande volume de processamento, com operações geralmente feitas em ponto flutuante, e com poucas exigências de entrada e saída. As estruturas de dados mais comuns são as matrizes e arrays; as estruturas de controle mais comuns são os laços de contagem e de seleções 92 Prof. Dr. 46

47 Domínios de Programação Aplicações Científicas As aplicações científicas incentivaram a criação de algumas linguagens de alto nível, como por exemplo o FORTRAN O ALGOL 60 e a maioria de suas descendentes também se destinam a serem usadas nessa área, ainda que projetadas para outras áreas relacionadas Exemplo: MATHLAB 93 Para aplicações científicas cuja eficiência é altamente prioritária, nenhuma linguagem subseqüente é significativamente melhor do que FORTRAN Domínios de Programação Aplicações Comerciais Iniciou-se na década de 50; Foco: produção de relatórios elaborados. impulsionou o desenvolvimento de equipamentos especiais. 94 A primeira linguagem bem sucedida foi o COBOL (em 1960). Prof. Dr. 47

48 Domínios de Programação Aplicações Comerciais As linguagens comerciais se caracterizam pela facilidade de elaborar relatórios e armazenar números decimais e dados de caracteres. Com o advento dos microcomputadores surgiram as planilhas e os sistemas de banco de dados amplamente utilizados hoje em dia. 95 Exemplos Recentes: Planilhas eletrônicas e Sistemas Gerenciadores de Banco de Dados. Domínios de Programação Inteligência Artificial Início: fim da década de 50 Foco: manipulação flexível de informações, mesmo em detrimento da eficiência, em muitos casos. Estruturas de dados: listas encadeadas de dados (em oposição a arrays). 96 Prof. Dr. 48

49 Domínios de Programação Inteligência Artificial Caracterizam-se pelo uso de computações simbólicas em vez de numéricas (são manipulados nomes e não números); A primeira linguagem desenvolvida para IA foi a funcional LISP (1959). No início de 70 surge a programação lógica: PROLOG. 97 Domínios de Programação Programação de Sistemas Denominados Software básico (SO, utilitários), devem possuir eficiência na execução por propiciar suporte a execução de outros aplicativos. 98 Devem oferecer execução rápida e ter recursos de baixo nível que permitam ao software fazer interface com os dispositivos externos. Linguagem de Programação: orientada a software básico, para execução rápida, com recursos de baixo nível. Prof. Dr. 49

50 99 Domínios de Programação Programação de Sistemas Nas décadas de 60 e 70 alguns fabricantes desenvolveram linguagens de alto nível orientadas as suas máquinas (software de seus equipamentos). IBM (PL/S), Digital (BLISS), Burroughs/UNISYS (Extended ALGOL). O sistema operacional UNIX foi desenvolvido quase inteiramente em C (tornando-o fácil de portar para diferentes máquinas). C é baixo nível, execução eficiente e leve. Domínios de Programação Propósitos especiais Se distinguem por serem criadas para oferecer recursos de computação para hardwares de uso específico. (tornos CNC, calculadoras HP, etc.) Exemplos de linguagem de uso específico: RPG (relatórios comerciais), GPSS (simulação de sistemas). 100 Prof. Dr. 50

51 Domínios de Programação Linguagens de script 101 Início: década de 80. Script = lista de comandos em arquivo. Execução do arquivo para, p.ex., exercer funções utilitárias do sistema, tais como gerenciamento de arquivos. Interfaces de alto nível para controlar e interagir com um conjunto heterogêneo de softwares (glue languages). Nestas linguagens é assumida a existência de um conjunto de componentes já desenvolvidos em outras linguagens, de forma que o objetivo destas linguagens passa a ser combinar componentes e não desenvolver programas a partir de estruturas de dados elementares. Por esta razão, as linguagens de scripts são também chamadas de linguagens de colagem (glue languages) ou de linguagens de integração se sistemas (system integration languages). Domínios de Programação Linguagens de script Linguagens de script modernas (Perl, Tcl/Tk e Python) suportam: Manipulação textual simples para interpretação das entradas do usuário; Interfaceamento com software já existente; Acesso a sistemas operacionais, por meio de variáveis de ambiente e chamadas ao sistema. Exemplo: pode-se executar um programa numérico em Fortran, enviar sua saída para plotagem no GNU e criar um arquivo imagem (em formato ppm), convertendo-o em um arquivo gif usando-se o programa utilitário ppmtogif, tudo de uma só vez em um script Perl. Aplicação: linguagens de script são muito usadas para implementar CGIs (Common Gateway Interfaces), para criar páginas dinâmicas de Web. 102 Prof. Dr. 51

52 103 Domínios de Programação Linguagens de script # exemplo em TCL/TK proc Dos2Unix {filetoconvert} { puts $filetoconvert if {[file isdirectory $filetoconvert]} { foreach subfile [glob [file join $filetoconvert *]] { Dos2Unix $subfile } } else { set inputfile [open $filetoconvert] set outputfile [open $filetoconvert.new w] fconfigure $outputfile -translation lf puts -nonewline $outputfile [read $inputfile] close $outputfile close $inputfile file rename -force $filetoconvert.new $filetoconvert } } Critérios de Avaliação da Linguagem 1. Legibilidade 2. Capacidade de Escrita 3. Confiabilidade 4. Custo 104 Prof. Dr. 52

53 Critérios de Avaliação da Linguagem Critério 1: Legibilidade 105 Simplicidade Global Ortogonalidade Instruções de Controle Tipos de Dados e estruturas Considerações sobre sintaxe Critérios de Avaliação da Linguagem Legibilidade Um dos critérios mais importantes para julgar uma linguagem de programação é a facilidade com que os programas são lidos e entendidos Antes de 70 : escrita de código Na década de 70: manutenção (o conceito de ciclo de vida de software) 106 Prof. Dr. 53

54 Critérios de Avaliação da Linguagem Legibilidade A facilidade de manutenção é determinada em grande parte, pela legibilidade dos programas, ela se tornou uma medida importante da qualidade dos programas e das linguagens A legibilidade deve ser considerada no contexto do domínio do problema (Ex. um programa escrito em uma linguagem não apropriada se mostra antinatural e enrolado, difícil de ser lido) Critérios de Avaliação da Linguagem Legibilidade: Simplicidade Global A simplicidade global de uma linguagem de programação afeta fortemente sua legibilidade. Uma linguagem com um grande número de componentes básicos é mais difícil de ser aprendido do que uma com poucos desses componentes. Os programadores que precisam usar uma linguagem grande tendem a aprender um subconjunto dela e ignorar seus outros recursos. Esse padrão de aprendizagem pode ocasionar problemas quando o leitor do programa aprende um conjunto diferente de recursos daquele que o autor aplicou em seu programa. Prof. Dr. 54

55 Critérios de Avaliação da Linguagem Legibilidade: Simplicidade Global Uma segunda característica que complica a legibilidade é a multiplicidade de recursos (mais que uma maneira de realizar uma operação particular : i=i+1 i+=1 i++ ++i 109 Critérios de Avaliação da Linguagem Legibilidade: Simplicidade Global Um terceiro problema é a sobrecarga de operadores, na qual um único símbolo tem mais que um significado. Apesar de ser um recurso útil, pode ser prejudicial a legibilidade se for permitido aos usuários criar suas próprias sobrecargas. Ex sobrecarregar o + para adicionar inteiros, reais, concatenar strings, somar vetores Prof. Dr. 55

56 Critérios de Avaliação da Linguagem Legibilidade: Simplicidade Global A simplicidade de linguagens, no entanto pode ser levada ao extremo, por exemplo a forma e o significado da maioria das instruções em Assembly são modelos de simplicidade, entretanto torna os programas em Assembly menos legíveis. Uma vez que a falta de instruções de controle mais complexas, torna necessário o uso de mais códigos para expressar problemas do que os necessário em linguagens de alto nível. 111 Critérios de Avaliação da Linguagem Legibilidade: Ortogonalidade Possibilidade de combinar entre si, sem restrições, os componentes básicos da LP. Exemplo: permitir combinações de estruturas de dados, como arrays de registros Contra exemplo: não permitir que um array seja usado como parâmetro de um procedimento 112 Prof. Dr. 56

57 Em Elas.. FCT/UNESP Critérios de Avaliação da Linguagem Legibilidade: Ortogonalidade-Exemplos Falta de ortogonalidade em C: A linguagem C possui dois tipos de dados estruturados: arrays e registros (struct), sendo que : registros podem ser retornados de funções, arrays não; um membro de estrutura pode ser qualquer tipo de dado, exceto void ou uma estrutura do mesmo tipo; um elemento de array pode ser qualquer tipo de dado, exceto void ou uma função. Parâmetros são passados por valor, a menos que sejam arrays que obrigatoriamente são passados por referência; Falta de ortogonalidade em Pascal: while a > b do begin... end; if a > b then begin... end; 113 repeat... until; Critérios de Avaliação da Linguagem Legibilidade: Instruções de Controle A revolução da programação estruturada da década de 70 foi, em parte, uma reação à má legibilidade causada pelas limitadas instruções de controle das linguagens das décadas de 50 e Uso indiscriminado de goto. certas linguagens, entretanto, instruções goto que se ramificam para cima, às vezes, são necessárias; ex: elas constroem laços while em FORTRAN 77. Restringir instruções goto das seguintes maneiras pode tornar os programas mais legíveis: devem preceder seus alvos, exceto quando usadas para formar laços; Seus alvos nunca devem estar tão distantes; Seu número deve ser limitado. Prof. Dr. 57

58 Critérios de Avaliação da Linguagem Legibilidade: Instruções de Controle A partir do final de 60, as linguagens projetadas passaram a ter instruções de controle suficientes e portanto a necessidade da instrução goto foi quase eliminada. O projeto da estrutura de controle de uma linguagem é agora um fator menor importante na legibilidade do que no passado. while do...while repeat...until for..next 115 Critérios de Avaliação da Linguagem Legibilidade: Tipos de Dados e Estruturas A presença de facilidades adequadas para definir tipos de dados e estruturas de dados em uma linguagem é outro auxílio significativo para a legibilidade. Ex: supõe-se que um tipo numérico seja usado para um sinalizador porque não há nenhum tipo booleano na linguagem. : Terminou=1, não é tão claro como Terminou=true 116 Outro exemplo é uso de dados registro (Record) que é mais legível que o uso de vetores similares, um para cada item de dados (por exemplo em FORTAN 77) Prof. Dr. 58

59 117 Critérios de Avaliação da Linguagem Legibilidade: Considerações sobre a Sintaxe A sintaxe ou a forma dos elementos de uma linguagem tem um efeito significativo sobre a legibilidade dos programas. Exemplos de opções de projeto sintático que afetam a legibilidade : Formas identificadoras. Restringir os identificadores a tamanhos muitos pequenos prejudica a legibilidade. Tamanhos de identificadores muito pequenos impedem as vezes de nomear variáveis com nomes conotativos. (Ex: FORTRAN 77, máximo 6 caracteres; BASIC ANSI, uma letra ou uma letra e um número) 118 Critérios de Avaliação da Linguagem Legibilidade: Considerações sobre a Sintaxe Palavras especiais. A aparência de um programa e sua conseqüente legibilidade são fortemente influenciadas pelas formas das palavras especiais de uma linguagem(ex: begin, end e for). O Pascal exige pares de begin/end para formar grupos em todas as construções de controle (exceto repeat), a linguagem C usa chaves. Prof. Dr. 59

60 119 Critérios de Avaliação da Linguagem Legibilidade: Considerações sobre a Sintaxe Ambas as linguagens sofrem porque os grupos de instruções são sempre encerrados da mesma maneira, o que torna difícil determinar qual grupo está sendo finalizado quando um end ou } aparece O FORTAN 90 e o ADA tornam isso mais claro, usando uma sintaxe de fechamento distinta para cada tipo de grupo de instrução. (if...end if / loop...end loop) Critérios de Avaliação da Linguagem Legibilidade: Conflito!!! Conflito entre a simplicidade e a Legibilidade em Visual Basic: If condição Then instruções [ElseIf condição Then instruções] [Else instruções] End If Select Case expressão Case lista instruções Case lista instruções Case Else instruções End Select Do While Until condição instruções [Exit Do instruções] Loop 120 Prof. Dr. 60

61 Critérios de Avaliação da Linguagem Critério 2: Capacidade de Escrita Simplicidade e Ortogonalidade Suporte para Abstração Expressividade 121 Critérios de Avaliação da Linguagem Capacidade de Escrita (CE) É a medida da facilidade em que uma linguagem pode ser usada para criar programas para um domínio de problema escolhido; A maioria das características da linguagem que afetam a legibilidade também afetam a C.E. ; Deve ser considerada no contexto do domínio de problema-alvo da linguagem; 122 Prof. Dr. 61

62 Critérios de Avaliação da Linguagem CE: Simplicidade e Ortogonalidade Ortogonalidade: um número menor de construções primitivas e um conjunto consistente de regras para combiná-las; Demasiada ortogonalidade pose resultar em prejuízo para a capacidade de escrita. Se quase todas as combinações de primitivas são legais, erros podem não ser detectados; Combinações absurdas; 123 Critérios de Avaliação da Linguagem CE: Suporte para Abstração Abstração: capacidade de definir e, depois usar estruturas ou operações complicadas de uma maneira que permita ignorar muito dos detalhes. Tipos de Abstração: de Processo: algoritmos de classificação, elementos de interface gráfica de Dados: tipo moeda, tipo string, tipo data 124 Prof. Dr. 62

63 Critérios de Avaliação da Linguagem CE: Expressividade Formas convenientes de especificar computações Uma expressão representa muitas computações 125 Exemplos: i++, ao invés de i=i+1 for ao invés do while Readln do Pascal ao invés de readline do Java (Java) (Pascal) BufferedReader teclado; linha: string[20] String linea; readln(linha) teclado = new BufferedReader( new InputStreamReader(System.in) ); linea = teclado.readline(); Critérios de Avaliação da Linguagem Critério 3: Confiabilidade Verificação de Tipos Manipulação de Exceções Aliasing Legibilidade e Capacidade de Escrita 126 Prof. Dr. 63

64 Critérios de Avaliação da Linguagem Confiabilidade Um programa é confiável se ele se comportar de acordo com suas especificações sob todas as condições. 127 Critérios de Avaliação da Linguagem Confiabilidade: Verificação de Tipos Testar se existem erros de tipos em determinado algoritmo, ou por meio do compilador ou durante a execução do programa; 128 A verificação de tipos durante a compilação é a mais indicada; A verificação de tipos em C é bastante fraca: float media=5/2; int vet[50]; vet[100]=10.3; Prof. Dr. 64

65 129 Critérios de Avaliação da Linguagem Confiabilidade: Manipulação de Exceções Capacidade de um programa de interceptar erros em tempo de execução, pôr em prática medidas corretivas e, depois, prosseguir; Exemplos: try {... } Java catch( Exception e ) {... } try {... } C++ catch (Exception &exception) {... } Critérios de Avaliação da Linguagem Confiabilidade: Aliasing É ter dois ou mais métodos, ou nomes, distintos para fazer referência à mesma célula de memória. Exemplos em C: char i=`x`; char *p; p=&i; *p=`z`; union reg { long i; float f; }r;... r.f=1000; Ponteiros Union 130 Prof. Dr. 65

66 Critérios de Avaliação da Linguagem Confiabilidade: Legibilidade e Capacidade de Escrita Tanto a legibilidade como a capacidade de escrita influenciam a confiabilidade; 131 Um programa escrito em uma linguagem que não suporta maneiras naturais de expressar os algoritmos exigidos usará necessariamente métodos não naturais; Quanto mais fácil é escrever um programa, mais probabilidade ele tem de ser correto; Programas de difícil leitura complicam também sua escrita e sua modificação; Critérios de Avaliação da Linguagem Critério 4: Custo O custo final de uma linguagem de programação é uma função de muitas de suas características 132 Prof. Dr. 66

67 Critérios de Avaliação da Linguagem Custo Treinamento Em função da simplicidade e da ortogonalidade da linguagem e da experiência dos programadores. Custo da Escrita Em função da capacidade de escrita; Os esforços originais para projetar e implementar linguagens de alto nível foram motivados pelos desejos de diminuir os custos para criar software. 133 Critérios de Avaliação da Linguagem Custo Sistema de Implementação LP cujo sistema de implementação seja caro, ou rode somente em hardware caro, terá muito menos chance de tornar-se popular. Sucesso de Java. 134 Prof. Dr. 67

68 Critérios de Avaliação da Linguagem Custo Projeto da Linguagem Se uma LP exigir muitas verificações de tipos durante a execução, proibirá a execução rápida do código. Compilação Problema amenizado com o surgimento de compiladores otimizados e de processadores mais rápidos. 135 Critérios de Avaliação da Linguagem Custo Má Confiabilidade Falhas podem ocasionar insucesso o software e ações judiciais. Manutenção Depende principalmente da legibilidade. O custo de manutenção pode atingir de duas a quatro vezes o custo de desenvolvimento. 136 Prof. Dr. 68

69 Fatores que influenciam na Escolha de uma LP Implementação Competência na LP Portabilidade Sintaxe Semântica Ambiente de programação Modelo de computação Fatores que influenciam na Escolha de uma LP Implementação Competência na LP Disponibilidade Portabilidadequanto à plataforma Eficiência: Sintaxevelocidade de execução do programa objeto Semântica Ambiente de programação Modelo de computação Prof. Dr. 69

70 Fatores que influenciam na Escolha de uma LP Implementação Competência na LP Portabilidade Sintaxe Experiência do programador Semântica Competência do grupo envolvido Ambiente de programação Modelo de computação Fatores que influenciam na Escolha de uma LP Implementação Competência na LP Portabilidade Sintaxe Necessidade Semântica de executar em várias máquinas. Ambiente de programação Modelo de computação Prof. Dr. 70

71 Fatores que influenciam na Escolha de uma LP Implementação Competência na LP Portabilidade Sintaxe Semântica Ambiente Certos tipos de de programação aplicação acomodam-se melhor em Modelo certas de sintaxes computação Fatores que influenciam na Escolha de uma LP Implementação Competência na LP Portabilidade Sintaxe Semântica Ambiente de programação Modelo de computação Aplicação X Facilidades Por exemplo, para processamento concorrente pode-se usar ADA, para utilização de recursividade pode-se usar Pascal. Prof. Dr. 71

72 143 Fatores que influenciam na Escolha de uma LP Implementação Competência na LP Portabilidade Sintaxe Semântica Ambiente de programação Ferramentas Modelo de computação para desenvolvimento de software diminuem o esforço de programação Bibliotecas Fatores que influenciam na Escolha de uma LP Implementação Competência na LP Portabilidade Aplicação SintaxeX modelo de computação Por exemplo, para realização de busca heurística é adequado Semântica o Paradigma Lógico, para simulações, o Paradigma Orientado a Objeto Ambiente de programação Modelo de computação 144 Prof. Dr. 72

73 145 Histórico (70+) Década de 70: engenharia de software Abstração de dados: definição de tipos Abstração de controle: comandos, procedimentos Inicia preocupação com programação em larga escala: módulos e programação estruturada Exemplos de linguagens populares: Uso acadêmico:algol (algoritmos), Pascal (tipos de dados) Uso comercial: Cobol (arquivos), PL/I (uso amplo) Histórico (70+) Década de 80: modularização Ênfase em mecanismos de LP e abstrações Correção de programas: verificação de tipos, exceções Programação concorrente e distribuída e tempo real Programação baseada em objetos (TADs) Programação orientada a objetos (herança) Exemplos de linguagens Uso acadêmico: Pascal / Modula Programação de tempo real: Ada 83 Orientada a objetos: Smalltalk 146 Prof. Dr. 73

74 147 Histórico (70+) Década de 90: base na estrutura Estruturação de dados: encapsulamento Estruturação da computação: classe Estruturação do programa: classes e objetos Programação para Internet: plataforma neutra Exemplos de linguagens Pascal / Object Pascal C / C++ Ada83 / Ada95 Java Quadro Histórico 148 Ver link na página da disciplina... Prof. Dr. 74

75 Histórico FORTRAN (FORmula TRANslation) COBOL (COmmon Business Oriented Language) ALGOL 60 (ALGorithmic Oriented Language) LISP (LISt Processing) APL (A Programming Language) BASIC (Beginners All-purpose Symbolic Instruction Code) Histórico (LP's baseadas em ALGOL) PL/I (Programming Language I) SIMULA 67 ALGOL 68 PASCAL Linguagens dos anos 80 (criadas na década de 70) ADA PROLOG (PROgramming in LOGic) (PROgrammación LOGiqué) SMALLTALK C MODULA 2 Prof. Dr. 75

76 Características de Linguagens FORTRAN (FORmula TRANslation) variáveis comando de atribuição conceito de tipos modularidade (com o uso de subprogramas) E/S formatadas COBOL (COmmon Business Oriented Language) código mais legível estrutura de dados heterogênea (record) 151 Características de Linguagens ALGOL 60 (ALGorithmic Oriented Language) estrutura de blocos: habilidade de se criar blocos de comandos para o escopo de variáveis e extensão de influência de comandos de controle comandos de controle estruturados: if-then-else e uso de uma condição geral para controle de iteração recursividade: habilidade de um procedimento chamar a si próprio 152 Prof. Dr. 76

77 Características de Linguagens LISP (LISt Processing) é pioneira na idéia de computação simbólica ou nãonumérica BASIC (Beginners All-purpose Symbolic Instruction Code) uma das primeiras LPs a prover um ambiente de programação interativo como parte da linguagem execução interpretativa de programas 153 Características de Linguagens PL/I (Programming Language I) tratamento de interrupção - execução de procedimentos específicos quando uma condição excepcional ocorre multitarefa - especificação de tarefas que podem ser executadas concorrentemente 154 Prof. Dr. 77

78 155 Características de Linguagens PL/I (Programming Language I) tratamento de interrupção - execução de procedimentos específicos quando uma condição excepcional ocorre multitarefa - especificação de tarefas que podem ser executadas concorrentemente Influências Sofridas: estrutura de bloco, de controle e recursividade do ALGOL 60; subprogramas e E/S formatadas do FORTRAN; manipulação de arquivos e registros do COBOL; alocação dinâmica de memória e estruturas encadeadas do LISP; operações de arrays do APL. Características de Linguagens SIMULA 67 conceito de classe: Uma classe é um encapsulamento de dados e procedimentos que podem ser instanciados em um conjunto de objetos. É o conceito predecessor ao tipo abstrato de dados (ADA e Módula 2) e das classes das linguagens orientadas a objeto (Smalltalk e C++) 156 Prof. Dr. 78

79 Características de Linguagens ALGOL 68 ortogonalidade: uma LP que é ortogonal tem um número de construtores básicos e um conjunto de regras para combiná-los relativamente pequeno (oposto a PL/I) Características de Linguagens PASCAL estruturas de controle flexíveis tipos definidos pelo usuário arquivos records conjuntos Prof. Dr. 79

80 Características de Linguagens PROLOG (PROgrammación LOGiqué) É destinada a aplicações de Inteligência Artificial e se baseia em lógica formal Características de Linguagens SMALLTALK primeira LP a utilizar o paradigma de programação interativa introduz o conceito de LP extensível Influências Sofridas: Apresenta um ambiente de programação com menus pop-up, windows e mouse (modelo para Apple Macintosh). Segue o modelo orientado a objetos, possuindo o conceito de classe do SIMULA 67 mais encapsulamento, herança e instanciação. Prof. Dr. 80

81 Características de Linguagens C Desenvolvida pelo Bell Lab no início dos anos 70, visando a implementação do UNIX. Possui um padrão feito por Kernighan e Ritchie em Tem facilidades para a programação em "baixo nível" e gera código eficiente. Possui um grande conjunto de operadores, o que permite um código compacto, porém de baixa legibilidade. É excelente para construir programas portáveis. 161 Características de Linguagens MODULA 2 Criada por Niklaus Wirth no final dos anos 70. É uma linguagem de propósito geral, baseada em melhorias no Pascal. É boa para projetos de desenvolvimento de software de grande porte, sendo utilizada para ensinar programação. Módulos podem ser usados para implementar TAD (Tipos Abstratos de Dados) tipos de procedimentos 162 Prof. Dr. 81

82 163 Características de Linguagens ADA Desenvolvida no início dos anos 70 pelo Departamento de Defesa dos Estados Unidos. É dedicada aos "embedded systems" (operam como parte de um sistema maior) e se baseia no Pascal. Teve um padrão em Usa conceitos de classe do Simula 67, adota o tratamento de exceções de PL/I e provê facilidades para processamento concorrente. Foi projetada para apoiar aplicações numéricas, programação de sistemas e aplicações que envolvem considerações de tempo real e concorrência. Seu nome se deve a ADA Augusta, 1a programadora, colaboradora de Charles Babbage - século 19. Classificação das Linguagens de Programação Quanto ao nível Quanto à geração Quanto ao paradigma 164 Prof. Dr. 82

83 Classificação quanto ao nível Baixo nível Médio nível Alto nível Classificação quanto ao nível Linguagens de Baixo Nível: As linguagens de Baixo Nível são aquelas voltadas para a máquina, ou seja as que são escritas utilizando as instruções do microprocessador do computador. São genericamente chamadas de linguagens Assembly. Os programas escritos com Alto Nível geralmente podem ser convertidos com programas especiais para Baixo Nível. MOV BX,0 CONTINUA: MOV DL, [MENSAGEM + BX] ;DL := MENSAGEM[BX] CMP DL,0 registrador ;COMPARA DL COM ZERO JE TERMINA ;SE IGUAL, PULA PARA TERMINA MOV AH,2 ;VAMOS IMPRIMIR O CARACTER INT 21H ;INT 21H, SIM, FAÇA ISSO! INC BX ;INCREMENTA DESLOCAMENTO JMP CONTINUA ;E CONTINUA NO LOOP TERMINA: interrupção INT 20H ;TERMINE ESSE PROGRAMA.COM Prof. Dr. 83

84 Classificação quanto ao nível Linguagens de Baixo Nível: Vantagens: Programas são executados com maior velocidade de processamento. Os programas ocupam menos espaço na memória. Desvantagens: Em geral, programas em Assembly tem pouca portabilidade, isto é, um código gerado para um tipo de processador não serve para outro. Códigos Assembly não são estruturados, tornando a programação mais difícil. 167 Classificação quanto ao nível Linguagens de Médio Nível: São linguagens voltadas ao ser humano e a máquina, ou seja, estas linguagens são uma mistura entre as linguagens de Alto Nível e as de Baixo Nível. Estas linguagens contêm comandos muito simples e outros muito complicados, o que torna o seu código não muito difícil e nem tão fácil de entender. Vantagens: Geralmente são linguagens com mais poder, permitindo a criação de diversos softwares, desde jogos a programas com qualidade profissional. 168 Desvantagens: Alguns comandos têm uma sintaxe muito difícil de compreender. Prof. Dr. 84

85 Classificação quanto ao nível Linguagens de Alto Nível: São linguagens voltadas para o ser humano. Em geral utilizam sintaxe mais estruturada tornando o seu código mais fácil de entender, e de editar programas. Vantagens: Por serem compiladas ou interpretadas, têm maior portabilidade, podendo ser executados em varias plataformas com pouquíssimas modificações. Em geral, a programação tornase mais fácil por causa do maior ou menor grau de estruturação de suas linguagens. Desvantagens: Em geral, as rotinas geradas (em linguagem de máquina) são mais genéricas e, portanto, mais complexas e por isso são mais lentas e ocupam mais memória Classificação quanto à geração 1ª Geração 2ª Geração 3ª Geração 4ª Geração 5ª Geração Prof. Dr. 85

86 Classificação quanto à geração 1ª Geração: Linguagens em nível de máquina Os primeiros computadores eram programados em linguagem de máquina, em notação binária. A instrução , quando executada, realiza a soma: (código de operação 0010) do dado armazenado no registrador 0001, com o dado armazenado na posição de memória 108 ( ). 171 Classificação quanto à geração 1ª Geração: Linguagens em nível de máquina 172 Cada instrução de máquina é, em geral, formada por um código de operação e um ou dois endereços de registradores ou de memória. As linguagens de máquina permitem a comunicação direta com o computador em termos de bits, registradores e operações de máquina bastante primitivas. Como um programa em linguagem de máquina nada mais é que uma seqüência de zeros e uns, a programação de um algoritmo complexo usando esse tipo de linguagem é complexa, cansativa e fortemente sujeita a erros. Prof. Dr. 86

87 Classificação quanto à geração 2ª Geração: Linguagens de Montagem (Assembly) Compreende as linguagens simbólicas ou de montagem (Assembly), projetadas para minimizar as dificuldades da programação em notação binária. Códigos de operação e endereços binários foram substituídos por mnemônicos (abreviações). mov mul add label goto Nas linguagens de montagem, a maioria das instruções são representações simbólicas de instruções de máquina. O processamento de um programa em linguagem simbólica requer tradução para linguagem de máquina antes de ser executado. 173 Classificação quanto à geração 2ª Geração: Linguagens de Montagem (Assembly) Códigos de operação e endereços binários foram substituídos por mnemônicos. Assim, a instrução de máquina ( ) evoluiu para: ADD R1, TOTAL R1 representa o registrador 1 e TOTAL é o nome atribuído ao endereço de memória Prof. Dr. 87

88 Classificação quanto à geração 2ª Geração: Linguagens de Montagem (Assembly) Exemplo em Assembly mov eax, [ebx+$02e0] mov edx, [eax] call dword ptr [edx+$00b4] cmp al, $01 jnz B xor edx, edx mov eax, ebx 175 * um projeto Delphi com 22 linhas de código revertido para Assembly, ficou com aproximadamente linhas! Classificação quanto à geração 3ª geração: Linguagens Orientadas ao usuário Surgiram na década de 60. Algumas delas são orientadas à solução de problemas científicos, tais como FORTRAN, PASCAL e ALGOL; outras, tal como COBOL, são usadas para aplicações comerciais. 176 Linguagens como PL/I e ADA contêm facilidades para ambos os tipos de computações (científica e comercial). Prof. Dr. 88

89 Classificação quanto à geração 3ª geração: Linguagens Orientadas ao usuário As linguagens de 3ª geração podem também ser classificadas em: linguagens procedimentais também chamadas procedurais ou imperativas linguagens declarativas 177 Classificação quanto à geração 3ª geração: Linguagens Orientadas ao usuário Nas linguagens procedimentais, um programa especifica um procedimento, isto é, uma seqüência de passos a serem seguidos para solucionar um problema. As instruções oferecidas por essas linguagens pertencem, em geral, a três classes: instruções entrada/saída, instruções de cálculos aritméticos ou lógicos instruções de controle de fluxo de execução (desvios condicionais, incondicionais e processamento iterativo) 178 Prof. Dr. 89

90 Classificação quanto à geração 3ª geração: Linguagens Orientadas ao usuário Exemplos de linguagens procedimentais: BASIC, ALGOL, PL/I, PASCAL, ADA, C,etc. Programa em Basic: 10 INPUT A,B,C 20 LET SOMA = A+B+C 30 LET MEDIA = SOMA/3 40 PRINT MEDIA 50 PRINT "DESEJA CONTINUAR (S/N)?" 60 INPUT RESPOSTA 70 IF RESPOSTA = "S"THEN END 179 Classificação quanto à geração 3ª geração: Linguagens Orientadas ao usuário As linguagens declarativas dividem-se, basicamente, em duas classes: funcionais, as quais se baseiam na teoria das funções recursivas lógicas, cuja base é a lógica matemática. A programação funcional envolve, essencialmente, a definição e a chamada de funções. LISP é o exemplo mais difundido de linguagem funcional. Nas linguagens lógicas, um programa declara fatos (dados e relações entre eles) e cláusulas lógicas (regras de dedução), que permitirão deduzir novas verdades a partir dos fatos conhecidos. Ex. PROLOG 180 Prof. Dr. 90

91 Classificação quanto à geração 4ª geração: Linguagens Orientadas à Aplicação As linguagens de 3ª geração foram projetadas para profissionais de processamento de dados e não para usuários finais. A depuração de programas escritos nessas linguagens consome tempo, e a modificação de sistemas complexos é relativamente difícil. 181 As linguagens de 4ª geração foram projetadas em resposta a esses problemas. Classificação quanto à geração 4ª geração: Linguagens Orientadas à Aplicação Os programas escritos em linguagens de 4ª geração necessitam de menor número de linhas de código do que os programas correspondentes codificados em linguagens de programação convencionais. Ex. mostrar uma imagem bmp em CA-dBFast: LOAD IMAGE C:\multimid\LAB1.BMP INTO 0,28 SAY pimage 182 Prof. Dr. 91

92 Classificação quanto à geração 4ª geração: Linguagens Orientadas à Aplicação Ex. Trecho de cógigo para visualizar uma imagem bmp em C (Borland): 183 FILE *p; BITMAPFILEHEADER BF; BITMAPHEADER BH; p=fopen( ARQ.BMP, "rb"); fread(&bf, sizeof(bf), 1, p); fread(&bh, sizeof(bh), 1, p); int xx = x; int yy = BH.altura + y; unsigned char buf; fseek(p, BF.inicio_da_imagem, 0); for (int i = 1; i <= BH.altura; i++) { for (int j = 1; j <= BH.largura; j++) { buf = getc(p); putpixel(xx, yy, buf >> 4); putpixel(xx+1, yy, (buf << 4) >> 4); xx += 2; j++; } xx = x; yy--; } Classificação quanto à geração 4ª geração: Linguagens Orientadas à Aplicação As linguagens de 4ª geração variam bastante no número de facilidades oferecidas ao usuário. Algumas são, meramente, geradores de relatórios ou pacotes gráficos; Outras são capazes de gerar aplicações completas. Em geral, essas linguagens são projetadas para atender a classes específicas de aplicações. 184 Prof. Dr. 92

93 Classificação quanto à geração 4ª geração: Linguagens Orientadas à Aplicação 185 Principais objetivos: Facilitar a programação de computadores de maneira tal que usuários finais possam resolver seus problemas Apressar o processo de desenvolvimento de aplicações; Facilitar e reduzir o custo de manutenção de aplicações; Minimizar problemas de depuração; Gerar código sem erros a partir de requisitos de expressões de alto nível. Classificação quanto à geração 4ª geração: Linguagens Orientadas à Aplicação 186 Exemplos de linguagens de 4ª geração: LOTUS 1-2-3, EXCEL, SQL, SUPERCALC, VISICALC, DATATRIEVE, VHML, PHP Comando em dbase III Plus: LIST ALL NOME, ENDERECO, TELEFONE FOR CIDADE = "PRESIDENTE PRUDENTE" Prof. Dr. 93

94 Classificação quanto à geração 5ª geração: Linguagens do Conhecimento São usadas principalmente na área de Inteligência Artificial. Facilitam a representação do conhecimento que é essencial para a simulação de comportamentos inteligentes. O termo 5ª geração refere-se, especialmente, a sistemas que usam mecanismos da área de inteligência artificial (IA), ou seja, sistemas especialistas, processadores de língua natural e sistemas com bases de conhecimento. 187 Um sistema de 5ª geração armazena conhecimento complexo de modo que a máquina pode obter inferências a partir da informação codificada. Classificação quanto ao paradigma Imperativo Funcional Lógico Orientado a Objetos Concorrente 188 Prof. Dr. 94

95 Definição (lembrando...) Uma LP (Linguagem de Programação) é uma linguagem destinada a ser usada por uma pessoa para expressar um processo através do qual um computador pode resolver um problema. Os quatro modelos (paradigmas) de LP correspondem aos pontos de vista dos quatro componentes citados. A eficiência na construção e execução de programas depende da combinação dos quatro pontos de vista. 189 Paradigma Paradigma é um modelo interpretativo (ou conceitualização) de uma realidade. Permite organizar as idéias com vista: Ao entendimento dessa realidade. À determinação de qual a melhor forma de atuar sobre essa realidade. Pode dizer-se que um paradigma é um ponto de vista: um ponto de vista que determina como uma realidade é entendida e como se atua sobre ela. 190 Prof. Dr. 95

96 Paradigma Exemplos de tipos de paradigma: 191 Paradigmas políticos (ideologias) - Liberalismo, Fascismo, Comunismo, Socialismo, etc. (Sabemos que as diferentes ideologias interpretam distintamente a realidade social e estabelecem planos de ação distintos.. Paradigmas econômicos (teorias) - Keynesianismo (Keynes), Monetarismo (Milton Friedman), etc. Paradigmas militares - Estratégia Medieval (armas brancas, fortificações), Guerra Fria (armas nucleares, ameaça/contenção), Guerrilha (tentativa de obter máximos resultados com recursos muitos escassos). Paradigma na programação Algumas linguagens criadas durante a história da evolução das linguagens introduziram novas formas de se pensar sobre programação, resultando em formas distintas de modelagem de soluções para problemas de software. FORTRAN (imperativas), LISP (funcionais), Simula (orientadas a objetos) Prolog (lógicas). Outras linguagens são o resultado da evolução de linguagens mais antigas, muitas vezes mesclando características de diferentes linguagens existentes. Por exemplo, C++ é uma evolução do C com características de orientação a objetos, importadas de Simula. 192 Prof. Dr. 96

97 Paradigma na programação (exemplos) Paradigma imperativo (estado, atribuição, seqüência) Basic, Pascal, C, Ada, Assembly. Paradigma funcional (função, aplicação, avaliação) Lisp, ML, Miranda, Haskell, SCHEME. Paradigma lógico (relação, dedução) Prolog. Paradigma orientado a objetos (objeto, mensagem) C++, Java, Eiffel, Ocaml. Paradigma concorrente assíncrona) ) (processo, comunicação (síncrona ou Ada, Java. 193 Paradigma na programação (combinação) C++ Paradigma imperativo + paradigma orientado a objetos. Java Paradigma orientado a objetos + paradigma concorrente. Ocaml Paradigma funcional + paradigma orientado a objetos. Ada Paradigma imperativo + paradigma concorrente. 194 Prof. Dr. 97

98 Paradigmas Paradigma Imperativo As linguagens imperativas são orientadas a ações, onde a computação é vista como uma seqüência de instruções que manipulam valores de variáveis (leitura e atribuição). 195 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 muito importante. 196 Prof. Dr. 98

99 Paradigma Imperativo Modelo computacional Entrada Programa Saída Estado 197 Paradigma Imperativo Foram criadas principalmente pela influência da arquitetura de computadores preponderante Von Neumann, programas e dados são armazenados na mesma memória. Instruções e dados são transmitidos da CPU para a memória, e vice-versa. Resultados das operações executadas na CPU são retornadas para a memória. 198 Prof. Dr. 99

100 Paradigma Imperativo Seus conceitos principais: variáveis, que representam simbolicamente células (ou posições) de memória. declarações de atribuição (Exemplo do Pascal: x := 10), baseadas nas operações de transmissão de dados. declarações de repetição (Exemplo do C: while). 199 Paradigma Imperativo Linguagens Imperativas Não Estruturadas FORTRAN foi uma das primeiras linguagem de alto nível imperativas. As versões originais de FORTRAN possuíam a instrução goto necessária para determinar a repetição e a seleção de execução de instruções, o que dificultava bastante a leitura e o acompanhamento da execução de um programa escrito em FORTRAN. 200 Prof. Dr. 100

101 Paradigma Imperativo Linguagens Imperativas Não Estruturadas Assembly e BASIC são outros exemplos de linguagens imperativas que possuem o conceito de goto INPUT A,B,C 20 LET SOMA = A+B+C 30 LET MEDIA = SOMA/3 40 PRINT MEDIA 50 PRINT "DESEJA CONTINUAR (S/N)?" 60 INPUT RESPOSTA 70 IF RESPOSTA = "S"THEN GOTO END Exemplo em Basic read(x); 2: if x = 0 then goto 8; writeln(x); 4: read(next); if next = x then goto 4; x := next; goto 2; 8:...; Exemplo em Pascal Paradigma Imperativo Linguagens Imperativas Estruturadas 202 Linguagens estruturadas surgiram com o objetivo de facilitar a leitura e acompanhamento da execução de algoritmos e geralmente não fazem uso de comando goto. Instruções são agrupadas em blocos, os quais podem ser considerados como unidades de programa, abstraindo-se das suas estruturas internas. Blocos de instruções podem ser selecionados para execução através de declarações de seleção como if...else, ou repetidamente executados através de declarações de repetição como while. Prof. Dr. 101

102 Paradigma Imperativo Linguagens Imperativas Estruturadas Linguagens estruturadas procedurais permitem a criação de procedimentos (e funções), que são blocos de instruções, que formam os elementos básicos de construção de programas. Procedimentos criam um nível de abstração, onde não é necessário conhecer todos os passos de execução de um procedimento, apenas qual a sua função e quais os seus prérequisitos para que execute de acordo com o esperado. Linguagens estruturadas modulares criam um outro mecanismo de abstração, o módulo, que normalmente é composto de definições de variáveis e procedimentos, que são agrupados de acordo com critérios específicos Paradigma Imperativo Linguagens Imperativas Estruturadas Exemplo de código estruturado, baseado na sintaxe do Pascal, correspondente ao mesmo exemplo da seção anterior: read(x); while x <> 0 do begin writeln(x); repeat read(next); until next <> x; end; x := next; Exemplo em Pascal Prof. Dr. 102

103 Paradigma Imperativo Visão Crítica do Paradigma Imperativo: 205 Vantagens Eficiência (embute modelo de Von Neumann) Modelagem natural de aplicações do mundo real Paradigma dominante e bem estabelecido Problemas 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 206 Paradigma Imperativo Exemplos de linguagens imperativas: FORTRAN BASIC COBOL Pascal C Python ALGOL Modula Prof. Dr. 103

104 Paradigmas Paradigma Funcional Sistemas são construídos através da definição, composição e definição de funções. Foco no processo de resolução do problema. A visão funcional resulta num programa que descreve as operações que devem ser efetuadas para resolver o problema. 207 Paradigma Funcional Trata a programação como uma transformação de dados por funções Que função deve ser aplicada para transformar minha entrada na saída desejada? Ao invés dos passos sucessivos do paradigma imperativo, a sintaxe da linguagem é apropriada para definição de funções compostas que denotam aplicações sucessivas de funções: função-n(...função-2(função-1(dados))...) 208 Prof. Dr. 104

105 Paradigma Funcional Modelo computacional Entrada Programa Saída 209 Paradigma Funcional: Características 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 e IA 210 Prof. Dr. 105

106 Paradigma Funcional Função: f: {domínio} {contra-domínio} Programa: p: {possíveis entradas} {possíveis saídas} Uma função tem três componentes básicos: Domínio: conjunto de objetos aos quais a função se aplica) Contra-domínio: conjunto de objetos resultantes da aplicação da função, e Definição: especificação de como um objeto do contra-domínio é determinado a partir do domínio. Há um quarto componente opcional: o nome da função. 211 Paradigma Funcional Exemplo 1: função double Domínio: Z Contra-Domíno: Z Definição: x + x, onde x é elemento do domínio Nome: double Notação matemática: double(x) = x + x double: integer integer 212 Note que o operador + é usado na definição, e + é uma função também. Prof. Dr. 106

107 Paradigma Funcional Exemplos em SCHEME ;;; Função para obtenção do dobro de x, com aplicação do valor 4 (lambda (x) (+ x x)) ==> um procedimento ((lambda (x) (+ x x)) 4) ==> 8 ;;;Obtenção de x-y e aplicação com os valores 10 e 7 (define reverse-subtract (lambda (x y) (- y x))) (reverse-subtract 7 10) ==> 3 ;;; procedimento Fatorial para obtenção do fatorial de um número inteiro nãonegativo (define fact (lambda (n) (if (= n 0) 1 ;Caso básico - resulta no valor 1 (* n (fact (- n 1)))))) 213 Paradigma Funcional Exemplos de linguagens funcionais: 214 Scheme Derivada de LISP Common LISP Buscando padronização de LISP CLOS (Common LISP Object System) Dialeto de LISP que incorpora elementos de linguagens orientadas a objetos ML Linguagem funcional fortemente tipada Miranda Baseada em ML, mas é puramente funcional Prof. Dr. 107

108 Paradigma Funcional: Visão Crítica 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 215 Paradigmas Paradigma Lógico O modelo Lógico está relacionado à perspectiva da pessoa: ele encara o problema de uma perspectiva lógica. Um programa lógico é equivalente à descrição do problema expressa de maneira formal, similar à maneira que o ser humano raciocinaria sobre ele. Programação é baseada em fatos, que podem ser relações (associações) entre coisas, e regras, que produzem fatos deduzidos a partir de outros. 216 Prof. Dr. 108

109 Paradigma Lógico Programação em linguagens declarativas (lógica) requer um estilo mais descritivo. O programador deve conhecer os relacionamentos entre as entidades e conceitos envolvidos para descrever os fatos (cláusulas). Programas descrevem um conjunto de regras que disparam ações quando suas premissas são satisfeitas. 217 Prolog foi desenvolvida em 1972 para processamento de linguagem natural, na França. O nome vem de PROgrammation en LOGique. Paradigma Lógico Modelo computacional Entrada Programa Saída 218 Prof. Dr. 109

110 Paradigma Lógico: Características 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 219 Aplicações: sistemas especialistas (IA) e banco de dados 220 Paradigma Lógico Exemplos em Prolog: obrigado_a_fazer(r,a):- robô(r), capaz_de_fazer(r,a), perigo(b,h), humano(h), fazer_afasta(a,b,h), proibido_fazer(r,a):-robô(r), capaz_de_fazer(r,a), machuca(a,h), humano(h). Prof. Dr. 110

111 Paradigma Lógico Exemplo em Prolog pai(antonio, claudio). pai(antonio, ana). pai(claudio, flavio). pai(claudio, jean)?. pai(jean, julia).?pai(antonio,carlos). No Antonio Cláudio Flavio Jean?pai(X,jean). X=claudio Júlia Ana avo(x,y):-pai(x,z),pai(z,y).?-avo(antonio,jean). yes 221 Programas Prolog consistem em dois tipos de declaração, que são fatos e regras. Paradigma Lógico Visão Crítica: Vantagens Em princípio, todas do paradigma funcional Permite concepção da aplicação em um alto nível de abstração (por meio 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 222 Prof. Dr. 111

112 Paradigma Concorrente Múltiplas computações podem ser executadas simultaneamente Computações paralelas: Múltiplos processadores compartilham memória Computações distribuídas: Múltiplos computadores conectados por uma rede de comunicação 223 Paradigmas Paradigma Orientado a Objetos Tratam os elementos e conceitos associados ao problema como objetos. Objetos são entidades abstratas que embutem dentro de suas fronteiras, as características e operações relacionadas com a entidade real. 224 Prof. Dr. 112

113 Paradigma Orientado a Objeto O modelo Orientado a Objeto focaliza mais o problema. Um programa OO é equivalente a objetos que mandam mensagens entre si. Os objetos do programa equivalem aos objetos da vida real (problema). A abordagem OO é importante para resolver muitos tipos de problemas através de simulação. 225 Paradigma Orientado a Objetos Não é um paradigma no sentido estrito: é uma subclassificação do imperativo. (Será?) 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 e operações (métodos) sobre este. 226 Classes podem ser estendidas e/ou usadas como tipos (cujos elementos são objetos). Prof. Dr. 113

114 Paradigma Orientado a Objetos Modelo computacional Entrada Programa Saída Entrada Programa Saída Estado Entrada Programa Saída Entrada Programa Saída Estado Estado Estado 227 Paradigma Orientado a Objetos O paradigma da orientação a objetos considera objetos e classes como blocos básicos de construção de um sistema. Sistemas são vistos como coleções de objetos que se comunicam, enviando mensagens, colaborando para dar o comportamento global dos sistemas. 228 Uma classe determina o comportamento e a estrutura de objetos similares (Célula, Mamífero, Réptil, Homo, Sapiens). Pode-se dizer que a idéia da orientação a objetos foi importada a partir da observação do comportamento de sistemas complexos do mundo real (animais, plantas, máquinas, ou até mesmo empresas), onde cada objeto possui um determinado conjunto de responsabilidades dentro de um sistema, que normalmente estão relacionadas com a manutenção de conhecimento e com ações que devem executar. Prof. Dr. 114

115 Paradigma Orientado a Objetos Sistemas orientados a objetos apresentam hierarquias de classes, onde classes mais genéricas são especializadas em classes mais específicas (ex.: mamíferos -> felinos, primatas, canídeos,...), e hierarquias de objetos, onde objetos mais genéricos são compostos por objetos mais específicos (ex.: planta é composta de órgãos, como o galho, que é composto de células,..., que são compostas de átomos, que são compostos de prótons, neutrons,..., que são compostos de quarks...). SIMULA 67 foi a primeira linguagem a incorporar estes conceitos, desenvolvida especialmente para a criação de aplicações de simulação. Outra linguagem OO importante e pioneira é Smalltalk, originada na dissertação de doutorado de Alan Kay em Outras linguagens OO combinam características de linguagens imperativas e orientadas a objetos: C++, Eiffel, Java, Ada Paradigma Orientado a Objetos 230 public class Elipse { private int _X, _Y, _raiox, _raioy; public Elipse(int x, int y, int rx, int ry) { _X = x; _Y = y; _raiox = rx; _raioy = ry; } public void DefinirRaios(int rx, int ry) { _raiox = rx; _raioy = ry; } public int InformarRaioX() { return _raiox; } public int InformarRaioY() { return _raioy; } public void Desenhar(Graphics area) { area.drawoval(_x, _Y, _raiox, _raioy); } }; Elipse e1; e1=new Elipse(10,10,20,25); e1.desenhar(g); Prof. Dr. 115

Linguagens de Programação

Linguagens de Programação Linguagens de Programação Aula 1 Celso Olivete Júnior olivete@fct.unesp.br Metodologia Aulas expositivas teórico-práticas Exercícios práticos Projetos individuais e/ou em grupos Seminários sobre tópicos

Leia mais

Conceitos de Linguagens de Programação

Conceitos de Linguagens de Programação Conceitos de Linguagens de Programação Aula 01 Introdução Edirlei Soares de Lima O que é uma Linguagem de Programação? Na programação de computadores, uma linguagem de programação

Leia mais

Paradigmas de Programação

Paradigmas de Programação Paradigmas de Programação Prof.: Edilberto M. Silva http://www.edilms.eti.br Aula 2 Linguagens de Programação Desenvolvimento e execução de programas Características de linguagens Execução de programas

Leia mais

Capítulo 1. Aspectos Preliminares

Capítulo 1. Aspectos Preliminares Capítulo 1 Aspectos Preliminares Tópicos do Capítulo 1 Razões para estudar conceitos de linguagens de programação Domínios de programação Critérios de avaliação de linguagens Influências no projeto de

Leia mais

Compiladores. Introdução à Compiladores

Compiladores. Introdução à Compiladores Compiladores Introdução à Compiladores Cristiano Lehrer, M.Sc. Introdução (1/2) O meio mais eficaz de comunicação entre pessoas é a linguagem (língua ou idioma). Na programação de computadores, uma linguagem

Leia mais

Linguagens de Programação Aula 3

Linguagens de Programação Aula 3 Aula 3 Celso Olivete Júnior olivete@fct.unesp.br Na aula passada... Classificação das LPs (nível, geração e paradigma) Paradigmas Imperativo, OO, funcional, lógico e concorrente 2/33 Na aula de hoje...

Leia mais

Compiladores. Introdução

Compiladores. Introdução Compiladores Introdução Apresentação Turma Noite Continuada I 20/03 Continuada II 22/05 Atividades Regimental 05/06 Total 1 Ponto 1 Ponto 1 Ponto 7 Pontos 10 Pontos Aulas expositivas teórico-práticas Exercícios

Leia mais

INE5421 LINGUAGENS FORMAIS E COMPILADORES

INE5421 LINGUAGENS FORMAIS E COMPILADORES INE5421 LINGUAGENS FORMAIS E COMPILADORES PLANO DE ENSINO Objetivo geral Conhecer a teoria das linguagens formais visando sua aplicação na especificação de linguagens de programação e na construção de

Leia mais

Linguagens de Programação

Linguagens de Programação Linguagens de Programação Prof a Jerusa Marchi Departamento de Informática e Estatística Universidade Federal de Santa Catarina e-mail: jerusa@inf.ufsc.br Linguagens de Programação p. 1/5 Linguagens de

Leia mais

Projeto de Compiladores

Projeto de Compiladores Projeto de Compiladores FIR Faculdade Integrada do Recife João Ferreira 12 e 13 de fevereiro de 2007 Questionário 1. Em quais linguagens de programação você já programou? 2. O que você sabe sobre compiladores?

Leia mais

Aspectos preliminares

Aspectos preliminares Aspectos preliminares Linguagens de Programação Marco A L Barbosa cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual 4.0 Internacional. http://github.com/malbarbo/na-lp-copl

Leia mais

FERRAMENTA DE AUXÍLIO AO PROCESSO DE DESENVOLVIMENTO DE SOFTWARE INTEGRANDO TECNOLOGIAS OTIMIZADORAS

FERRAMENTA DE AUXÍLIO AO PROCESSO DE DESENVOLVIMENTO DE SOFTWARE INTEGRANDO TECNOLOGIAS OTIMIZADORAS FERRAMENTA DE AUXÍLIO AO PROCESSO DE DESENVOLVIMENTO DE SOFTWARE INTEGRANDO TECNOLOGIAS OTIMIZADORAS Acadêmico: Roger Anderson Schmidt Orientador : Marcel Hugo Supervisor : Ricardo de Freitas Becker Empresa

Leia mais

Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES. Introdução. Geovane Griesang

Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES. Introdução. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES Introdução geovanegriesang@unisc.br Processadores de linguagem Linguagens de programação são notações para se descrever

Leia mais

Compiladores. Motivação. Tradutores. Motivação. Tipos de Tradutores. Tipos de Tradutores

Compiladores. Motivação. Tradutores. Motivação. Tipos de Tradutores. Tipos de Tradutores Motivação Prof. Sérgio Faustino Compiladores Conhecimento das estruturas e algoritmos usados na implementação de linguagens: noções importantes sobre uso de memória, eficiência, etc. Aplicabilidade freqüente

Leia mais

Introdução à Programação

Introdução à Programação Introdução à Programação Linguagens de Programação: sintaxe e semântica de linguagens de programação e conceitos de linguagens interpretadas e compiladas Engenharia da Computação Professor: Críston Pereira

Leia mais

Revisão: linguagens de programação

Revisão: linguagens de programação Revisão: linguagens de programação Definição, histórico, paradigmas e semântica Prof. Thiago A. S. Pardo taspardo@icmc.usp.br Definição Uma linguagem de programação é uma linguagem destinada a ser usada

Leia mais

Linguagens Computacionais (Conceitos Básicos)

Linguagens Computacionais (Conceitos Básicos) Linguagens Computacionais (Conceitos Básicos) George Darmiton da Cunha Cavalcanti (gdcc@cin.ufpe.br) Tópicos Razões para estudar os conceitos de linguagens de programação Domínios de programação Critérios

Leia mais

Aula 1 Java Prof. Dr. Sylvio Barbon Junior

Aula 1 Java Prof. Dr. Sylvio Barbon Junior 5COP101 Linguagens de Programação Aula 1 Java Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr barbon@uel.br 1 Sumário 1) Razões para Estudar Conceitos de LP; 2) Domínios das Linguagens de Programação 3)

Leia mais

3. Linguagem de Programação C

3. Linguagem de Programação C Introdução à Computação I IBM1006 3. Linguagem de Programação C Prof. Renato Tinós Departamento de Computação e Matemática (FFCLRP/USP) 1 Principais Tópicos 3. Linguagem de programação C 3.1. Conceitos

Leia mais

Introdução à Programação Aula 03. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

Introdução à Programação Aula 03. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação Aula 03 Prof. Max Santana Rolemberg Farias max.santana@univasf.edu.br Colegiado de Engenharia de Computação Linguagens de Programação A primeira linguagem de programação foi criada por Ada Lovelace. Amiga

Leia mais

Linguagens de Programação. Introdução. Carlos Bazilio

Linguagens de Programação. Introdução. Carlos Bazilio Linguagens de Programação Introdução Carlos Bazilio carlosbazilio@id.uff.br http://www.ic.uff.br/~bazilio/cursos/lp ??? Pascal aux := 0 for i:=1 to 10 do aux := aux + i 10: i = 1 20: if i > 10 goto 60

Leia mais

Conceitos de Linguagens de Programação - Características. Paavo Soeiro

Conceitos de Linguagens de Programação - Características. Paavo Soeiro Conceitos de Linguagens de Programação - Características Paavo Soeiro Motivação Para que possa escolher uma linguagem apropriada ao problema. Melhorar o entendimento da linguagem utilizada. Facilitar o

Leia mais

Paradigmas de Linguagens

Paradigmas de Linguagens Paradigmas de Linguagens Aula 1: Introdução e Conceitos Básicos Professora Sheila Cáceres O que é um paradigma??? Paradigmas de Linguagens - Sheila Cáceres 2 O que é um paradigma??? Paradigmas de Linguagens

Leia mais

15/03/2018. Professor Ariel da Silva Dias Aspectos sintáticos e semânticos básicos de linguagens de programação

15/03/2018. Professor Ariel da Silva Dias Aspectos sintáticos e semânticos básicos de linguagens de programação Professor Ariel da Silva Dias Aspectos sintáticos e semânticos básicos de linguagens de programação Conjunto de regras que definem a forma da linguagem; Como as sentenças podem ser formadas como sequências

Leia mais

Nomes, vinculações e escopos

Nomes, vinculações e escopos Nomes, vinculações e escopos Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual

Leia mais

Linguagens de Programação Classificação

Linguagens de Programação Classificação Classificação Classificação A proximidade que a linguagem de programação tem com a humana determina sua classe (o nível): Linguagem de máquina (primeira geração) Linguagem assembly - de montagem (segunda

Leia mais

PROGRAMAÇÃO I. Introdução

PROGRAMAÇÃO I. Introdução PROGRAMAÇÃO I Introdução Introdução 2 Princípios da Solução de Problemas Problema 1 Fase de Resolução do Problema Solução na forma de Algoritmo Solução como um programa de computador 2 Fase de Implementação

Leia mais

Linguagens de Programação

Linguagens de Programação O estudante estuda muito. Regras: 7 9 12 14. . Regras: 2 4 . Regras: 1 Representar através de uma árvore de derivação. 77 O estudante estuda muito.

Leia mais

Especificações Gerais do Compilador e Definição de FRANKIE

Especificações Gerais do Compilador e Definição de FRANKIE Especificações Gerais do Compilador e Definição de FRANKIE 1. Especificações Gerais do Compilador (Decisões de projeto) 2. Especificações da Linguagem Fonte Definição Informal Considerações Léxicas Considerações

Leia mais

Conceitos de Linguagens de Programação

Conceitos de Linguagens de Programação Conceitos de Linguagens de Programação Aula 03 Processo de Compilação Edirlei Soares de Lima Métodos de Implementação Arquitetura de Von Neumann: A linguagem de máquina de um computador

Leia mais

PLANO DE UNIDADE DIDÁTICA- PUD

PLANO DE UNIDADE DIDÁTICA- PUD Professor: Marcus Vinícius Midena Ramos Coordenação: Ricardo Argenton Ramos Data: 03/08/2010 Página: 1 de 5 EMENTA: Conceitos básicos de linguagens. Histórico, classificação e principais aplicações de

Leia mais

Capítulo 6: Linguagens de Programação

Capítulo 6: Linguagens de Programação Capítulo 6: Linguagens de Programação Ciência da Computação: Uma Visão Abrangente 11a Edição by J. Glenn Brookshear Copyright 2012 Pearson Education, Inc. Capítulo 6: Linguagens de programação 6.1 Perspectiva

Leia mais

Nomes, vinculações e escopos

Nomes, vinculações e escopos Nomes, vinculações e escopos Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual

Leia mais

Prof. Adriano Maranhão COMPILADORES

Prof. Adriano Maranhão COMPILADORES Prof. Adriano Maranhão COMPILADORES LINGUAGENS: INTERPRETADAS X COMPILADAS Resumo: Linguagem compilada: Se o método utilizado traduz todo o texto do programa, para só depois executar o programa, então

Leia mais

Projeto de Compiladores

Projeto de Compiladores Projeto de Compiladores FIR Faculdade Integrada do Recife João Ferreira 26 e 27 de fevereiro de 2007 Agenda da Aula Revisão Linguagem de Programação Tradutores Compilador As Fases de Um Compilador Linguagem

Leia mais

Compiladores. Análise Léxica

Compiladores. Análise Léxica Compiladores Análise Léxica Regras Léxicas Especificam o conjunto de caracteres que constituem o alfabeto da linguagem, bem como a maneira que eles podem ser combinados; Exemplo Pascal: letras maiúsculas

Leia mais

Programação de Computadores:

Programação de Computadores: Instituto de C Programação de Computadores: Introdução a Linguagens de Programação Luis Martí Instituto de Computação Universidade Federal Fluminense lmarti@ic.uff.br - http://lmarti.com Seis Camadas Problema

Leia mais

II.1 Conceitos Fundamentais. Uma delas é programar o =>

II.1 Conceitos Fundamentais. Uma delas é programar o => II.1 Conceitos Fundamentais II.2 Gerações das Linguagens de Programação II.3 Linguagem de Programação II.4 Sistema Operacional II.5 Tradutores II.5.1 Estrutura de um tradutor II.5.1.1 Análise Léxica II.5.1.3

Leia mais

Noções de compilação

Noções de compilação Noções de compilação Compilador: o que é, para que serve e estrutura geral Parentes do compilador e programas correlatos Prof. Thiago A. S. Pardo 1 Compilação: por que estudar? (parte 1) Compiladores:

Leia mais

Linguagens de Programação

Linguagens de Programação 45 Linguagens de Programação O paradigma de programação imperativo está diretamente atrelado à arquitetura básica dos computadores sobre os quais os programas eram executados. Boa parte dos computadores

Leia mais

Noções de compilação

Noções de compilação Noções de compilação Compilador: o que é, para que serve e estrutura geral Parentes do compilador e programas correlatos Prof. Thiago A. S. Pardo 1 Exercício em duplas Para esquentar... 2 1 Compilação:

Leia mais

Conversões de Linguagens: Tradução, Montagem, Compilação, Ligação e Interpretação

Conversões de Linguagens: Tradução, Montagem, Compilação, Ligação e Interpretação Conversões de Linguagens: Tradução, Montagem, Compilação, Ligação e Interpretação Para executar uma tarefa qualquer, um computador precisa receber instruções precisas sobre o que fazer. Uma seqüência adequada

Leia mais

Paradigmas de Linguagem de Programação

Paradigmas de Linguagem de Programação Paradigmas de Linguagem de Programação Aula 1 - Introdução Prof. Filipo Mór 2016/II - www.filipomor.com Apresentação do Professor B.Sc. SI FDBPOA 2012 M.Sc. em CC PUCRS/DALHOUSIE 2015 Atuação na área de

Leia mais

Compiladores I Prof. Ricardo Santos (cap 1)

Compiladores I Prof. Ricardo Santos (cap 1) Compiladores I Prof. Ricardo Santos (cap 1) Compiladores Linguagens de programação são notações que permitem descrever como programas devem executar em uma máquina Mas, antes do programa executar, deve

Leia mais

Capítulo 8. Estruturas de Controle no Nível de Sentença

Capítulo 8. Estruturas de Controle no Nível de Sentença Capítulo 8 Estruturas de Controle no Nível de Sentença Níveis de fluxo de controle Computações são realizadas por meio da avaliação de expressões e da atribuição dos valores a variáveis Para tornar a computação

Leia mais

Construção de Compiladores. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2014.

Construção de Compiladores. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2014. Construção de Compiladores Capítulo 1 Introdução José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2014.2 1/22 1 Linguagens de programação 2 Compilação 2/22 Tópicos 1

Leia mais

Programação I Apresentação

Programação I Apresentação Programação I Apresentação Prof. Carlos Alberto carlos.batista@facape.br carlos36_batista@yahoo.com.br Referências JUNIOR, D. P.; NAKAMITI, G. S.; ENGELBRECHT, A. de M. E.; BIANCHI, F. Algoritmos e Programação

Leia mais

Capítulo 5. Nomes, Vinculações e Escopos

Capítulo 5. Nomes, Vinculações e Escopos Capítulo 5 Nomes, Vinculações e Escopos Tópicos do Capítulo 5 Introdução Nomes Variáveis O conceito de vinculação Escopo Escopo e tempo de vida Ambientes de referenciamento Constantes nomeadas Introdução

Leia mais

Linguagens de Programação

Linguagens de Programação Visão Geral Faculdade de Computação - UFU Agosto - 2009 1 Princípios 2 O que é uma linguagem de programação? Linguagens naturais facilitam a expressão e o intercâmbio de idéias entre as pessoas. Assim

Leia mais

Algoritmos e Programação

Algoritmos e Programação ESTADO DE MATO GROSSO SECRETARIA DE ESTADO DE CIÊNCIA E TECNOLOGIA UNIVERSIDADE DO ESTADO DE MATO GROSSO CAMPUS UNIVERSITÁRIO DE SINOP FACULDADE DE CIÊNCIAS EXATAS E TECNOLÓGICAS CURSO DE ENGENHARIA ELÉTRICA

Leia mais

Sistema Computacional

Sistema Computacional Algoritmos e Lógica de Programação Conceitos Básicos Abstração Reinaldo Gomes reinaldo@cefet-al.br O que é um? Integração de componentes atuando como uma entidade, com o propósito de processar dados, i.e.

Leia mais

Questões de Paradigmas de Programação Matéria: Prova 1 4ª EDIÇÃO

Questões de Paradigmas de Programação Matéria: Prova 1 4ª EDIÇÃO Questões de Paradigmas de Programação Matéria: Prova 1 4ª EDIÇÃO QUESTÃO 1 : Enviada por: Francisco Carlos Moraes Junior Duvidas: Thaise Domínios de programação são áreas onde os computadores são usados.

Leia mais

Introdução aos Compiladores

Introdução aos Compiladores Universidade Católica de Pelotas Introdução aos Compiladores André Rauber Du Bois dubois@ucpel.tche.br 1 MOTIVAÇÃO Entender os algor ıtmos e estruturas usados para se implementar linguagens de programação

Leia mais

Autômatos e Linguagens

Autômatos e Linguagens Autômatos e Linguagens Eduardo Ferreira dos Santos Ciência da Computação Centro Universitário de Brasília UniCEUB Agosto, 2016 1 / 41 Sumário 1 Compiladores 2 Linguagens de programação 3 Ciência dos compiladores

Leia mais

Linguagens de Programação. Marco A L Barbosa

Linguagens de Programação. Marco A L Barbosa Expressões e sentença de atribuição Linguagens de Programação Marco A L Barbosa cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual 4.0 Internacional. http://github.com/malbarbo/na-lp-copl

Leia mais

Algoritmos e Programação

Algoritmos e Programação ESTADO DE MATO GROSSO SECRETARIA DE ESTADO DE CIÊNCIA E TECNOLOGIA UNIVERSIDADE DO ESTADO DE MATO GROSSO CAMPUS UNIVERSITÁRIO DE SINOP FACULDADE DE CIÊNCIAS EXATAS E TECNOLÓGICAS Algoritmos e Programação

Leia mais

FACULDADE LEÃO SAMPAIO

FACULDADE LEÃO SAMPAIO FACULDADE LEÃO SAMPAIO Paradigmas de Programação Curso de Análise e Desenvolvimento de Sistemas Turma: 309-5 Semestre - 2014.2 Paradigmas de Programação Prof. MSc. Isaac Bezerra de Oliveira. 1 PARADIGMAS

Leia mais

Programação de Sistemas (Sistemas de Programação) Semana 10, Aula 17

Programação de Sistemas (Sistemas de Programação) Semana 10, Aula 17 PCS3616 Programação de Sistemas (Sistemas de Programação) Semana 10, Aula 17 Linguagens e Compiladores Programação em linguagem de alto nível Escola Politécnica da Universidade de São Paulo Roteiro 1.

Leia mais

Linguagens de Programação

Linguagens de Programação Universidade Federal do Rio Grande do Norte Centro de Tecnologia Departamento de Computação e Automação Linguagens de Programação Professor Responsável: Luiz Affonso Henderson Guedes de Oliveira Prof.

Leia mais

Linguagens e Compiladores

Linguagens e Compiladores Linguagens e Compiladores Aula 1: a) Critérios b) Noções de Compiladores e Interpretadores c) Usos da tecnologia de compilação d) Compiladores, filtros e pré-processadores e) Estruturação lógica de compiladores

Leia mais

Introdução a Ciência da Computação

Introdução a Ciência da Computação Ministério da Educação Universidade Tecnológica Federal do Paraná Câmpus Santa Helena Introdução a Ciência da Computação Bacharelado em Ciência da Computação Professor : Agnaldo da Costa 1 Camadas do Usuário

Leia mais

As fases de um compilador

As fases de um compilador As fases de um compilador Compilando um programa simples estrutura de um compilador formas de organização de um compilador processo de execução de uma linguagem de alto-nível Compilando um programa simples

Leia mais

Aspectos preliminares

Aspectos preliminares Aspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual

Leia mais

Desenvolvimento de Aplicações Desktop

Desenvolvimento de Aplicações Desktop Desenvolvimento de Aplicações Desktop Conceitos Básicos de Programação Professor: Charles Leite O Desenvolvimento de Programas A programação consiste em indicar como o computador (hardware) deve trabalhar

Leia mais

Linguagem de Programação e Compiladores

Linguagem de Programação e Compiladores Linguagem de Programação e Compiladores Fernando Antônio Asevedo Nóbrega Instituto de Ciências Matemáticas e de Computação USP SCC-206 Introdução à Compilação 24 de abril de 2012 1 / 20 Sumário 1 Introdução

Leia mais

Expressões e sentença de atribuição

Expressões e sentença de atribuição Expressões e sentença de atribuição Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual

Leia mais

INE5622 INTRODUÇÃO A COMPILADORES

INE5622 INTRODUÇÃO A COMPILADORES INE5622 INTRODUÇÃO A COMPILADORES PLANO DE ENSINO Objetivo geral Conhecer o processo de especificação e implementação de linguagens de programação, a partir do estudo dos conceitos, modelos, técnicas e

Leia mais

Função, interação com o compilador Especificação e reconhecimento de tokens Implementação Tratamento de erros. Prof. Thiago A. S.

Função, interação com o compilador Especificação e reconhecimento de tokens Implementação Tratamento de erros. Prof. Thiago A. S. Análise léxica Função, interação com o compilador Especificação e reconhecimento de tokens Implementação Tratamento de erros Prof. Thiago A. S. Pardo 1 Estrutura geral de um compilador programa-fonte analisador

Leia mais

Informática I. Aula 9. Aula 9-17/05/2006 1

Informática I. Aula 9.  Aula 9-17/05/2006 1 Informática I Aula 9 http://www.ic.uff.br/~bianca/informatica1/ Aula 9-17/05/2006 1 Ementa Histórico dos Computadores Noções de Hardware e Software Microprocessadores Sistemas Numéricos e Representação

Leia mais

Aspectos preliminares

Aspectos preliminares Aspectos preliminares Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual

Leia mais

PROGRAMAÇÃO ORIENTADA A OBJETOS I -CONCEITOS PRELIMINARES. Prof. Angelo Augusto Frozza, M.Sc.

PROGRAMAÇÃO ORIENTADA A OBJETOS I -CONCEITOS PRELIMINARES. Prof. Angelo Augusto Frozza, M.Sc. PROGRAMAÇÃO ORIENTADA A OBJETOS I -CONCEITOS PRELIMINARES Prof. Angelo Augusto Frozza, M.Sc. http://about.me/tilfrozza ROTEIRO O que é programação Linguagens de Programação Paradigmas de Programação História

Leia mais

Programação de Computadores IV. Introdução a Linguagens de Programação Simone Martins SLIDES CEDIDOS POR BRUNO MARQUES 1

Programação de Computadores IV. Introdução a Linguagens de Programação Simone Martins SLIDES CEDIDOS POR BRUNO MARQUES 1 Programação de Computadores IV Introdução a Linguagens de Programação Simone Martins simone@ic.uff.br SLIDES CEDIDOS POR BRUNO MARQUES 1 Arquitetura de programação 2 O Que é um Dado? Dado é o elemento

Leia mais

Programação I A Linguagem C. Prof. Carlos Alberto

Programação I A Linguagem C. Prof. Carlos Alberto Programação I A Linguagem C Prof. Carlos Alberto carlos.batista@facape.br carlos36_batista@yahoo.com.br 2 Origem A linguagem C foi desenvolvida em 1972, nos Laboratórios Bell, por Dennis Ritchie. Implementada

Leia mais

Introdução à Computação

Introdução à Computação Introdução à Computação Jordana Sarmenghi Salamon jssalamon@inf.ufes.br jordanasalamon@gmail.com http://inf.ufes.br/~jssalamon Departamento de Informática Universidade Federal do Espírito Santo Agenda

Leia mais

Algoritmos e Programação

Algoritmos e Programação Universidade Federal do Vale do São Francisco Curso de Engenharia da Produção / Elétrica Parte 04 Prof. Jorge Cavalcanti jorge.cavalcanti@univasf.edu.br www.univasf.edu.br/~jorge.cavalcanti www.twitter.com/jorgecav

Leia mais

Conceitos de Linguagens de Programação

Conceitos de Linguagens de Programação Faculdade de Ciências e Tecnologia Departamento de Matemática e Computação Bacharelado em Ciência da Computação Conceitos de Linguagens de Programação Aula 03 (rogerio@fct.unesp.br) Aula 3 Variáveis: Nomes

Leia mais

Organização e Arquitetura de Computadores I

Organização e Arquitetura de Computadores I Organização e Arquitetura de Computadores I Conjunto de Instruções Slide 1 Sumário Características de Instruções de Máquina Tipos de Operandos Tipos de Operações Linguagem de Montagem Slide 2 Características

Leia mais

Slides trabalhados durante a quinta aula

Slides trabalhados durante a quinta aula Slides trabalhados durante a quinta aula prática Estruturas de Controle de Fluxo 3. Laços de repetição (continuação) Exercício: Construa um algoritmo, representando-o através de um pseudocódigo e de um

Leia mais

Ederson Luiz da Silva Ciência da Computação. Algoritmos e Programação

Ederson Luiz da Silva Ciência da Computação. Algoritmos e Programação Ederson Luiz da Silva Ciência da Computação Algoritmos e Programação Linguagem de programação Linguagem de Programação Linguagem de máquina http://www.assemblyprogressivo.net/p/curso.html Linguagem de

Leia mais

Linguagens de Programação

Linguagens de Programação Linguagens de Programação 128 13 129 Linguagens de Programação Uma linguagem de programação é um vocabulário e um conjunto de regras gramaticais usadas para escrever programas de computador. Esses programas

Leia mais

Existem três categorias principais de linguagem de programação: linguagem de máquina, linguagens assembly e linguagens de alto nível.

Existem três categorias principais de linguagem de programação: linguagem de máquina, linguagens assembly e linguagens de alto nível. Aula 3 SOFTWARE (programas) Um programa (software) consiste em uma sequência de instruções escritas numa linguagem precisa chamada linguagem de programação. Estas instruções são traduzidas em um compilador,

Leia mais

Histórico de Linguagens de Programação

Histórico de Linguagens de Programação Bacharelado em Ciência da Computação PARADIGMAS DE PROGRAMAÇÃO Histórico de Linguagens de Programação Prof. Claudinei Dias email: prof.claudinei.dias@gmail.com Objetivos Geral: Estudar as características

Leia mais

Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores

Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores 2013-2 Compilador para a Linguagem Cafezinho Especificação dos trabalhos: T2 (Geração da Representação Intermediária e Análise

Leia mais

Informática I. Aula 9. Aula 9-27/09/2006 1

Informática I. Aula 9.   Aula 9-27/09/2006 1 Informática I Aula 9 http://www.ic.uff.br/~bianca/informatica1/ Aula 9-27/09/2006 1 Ementa Histórico dos Computadores Noções de Hardware e Software Microprocessadores Sistemas Numéricos e Representação

Leia mais

COMPILAÇÃO. Ricardo José Cabeça de Souza

COMPILAÇÃO. Ricardo José Cabeça de Souza COMPILAÇÃO Ricardo José Cabeça de Souza www.ricardojcsouza.com.br Programas Código-fonte escrito em linguagem de programação de alto nível, ou seja, com um nível de abstração muito grande, mais próximo

Leia mais

Introdução à Programação de Computadores Fabricação Mecânica

Introdução à Programação de Computadores Fabricação Mecânica Introdução à Programação de Computadores Fabricação Mecânica Edilson Hipolito da Silva edilson.hipolito@ifsc.edu.br - http://www.hipolito.info Aula 04 - Linguagens de Programação, Interpretador, compilador

Leia mais

Capítulo 7. Expressões e Sentenças de Atribuição

Capítulo 7. Expressões e Sentenças de Atribuição Capítulo 7 Expressões e Sentenças de Atribuição Introdução Expressões são os meios fundamentais de especificar computações em uma linguagem de programação Para entender a avaliação de expressões, é necessário

Leia mais

As fases de um compilador

As fases de um compilador As fases de um compilador Paradigmas de LP Métodos de Implementação de LP Compilando um programa simples estrutura de um compilador formas de organização de um compilador processo de execução de uma linguagem

Leia mais

ao paradigma imperativo

ao paradigma imperativo PARADIGMA FUNCIONAL PARADIGMA FUNCIONAL: INTRODUÇÃO G Exemplos de linguagens funcionais LISP - Início: LP puramente funcional - Depois: acréscimo de alguns recursos imperativos (aumentaram eficiência de

Leia mais

CAP. VI ANÁLISE SEMÂNTICA

CAP. VI ANÁLISE SEMÂNTICA CAP. VI ANÁLISE SEMÂNTICA VI.1 Introdução Semântica SIGNIFICADO, SENTIDO LÓGICO, COERÊNCIA,... Diferença entre SINTAXE e SEMÂNTICA Sintaxe : descreve as estruturas de uma linguagem; Semântica : descreve

Leia mais

Linguagens de Programação Conceitos e Técnicas. Amarrações

Linguagens de Programação Conceitos e Técnicas. Amarrações Linguagens de Programação Conceitos e Técnicas Amarrações Conceituação Amarração (ou binding) é uma associação entre entidades de programação, tais como entre uma variável e seu valor ou entre um identificador

Leia mais

Paradigmas de Linguagens

Paradigmas de Linguagens Paradigmas de Linguagens Paradigma Imperativo Professora Sheila Cáceres Paradigma Imperativo Um pouco de historia Paradigma fundamentado no conceito de máquina de Turing. A máquina de Turing é uma abstração

Leia mais

Compiladores. Eduardo Ferreira dos Santos. Fevereiro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 38

Compiladores. Eduardo Ferreira dos Santos. Fevereiro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 38 Compiladores Eduardo Ferreira dos Santos Ciência da Computação Centro Universitário de Brasília UniCEUB Fevereiro, 2017 1 / 38 Sumário 1 Compiladores 2 Linguagens de programação 3 Ciência dos compiladores

Leia mais

Prof. Antonio Almeida de Barros Jr. Prof. Antonio Almeida de Barros Junior

Prof. Antonio Almeida de Barros Jr. Prof. Antonio Almeida de Barros Junior Prof. Antonio Almeida de Barros Jr. Prof. Antonio Almeida de Barros Junior Meio pelo qual se pode indicar os passos que devem ser realizados pelo computador para resolver problemas; Através da linguagem,

Leia mais

Compiladores Aula 1. Celso Olivete Júnior.

Compiladores Aula 1. Celso Olivete Júnior. Aula 1 Celso Olivete Júnior olivete@fct.unesp.br Tópicos da disciplina Introdução à compilação Analisador léxico Analisador sintático descendente Analisador sintático ascendente Análise semântica Geração

Leia mais

Métodos de implementação de linguagens. Kellen Pinagé

Métodos de implementação de linguagens. Kellen Pinagé Métodos de implementação de linguagens Kellen Pinagé Sumário Métodos de implementação de linguagens Compilação Interpretação pura Híbrido Métodos de implementação de linguagens Principais componentes de

Leia mais

1 Introdução à Programação O que é? Para que serve?... 1

1 Introdução à Programação O que é? Para que serve?... 1 Nesta aula... Conteúdo 1 Introdução à Programação 1 1.1 O que é?................................. 1 1.2 Para que serve?............................. 1 2 Linguagens de programação 2 2.1 Programação estruturada........................

Leia mais

Linguagens de Programação

Linguagens de Programação Linguagens de Programação de Linguagens de Programação Bruno Lopes Bruno Lopes Linguagens de Programação 1 / 11 Propriedades desejáveis Legibilidade: A leitura do programa é facilmente compreendida? Redigibilidade:

Leia mais