Orientação a Objetos e Java
Segundo Exame Escrito
Paulo Borba
Departamento de Informática
Universidade Federal de Pernambuco
25 de Novembro de 1997
Questão 1
Considere a classe Dicionario definida em Java da
seguinte maneira:
class Dicionario {
private String[] palavras;
private String[] significados;
private int proximo;
void insere(String palavra, String significado) {
palavras[proximo] = palavra;
significados[proximo] = significado;
proximo = proximo + 1;
}
void remove(String palavra) {...}
boolean pertence(String palavra) {...}
Dicionario () {...}
}
onde uma palavra armazenada na i-ésima
posição do array palavras tem seu significado armazenado
na i-ésima posição do array significados,
e o atributo proximo indica onde serão armazenados
a próxima palavra e o seu significado.
Note também que a inserção de uma palavra com seu significado
no dicionário é feita pelo método insere, enquanto que
uma dada palavra, e consequentemente seu significado, pode ser
retirada do dicionário usando-se o método remove.
Além disso, o método pertence indica se uma dada palavra
está cadastrada no dicionário.
Com base na classe Dicionario, defina em Java uma classe
DicionarioSR cujos objetos são dicionários sem
repetição de palavras; isto é, os objetos da nova classe devem
ter a mesma funcionalidade que os objetos de Dicionario
exceto que o método insere só deve inserir palavras
que não foram previamente cadastradas no dicionário.
Discuta brevemente uma alternativa para implementar
DicionarioSR em Java. Justifique sua escolha comparando
com a alternativa e indicando vantagens e desvantagens do ponto
de vista de estilo de programação e qualidade de software.
Questão 2
Defina em Java um tipo UmDicionario que pode agrupar tanto
objetos de Dicionario e DicionarioSR (veja
Questão 1) quanto objetos de outras implementações de
dicionários usando estruturas de dados mais eficientes do
que array. Indique também como as classes Dicionario e
DicionarioSR teriam que ser modificadas para que seus
objetos façam parte do tipo UmDicionario.
Questão 3
Os objetos da classe Dicionario podem ser vistos como
tabelas que associam objetos da classe String a
objetos dessa mesma classe. Assim, modificando a classe
Dicionario, explique brevemente como podemos definir
uma classe Tabela que associa objetos de um tipo
X qualquer a objetos de um tipo Y qualquer.
Discuta as vantagens e dificuldades existentes para definir a
classe Tabela em Java.