[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico] [Índice de assunto]

RE: Lista Simples de Frames desocupados



Tiago Minchillo da Silveira writes:

 > 1. "Crio uma classe separada, ou posso usar o campo next?"

Aqui há duas questões:

 A. Uso o campo next?

 B. Crio uma classe separada?

Primeiro a questão A. Esta é uma das situações em que temos de optar
entre limpeza e eficiência. A escolha, aqui, é entre colocar o campo
next na própria classe Page ou colocar o campo next numa classe
auxiliar, digamos, ListElement:

       class ListElement {
           Object theElement;
	   ListItem next;
       }

Em geral a melhor solução é usar uma classe auxiliar, como ListItem,
para encadear os elementos de uma lista ligada. Dessa forma sua lista
ligada fica completamente genérica: ela é uma lista de Objects e não
uma lista de Pages. A única desvantagem dessa solução é termos que
instanciar um novo ListElement a cada inserção de um elemento na lista.

Como as operações pin/unpin são chamadas muito frequentemente e como a
criação de objetos (operação new) é relativamente custosa em Java, minha
recomendação é optar, _neste_caso_particular_, por uma solução mais
eficiente (porém menos limpa) e colocar o campo next na própria classe
Page. Note que esta não é uma recomendação geral e sim uma recomendação
voltada para uma situação bem específica. São raras as situações em que
vale a pena implementar uma lista ligada ou uma tabela de hash em Java
(as classes genéricas do JDK são perfeitamente adequadas para a grande
maioria dos casos). Esta é uma dessas situações. 

Agora a questão B. Se, na questão A, tivéssemos optado pela solução mais
limpa, é claro que deveríamos ter uma classe separada para a lista
ligada. Essa classe poderia ser completamente genérica (lista ligada de
Objects, encadeados através de ListElements auxiliares).

Dado que vamos colocar o campo next na classe Page, nossa lista ligada
não vai ser muito geral. Ela vai ser uma lista ligada de Pages, não de
Objects. Mas mesmo assim podemos ter uma classe separada implementando a
lista ligada de Pages! Essa classe seria a única a manipular o campo
next dos objetos Page. Dessa maneira podemos evitar que nossa opção pela
eficiência introduza "sujeira" em todo o código do gerenciador de
buffers. 

Reverbel