Dúvida sobre Objetos

5 respostas
I

Essa “lista” é um TAD (Tipo Abstrato de Dados).
E ela pode ser implementada em várias linguagens.
Ela é baseada em “chave única”, ou seja, cada elemento
terá um número que o identificará.
Ela só usa alocação de memória dinâmica.
Não usa mais nenhuma classe java.

Eu não coloco o código fonte aqui pois ele é muito grande.

Os métodos são:

inserirFinalDaLista(Obj)
inserirInicioDaLista(Obj)
inserirEmDeterminadaPosicao(Obj, Posicao)
inserirAntesDoElementoTal(Obj, Obj)
inserirDepoisDoElementoTal(Obj,Obj)
inserirOrdenado(Obj)

excluirPrimeiro
excluirUltimo
excluirElementoTal
excluirDaPosicaoTal

cursorVaParaPrimeiro
cursorVaParaUltimo
cursorAvancar
cursorRetroceder

buscaElementoComListaOrdenada(chave)
buscaElementoNaoOrdenado(chave)
buscaPosicaoDeUmElemento(chave)

Resumindo:

public class ListaEncadeada {

}

(é a classe que eu descrevi acima.)

Essa classe deve servir pra fazer diversos tipos de listas.
Sem que seu código fonte seja editado.

Se eu quizer criar uma lista de aluno, eu consigo.
Se eu quizer criar uma lista de professores, eu consigo.
Somente criando outras classes e fazendo uso dessa classe ListaEncadeada.
Ex: class Aluno / class Professores / etc…

A classe ListaEncadeada possue métodos que necessitam acessar
métodos de outras classes. Então através do conceito de “interface java” eu consigo garantir que estes métodos estejam presentes nestas classes.

Que métodos são esses?

  • setChaveUnica // seta chave para um objeto*
  • getChaveUnica // pega a chave do objeto*

*Essencial para busca na lista.

Então agora que vamos a minha dúvida!

Eu possuo uma classe aluno, esta classe efetua o cadastro do aluno,
digamos que ela faz o seguinte:

…nome / idade / chave
Aluno umAluno = new Aluno (Rodrigo, 18 , 12345)

Então na classe ListaEncadeada


public void insereNoFinal (Aluno umAluno) {
}

Ou seja ela recebe o obj umAluno coloca ele na lista.

Porém, se eu decidir criar uma lista de professores?

…nome / idade / chave
Professor umProfessor = new Professor (Rafael, 55 , 13543)


public void insereNoFinal (Professor umProfessor) {
}

Ou seja, eu tenho que dar um jeito para que indepentende do
tipo de objeto que a lista receba, ele insira o elemento na lista.

Algo genérico deste tipo:


public void insereNoFinal (Object objQualquer) {
}

Se uma classe der:

Professor umProfessor = new Professor (Rafael, 55 , 13543)
Ele vai interpretar o Object objQualquer como Professor umProfessor,
e vai adicionar na lista.

Aluno umAluno = new Aluno (Rodrigo, 18 , 12345)
Ele vai interpretar o Object objQualquer como Aluno umAluno,
e vai adicionar na lista.

E nessa classe ListaEncadeada eu também utilizo métodos desse tipo:
objQualquer.getChave() deve referenciar à umAluno.getChave();

objQualquer.getChave() deve referenciar à umProfessor.getChave();

// Métodos necessários para comparar a chave que o usuário procura, com a chave única de cada elemento.

Obs: Eu não usarei dois tipos diferentes de objetos juntos, como misturar professores e alunos na mesma lista. Esta classe ira para programas diferentes. Porém, o professor quer que a classe ListaEncadeada seja identica para os dois.

Acho que não tenho como ser mais detalhista do que isto.
Se alguém tiver alguma dúvida só perguntar.

Obrigado, desde já.

5 Respostas

W

nao entendi qual eh realmente a sua duvida…

I

A dúvida é se existe algum tipo de objeto que
possa assumir instância de qualquer classe.

ou seja…
Objeto umObjeto = Aluno umAluno (em uma situação)
Objeto umObjeto = Professor umProfessor (em outra situação).

Tem como criar esse Objeto umObjeto?

W

Para uma resposta correta essa situação demanda uma análise mais completa. A princípio penso que um decorator (http://en.wikipedia.org/wiki/Decorator_pattern) poderia lhe ajudar.

T

Vc já respondeu sua pergunta. Se todos os métodos de sua Lista só trabalharem com Objects, vc não precisará diferenciar entre Professor e Aluno. Isso é Polimorfismo…

M

Bem aceitar aceita, mas sempre é bom você definir na sua lista o tipo do objeto como abaixo:

List<Professor> lista

neste caso esta lista só aceita objetos do tipo professor, o que ajuda na prevenção de erros e na consistência dos dados.

:okok:

Criado 9 de julho de 2006
Ultima resposta 10 de jul. de 2006
Respostas 5
Participantes 5