00001 package plp.orientadaObjetos1.declaracao.classe; 00002 00003 import plp.expressions2.memory.VariavelJaDeclaradaException; 00004 import plp.expressions2.memory.VariavelNaoDeclaradaException; 00005 import plp.orientadaObjetos1.declaracao.procedimento.DecProcedimento; 00006 import plp.orientadaObjetos1.declaracao.variavel.DecVariavel; 00007 import plp.orientadaObjetos1.excecao.declaracao.ClasseJaDeclaradaException; 00008 import plp.orientadaObjetos1.excecao.declaracao.ClasseNaoDeclaradaException; 00009 import plp.orientadaObjetos1.excecao.declaracao.ProcedimentoJaDeclaradoException; 00010 import plp.orientadaObjetos1.excecao.declaracao.ProcedimentoNaoDeclaradoException; 00011 import plp.orientadaObjetos1.expressao.leftExpression.Id; 00012 import plp.orientadaObjetos1.memoria.AmbienteCompilacaoOO1; 00013 import plp.orientadaObjetos1.memoria.AmbienteExecucaoOO1; 00014 import plp.orientadaObjetos1.memoria.DefClasse; 00015 import plp.orientadaObjetos1.util.TipoClasse; 00019 public class DecClasseSimples implements DecClasse { 00023 private Id nomeClasse; 00027 private DecVariavel atributos; 00031 private DecProcedimento metodos; 00038 public DecClasseSimples(Id nomeClasse, DecVariavel atributos, DecProcedimento metodos){ 00039 this.nomeClasse = nomeClasse; 00040 this.atributos = atributos; 00041 this.metodos = metodos; 00042 } 00043 00050 public AmbienteExecucaoOO1 elabora(AmbienteExecucaoOO1 ambiente) 00051 throws ClasseJaDeclaradaException, ClasseNaoDeclaradaException { 00052 00053 ambiente.mapDefClasse(nomeClasse, new DefClasse(atributos,metodos)); 00054 return ambiente; 00055 } 00064 public boolean checaTipo(AmbienteCompilacaoOO1 ambiente) 00065 throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException, 00066 ClasseJaDeclaradaException, ClasseNaoDeclaradaException, 00067 ProcedimentoNaoDeclaradoException, ProcedimentoJaDeclaradoException { 00068 00069 ambiente.mapDefClasse(nomeClasse, new DefClasse(atributos,metodos)); 00070 boolean resposta = false; 00071 ambiente.incrementa(); 00072 if (atributos.checaTipo(ambiente)){ 00073 ambiente.map(new Id("this"), new TipoClasse(nomeClasse)); 00074 resposta = metodos.checaTipo(ambiente); 00075 } 00076 ambiente.restaura(); 00077 return resposta; 00078 } 00079 }