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

Re: Retornando uma 'coisa' (sobre o EP).



Oi Tiago, oi pessoal,

>     Estou com uma dúvida que não sei se conseguirei ser claro. O
> problema é o seguinte: imaginem uma situação onde quero abrir uma
> porta. Estou em um 'lugar' onde 'porta' é uma das 'coisas' deste
> 'lugar'. A minha 'porta' é uma instância de uma classe Porta que extende
> a classe Coisa. Tenho um método definido para o 'lugar' onde estou, que
> me devolve esta 'coisa'. No caso, assim:
> 
> public Coisa pegaCoisa(String nomeCoisa) {
>     return (Coisa)coisas.get(nomeCoisa);
> }
> 
> No momento em que irei interpretar o comando do usuário onde ele quis
> 'abrir' a 'porta', vou procurar na classe 'porta' se ela possui tal
> método. Encontrando, executo-o. Isto é fácil quando sei que a 'coisa' é
> uma 'porta'. Porém se eu fizer uma verificação para cada tipo de coisa,
> o programa ficará enorme. Minha idéia era pegar a Coisa, com a função
> acima, e tendo ela, verificar se ela possui o método-ação que desejo
> executar, e se tiver, executá-lo. Aí acontece o grande problema. Para
> 'mecher' nesta coisa, usaria:
> 
> Coisa coisa = (Coisa)lugar.pegaCoisa(nomeCoisa);
> if(coisa.acoes.containsKey(acao);
> coisa.acao();
> 
> Porém, como esta acao pode estar somente definida para a classe Porta,
> que extende a classe Coisa, ele nunca vai achar!! =(

Acho que vc nao precisa se preocupar em saber qual o objeto que vc estah
querendo pegar jah que, por exemplo, no caso da porta o metodo
containsKey() retorna false quando vc tentar executar uma acao nao
possivel (pelo que eu entendi o containsKey() retorna true caso exista a
acao no Map das acoes possiveis). Basta vc tratar o caso onde o resultado
deste metodo for false.

Exemplo:

Coisa coisa = (Coisa)lugar.pegaCoisa(nomeCoisa);

if(coisa.acoes.containsKey(acao))
   coisa.acao()
else
   System.out.println("Impossivel executar esta acao\n");

> Como fazer para pegar uma 'Coisa' e 'mecher' nela sabendo que ela é uma
> 'Porta', por exemplo? Descobrir que Coisa é essa para então conseguir
> mecher nela corretamente?

Vc pode criar um metodo que retorna o nome da coisa, e entao vc poderia
tratar cada caso. Mas eu acho desnecessario, pois acredito que o codigo
acima jah resolve seu problema.

> Se não fui mto claro tento repitir a pergunta. 
> Desde já agradecido,
> Tiago Motta Jorge.

Espero que seja esta a sua duvida. Qualquer coisa, envie outro email.

Ateh mais,

Demerson Polli
---------------------------------------------------
 Demerson Andre Polli

 Instituto de Matematica e Estatistica - USP

 Home-page: http://www.linux.ime.usp.br/~polli
    E-mail: polli@linux.ime.usp.br
---------------------------------------------------