Baixe o app para aproveitar ainda mais
Prévia do material em texto
Exercícios de Paradigmas das Linguagens de Programação 1) Defina análise léxica. O processo de compilação tem várias fases uma delas é a fase léxica: – Análise léxica: converte caracteres no programa de origem em unidades lexicais. 2) Defina análise sintática. O processo de compilação tem várias fases uma delas é a fase sintática: – Análise de sintaxe: transforma unidades lexicais em árvores de análise que representam a estrutura sintática do programa 3) Defina análise semântica. O processo de compilação tem várias fases uma delas é a fase semântica: – Análise semântica: gerar código intermediário. 4) Explique por que a análise léxica é separada da análise sintática e da análise semântica. Aula 02 5) O que é uma linguagem fortemente tipada? Linguagem fortemente tipada seria aquela em que os objetos/variáveis tem um tipo bem definido e que precisa ser informado no momento de sua declaração. Um exemplo de linguagem que não é fortemente tipada é justamente o JavaScript. As linguagens C e C++ também são fortemente tipadas, apesar da discussão em torno do tipo union. Muitos acreditam que o union permite que o programador atribua dados de diversos tipos a uma mesma variável, o que tornaria estas linguagens fracamente tipadas. 6) Explique o que é paradigma orientado a objetos. – Coleção de objetos que interagem entre si – Passam mensagens que transformam o estado dos objetos – Exemplo: ● Smaltalk /C++ / Java /C# 7) Quais são as características de um paradigma orientado a objetos? Aula 2 POO 8) Defina herança. Qual a diferença entre herança simples e herança múltipla? Herança: Permite que características comuns a diversas classes sejam “herdadas” de uma classe base, ou superclasse. É uma forma de reutilização de software: – Novas classes são criadas a partir das classes existentes, absorvendo seus atributos e comportamentos e adicionando novos recursos. Aula 04 Como o java não suporta herança múltipla no caso de classe, mas usando a interface, ele pode obter herança múltipla. 9) O que exatamente significa para uma subclasse ter um relacionamento é-um(a) com sua classe pai? 10) Explique recursão. Descrevendo listas: Listas sintáticas são descritas usando recursão. Uma derivação é uma aplicação repetida de regras, começando com o símbolo inicial e terminando com uma frase (todos os símbolos terminais) 11) Explique o que é paradigma funcional. - O design das linguagens funcionais é baseado em funções matemáticas. - muitas linguagens funcionais suportam as noções de variável, atribuição e laço. 12) Quais são as características de um paradigma funcional? 13) O que é um paradigma funcional puro e impuro? Linguagens de programação funcional puras: - Eliminam a noção de célula de memória de uma variável em favor da noção matemática; isto é, uma variável dá nome a uma expressão imutável, que também elimina o operador de atribuição. - Uma linguagem funcional é pura se não houver nenhum conceito de um operador de atribuição ou de uma célula de memória; caso contrário, dizemos que ela é impura. Linguagens de programação funcionais retêm alguma forma de operador de atribuição e são, portanto, impuras. Linguagens Funcionais Puras: Depende somente da passagem por parâmetro: Propriedade: Uma função tem transparência referencial se o seu valor depende somente dos valores de seus argumentos. 14) O que é uma função lambda? Expressões Lambda: - Expressões lambda descrevem funções sem nome - As expressões lambda são aplicadas aos parâmetros, colocando-os após a expressão por exemplo: - que avalia para 4 15) Dê um exemplo de uma expressão em Scheme. Introdução: Scheme não tem nenhuma instrução de atribuição. - os programas são escritos como funções (repetitivas) sobre valores de entrada que produzem valores de saída; - os próprios valores de entrada não são alterados. Scheme está muito mais próxima da matemática do que estão as linguagens de programação imperativa e orientada a objetos como C e Java. Expressões: Expressões em Scheme são construídas em notação de prefixo de Cambridge, - na qual as expressões ficam entre parênteses e o operador ou a função precede seus operandos, como no exemplo: - ele retorna o valor 4. Ponto-e-vírgula (;) em Scheme inicia um comentário, que continua até o fim da linha. Essas expressões aritméticas são exemplos de listas Scheme; - dados e programas (funções) são representados por listas. Quando uma lista Scheme é interpretada por uma função, - o operador ou o nome da função vem após o parêntese esquerdo e os demais números são seus operandos. Exemplo: Qual será o resultado? 24 16) Dê um exemplo de uma função em Haskell. Aula 08 17) Como percorremos as listas em Scheme e Haskell? Dê um exemplo explicativo (pode ser com desenho). 18) Explique o que é paradigma lógico. Um programa lógico expressa: – as especificações para soluções de problemas com o uso de expressões em lógica matemática. Aula 11 19) Quais são as características de um paradigma lógico? Características – Parad. Lógico: Duas características interessantes e diferenciadas dos programas lógicos são: - Não-determinismo e - - Um programa lógico não-determinístico pode encontrar várias soluções para um problema em vez de apenas uma, como seria normal em outros domínios de programação. - Backtracking. - - Backtracking possibilita o não-determinismo está dentro do interpretador Prolog, e, portanto, é implícito em todos os programas Prolog. Aula 11 20) Defina igualdade e unificação em Prolog. 21) Defina termo em Prolog. 22) Qual predicado é necessário para realizar cálculos em Prolog? 23) Escreva as seguintes sentenças condicionais descritas em português como cláusulas de Horn com cabeça em Prolog: 1) Se Frederico é o pai de Michael, então Frederico é um ancestral de Michael. 2) Se Michael é o pai de João e Michael é o pai de Maria, então Maria é a irmã de João. 3) Se Michael é o irmão de Frederico e Frederico é o pai de Maria, então Michael é o tio de Maria. 24) Explique o que é paradigma concorrente. 25) Quais são as características de um paradigma concorrente? 26) Defina o que é sincronização. 27) Defina semáforos e quando o usamos. 28) Defina monitores e quando o usamos. 29) Explique sincronização de competição e de cooperação. 30) O que são threads? 31) Quando eu devo usar o paradigma orientado a objetos, estruturado, imperativo, funcional, lógico e concorrente?
Compartilhar