Prévia do material em texto
<p>Prova</p><p>Curso: Tecnologia em Análise e Desenvolvimento de Sistemas</p><p>Disciplina: Programação Orientada à Objeto</p><p>Ano: 20231 / Semestre: 2</p><p>PROVA 01</p><p>Questão 1</p><p>De a sua definição de oque é polimorfismo para a programação orientada a objetos?</p><p>Resposta do aluno: Poliformismo, no contexto da POO, é entendido como “muitas formas”. Isto é, funções com o</p><p>mesmo nome podem executar ações diferentes, ou seja, uma mesma função fazer coisas diferentes.</p><p>Questão 2</p><p>Defina oque é um objeto, na Programação Orientada a Objetos e como eles podem ser divididos?</p><p>Resposta do aluno: Objeto – são instancias de classes que determinam qual informação cada um contém e como</p><p>ele pode manipulá-la. Cada objeto pode ter valores diferentes para seus atributos, como, por exemplo, um</p><p>cachorro pode ser mais alto que outro ou mais pesado, mas os atributos dos objetos são os mesmos como peso,</p><p>altura, cor. Eles podem ser divididos nas classes, que sao um aglomerado de objetos com a mesma estrutura de</p><p>informações (atributos) e comportamento (operações).</p><p>Questão 3</p><p>De acordo com a evolução da maneira de programar, assinale a alternativa do código que corresponda com a</p><p>época adequada:</p><p>Data: 1990.</p><p>a) Saltos, gotos.</p><p>b) If-then-else.</p><p>c) Mensagens, Métodos. (correta)</p><p>d) Código mistos.</p><p>Questão 4</p><p>Para ser acessível a um método em uma subclasse, um atributo na superclasse deve ser:</p><p>a) default;</p><p>b) protected;</p><p>c) public;</p><p>d) public ou protected. (correta)</p><p>Questão 5</p><p>Observe o a declaração da classe logo abaixo.</p><p>class Pessoa() -> Linha 01</p><p>{-> Linha 02</p><p>protected: -> Linha 03</p><p>nome :String; -> Linha 04</p><p>documento :Float; -> Linha 05</p><p>};-> Linha 06</p><p>Assinale a alternativa onde as linhas apresentam erros em sua declaração.</p><p>a) Linhas 01, 02, 03;</p><p>b) Linhas 04, 05, 06;</p><p>c) Linhas 03 e 06;</p><p>d) Linhas 01 e 06;</p><p>e) Linhas 03 e 04; (correta)</p><p>Questão 6</p><p>A manutenção é a adição de códigos que combinem com o projeto original, mas muitos programadores utilizam-</p><p>se da manutenção para a correção de erros do programa tornando, assim, o sistema vira uma colcha de</p><p>retalhos como se cada parte do programa fossem pequenos programas, tornando o código cada vez mais difícil</p><p>de ser alterado.</p><p>De acordo com o texto acima, assinale a alternativa que corresponde com o tipo de programação que se</p><p>destaca na facilidade de manutenção:</p><p>a) Programação estruturada.</p><p>b) Programação Orientada a Objetos. (correta)</p><p>c) Programação através de linhas de comando.</p><p>d) Programação com o uso de saltos.</p><p>Questão 7</p><p>A respeito do construtor default (padrão) de uma classe em C++, pode-se afirmar que:</p><p>a) toda classe em C++ tem um construtor default;</p><p>b) a classe tem de ter pelo menos um construtor definido para ter um construtor default;</p><p>c) uma classe tem um construtor default se ela não define nenhum outro construtor; (correta)</p><p>d) toda classe em C++ herda um construtor default da classe Object;</p><p>e) a linguagem C++ não tem o conceito de um construtor default;</p><p>Questão 8</p><p>No final da década de 60, a indústria de software sofreu uma grande crise, assinale a alternativa que</p><p>corresponde o motivo que causou a crise do software na década de 60.</p><p>a) Foi causada pelo baixíssimo nível de produtividade. (correta)</p><p>b) Foi causada pelo auto custo do hardware.</p><p>c) Foi causada por conta da crise financeira mundial.</p><p>d) Foi causada por falta de incentivo a criação de mão de obra.</p><p>Questão 9</p><p>Podemos definir um objeto na programação orientada a objetos sendo:</p><p>Assinale a alternativa correta.</p><p>a) Um objeto é uma coisa ou uma entidade do mundo real. (correta)</p><p>b) Objetos são procedimentos de classes, que determinam qual informação um objeto contém e como ele pode</p><p>manipulá-la.</p><p>c) É uma função capaz de reter um estado e que oferece uma série de operações ou para examinar ou para</p><p>afetar este estado.</p><p>d) Os objetos consistem de modelos (abstrações) de objetos não reais.</p><p>Questão 10</p><p>Assinale a alternativa correta em relação a acesso a membros:</p><p>a) O acesso a dados por meio de funções é possível adicionar valores de argumentos para validação de dados.</p><p>(correta)</p><p>b) Não podemos manipular os dados para que o objeto nunca contenha valores inválidos.</p><p>c) Podemos suprir as entradas de dados e proteger os atributos dos objetos.</p><p>d) Para acessar aos dados temos que controlar as declarações dos membros de dados.</p><p>PROVA 02</p><p>Questão 1</p><p>Comente sobre polimorfismo paramétrico e o que este recurso permite.</p><p>Resposta do aluno: Polimorfismo paramétrico é um recurso bastante útil para evitar redundância de código,</p><p>portanto, trata-se de um meio de reuso deste. É importante para criar famílias de classes ou funções</p><p>relacionadas. Este recurso permite, por exemplo, definir uma classe matriz (do campo da matemática) uma</p><p>única vez num “header file” e utilizar esta classe matriz para matrizes de tipo float, tipo int ou long etc.</p><p>Questão 2</p><p>Explique como é o funcionamento de construtores e destrutores de classes derivadas:</p><p>Resposta do aluno: As classes derivadas não herdam os construtores e destrutores da classe base. As classes</p><p>derivadas devem ter suas próprias funções construtoras e destrutoras.Quando um objeto é instanciado em uma</p><p>classe derivada inicia-se uma cadeia de chamadas onde o construtor da classe derivada, antes mesmo de</p><p>realizar suas próprias tarefas, chama o construtor da classe básica que pode ser direta ou explicitamente</p><p>através de um inicializador de membro de classe básica, ou pode acionar explicitamente chamando o construtor</p><p>padrão da classe básica.</p><p>Questão 3</p><p>Para a elaboração de um programa que use "templates", seguir os passos indicados abaixo normalmente lhe</p><p>poupará tempo, sobre eles, assinale a alternativa incorreta.</p><p>a) construa seu programa para operar em um só destes tipos;</p><p>b) defina os tipos que você quer parametrizar alguns termos de chamadas de funções membro e operadores de</p><p>nomes e sintaxe iguais (uniformidade). Os tipos dos argumentos vão variar;</p><p>c) termine incluindo as definições dos templates no programa, sem a necessidade de teste para os demais</p><p>tipos. (correta)</p><p>d) corrija as eventuais falhas de substituição.</p><p>Questão 4</p><p>Para Arnault (2013), a aplicação de alterações por meio de herança nos leva a um dos pontos centrais da POO.</p><p>Trata-se de um modo totalmente diferente de se modificar programas existentes, mas traz vários e importantes</p><p>benefícios.</p><p>Assinale a alternativa correta:</p><p>a) suponha que você está usando uma classe desenvolvida por terceiros, e que você não tem o código fonte.</p><p>Com o mecanismo de polimorfismo você deixa a classe existente intocada e como que assenta suas alterações</p><p>sobre ela, sem necessidade de conhecer o código fonte original;</p><p>b) a implementação original da classe está - é de se esperar - completamente testada e com bugs. Se você</p><p>modificasse o código fonte original, todo o esforço de testes teria que ser repetido. Alterações sobre código</p><p>existente podem incorrer em efeitos secundários indesejáveis, não percebidos imediatamente. Acomodando</p><p>suas alterações sobre a classe existente, você preserva o código original livre de erros, e apenas o código da</p><p>alteração precisa ser testado;</p><p>c) o processo de assentar alterações sobre código existente nos força a pensar no sentido do mais específico.</p><p>Você implementa uma classe genérica e posteriormente assenta sobre ela alterações para tratar situações</p><p>específicas. Um ganho interessante dessa abordagem é o fato de que classes genéricas podem ser reutilizadas</p><p>em vários e diferentes programas. Cada novo programa assenta alterações sobre a classe original, mas esta</p><p>permanece a mesma em todos os programas onde for utilizada;</p><p>d) se a classe base for otimizada, todas as classes construídas sobre ela recebem os benefícios dessa</p><p>otimização, sem qualquer modificação nos programas. Por exemplo, suponha que uma determinada classe List</p><p>foi otimizada e agora executa uma classificação de elementos 10 vezes mais rápido que em sua primeira</p><p>versão. Todas as classes construídas a partir da classe List vão executar classificação de elementos 10 vezes</p><p>mais rápido, sem qualquer modificação adicional em programas. (correta)</p><p>Questão 5</p><p>Quanto à sobrecarga de</p><p>operadores assinale a alternativa incorreta:</p><p>a) significa utilizar nome diferente para tarefas diferentes. (correta)</p><p>b) uma implementação de sobrecarga de operadores é definida por meio de funções chamadas de operadores.</p><p>c) permite que nós implementemos uma nova maneira de um operador funcionar.</p><p>d) é necessário respeitar a definição original do operador.</p><p>Questão 6</p><p>Para Arnault (2013), a aplicação de alterações por meio de herança nos leva a um dos pontos centrais da POO.</p><p>Trata-se de um modo totalmente diferente de se modificar programas existentes, mas traz vários e importantes</p><p>benefícios.</p><p>Assinale a alternativa correta:</p><p>a) suponha que você está usando uma classe desenvolvida por terceiros, e que você não tem o código fonte.</p><p>Com o mecanismo de herança você deixa a classe existente intocada e como que assenta suas alterações sobre</p><p>ela, tem a necessidade de conhecer o código fonte original;</p><p>b) a implementação original da classe está - é de se esperar - completamente testada e isenta de bugs. Se você</p><p>modificasse o código fonte original, todo o esforço de testes teria que ser repetido. A não alteração sobre código</p><p>existente, pode incorrer em efeitos secundários indesejáveis, não percebidos imediatamente. Acomodando suas</p><p>alterações sobre a classe existente, você preserva o código original livre de erros, e apenas o código da</p><p>alteração precisa ser testado;</p><p>c) o processo de assentar alterações sobre código existente nos força a pensar no sentido do mais genérico</p><p>para o mais específico. Você implementa uma classe genérica e posteriormente assenta sobre ela alterações</p><p>para tratar situações específicas. Um ganho interessante dessa abordagem é o fato de que classes genéricas</p><p>podem ser reutilizadas em vários e diferentes programas. Cada novo programa assenta alterações sobre a</p><p>classe original, mas esta permanece a mesma em todos os programas. (correta)</p><p>d) se a classe base for otimizada, apenas uma classe construíra sobre ela recebem os benefícios dessa</p><p>otimização, sem qualquer modificação nos programas. Por exemplo, suponha que uma determinada classe List</p><p>foi modificada e agora executa uma classificação de elementos 10 vezes mais rápido que em sua primeira</p><p>versão. Todas as classes construídas a partir da classe List vão executar classificação de elementos 10 vezes</p><p>mais rápido, sem qualquer modificação adicional em programas.</p><p>Questão 7</p><p>Para Arnault (2013), a aplicação de alterações por meio de herança nos leva a um dos pontos centrais da POO.</p><p>Trata-se de um modo totalmente diferente de se modificar programas existentes, mas traz vários e importantes</p><p>benefícios.</p><p>Assinale a alternativa correta:</p><p>a) suponha que você está usando uma classe desenvolvida por terceiros, e que você tenha o código fonte. Com</p><p>o mecanismo de herança você refaça a classe existente intocada e como que assenta suas alterações sobre ela,</p><p>sem necessidade de conhecer o código fonte original;</p><p>b) a implementação original da classe está - é de se esperar - completamente testada e isenta de bugs. Se você</p><p>modificasse o código fonte original, todo o esforço de testes teria que ser repetido. Alterações sobre código</p><p>existente podem incorrer em efeitos secundários indesejáveis, não percebidos imediatamente. Acomodando</p><p>suas alterações sobre a classe existente, você preserva o código original livre de erros, e apenas o código da</p><p>alteração precisa ser testado; (correta)</p><p>c) o processo de assentar alterações sobre código existente nos força a pensar no sentido do mais genérico</p><p>para o mais específico. Você implementa uma classe genérica e posteriormente assenta sobre ela alterações</p><p>para tratar situações genéricas. Um ganho interessante dessa abordagem é o fato de que classes genéricas</p><p>podem ser reutilizadas em vários e diferentes programas. Cada novo programa assenta alterações sobre a</p><p>classe original, mas esta permanece a mesma em todos os programas onde for utiliza</p><p>d) se a classe base for otimizada, todas as classes construídas sobre ela não recebem os benefícios dessa</p><p>otimização, sem qualquer modificação nos programas. Por exemplo, suponha que uma determinada classe List</p><p>foi otimizada e agora executa uma classificação de elementos 10 vezes mais rápido que em sua primeira</p><p>versão. Todas as classes construídas a partir da classe List vão executar classificação de elementos 10 vezes</p><p>mais rápido, sem qualquer modificação adicional em programas.</p><p>Questão 8</p><p>O conceito de classes derivadas está presente em:</p><p>a) encapsulamento;</p><p>b) herança; (correta)</p><p>c) ocultação de dados;</p><p>d) tipos abstratos de dados.</p><p>Questão 9</p><p>Sobre a função templates, marque a alternativa incorreta.</p><p>a) são funções genéricas em que os tipos de dados, parâmetros e os de retorno, os quais são definidos em</p><p>tempo de execução.</p><p>b) Quando um conjunto de funções ou classes tem a mesma funcionalidade para diferentes tipos de dados, eles</p><p>se tornam bons candidatos para serem implementados como templates.</p><p>c) ) uma função declarada template passando um parâmetro com um tipo “int” o compilador C++ reescreve</p><p>toda a função, substituindo o tipo da função para “int”.</p><p>d) se a função for chamada tendo como parâmetro um “int” cria a função para “float”, se o parâmetro for</p><p>“float” cria uma função para “int”, e assim por diante. (correta)</p><p>Questão 10</p><p>Com relação à redefinição,</p><p>I- A redefinição de uma função virtual por uma classe derivada é diferente à sobrecarga de funções. é</p><p>similar</p><p>II - Entretanto, esse termo não é aplicado para a redefinição de funções virtuais porque há diversas diferenças.</p><p>III - Talvez a mais importante é que o protótipo para uma função virtual deve combinar exatamente o protótipo</p><p>especificado para a classe base.</p><p>Marque a alternativa correta:</p><p>a) I e II</p><p>b) II e III (correta)</p><p>c) I apenas</p><p>d) II apenas</p><p>e) III apenas</p>