Lista de Exercícios de Projeto e Implementação Orientado a Objeto – Lista 4 (10 Questões)
Questão 1
(MM-QT/2010) Quanto ao uso de Generics na linguagem de programação Java 1.5 ou superiores, é correto afirmar que:
a) Os métodos genéricos permitem que programadores especifiquem, com várias declarações semelhantes de métodos, um conjunto de métodos polimórficos relacionados, onde são diferentes os parâmetros esperados por cada implementação de métodos dentro da mesma classe.
b) Todas as declarações de métodos genéricos têm uma seção de parâmetro de tipo delimitado por colchetes angulares ( < e > ) que precede o tipo de retorno do método. Além disso, os nomes de parâmetros de tipo precisam ser únicos entre os diferentes métodos genéricos da mesma classe.
c) Quando o compilador traduz um método genérico em bytecode Java, ele remove a seção de parâmetro de tipo e substitui por tipos reais. Esse processo é conhecido como Erasure
d) A tecnologia de Generics permite escrever classes genéricas, onde todos os métodos contidos nesta classe são genéricos, exigência esta que é avaliada em tempo de execução para bytecode Java.
e) Uma classe não-genérica pode ser derivada de uma classe genérica. Isto se dá devido a especificação de Polimorfismo do modelo Orientado a Objetos.
Questão 2
(COPEL/2010) Sobre Java e a extensão chamada Generics adicionada a partir da versão 5 da linguagem Java, analise a classe abaixo e assinale a alternativa CORRETA, caso algum programa precise declarar uma variável do tipo Mapa:
a) Não é obrigatório informar um tipo para K e V.
b) Para criar uma variável do tipo Mapa, é obrigatório informar um tipo para K e V.
c) Para criar uma variável do tipo Mapa, é obrigatório informar um tipo para K ou V.
d) Não é obrigatório informar um tipo para K e V, porém, ao instanciar um objeto do tipo mapa, um erro de tempo de execução será gerado.
e) A linha 1 está incorreta, pois não é permitido passar mais de um tipo formal de parâmetro.
Questão 3
Métodos e classes genéricas estão entre as capacidades mais poderosas do Java para reutilização de software com segurança de tipo em tempo de compilação.
Identifique a opção abaixo que está incorreta em relação a Generics Java:
a) Não é necessário Type Casting para extrair os objetos das coleções.
b) O compilador não permite colocar na coleção elementos incompatíveis com os tipos declarados.
c) Tipos genéricos permitem que classes e interfaces sejam usadas como parâmetros na definição de classes, interfaces e métodos.
d) Os parâmetros de tipo proveem formas deu utilizar o mesmo código com diferentes entradas.
e) Checagem de tipo mais forte em tempo de execução.
Questão 4
(TCE-SE/2015) Um programador Java precisa utilizar em seu aplicativo uma tabela dinâmica de inteiros, cujo tamanho pode aumentar ao longo da execução. Para isso, ele decide importar a classe java.util.ArrayList e a declaração da referência à tabela deverá ser:
a) ArrayList<int> tabela;
b) ArrayList<Integer> tabela
c) ArrayList <int>[] tabela;
d) ArrayList<int>tabela[];
e) ArrayList<Integer>tabela[].
Questão 5
(PGE-RJ/2009) A interface Map do fremework de coleções da linguagem Java retorna o valor associado a uma chave especificada por meio do método:
a) Object get(Object key).
b) Object put(Object key, Object value).
c) int size( ).
d) Object firstKey( ).
e) boolean containsKey(Objet key).
Questão 6
(CEF/2010)
A figura acima ilustra um esquema de organização de tipos de dados presentes na plataforma Java. Acerca das informações apresentadas e de linguagens de programação e orientação a objetos, assinale a opção correta.:
a) Uma instância de um HashSet pode apresentar mais de um valor associado a uma mesma chave.
b) A implementação de instâncias de Iterator produzidas por instâncias de Collection é usualmente baseada em classes de visibilidade public, de modo que o cliente do Iterator possa ajustar os parâmetros de desempenho específicos de cada uma dessas implementações.) A implementação de métodos de atualização de informações em estruturas baseadas em árvores, como TreeSet e TreeMap, caracteriza-se pelo emprego de algoritmos recursivos em procedimentos que realizam efeitos colaterais sobre o estado interno da árvore.
c) A implementação de métodos de atualização de informações em estruturas baseadas em árvores, como TreeSet e TreeMap, caracteriza-se pelo emprego de algoritmos recursivos em procedimentos que realizam efeitos colaterais sobre o estado interno da árvore.
d) A recuperação dos objetos mantidos em instâncias de ArrayList, LinkedList, Vector e Stack pode ser efetuada por meio de busca sequencial e emprega, usualmente, algoritmos do tipo recursivo.
e) Uma instância de um HashMap possui em seu estado interno uma estrutura de dados de alocação contígua de memória, cujo tamanho efetivo, acessível ao usuário, mantém-se fixo durante toda a existência da instância.
Questão 7
(FINEP/2014) Seja o seguinte programa Java:
Qual comando produz um erro de compilação?
a) Collection<Integer> a=new TreeSet<Integer>();
b) Set<Integer> b=new TreeSet<Integer>();
c) Set<Integer> c=(new HashMap<Integer,Integer>()).values();
d) SortedSet<Integer>d=new TreeSet<Integer>();
e) Deque<Integer> e=new LinkedList<Integer>();
Questão 8
(COPEL/2010) A API de coleções da linguagem Java provê um conjunto de interfaces, implementações e utilitários para manipulação, pesquisa e ordenação de coleções de objetos. Analise o trecho de código abaixo e selecione a classe que implementa a interface List e apresenta o melhor desempenho para as características do programa. A classe escolhida preencherá a lacuna da linha 1 do código-fonte:
a) ArrayList.
b) Vector.
c) HashMap.
d) Stack.
e) LinkedList.
Questão 9
(TJ-SE/2009) Uma lista Java é uma coleção ordenada de elementos do mesmo tipo, conhecida por sequência. Os elementos de uma lista podem ser acessados pela sua posição, isto é, seu índice e são derivados da interface:
a) java.util.LinkedList, que estende a interface Collection.
b) java.util.Collection, que estende a interface Set.
c) java.util.Set, que estende a interface Collection.
d) java.util.Collection, que estende a interface List.
e) java.util.List, que estende a interface Collection.
Questão 10
(UFF/2015) Em relação ao uso de arrays na linguagem Java, avalie as afirmativas a seguir.
I – Um array é um grupo de variáveis que contém valores todos do mesmo tipo.
II – O primeiro elemento em cada array tem um índice um.
III – Um arraylist é semelhante a um array, mas pode ser dinamicamente redimensionado.
Das afirmativas acima, apenas:
a) I está correta.
b) II está correta.
c) III está correta.
d) I e II estão corretas.
e) I e III estão corretas.
RESPOSTAS
Questão 1 – C
Justificativa: Analisando as opções:
• os métodos genéricos permitem que programadores especifiquem, com várias declarações semelhantes de métodos, um conjunto de métodos polimórficos relacionados, onde são diferentes os parâmetros esperados por cada implementação de métodos dentro da mesma classe. -> Errada, pois permite que especifiquem parâmetros de tipo. Um mesmo método pode ser implementado para trabalhar com tipos de parâmetros diferentes.
• todas as declarações de métodos genéricos têm uma seção de parâmetro de tipo delimitado por colchetes angulares ( < e > ) que precede o tipo de retorno do método. Além disso, os nomes de parâmetros de tipo precisam ser únicos entre os diferentes métodos genéricos da mesma classe. -> Errada, porque os nomes de parâmetros de tipo normalmente não precisam ser únicos.
• a tecnologia de Generics permite escrever classes genéricas, onde todos os métodos contidos nesta classe são genéricos, exigência esta que é avaliada em tempo de execução para bytecode Java. -> Errada, Pois nem todos os métodos precisam ser genéricos.
• uma classe não-genérica pode ser derivada de uma classe genérica. Isto se dá devido a especificação de Polimorfismo do modelo Orientado a Objetos. -> Errada, Se dá devido ao conceito de Herança.
Questão 2 – A
Justificativa: Quando instanciamos a classe sem informar o tipo de K e/ou V não haverá erro. Será executado normalmente. Será efetuado autoboxing quando o método inserir for chamado.
Questão 3 – E
Justificativa: Ocorre checagem de tipo mais forte em tempo de compilação. Quando o compilador traduz um método genérico em bytecode Java, ele remove a seção de parâmetro de tipo e substitui por tipos reais.
Questão 4 – B
Justificativa: A sintaxe correta é TipoGenerico<TipoEspecifico> referência;
Questão 5 – A
Justificativa: Os objetos do tipo Map são formados por duas colunas. Uma representa a chave e outra o valor. A sintaxe correta para retornar o valor é TipoValor get(TipoChave chave).
Questão 6 – C
Justificativa: Analisando as opções erradas:
• Uma instância de um HashSet pode apresentar mais de um valor associado a uma mesma chave -> Errada. Derivadas das interface Set não podem conter duplicatas. Isto é uma caracteristica da interface List.
• A implementação de instâncias de Iterator produzidas por instâncias de Collection é usualmente baseada em classes de visibilidade public, de modo que o cliente do Iterator possa ajustar os parâmetros de desempenho específicos de cada uma dessas implementações. -> Errada. Fica transparente a forma como a coleção implementa o seu iterator. Apenas obter o iterator.
• A recuperação dos objetos mantidos em instâncias de ArrayList, LinkedList, Vector e Stack pode ser efetuada por meio de busca sequencial e emprega, usualmente, algoritmos do tipo recursivo. -> Errada. Fica transparente a forma como a coleção implementa o seu iterator. Precisamos apenas usar o método get.
• Uma instância de um HashMap possui em seu estado interno uma estrutura de dados de alocação contígua de memória, cujo tamanho efetivo, acessível ao usuário, mantém-se fixo durante toda a existência da instância. -> Errada. O tamanho do HashMap pode mudar. Inicialmente suporta 16 posições, mas isto pode, por exemplo dobrar. Outro ponto importante é que o HashMap não ordena seus elementos.
Questão 7 – C
Justificativa: Está errada porque o métodos values() retorna uma Collection e não uma Set.
Para ficar correto, deveria ser uma das duas linhas abaixo:
- Collection<Integer>; c=(new HashMap<Integer,Integer>()).values();
- Set<Integer> c=(new HashMap<Integer,Integer>()).keySet();
Questão 8 – E
Justificativa: A opção HashMap não caberia, pois não implementa a interface List.
A diferença seria, entre outras, na inserção. Tanto o ArrayList, como Vector e Stack podem precisar de um tempo a mais para expandir o seu espaço interno e/ou mover os elementos de lugar para comportar novos elementos.
Questão 9 – B
Justificativa: Analisando as opções:
• java.util.LinkedList, que estende a interface Collection. -> Errada. Na verdade herda List que herda Collection. Mas Não só ela pode ter seus elementos acessados pelo indice.
• java.util.Collection, que estende a interface Set. -> Errada. A interface Collection não estende a Set, mas o contrário é que é verdadeiro.
• java.util.Set, que estende a interface Collection. -> Errada. pois não acessamos por sua posição.
• java.util.Collection, que estende a interface List. -> Errada. A interface Collection não estende a List, mas o contrário é que é verdadeiro.
• java.util.List, que estende a interface Collection. -> Certa. Todos as classes que implementam a interface List podem ser acessados por sua posição.
Questão 10 – E
Justificativa: A única opção errada é II, pois o índice do primeiro elemento é 0 e não 1.
Material retirado da Web.
Se você tiver alguma dúvida ou correção a fazer, por favor, comente! Obrigado!