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.