Desenvolvimento de aplicações com herança

Programação 3: Orientação a Objetos e Java


Objetivo

Vamos implementar novamente o ambiente de simulação de uma sessão de usuário, desta vez usando herança.

As classes Arquivo e Diretorio serão subclasses de uma nova classe, Registro, que possui os atributos e operações comuns a ambas as classes.

Metodologia

  1. Veja e procure entender as assinaturas das classes Registro, Arquivo, Diretorio e RepositorioRegistros;
  2. Veja e procure entender a implementação das classes em Java;
  3. Reveja a classe Usuario que não mudou;
  4. Reveja a classe principal (Sessao) que também não mudou;

Quais são as vantagens desta metodologia?
Agora o conteúdo de um Diretorio é uma lista de Registros (RepositorioRegistros), ao invés de uma lista de Arquivos e uma lista de Diretorios, que eram exatamente iguais.

E agora...

Suponha agora que desejamos implementar uma nova função no sistema, com funcionalidade semelhante ao comando ls -R. Ou seja, desejamos poder obter uma listagem recursiva dos arquivos, a partir de um diretório qualquer.

Quais os problemas quando tentamos criar um método lsR na classe Diretório da hierarquia de classes definida?

O método listarR da classe RepositorioRegistros deverá listar recursivamente o conteúdo do Diretorio, que pode ser Arquivos e/ou Diretorios, chamando o método lsR do seu atributo registro que é do tipo Registro e chamando novamente o método listarR do seu atributo proximo que é do tipo RepositorioRegistros, caracterizando assim a recursão. Agora o problema, caso o atributo registro do RepositorioRegistros seja um Arquivo, o método lsR deve apenas imprimir seu nome, já se o mesmo for um Diretorio, o método lsR deverá além de imprimir seu nome chamar o método listar do seu atributo RepositorioRegistros. Lembre-se que um Diretorio tem um atributo conteudo do tipo RepositorioRegistros.

Para evitar esse problema, definimos um metodo abstrato lsR para um Registro (lembre-se que um Registro é uma superclasse de Arquivo e de Diretorio) o qual deverá ser implementado só nas subclasses (Arquivo e Diretorio).

Assim, veja como ficou a versão final...

continuando

  1. Copie a implementação das classes Registro, Arquivo, Diretorio, RepositorioRegistros, Usuario e a classe principal, Sessao, para a sua área (drive h);
  2. Abra os arquivos da sua área e acrescente as modificações finais nas classes Registro, Arquivo, Diretorio e RepositorioRegistros;
  3. Abra o JDK;
  4. Compile as classes;
  5. Retire os erros que surgirem;
  6. Repita as etapas 7 e 8 até não haverem mais erros;
  7. Execute a classe principal (Sessao).


Débora Aranha (dcsa@cin.ufpe.br),
Sérgio Soares (scbs@cin.ufpe.br) e
Rodrigo Queiroz (rqcl@cin.ufpe.br)