00001 package plp.orientadaObjetos1.expressao; 00002 00003 import plp.orientadaObjetos1.excecao.declaracao.VariavelJaDeclaradaException; 00004 import plp.orientadaObjetos1.excecao.declaracao.VariavelNaoDeclaradaException; 00005 import plp.orientadaObjetos1.expressao.leftExpression.Id; 00006 import plp.orientadaObjetos1.expressao.valor.Valor; 00007 import plp.orientadaObjetos1.memoria.AmbienteCompilacao; 00008 import plp.orientadaObjetos1.memoria.AmbienteExecucao; 00009 import plp.orientadaObjetos1.util.Tipo; 00010 00014 public class This implements Expressao{ 00025 public Valor avaliar(AmbienteExecucao ambiente) 00026 throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException{ 00027 return obterValorDoObjetoThisNoAmbiente(ambiente); 00028 } 00038 public boolean checaTipo(AmbienteCompilacao ambiente) 00039 throws VariavelNaoDeclaradaException{ 00040 //Como sempre há uma classe instanciada em orientacao a objeto 00041 //o checaTipo() de this retorna true 00042 return true; 00043 } 00052 public Tipo getTipo(AmbienteCompilacao ambiente) 00053 throws VariavelNaoDeclaradaException{ 00054 return ambiente.getTipo(new Id("this")); 00055 } 00056 00062 private Valor obterValorDoObjetoThisNoAmbiente(AmbienteExecucao ambiente) 00063 throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException { 00064 return ambiente.getValor(new Id("this")); 00065 } 00066 }