Laboratório 15-21 outubro
Trabalho de programação - 02/11
Nome de módulo | Herança |
Data de entrega | Sexta-feira 02 de Novembro de 2018 |
Data limite | Sexta-feira 02 de Novembro de 2018 12:20hs |
Resumo | O objetivo deste trabalho de programação é identificar a necessidade de usar conceitos avançados de design de classes, sendo um desses o conceito de herança. No primeiro exercício, um dicionário deve ser implementado, sendo recomendável utilizar classes padrões, tais como, "Map", "HashMap" e "HashSet". No segundo exercício, outro dicionário com funcionalidade semelhante deve ser implementado. Já no terceiro exercício, ambos os dicionários devem ser herdados de uma superclasse que contenha a funcionalidade comum deles. Por fim no quarto exercício, ambos os dicionários são contidos em uma coleção de dicionários. Para isso, é recomendável usar "ArrayList" para gerenciar a coleção. |
Instruções | Todos os campos de cada classe devem ser "private" a menos que seja especificado explicitamente o uso de "protected" em um exercício dado. |
Exercício | Nome | Pontos |
1 / 4 | Construção de um dicionário simples | 2 |
2 / 4 | Construção de um dicionário inglês-português | 2 |
3 / 4 | Criando superclasse com funcionalidade comum dos dicionários | 3 |
4 / 4 | Usando dicionários herdados da superclasse com restrições | 3 |
Total: | 10 |
Exercício 1: Construção de um dicionário simples
1. Descrição
Nesta parte do trabalho de programação, você deve criar a classe DicionarioSimples. Nessa classe, você deve escrever o código de forma a implementar funcionalidades necessárias de um dicionário.
As assinaturas dos métodos com as funcionalidades correspondentes são detalhadas a seguir:
- public boolean adicionar(String palavra, String significado) [0.5 ptos] - Este método permite adicionar ao dicionário uma palavra com o seu significado correspondente. Se a palavra não existir, o método deve retornar "true" para indicar que a palavra foi adicionada. Em caso contrário, retornar "false".
- public String buscar(String palavra) [0.5 ptos] - Este método permite buscar no dicionário o significado de uma palavra dada. Dessa forma, o significado da palavra correspondente deve ser retornada. Se não encontrar o significado, retornar: "".
- public void mostrarTodo() [1.0 ptos] - Este método deve mostrar na tela todas as palavras armazenadas no dicionário. Cada palavra com o seu significado, da forma "palavra:significado", deve ser mostrada em uma linha distinta na tela. Notar que a separação entre palavra e significado é dado por ":".
Exercício 2: Construção de um dicionário inglês-português
1. Descrição
Nesta parte do trabalho, você deve criar a classe DicionarioIP.
As assinaturas dos métodos são detalhadas a seguir:
- public boolean adicionar(String palavra_ingles, String sinonimos, S) [0.5 ptos] - Este método permite adicionar ao dicionário uma palavra com os sinônimos correspondentes. Na variável "String sinonimos" estão contidos vários sinônimos da palavra em inglês e estão separados por um espaço. Se a palavra não existir, o método deve retornar "true" para indicar que a palavra foi adicionada. Em caso contrário, retornar "false".
- public String buscar(String palavra) [0.5 ptos] - Este método permite buscar no dicionário todos os sinônimos de uma palavra dada. Dessa forma, os sinônimos da palavra correspondente devem ser retornados em uma variável do tipo String e separados por um espaço. Se não encontrar a palavra, retornar: "".
- public void mostrarTodo() [1.0 ptos] - Este método deve mostrar na tela todas as palavras armazenadas no dicionário. Cada palavra com os sinônimos correspondentes, da forma "palavra:sinonimo1,sinonimo2,sinonimo3,...,sinonimoN", deve ser mostrada em uma linha distinta na tela. Notar que a separação entre palavra e sinônimos é dado por ":".
Exercício 3: Criando superclasse com funcionalidade comum dos dicionários
1. Descrição
Nesta parte do trabalho, você deve criar a classe Dicionario. Essa classe deve ser a superclasse das classes: DicionarioSimples e DicionarioIP [3 pts].
Lembre que o construtor de uma "subclasse" sempre deve invocar o construtor da sua superclasse como sua primeira instrução.
Lembre também que os campos da superclasse só podem ser usados pelas subclasses quando têm o modificador "protected".
2. Submissão
Em um só arquivo envie as três classes: Dicionario, DicionarioSimples e DicionarioIP. Essas duas últimas classes devem ter herdado as funcionalidades comuns da classe Dicionario. No caso de algum método ter variações na implementação para alguma subclasse, então implementar esse método na subclasse.
Exercício 4: Usando dicionários herdados da superclasse com restrições
1. Descrição
Nesta parte do trabalho, você deve criar uma classe BancoDicionarios. As assinaturas dos métodos são detalhadas a seguir:
- public boolean adicionarDicionario(Dicionario dic) [1.0 ptos] - Este método permite adicionar um dicionário ao banco de dicionários. Se o dicionário não existir, o método deve retornar "true" (para indicar que dicionário foi adicionado com sucesso). Em caso contrário, retornar "false". Você pode utilizar um "ArrayList" para armazenar os objetos da classe "Dicionario".
- public void mostrarConteudoDicionarios() [2.0 ptos] - Este método deve mostrar na tela todas as palavras armazenadas em cada dicionário. Você pode usar um loop "for-each" para percorrer o "ArrayList". Para cada objeto "Dicionario" recuperado, invocar o método "mostrarTodo()", o qual foi implementado anteriormente.
Trabalho de programação continuação
Nome de módulo | Herança |
Data de entrega | Sexta-feira 02 de Novembro de 2018 |
Data limite | Sexta-feira 02 de Novembro de 2018 12:20hs |
Resumo | O objetivo deste trabalho de programação é usar os conceitos de "sobrescrição", "polimorfismo" e "uso de tipo de objeto dinâmico" |
Instruções | Usar o modificador "protected" para aqueles campos que são usados tanto na classe pai quanto nas classes filhas. Isto, para conseguir o acesso a esses campos a partir das classes filhas (subclasses). Lembrar que "System.out.println" adiciona, no final do texto reportado, um salto de linha. A diferença desse método, "System.out.print" não adiciona tal salto de linha. Se você desejar testar o seu programa de forma frequente, pode fazê-lo em ideone.com. |
Exercício 1: Sobrescrição e polimorfismo
1. Descrição
Você deve fazer um programa que considere três animais com os seguintes campos:
Guepardo | Baleia | Aguia |
apelido (String) idade (int) peso (double) descricao (String) velocidadeCorrida (double) | apelido idade peso descricao alturaMaximaSalto (double) sinalInfrasonica (double) | apelido idade peso descricao envergadura (double) elevacaoMaxima (double) |
Você deve implementar tais classes de forma a herdar métodos e campos da classe Animal.
As assinaturas dos métodos com as funcionalidades correspondentes são detalhadas a seguir:
- Construtores - O construtor de cada classe deve aceitar como parâmetros todos os campos. Exemplo de construtor da classe Animal: public Animal(String apelido, int idade, double peso, String descricao).
- Uso de método herdado - 3 ptos: public void infoGeral() - Este método deve reportar na tela unicamente os campos: "apelido", "idade", "peso" e "descricao". O formato do reporte é:
No caso das classes Guepardo, Baleia e Aguia: |
Nome:<apelido>_Idade:<idade>_Peso:<peso>_Descricao:<descricao> |
- Sobrescrição de método herdado - 4 ptos: public void info() - Este método deve reportar na tela todos os campos correspondentes à classe da seguinte forma:
No caso da classe Animal: |
Nome:<apelido> Idade:<idade> Peso:<peso> Descricao:<descricao> |
No caso da classe Guepardo: | No caso da classe Baleia: | No caso da classe Aguia: |
<invocar info() da classe Animal> Velocidade:<velocidadeCorrida> | <invocar info() da classe Animal> Salto:<alturaMaximaSalto> Sonido:<sinalInfrasonica> | <invocar info() da classe Animal> Envergadura:<envergadura> Elevacao:<elevacaoMaxima> |
2. Submissão e avaliação
Faça a submissão das quatro classes.
Exercício 2: Reportar informações usando tipo de objeto dinâmico
1. Descrição
Você deve criar a classe ListaAnimais. Tal classe deve apresentar o seguinte método:
- public void listar(ArrayList<Animal> lAnimais) [3 ptos] - Este método deve percorrer todos os objetos da lista lAnimais e invocar ao método void info() para cada objeto dessa lista, sem importar se o objeto for da subclasse Guepardo, Baleia ou Aguia.
2. Submissão
Faça a submissão de todas as classes implementadas.