Prévia do material em texto
Curso PROGRAMAÇÃO ORIENTADA A OBJETOS I Teste QUESTIONÁRIO UNIDADE IV Iniciado 21/03/24 16:31 Enviado 21/03/24 17:04 Status Completada Resultado da tentativa 2,5 em 2,5 pontos Tempo decorrido 33 minutos Resultados exibidos Todas as respostas, Respostas enviadas, Respostas corretas, Comentários, Perguntas respondidas incorretamente · Pergunta 1 0,25 em 0,25 pontos Analise o seguinte trecho de código em C# que utiliza uma expressão lambda. Determine qual será o comportamento do programa ao ser executado e qual é o principal benefício de utilizar uma expressão lambda neste contexto específico. Resposta Selecionada: c. O programa imprimirá os números 2, 4, 6, 8, 10, demonstrando a aplicação eficiente de operações em coleções. Respostas: a. O programa imprimirá os números de 1 a 5, pois a expressão lambda duplica cada elemento da lista. b. O programa resultará em um erro de compilação, pois as expressões lambda não podem ser usadas com listas. c. O programa imprimirá os números 2, 4, 6, 8, 10, demonstrando a aplicação eficiente de operações em coleções. d. O programa causará uma exceção em tempo de execução, pois a expressão lambda está malformada. e. O programa não imprimirá nada, pois as expressões lambda não têm efeito em operações de listas. · Pergunta 2 0,25 em 0,25 pontos Considere o seguinte código C# que utiliza LINQ para filtrar dados em uma coleção. Determine qual será o resultado da execução do programa e qual é a principal característica do LINQ demonstrada neste exemplo. Resposta Selecionada: b. O programa imprimirá apenas os números pares da lista, demonstrando a capacidade de filtragem do LINQ. Respostas: a. O programa imprimirá todos os números de 1 a 10, pois o LINQ não afeta a coleção original. b. O programa imprimirá apenas os números pares da lista, demonstrando a capacidade de filtragem do LINQ. c. Resultará em um erro de compilação, pois a sintaxe do LINQ está incorreta. d. O programa imprimirá apenas os números ímpares da lista. e. Nenhuma saída será produzida, pois a expressão LINQ é avaliada apenas quando acessada. Comentário da resposta: Resposta: B. Comentário: O código utiliza o método Where do LINQ para filtrar os números pares da lista números. A expressão lambda n => n % 2 == 0 serve como critério de filtragem, retornando apenas os números que são divisíveis por 2. Portanto, o programa imprimirá os números pares da lista, evidenciando a funcionalidade de filtragem do LINQ. · Pergunta 3 0,25 em 0,25 pontos Avalie o código C# abaixo que usa LINQ para transformar uma coleção de objetos. Qual é o resultado esperado da execução deste código e que aspecto do LINQ ele exemplifica? Resposta Selecionada: c. O programa imprimirá os nomes "ALICE", "BOB", "CHARLIE", demonstrando a transformação de dados com LINQ. Respostas: a. O programa imprimirá os nomes na ordem original sem alterações, pois o LINQ não modifica os elementos da coleção. b. O programa resultará em um erro de execução. c. O programa imprimirá os nomes "ALICE", "BOB", "CHARLIE", demonstrando a transformação de dados com LINQ. d. O programa imprimirá uma lista de comprimentos dos nomes. e. Nenhuma saída será produzida, pois a consulta LINQ não é executada. Comentário da resposta: Resposta: C. Comentário: O código utiliza o método Select do LINQ para transformar cada elemento da lista nomes. A expressão lambda nome => nome.ToUpper() converte cada nome para letras maiúsculas. Assim, o programa imprimirá “ALICE”, “BOB” e “CHARLIE”, ilustrando a capacidade do LINQ de transformar os dados de uma coleção. · Pergunta 4 0,25 em 0,25 pontos Considerando o processo de Garbage Collection (Coleta de Lixo) em C#, como ele difere da gestão de memória em linguagens sem um sistema de GC, como C++, e qual é o seu impacto na estabilidade das aplicações? Resposta Selecionada: c. O GC automatiza a liberação de memória em C#, reduzindo erros como vazamentos de memória. Respostas: a. O GC em C# diminui a estabilidade das aplicações ao liberar memória de forma aleatória. b. Em C#, o GC aumenta a complexidade do código, pois exige a liberação manual de memória. c. O GC automatiza a liberação de memória em C#, reduzindo erros como vazamentos de memória. d. O GC em C# e a gestão de memória em C++ são funcionalmente idênticos. e. Em C#, o GC impede totalmente a ocorrência de vazamentos de memória. Comentário da resposta: Resposta: C. Comentário: O Garbage Collection em C# automatiza o processo de liberação de memória, identificando e liberando a memória que não é mais necessária. Isso contrasta com linguagens como C++, onde a gestão de memória é manual e pode levar a erros como vazamentos de memória. · Pergunta 5 0,25 em 0,25 pontos No contexto do gerenciamento de recursos em C#, qual é o principal benefício da utilização da instrução using, especialmente em relação ao manuseio de recursos não gerenciados? Resposta Selecionada: c. A instrução using garante que o método Dispose seja chamado automaticamente. Respostas: a. A instrução using automatiza o processo de debugging e tracing. b. Ela permite a criação de múltiplas instâncias de objetos simultaneamente. c. A instrução using garante que o método Dispose seja chamado automaticamente. d. Aumenta o desempenho da aplicação ao reduzir o uso de memória. e. A instrução using é utilizada para melhorar a interface gráfica da aplicação. Comentário da resposta: Resposta: C. Comentário: A instrução using em C# é projetada para garantir que o método Dispose seja chamado automaticamente ao final do escopo do objeto, permitindo a liberação eficiente de recursos não gerenciados, como conexões de banco de dados ou handles de arquivos. · Pergunta 6 0,25 em 0,25 pontos Com relação ao debugging e tracing em C#, como essas práticas se complementam no desenvolvimento de aplicações e qual é a principal diferença entre elas? Resposta Selecionada: c. Debugging permite a execução passo a passo do código, enquanto tracing foca no registro contínuo da execução. Respostas: a. Debugging e tracing são funcionalmente idênticos no C#. b. Tracing é utilizado para corrigir erros, enquanto debugging é usado para monitoramento. c. Debugging permite a execução passo a passo do código, enquanto tracing foca no registro contínuo da execução. d. Debugging é apenas usado em ambientes de produção, ao contrário do tracing. e. Tracing altera o estado da aplicação, enquanto debugging não. Comentário da resposta: Resposta: C. Comentário: No contexto do desenvolvimento de software em C#, debugging (depuração) refere-se ao processo de identificar e corrigir erros no código-fonte, geralmente permitindo a execução passo a passo e a inspeção de variáveis. Tracing (rastreamento), por outro lado, envolve o registro contínuo da execução do programa, como através de logs, sem interromper a execução, permitindo o monitoramento do comportamento da aplicação em tempo real ou em ambientes de produção. · Pergunta 7 0,25 em 0,25 pontos Examine o seguinte trecho de código C# que utiliza threads e tasks para executar operações em paralelo. Identifique qual será o resultado da execução do programa e qual é a principal diferença entre a utilização de threads e tasks neste contexto. Resposta Selecionada: c. A task e a thread executam em paralelo, mas a task fornece melhor gerenciamento e eficiência de recursos. Respostas: a. Ambas, thread e task, executam simultaneamente, mas a thread não garante a ordenação na execução. b. Apenas a thread será executada, pois a task é bloqueada pelo método Wait. c. A task e a thread executam em paralelo, mas a task fornece melhor gerenciamento e eficiência de recursos. d. O programa resultaráem um deadlock devido ao uso simultâneo de thread e task. e. O programa executará primeiro a task e depois a thread, demonstrando a prioridade das tasks sobre threads. Comentário da resposta: Resposta: C. Comentário: No código fornecido, tanto a thread quanto a task são iniciadas para executar operações em paralelo. A principal diferença reside no fato de que as tasks, ao contrário das threads, são abstrações de alto nível sobre threads e oferecem melhor gerenciamento e eficiência de recursos. Elas são mais leves e permitem um controle mais fácil do fluxo de trabalho assíncrono, além de integração com outras funcionalidades do .NET, como a espera assíncrona com await. A utilização de task.Wait() bloqueia a execução do programa até que a task seja concluída, enquanto a thread é executada independentemente. · Pergunta 8 0,25 em 0,25 pontos Baseado no uso prático de diferentes estruturas de dados, qual das seguintes opções melhor descreve um cenário adequado para a aplicação da estrutura de dados “Heap”, e por quê? Resposta Selecionada: b. Gerenciamento de tarefas em um sistema operacional, para priorizar processos. Respostas: a. Ordenação de uma lista de livros em uma biblioteca, devido à sua natureza hierárquica. b. Gerenciamento de tarefas em um sistema operacional, para priorizar processos. c. Armazenamento de informações de músicas em um serviço de streaming, por ser uma estrutura auto balanceada. d. Representação de uma rede social, para visualizar relações entre usuários. e. Implementação de um sistema de navegação GPS, devido à sua capacidade de armazenar caminhos. Comentário da resposta: Resposta: B. Comentário: Heaps, especialmente max-heaps e min-heaps, são eficazes para priorizar elementos, onde o elemento de maior ou menor prioridade é sempre acessível na raiz da heap. No gerenciamento de tarefas de um sistema operacional, os heaps permitem priorizar processos de forma eficiente, garantindo que tarefas críticas sejam atendidas primeiro. Esta aplicação aproveita a eficiência dos heaps em operações como inserção e remoção do elemento de maior ou menor prioridade. · Pergunta 9 0,25 em 0,25 pontos Considere os algoritmos de ordenação (Selection Sort, Insertion Sort, Bubble Sort e Quick Sort) e suas características. Qual dos seguintes algoritmos apresenta, em média, a melhor complexidade de tempo em cenários de grandes volumes de dados, e por que essa complexidade o torna mais eficiente nesses casos? Resposta Selecionada: d. Quick Sort, por sua abordagem de divisão e conquista e complexidade média de O(n log n). Respostas: a. Selection Sort, pois seleciona sempre o menor elemento para a posição correta. b. Insertion Sort, devido à sua eficiência com listas parcialmente ordenadas. c. Bubble Sort, porque compara e troca pares de elementos adjacentes. d. Quick Sort, por sua abordagem de divisão e conquista e complexidade média de O(n log n). e. Todos têm a mesma eficiência em grandes volumes de dados. Comentário da resposta: Resposta: D. Comentário: O Quick Sort é mais eficiente em grandes volumes de dados devido à sua abordagem de divisão e conquista, que permite dividir o problema em subproblemas menores, tratando-os independentemente. Sua complexidade de tempo média é de O(n log n), o que é significativamente mais rápido do que os algoritmos de ordenação quadrática como Selection Sort, Insertion Sort e Bubble Sort, cuja complexidade é de O(n²) para a maioria dos casos. · Pergunta 10 0,25 em 0,25 pontos Considerando os algoritmos de grafos (Kruskal, Prim e Dijkstra), qual é o mais adequado para encontrar o caminho mais curto em uma rede de transporte público e por quê? Resposta Selecionada: c. Algoritmo de Dijkstra, pois é especializado em encontrar o caminho mais curto entre dois pontos. Respostas: a. Algoritmo de Kruskal, pois encontra a Árvore Geradora Mínima em um grafo. b. Algoritmo de Prim, por sua eficiência em conectar todos os vértices com o menor custo total. c. Algoritmo de Dijkstra, pois é especializado em encontrar o caminho mais curto entre dois pontos. d. Todos são igualmente adequados para encontrar caminhos em redes de transporte público. e. Nenhum deles é adequado para redes de transporte público. Comentário da resposta: Resposta: C. Comentário: O algoritmo de Dijkstra é o mais apropriado para encontrar o caminho mais curto em uma rede de transporte público, pois é projetado especificamente para esse propósito. Ele calcula o caminho mais curto de um ponto a outro em um grafo ponderado, considerando as distâncias ou custos associados a cada aresta. Este algoritmo é ideal para otimizar rotas em redes de transporte, onde é essencial determinar o trajeto mais eficiente.