00001 package plp.orientadaObjetos1.declaracao.variavel; 00002 00003 import plp.expressions2.memory.VariavelJaDeclaradaException; 00004 import plp.expressions2.memory.VariavelNaoDeclaradaException; 00005 import plp.orientadaObjetos1.comando.New; 00006 import plp.orientadaObjetos1.excecao.declaracao.ClasseJaDeclaradaException; 00007 import plp.orientadaObjetos1.excecao.declaracao.ClasseNaoDeclaradaException; 00008 import plp.orientadaObjetos1.excecao.declaracao.ObjetoJaDeclaradoException; 00009 import plp.orientadaObjetos1.excecao.declaracao.ObjetoNaoDeclaradoException; 00010 import plp.orientadaObjetos1.expressao.leftExpression.Id; 00011 import plp.orientadaObjetos1.expressao.valor.ValorNull; 00012 import plp.orientadaObjetos1.memoria.AmbienteCompilacaoOO1; 00013 import plp.orientadaObjetos1.memoria.AmbienteExecucaoOO1; 00014 import plp.orientadaObjetos1.util.Tipo; 00015 import plp.orientadaObjetos1.util.TipoClasse; 00016 00020 public class DecVariavelObjeto implements DecVariavel{ 00024 private Tipo tipo; 00028 private Id objeto; 00032 private Id classe; 00039 public DecVariavelObjeto(Tipo tipo, Id objeto, Id classe){ 00040 this.tipo = tipo; 00041 this.objeto = objeto; 00042 this.classe = classe; 00043 } 00044 00050 public Tipo getTipo(Id id) throws VariavelNaoDeclaradaException{ 00051 if(this.objeto.equals(id)){ 00052 return tipo; 00053 } 00054 else { 00055 throw new VariavelNaoDeclaradaException(id); 00056 } 00057 } 00058 00066 public AmbienteExecucaoOO1 elabora(AmbienteExecucaoOO1 ambiente) 00067 throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException, 00068 ClasseJaDeclaradaException, ClasseNaoDeclaradaException, 00069 ObjetoJaDeclaradoException, ObjetoNaoDeclaradoException{ 00070 AmbienteExecucaoOO1 aux = new SimplesDecVariavel(tipo, objeto, new ValorNull()).elabora(ambiente); 00071 aux = new New(objeto, classe).executar(aux); 00072 return aux; 00073 } 00074 00084 public boolean checaTipo(AmbienteCompilacaoOO1 ambiente) 00085 throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException, 00086 ClasseJaDeclaradaException, ClasseNaoDeclaradaException{ 00087 boolean resposta = false; 00088 TipoClasse tpClasse = new TipoClasse(classe); 00089 if ( tpClasse.eValido(ambiente) && tipo.eValido(ambiente) ) { 00090 resposta = tpClasse.equals(tipo); 00091 ambiente.map(objeto, tpClasse); 00092 } 00093 return resposta; 00094 } 00095 }