New.java

Go to the documentation of this file.
00001 package plp.orientadaObjetos1.comando;
00002 
00003 /*
00004  * A execucao de um comando ocorre em um determinado ambiente. O
00005  * resultado de tal execucao é a modificação deste ambiente, i.e., comandos
00006  * tem efeito colateral.
00007  */
00008 import plp.expressions2.memory.VariavelJaDeclaradaException;
00009 import plp.expressions2.memory.VariavelNaoDeclaradaException;
00010 import plp.orientadaObjetos1.declaracao.variavel.DecVariavel;
00011 import plp.orientadaObjetos1.excecao.declaracao.ClasseJaDeclaradaException;
00012 import plp.orientadaObjetos1.excecao.declaracao.ClasseNaoDeclaradaException;
00013 import plp.orientadaObjetos1.excecao.declaracao.ObjetoJaDeclaradoException;
00014 import plp.orientadaObjetos1.excecao.declaracao.ObjetoNaoDeclaradoException;
00015 import plp.orientadaObjetos1.expressao.leftExpression.Id;
00016 import plp.orientadaObjetos1.expressao.leftExpression.LeftExpression;
00017 import plp.orientadaObjetos1.expressao.valor.ValorRef;
00018 import plp.orientadaObjetos1.memoria.AmbienteCompilacaoOO1;
00019 import plp.orientadaObjetos1.memoria.AmbienteExecucaoOO1;
00020 import plp.orientadaObjetos1.memoria.ContextoExecucaoOO1;
00021 import plp.orientadaObjetos1.memoria.DefClasse;
00022 import plp.orientadaObjetos1.memoria.Objeto;
00023 import plp.orientadaObjetos1.util.TipoClasse;
00024 
00028 public class New implements Comando{
00032     private LeftExpression av;
00036     private Id classe;
00042     public New(LeftExpression av, Id classe){
00043           this.av = av;
00044           this.classe = classe;
00045     }
00052     public AmbienteExecucaoOO1 executar(AmbienteExecucaoOO1 ambiente)    throws VariavelJaDeclaradaException,
00053           VariavelNaoDeclaradaException,
00054           ClasseJaDeclaradaException, ClasseNaoDeclaradaException,
00055           ObjetoJaDeclaradoException,ObjetoNaoDeclaradoException{
00056 
00057           DefClasse defClasse = ambiente.getDefClasse(classe);
00058           DecVariavel decVariavel = defClasse.getDecVariavel();
00059           AmbienteExecucaoOO1 aux = decVariavel.elabora(new ContextoExecucaoOO1(ambiente));
00060           Objeto objeto = new Objeto(classe, aux.getContextoIdValor());
00061           ValorRef vr = ambiente.getProxRef();
00062           ambiente.mapObjeto(vr, objeto);
00063           ambiente = new Atribuicao(av,vr).executar(ambiente);
00064           return ambiente;
00065     }
00066 
00073     public boolean checaTipo(AmbienteCompilacaoOO1 ambiente) throws VariavelNaoDeclaradaException,
00074       ClasseJaDeclaradaException, ClasseNaoDeclaradaException {
00075           TipoClasse tpClasse = new TipoClasse(classe);
00076           return av.checaTipo(ambiente) &&
00077             tpClasse.eValido(ambiente) &&
00078             tpClasse.equals(av.getTipo(ambiente));
00079     }
00080 }

Generated on Tue Sep 12 21:52:07 2006 for PLP by  doxygen 1.4.7