Prévia do material em texto
<p>Você ainda está conectado?</p><p>Sua sessão expira após 180 minutos de inatividade, o que protege suas informações caso você tenha saído do dispositivo sem fazer logout.</p><p>Pressione uma tecla ou clique em qualquer lugar para permanecer conectado.</p><p>Ah, aí está você!</p><p>DANIELA ALVES BRATZ</p><p>Avaliação final da disciplina - Resultados</p><p>Tentativa 1 de 1</p><p>Por escrito 27 de junho de 2023 12:37 – 27 de junho de 2023 12:59</p><p>Liberado 2 de julho de 2023 0:01</p><p>Pontuação da tentativa</p><p>10 / 10 - 100%</p><p>Nota geral (Maior tentativa)</p><p>10 / 10 - 100%</p><p>Pergunta 1 1 / 1 ponto</p><p>Questão 5) O código abaixo mostra a declaração de uma classe "Produto". Essa classe, por sua vez, contém atributos para armazenar os seguintes dados: um identificador do produto, o nome do produto e o preço do produto.</p><p>Os atributos de uma classe são acessados com dois propósitos: armazenar ali um valor, ou obter o valor armazenado no atributo para se fazer algo com ele. Essas duas operações, por sua vez, podem ser efetuadas com o auxílio de métodos acessores, que por padrão tem o nome de get(nome do atributo) e set(nome do atributo).</p><p>Tendo como referência esse código, assinale a alternativa INCORRETA:</p><p>Os métodos da classe são declarados como "public", e por isso podem ser chamados por outras classes.</p><p>Os atributos da classe são declarados como "private", e por isso não podem ser diretamente referenciados por outras classes. Nesse caso, eles só podem ser acessados por métodos da classe "Produto".</p><p>Podemos alterar os atributos da classe de "private" para "public", eliminando assim os métodos acessores "get" e "set". Ao fazer isso, além de deixar a classe mais enxuta, estamos mantendo o princípio do "encapsulamento".</p><p>Essa classe foi escrita de acordo com o princípio do "encapsulamento". Ou seja, os atributos da classe foram declarados privados e os métodos foram declarados públicos.</p><p>Por meio dos métodos "get" e "set" é possível obter e alterar o valor dos atributos da classe.</p><p>Pergunta 2 1 / 1 ponto</p><p>Questão 4) Tanto na programação estruturada, quanto na programação orientada a objetos, podemos usar funções para organizar melhor nosso código, separar responsabilidades, permitir o reuso e evitar a repetição de comandos, entre outros benefícios. Na programação orientada a objetos, no entanto, chamamos as funções de "métodos". O código abaixo mostra um exemplo que aborda esse tema:</p><p>Tendo como referência esse exemplo, assinale a alternativa INCORRETA:</p><p>Na linha 12 desse exemplo estamos usando uma expressão condicional. Essa expressão, no entanto, poderia ser substituída por um comando "if" equivalente.</p><p>O método "maior" recebe como entrada dois valores e produz como saída um único valor, que corresponde ao maior dos valores informados como entrada.</p><p>O método "isPar" recebe como entrada um único valor e produz como saída o resultado "true" quando o valor é par e "false" quando o valor é ímpar.</p><p>Nesse código, se removermos o modificador "static" dos métodos "maior" e "menor", o programa continuará funcionando.</p><p>Temos nessa classe os métodos "main", "maior" e "isPar". Os dois últimos métodos são declarados como "static" para poderem ser chamados do método "main", que é "static".</p><p>Pergunta 3 1 / 1 ponto</p><p>Questão 1) Os operadores lógicos são utilizados nos comandos "if", "while" e "for" para construir condições que contêm mais de uma expressão lógica. Isso é feito, por exemplo, no seguinte comando "if":</p><p>if( (a > 18) && (a < 40) ) System.out.println( "Adulto" );</p><p>Nesse caso, usamos o operador "&&" para juntar as expressões lógicas "(a > 18)" e "(a < 40)". A condição é verdadeira quando o valor de "a" for maior que 18 e ao mesmo tempo menor que 40.</p><p>A tabela abaixo mostra o resultado produzido pelos operadores lógicos "não" (!), "e" (&&) e "ou" (||). Na tabela, "A" e "B" são as entradas (ou operandos) informadas para o operador lógico, e "X" é o resultado da operação, onde "V" é "verdadeiro" e "F" falso.</p><p>A respeito desse tema, assinale a alternativa INCORRETA.</p><p>O resultado de uma operação "e" é sempre falso quando pelo menos um dos operandos for falso.</p><p>O resultado de uma operação "ou" é sempre verdadeiro quando pelo menos um dos operandos for verdadeiro.</p><p>O resultado de uma operação "ou" é falso quando algum dos operandos for falso.</p><p>O operador "não" é também chamado de inversor, porque ele inverte o valor verdade de seu operando.</p><p>O resultado de uma operação "e" só é verdadeiro quando ambos os operandos forem verdadeiros.</p><p>Pergunta 4 1 / 1 ponto</p><p>Questão 9) O polimorfismo permite que objetos de diferentes tipos possam ser tratados de uma mesma maneira. O código abaixo mostra um exemplo do uso do polimorfismo:</p><p>Aqui, temos na linha 26 um método que recebe como parâmetro um objeto do tipo "Pagamento". Fazendo uso do polimorfismo, podemos passar para esse método não apenas objetos do tipo "Pagamento", mas também qualquer objeto que implementa essa interface.</p><p>Tendo como referência esse código, assinale a alternativa INCORRETA:</p><p>Nesse exemplo, podemos trocar a palavra reservada "implements" por "extends", nas linhas 5 e 12. Ao fazer isso o programa continuará funcionando como antes, produzindo os mesmos resultados.</p><p>Não existe, nesse exemplo, uma herança entre "Pagamento", "PagamentoComCartao" e "PagamentoComBoleto". Isso porque "Pagamento" é uma interface, e a herança ocorre apenas entre classes.</p><p>Na sua forma usual, uma interface é criada para definir métodos que devem ser implementados (sobrescritos) por classes que implementam aquela interface. É que ocorre nesse exemplo. A interface "Pagamento" define, na linha 2, o método "getTaxaUso", que precisa ser sobrescrito pelas classes que implementam essa interface. Isso é feito pelas classes "PagamentoComCartao" e "PagamentoComBoleto" nas linhas 7 e 14, respectivamente.</p><p>Nesse exemplo temos duas classes, "PagamentoComCartao" e "PagamentoComBoleto", e essas duas classes implementam a interface "Pagamento". Esse relacionamento está evidenciado, no código, pela declaração "implements Pagamento".</p><p>Existe, entre uma interface e as classes que implementam essa interface, um relacionamento do tipo "é um", assim como ocorre entre uma classe e suas subclasses. Por isso podemos usar a interface "Pagamento" como parâmetro no método "imprime" (linha 26) e chamar esse método passando para ele objetos do tipo "PagamentoComCartao" e "PagamentoComBoleto" (linhas 22 e 23).</p><p>Pergunta 5 1 / 1 ponto</p><p>Questão 6) Por meio da herança podemos criar novas classes, aproveitando as funcionalidades de classes já existentes. O código abaixo mostra um exemplo de herança:</p><p>Aqui, por simplicidade, os métodos "get" e "set" não estão sendo exibidos.</p><p>Tendo como referência esse exemplo, assinale a alternativa INCORRETA:</p><p>De acordo com a terminologia da Programação Orientada a Objetos podemos dizer que, nesse</p><p>exemplo, "PagamentoComCartao" e "PagamentoComBoleto" são classes filhas. A classe "Pagamento", por sua vez, é uma classe derivada.</p><p>De acordo com a terminologia da Programação Orientada a Objetos podemos dizer que, nesse exemplo, "PagamentoComCartao" e "PagamentoComBoleto" são subclasses. A classe "Pagamento", por sua vez, é uma superclasse.</p><p>De acordo com a terminologia da Programação Orientada a Objetos podemos dizer que, nesse exemplo, as classes "PagamentoComCartao" e "PagamentoComBoleto" são especializações da classe "Pagamento".</p><p>Podemos dizer, nesse exemplo, que a relação de herança implica no fato de que "PagamentoComCartao" é um "Pagamento", assim como "PagamentoComBoleto" é um "Pagamento".</p><p>De acordo com a terminologia da Programação Orientada a Objetos podemos dizer que, nesse exemplo, a classe "Pagamento" é uma generalização das classes "PagamentoComCartao" e "PagamentoComBoleto".</p><p>Pergunta 6 1 / 1 ponto</p><p>Questão 10) Durante nossos estudos vimos que uma exceção é um evento inesperado que pode acontecer durante a execução de um programa, interrompendo seu fluxo normal de execução. Em Java, podemos tratar exceções usando um bloco try-catch. O código abaixo mostra um exemplo de uso desse bloco:</p><p>Tendo como referência esse exemplo, assinale a alternativa INCORRETA:</p><p>A chamada ao método "printStackTrace", na linha 23, é usada para mostrar na tela a exceção que foi levantada durante a execução do programa.</p><p>Esse código, quando executado, vai levantar uma exceção do tipo "NullPointerException".</p><p>Esse código, quando executado, exibe a mensagem "Nome da pessoa: Luiz Reginaldo"</p><p>Na construção desse programa colocamos dentro do bloco "try" os comandos que podem levantar uma excecão. Caso seja levantada uma exceção do tipo "NullPointerExcepcion", ela será capturada pelo "catch" e será exibida na tela a mensagem "Foi levantada uma exceção!"</p><p>Se removermos desse código as instruções "try" (linha 16) e "catch" (linhas 21 a 24) o código vai compilar e executar. O tratamento com try-catch, nesse caso, é opcional porque "NullPointerException" é uma exceção não verificada, e exceções desse tipo não precisam necessariamente serem tratadas.</p><p>Pergunta 7 1 / 1 ponto</p><p>Questão 2) Quando estamos escrevendo um programa em Java usamos comandos de repetição para executar diversas vezes um mesmo conjunto de instruções. Para isso podemos usar os comandos "while", "do-while", ou ainda o comando "for". O código abaixo mostra um exemplo de utilização desse último comando:</p><p>Tendo como referência esse exemplo, assinale a alternativa INCORRETA:</p><p>Quando esse programa for executado a variável contadora assumirá os valores 10, 12, 14, 16, 18 e 20.</p><p>No comando "for", quando queremos tratar um intervalo de valores, informamos na parte de "inicialização" o valor inicial de uma variável contadora, e na parte da "condição" o valor final que será assumido por essa variável. Nesse exemplo o valor inicial é 10 e valor final é 20.</p><p>No comando "for" informamos na parte de "incremento" como o valor da variável contadora será atualizado após a execução dos comandos controlados que estão dentro da repetição. Nesse exemplo o valor da variável contadora é aumentado de 2 a cada repetição.</p><p>O comando "for" é naturalmente utilizado quando conhecemos o número de repetições, ou ainda quando queremos tratar um intervalo de valores. Nesse exemplo, em particular, estamos usando o comando "for" para tratar valores no intervalo de 10 a 20.</p><p>Esse código, quando executado, mostra na tela o seguinte resultado: "10 11 12 13 14 15 16 17 18 19 20"</p><p>Pergunta 8 1 / 1 ponto</p><p>Questão 7) Sabemos que, em Java, todas as classes são filhas diretas ou indiretas da classe "Object". Como consequência disso, todas classes em Java herdam os métodos definidos em "Object". Um desses métodos é o método "equals", que é utilizado em diversas classes da API Java (como ArrayList, por exemplo), para determinar se dois objetos são "iguais". O código abaixo mostra uma classe "Pedido" que sobrescreve o método "equals" de "Object", provendo para ele uma nova implementação.</p><p>Tendo como referência esse exemplo, assinale a alternativa INCORRETA:</p><p>O método "equals" recebe um parâmetro do tipo "Object", porque é dessa maneira que está definido na classe "Object". Assim, para podermos comparar o parâmetro do método com a instância de "Pedido" na qual o "equals" foi chamado, devemos "convertê-lo" de "Object" para "Pedido". Isso é feito na linha 15, usando o operador de cast "(Pedido)".</p><p>Estamos criando, nas linhas 23 e 26, dois objetos do tipo "Pedido". Como estamos atribuindo a eles o mesmo "id" (linhas 24 e 27), o resultado da comparação na linha 29 (p1 == p2) será "true".</p><p>Na implementação do método "equals", que aparece entre as linhas 13 e 17, estamos dizendo que dois pedidos são "iguais" se o valor armazenando no atributo "idPedido" de ambos for o mesmo.</p><p>Estamos criando, nas linhas 23 e 26, dois objetos do tipo "Pedido". Como estamos atribuindo a eles o mesmo "id" (linhas 24 e 27), o resultado da comparação na linha 30 (p1.equals(p2)) será "true".</p><p>Pela implementação do método "equals", que aparece entre as linhas 13 a 17, podemos dizer que se um objeto do tipo "Pedido" for comparado com um objeto de outro tipo, por exemplo, um objeto do tipo "String", o resultado do "equals" será "false".</p><p>Pergunta 9 1 / 1 ponto</p><p>Questão 8) O polimorfismo permite que objetos de diferentes tipos possam ser tratados de uma mesma maneira. O código abaixo mostra um exemplo do uso do polimorfismo:</p><p>Aqui, temos na linha 26 um método que recebe como parâmetro um objeto do tipo "Pagamento". Fazendo uso do polimorfismo, podemos passar para esse método não apenas objetos do tipo "Pagamento", mas também objetos de qualquer uma de suas subclasses.</p><p>Tendo como referência esse código, assinale a alternativa INCORRETA:</p><p>O método "getTaxaUso" foi declarado como "abstract" em "Pagamento". Quando declaramos um método como "abstract", em Java, ele não pode ter corpo (ou seja, não pode ter { e }).</p><p>Na linha 22 estamos criando um objeto do tipo "PagamentoComCartao", e passando esse objeto para o método "imprime". Essa chamada está correta porque "PagamentoComCartao" é uma subclasse de "Pagamento", e pelo polimorfismo podemos passar um objeto do tipo "PagamentoComCartao" onde é esperado um objeto do tipo "Pagamento".</p><p>A chamada ao método "imprime", na linha 22, vai mostrar na tela o valor 5. A chamada ao método "imprime", na linha 23, vai mostrar na tela o valor 10.</p><p>A classe "Pagamento", desse exemplo, não poderá ser diretamente instanciada com "new" porque foi declarada como "abstract". Classes abstratas, em Java, não podem ser instanciadas.</p><p>O método "getTaxaUso", declarado na classe "Pagamento", está sendo sobreposto na classe "PagamentoComCartao" na linha 7, e na classe "PagamentoComBoleto" na linha 14.</p><p>Pergunta 10 1 / 1 ponto</p><p>Questão 3) Você foi encarregado de avaliar alguns candidatos para a vaga de programador</p><p>Java na empresa onde trabalha. Foi solicitado a eles escrever o seguinte código, em Java:</p><p>Escreva um programa que:</p><p>a) Solicite ao usuário 10 números inteiros e armazene esses números em um vetor.</p><p>b) Percorra o vetor e, a partir dos valores armazenados, diga em que posição está o menor valor.</p><p>O programa entregue por um candidato continha os seguintes trechos de código:</p><p>I) // Declaração do vetor</p><p>int vetor[] = new int[10] ;</p><p>II) // Leitura dos elementos do vetor</p><p>Scanner in = new Scanner( System.in ) ;</p><p>for(int i= 0; i < vetor.length; i++) {</p><p>System.out.printf( "Entre com o elemento %d do vetor: ", i);</p><p>vetor[i] = in.nextInt() ;</p><p>}</p><p>III) // Determina a posicao do menor valor</p><p>int posicao = 0 ;</p><p>for(int i= 1; i < vetor.length; i++) {</p><p>if( vetor[i] < vetor[posicao] ) {</p><p>posicao = i ;</p><p>}</p><p>}</p><p>System.out.printf( "O menor elemento esta na posicao %d ", posicao) ;</p><p>Após analisar essa resposta, assinale a alternativa CORRETA:</p><p>Todos os trechos de código estão corretos.</p><p>Apenas os trechos de código I e II estão corretos.</p><p>Apenas os trechos de código I e III estão corretos.</p><p>Apenas os trechos de código II e III estão corretos.</p><p>Todos os trechos de código estão incorretos.</p><p>Concluído</p>