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, Repositorio, que possui os atributos e operações comuns a ambas as classes.

Metodologia

  1. Veja e procure entender as assinaturas das classes Repositorio, Arquivo e Diretorio e Lista_rep;
  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 Repositorio (Lista_rep), 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 Lista_rep deverá listar recursivamente o conteúdo do Diretorio, que pode ser Arquivos e/ou Diretorios, chamando o método lsR do seu atributo Rep que é do tipo Repositorio e chamando novamente o método listarR do seu atributo proximo que é do tipo Lista_rep, caracterizando assim a recursão. Agora o problema, caso o atributo Rep da Lista_rep 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 listarR do seu atributo Lista_rep. Lembre-se que um Diretorio tem um atributo conteudo do tipo Lista_rep.

Para evitar esse problema, definimos um metodo abstrato lsR para um Repositorio (lembre-se que um Repositorio é 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 Repositorio, Arquivo, Diretorio, Lista_rep, Usuario e a classe principal para a sua área (drive h);
  2. Abra os arquivos da sua área e acrescente as modificações finais nas classes Repositorio, Arquivo, Diretorio e Lista_rep;
  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@di.ufpe.br) e Sérgio Soares (scbs@di.ufpe.br)