Prévia do material em texto
Pergunta 1 0,2 / 0,2 pts Leia o texto a seguir: "Os componentes primários de Prolog são um método para a especificação de proposições de cálculo de predicados e uma implementação de uma forma restrita de resolução (...). nome Prolog vem de programming logic (programação lógica)." SEBESTA, R. W. Conceitos de linguagens de programação. 11. ed. Porto Alegre: Bookman, 2018. Analise as afirmações sobre a linguagem de programação mencionada no texto. I. Prolog é considerado uma linguagem declarativa. II. Programação lógica é uma forma de programação funcional. III. Programas escritos em Prolog são formados por predicados lógicos. IV. Predicados possuem atributos e métodos. É correto o que se afirma em: II, III e IV, apenas. e II, apenas. I, e III, apenas. I, e IV, apenas. e III, apenas. Alternativa está correta. A afirmativa lé verdadeira, pois o Prolog é o principal representante da chamada programação lógica, que é considerado um paradigma declarativo A afirmativa é verdadeira, pois a programação funcional é outro paradigma declarativo distinto da programação lógica A afirmativa III é verdadeira, pois os programas escritos em Prolog são formados por diversos predicados lógicos, os quais podem ser consultados e interpretados. A afirmativa IV é falsa, pois atributos e métodos são conceitos relacionados a classes e objetos, estruturas utilizadas por linguagens orientadas a objeto e ausentes no Prolog.Pergunta 2 0,2 / 0,2 pts Leia texto a seguir: "Mecanismos para sincronização devem ser capazes de atrasar a execução de uma tarefa. A sincronização impõe uma ordem de execução das tarefas garantida com esses atrasos. Para entender o que acontece com as tarefas ao longo de seus tempos de vida, precisamos considerar como a execução de tarefas é controlada. Independentemente de uma máquina ter um ou mais processadores, sempre existe a possibilidade de haver mais tarefas que processadores. Um programa de sistema de tempo de execução, chamado escalonador, gerencia o compartilhamento de processadores entre as tarefas. Se nunca existissem interrupções e todas as tarefas tivessem a mesma prioridade, o escalonador poderia simplesmente dar a cada tarefa uma fatia de tempo, como 0,1 segundo, e quando o turno de uma tarefa chegasse, o escalonador poderia deixá-la ser executada por essa quantidade de tempo em um processador. É claro, existem diversos eventos complicadores, atrasos de tarefa para sincronização e para operações de entrada e saída. Como operações de entrada e saída são muito lentas em relação à velocidade do processador, uma tarefa não pode manter um processador enquanto espera pela conclusão de uma delas." SEBESTA, R. W. Conceitos de linguagens de programação. 11. ed. Porto Alegre: Bookman, 2018. Considerando os conceitos apresentados, assinale a alternativa correta: escalonador distribui operações de entrada e saída entre as tarefas. Operações de entrada e saída fazem com que a tarefa ocupe um processador. Tarefas são ordenadas em função de sua prioridade, e aquelas com operações de entrada e saída executarão por mais tempo. escalonador leva em consideração a prioridade da tarefa e eventos como operações de entrada e saída. Tarefas não possuem prioridade, executando sempre a mesma quantidade de tempo. Alternativa correta. escalonador é responsável por ceder processador(es) para uma tarefa e removê-lo quando julgar conveniente ou necessário. escalonador leva em consideração tanto a prioridade das tarefas quanto a ocorrência de certos eventos, operações de entrada e saída, que por serem proporcionalmente lentas não justificam a ocupação de processadores pela tarefa. Nestes casos, o escalonador temporariamente remove os processadores daquela tarefa e os distribui para outras tarefas.Pergunta 3 0,2 / 0,2 pts Leia texto a seguir: "Uma das características fundamentais dos programas escritos em linguagens imperativas é o fato de terem estado, o qual muda ao longo do processo de execução. Esse estado é representado pelas variáveis do programa. autor e todos os leitores do programa devem entender os usos de suas variáveis e compreender como o estado do programa muda durante a execução. Para um programa grande, é uma tarefa intimidante. Esse é um problema dos programas escritos em uma linguagem imperativa que não está presente nos programas escritos em uma linguagem funcional pura, pois estes não têm variáveis nem estados." SEBESTA, R. W. Conceitos de linguagens de programação. 11. ed. Porto Alegre: Bookman, 2018. Considerando o texto, avalie as afirmações a seguir: I. A programação funcional permite um grau maior de determinismo, isto é, previsibilidade dos programas. II. estado de um programa influencia no resultado de sua execução. III. Todas as linguagens de programação são classificadas como funcionais ou como imperativas. É correto o que se afirma em: I, apenas. II, apenas. III, apenas. e III, apenas. le II, apenas. Alternativa está correta, pois apenas as afirmativas I e estão corretas. A afirmativa I está correta, pois a programação funcional foi concebida precisamente para providenciar um maior determinismo a falta de determinismo em nas mais difícil aPergunta 4 0,2 / 0,2 pts Leia texto a seguir: "C++ e Objective-C suportam programação procedural e orientada a dados, além da programação orientada a objetos. CLOS, uma versão orientada a objetos de LISP (Paepeke, 1993), também suporta programação funcional. Algumas das linguagens mais novas projetadas para a programação orientada a objetos não suportam outros paradigmas, mas ainda assim empregam algumas das estruturas imperativas básicas e têm a aparência das linguagens imperativas mais antigas. Entre essas estão Java e C#. É desafiador classificar Ruby: é uma linguagem orientada a objetos no sentido de que todos os dados são objetos, mas é uma linguagem híbrida, porque é possível usá-la para programação procedural. Por fim, existe a linguagem orientada a objetos pura, mas um tanto anticonvencional: Smalltalk. Ela foi a primeira linguagem a oferecer suporte para programação orientada a objetos." SEBESTA, R. W. Conceitos de linguagens de programação. 11. ed. Porto Alegre: Bookman, 2018. Considerando contexto, analise as afirmações abaixo: I. Uma linguagem pode suportar vários paradigmas diferentes. II. Smalltalk é a única linguagem de programação orientada a objetos. III. Programação imperativa é incompatível com programação orientada a objetos. IV. Ruby é somente uma linguagem de programação orientada a objetos. É correto o que se afirma em: II, III e IV, apenas. II, apenas. e IV, apenas. I, apenas. le III, apenas. Alternativa está correta. afirmativa I é verdadeira nois uma linguagem node suportar múltinlos e isso é comum texto citaPergunta 5 0,2 / 0,2 pts Leia texto a seguir: "O primeiro passo de em direção a C++ foi dado por Bjarne Stroustrup, no Bell Labs, em 1980. As modificações iniciais em incluíam a adição de verificação de tipos e a conversão de parâmetros de funções e classes, as quais estavam relacionadas às de SIMULA 67 e de Smalltalk. Também estavam incluídas classes derivadas, controle de acesso público/privado de componentes herdados, métodos construtores e destrutores e classes amigas (friend classes). Durante 1981, foram adicionadas funções internalizadas (inline functions), parâmetros padrão ea sobrecarga do operador de atribuição. A linguagem resultante foi chamada de com Classes e é descrita em Stroustrup (1983)." SEBESTA, R. W. Conceitos de linguagens de programação. 11. ed. Porto Alegre: Bookman, 2018. A linguagem C++ originou-se como uma adaptação da linguagem para o paradigma procedural. funcional. orientado a objeto. lógico. concorrente. A alternativa está correta, pois a linguagem já é uma linguagem procedural. A linguagem C++ trouxe construções típicas da programação orientada a objeto, como classes e objetos inclusive, como o texto aponta, seu primeiro nome foi com Classes".Leia o texto a seguir: "A linguagem de programação Cobol existe há 61 anos de uma forma ou de outra. Para muitas organizações, a idade está evidente, e as pessoas que conseguem manter os aplicativos Cobol baseados em mainframe de pé, estão cada vez mais escassas, especialmente porque a maioria dos programas de ciência da computação não ensina mais sobre ela. (...) 'São aplicativos de 20 a 30 anos que têm servido bem aos negócios, mas eles acumulam dívidas técnicas e são muito específicos para o que esse negócio tem. [Cobol] é funcionalmente rico, mas funciona em uma plataforma restritiva e não funciona com outros sistemas modernos', disse Tim Jones, Diretor-Gerente de Modernização de Aplicativos da fornecedora de serviços de software Advanced." CAREY, Scott. Como as empresas estão deixando o Cobol. Infoworld, 2021. Disponível em: Acesso em 22 ago 2021. Refletindo sobre as aplicações em Cobol mencionadas acima, avalie as seguintes asserções e a relação proposta entre elas. I. Os sistemas descritos no texto são considerados sistemas legados. PORQUE II. A linguagem Cobol é uma linguagem antiga. Assinale a alternativa com a relação correta entre as proposições I e II: As asserções le são proposições verdadeiras e a asserção é uma justificativa correta da I. A asserção é uma proposição falsa e a asserção é uma proposição verdadeira. As asserções e são proposições falsas. As asserções I e são proposições verdadeiras, mas a asserção não é uma justificativa correta da I. A asserção lé uma proposição verdadeira e a asserção é uma proposição falsa.Pergunta 2 0,2 / 0,2 pts Leia texto a seguir: "C++ rapidamente se tornou (e se mantém) uma linguagem amplamente utilizada. Um fator para sua popularidade é a disponibilidade de compiladores bons e baratos. Outro é que ele é quase completamente compatível com (o que significa que, com poucas alterações, programas em podem ser compilados como programas C++) e, na maioria das implementações, é possível vincular código em C++ com código em e, assim, para muitos programadores que já conhecem relativamente fácil aprender C++. Por último, na época em que C++ apareceu, quando a programação orientada a objetos começou a despertar amplo interesse, era a única linguagem disponível conveniente para grandes projetos de software comercial. Pelo lado negativo, como C++ é uma linguagem muito extensa e complexa, ela sofre de deficiências similares àquelas da linguagem PL/I. C++ herdou muitas das inseguranças de C, tornando-se menos segura que linguagens como Ada e Java." SEBESTA, R. W. Conceitos de linguagens de programação. 11. ed. Porto Alegre: Bookman, 2018. Considerando as informações apresentadas sobre a linguagem C++, avalie as afirmações a seguir: I. A disponibilidade de ferramentas foi uma vantagem da linguagem C++. II. recrutamento de programadores C++ foi difícil na época de seu lançamento. III. A segurança adicional em relação à linguagem foi um dos grandes benefícios oferecidos pela linguagem C++. IV. A linguagem C++ trouxe recursos desejados pelos desenvolvedores da época. Estão corretas apenas as alternativas: II. I, III IV. IV. II, III IV. III. Alternativa correta.Pergunta 3 0,2 / 0,2 pts Leia texto a seguir: "Programadores no processo de desenvolvimento de software apresentam a mesma limitação. A linguagem na qual eles desenvolvem software impõe restrições nos tipos de estruturas de controle, estruturas de dados e abstrações que podem usar logo, as formas dos algoritmos que eles constroem também são limitadas." SEBESTA, R. W. Conceitos de linguagens de programação. 11. ed. Porto Alegre: Bookman, 2018. Qual alternativa indica como o programador deve escolher a linguagem para o desenvolvimento de um software? Programadores devem sempre optar por uma das linguagens que já conhecem, pois assim serão menos limitados. A escolha da linguagem de programação influencia o desenvolvimento do projeto. É necessário usar várias linguagens em um mesmo software, de modo que cada uma delas compense as limitações das outras. Qualquer linguagem pode ser utilizada em qualquer projeto, mas as limitações dos programadores podem afetar o projeto. Existe uma linguagem perfeita para cada projeto, e utilizar outras prejudicará negativamente projeto. Alternativa está correta, pois diferentes linguagens apresentam diferentes recursos e facilidades, bem como suas próprias limitações. Por conta disso, sua escolha irá afetar o desenvolvimento do software. Normalmente não existe uma única linguagem superior a todas as outras, e um mesmo projeto pode ser bem desenvolvido em diferentes linguagens. Cabe aos desenvolvedores estudar qual ou quais dela trarão o melhor "custo X benefício", e nessa análise cabe até mesmo a aptidão da equipe e a facilidade de contratar desenvolvedores já familiares com a linguagem. Há casos em que é possível utilizar múltiplas linguagens, mas isso nem sempre é necessário, tampouco está necessariamente relacionado a compensar "fraquezas" de uma das linguagens envolvidas. Apesar da adoção de uma linguagem previamente conhecida implicar em ganho de tempo para o desenvolvimento, é importante que os programadores estejam abertos para aprender novas linguagens. Em muitos casos, uma linguagem previamente conhecida pode ser tão limitada para certo projeto que o tempo de treinamento dos programadores para se adequar a uma linguagem nova será compensado pelos ganhos trazidos por ela.Resposta correta Pergunta 4 0,2 / 0,2 pts Leia texto a seguir: "Um objetivo fundamental da programação lógica (...) é fornecer programação não procedural, ou seja, um sistema no qual os programadores especificam que um programa deve fazer, mas não precisam especificar como isso deve ser feito. (...) [Em um problema de ordenação dos elementos de uma lista] ele não tem ideia de como ordenar, além de simplesmente enumerar todas as permutações de uma lista até que aconteça de ser criada uma que tenha a lista ordenada um processo muito lento." Adaptado de SEBESTA, R. W. Conceitos de linguagens de programação. 11. ed. Porto Alegre: Bookman, 2018. Sabendo que a principal linguagem de programação lógica é o PROLOG, assinale a alternativa correta considerando a reflexão apresentada acima: A programação procedural é melhor do que a programação lógica. PROLOG é não procedural, portanto, é orientado a objeto. É importante que programador PROLOG detalhe cada etapa do processamento. Não é possível ordenar listas em PROLOG. PROLOG pode ser inadequado em situações que exijam processamento rápido. A alternativa está correta, pois um dos objetivos do PROLOG é ser não procedural. Por conta disso, o programador não precisa detalhar como será a execução de seus programas. A desvantagem trazida por essa ideia é que, sem controle sobre a forma de execução, o programador não pode realizar otimizações, e com isso o desempenho pode ser penalizado.Pergunta 5 0,2 / 0,2 pts Leia texto a seguir: Stevens, Myers e Constantine (1974) fizeram uma primeira tentativa de descrever módulo como "um conjunto de uma ou mais instruções de programa contíguas, que possui um nome pelo qual outras partes do sistema podem chamá-lo e, preferivelmente, com seu próprio conjunto distinto de nomes de variáveis". Em outras palavras, um módulo consiste de um único bloco de código que pode ser chamado da mesma forma que é chamado um procedimento, uma função ou método. (...) Nas linguagens e C++, um arquivo-cabeçalho de declarações que é incluído (#include) em um produto de modo semelhante também não é chamado. (...) Yourdon e Constantine (1979) dão uma definição mais ampla: "Módulo é uma sequência de instruções de programa lexicamente contíguas, limitadas por elementos delimitadores, que possuem um identificador de agregação. Exemplos de elementos delimitadores são os pares begin end em uma linguagem estruturada em blocos, como Pascal, ou pares {...} no C++ ou Java. Schach, S. R. Engenharia de Software. Editora Grupo A, 2010. Considerando o texto acima, analise as seguintes afirmações sobre módulos. I. Qualquer elemento compilado separadamente, como cabeçalhos em C, é considerado módulo por ambas as definições. II. Objetos são considerados módulos por ambas as definições. III. Blocos condicionais e malhas de repetição são considerados módulos por alguns autores. IV. Módulos permitem isolar informações, mas não instruções. É correto o que se afirma, em: e III, apenas. le IV, apenas. I, e III, apenas. I, III e IV, apenas. II, III e IV, apenas.Observe diagrama ilustrando a divisão de memória em um programa em execução: STACK HEAP BSS DATA TEXT Fonte: MAZIERO, Carlos. Alocação de memória. UFPR. Disponível em . Acesso em 2 set 2021. Considerando a figura, avalie as afirmações abaixo: I. Parâmetros de função ficam na área denominada "stack". II. Variáveis alocadas dinamicamente ficam na área denominada "heap". III. Variáveis locais de função ficam na área denominada "heap". É correto o que se afirma em: e III, apenas. le III, apenas. I, apenas. le II, apenas. II, apenas.Resposta correta Pergunta 2 0,2 / 0,2 pts Leia texto a seguir: "Lua pode ser usada como uma extensão de uma linguagem de scripting para outras linguagens. Como as primeiras implementações de Java, Lua é traduzida em um código intermediário e interpretada. Ela pode ser facilmente embarcada em outros sistemas, em parte por causa do tamanho pequeno de seu interpretador, que tem apenas cerca de 150 KBytes." Fonte: SEBESTA, R. W. Conceitos de linguagens de programação. 11. ed. Porto Alegre: Bookman, 2018. Qual alternativa indica o processo correto para a execução de códigos que precisam de tradução? A linguagem deve possuir uma etapa de compilação e uma de interpretação. A linguagem é sempre interpretada pela Java Virtual Machine. A linguagem será sempre uma linguagem interpretada pura. A linguagem deve ser antes compilada para bytecode Java. A linguagem precisa ser compilada para binários de 150 KBytes. Alternativa correta, pois a linguagem que, assim como Lua, é traduzida ou seja, compilada para uma linguagem intermediária é interpretada, recorrendo a uma etapa de compilação seguida de interpretação.Resposta correta Pergunta 3 0,2 / 0,2 pts Leia texto a seguir: "WebAssembly é um novo tipo de código que pode ser executado nos browsers modernos e fornece novas características e maiores ganhos em performance. Ele não foi pensado incialmente para ser escrito à mão, ao contrário, foi pensado para ser um alvo eficiente de compilação para linguagens de baixo nível como C, C++, Rust etc. Ele possui implicações enormes para a plataforma web ele fornece um caminho para executar códigos escritos em múltiplas linguagens na web, com velocidades próximas às das linguagens nativas com apps sendo executados na web, onde antes não era possível. (...) Historicamente, a VM tem tido permissão para carregar apenas JavaScript. (...) Com o advento do WebAssembly nos browsers, a máquina virtual a que nos referimos antes, vai carregar e executar dois tipos de código JavaScript e WebAssembly." Fonte: CONTRIBUTORS, Mozilla. Conceitos do WebAssembly. MDN Web Docs. Disponível em BR/docs/WebAssembly/Concepts>. Acesso em 02 set 2021. Considerando as informações apresentadas, assinale a opção correta: Linguagens de baixo nível, como C, C++ e Rust, podem ser compiladas diretamente para WebAssembly Linguagens como C, C++ e Rust devem ser exclusivamente compiladas para WebAssembly. Linguagens como C++ e Rust devem ser compiladas para JavaScript, e depois para WebAssembly A partir de agora, qualquer linguagem pode ser utilizada para a programação WebAssembly. Somente linguagens de alto nível podem ser compiladas diretamente para WebAssembly. Alternativa correta, pois a linguagem WebAssembly é um alvo de compilação para linguagens como C, C++ e Rust, ou seja, essas linguagens podem ser compiladas para WebAssembly. Já a máquina virtual que antes só executava JavaScript, agora é capaz de carregar dois tipos diferentes de código: JavaScript e WebAssembly. Ou seja, o WebAssembly é executado pela mesma máquina que JavaScript.Pergunta 4 0,2 / 0,2 pts Leia o texto a seguir: "Quando vários programas usam a mesma biblioteca de funções, uma DLL pode reduzir a duplicação de código carregada no disco e na memória física. Ele pode influenciar muito desempenho não apenas do programa que está em execução em primeiro plano, mas também de outros programas que estão sendo executados no Windows." Fonte: MICROSOFT. que é uma DLL. Microsoft Docs, 2020. Disponível em Acesso em 2 set 2021. Sabendo que uma DLL Dynamic Link Library é uma biblioteca dinâmica que contém código e dados que podem ser usados por mais de um programa ao mesmo tempo, sendo baseadas em sub-rotinas armazenadas em disco, avalie as seguintes asserções e a relação proposta entre elas. I. Uma das vantagens de se utilizar multiprocessamento é melhorar o desempenho de processamento. PORQUE II. Ao executar processos paralelos simultaneamente, o programa é executado mais rápido. Assinale a alternativa correta sobre a relação entre as asserções e II: As asserções le são verdadeiras, mas a não é uma justificativa correta da I. A asserção lé falsa e a asserção é verdadeira. As asserções le são falsas. A asserção lé verdadeira e a asserção é falsa. As asserções le são verdadeiras e a é uma justificativa correta da I. Alternativa correta, pois a asserção é verdadeira, e é justificada pela asserção II. suporte à programação multiprocessada permite execução simultânea e, assim, melhor desempenho de processamento. Linguagens de programação de diferentes paradigmas oferecem esse recurso em diferentes níveis, podendo ser implementadas por meio de bibliotecas.Pergunta 5 0,2 / 0,2 pts Leia texto a seguir: "A versão inicial do interpretador Java, chamado de Máquina Virtual Java (JVM), era ao menos 10 vezes mais lenta que os programas compilados em equivalentes. Entretanto, muitos programas Java são agora traduzidos para código de máquina antes de serem executados, por meio de compiladores Just-in-Time (JIT). Isso torna a eficiência dos programas Java competitiva com a de programas escritos em linguagens compiladas de forma convencional, como C++ (...)" Fonte: SEBESTA, R. W. Conceitos de linguagens de programação. 11. ed. Porto Alegre: Bookman, 2018. Considerando trecho acima, avalie as afirmações a seguir: compilador JIT gera bytecode para ser interpretado pela máquina virtual. II. compilador JIT transforma bytecode em binário nativo na hora da execução. III. código gerado pela JIT é interpretado de maneira eficiente o suficiente para ser competitivo com códigos compilados. É correto o que se afirma em: III, apenas. le III, apenas. e III, apenas. II, apenas. I, apenas. Alternativa correta. A afirmativa lé falsa, pois o compilador JIT traduz bytecode (feito originalmente para a JVM) para binário nativo.