00001 package plp.orientadaObjetos1.declaracao.classe; 00002 00003 import plp.orientadaObjetos1.declaracao.procedimento.DecProcedimento; 00004 import plp.orientadaObjetos1.declaracao.variavel.DecVariavel; 00005 import plp.orientadaObjetos1.excecao.declaracao.ClasseJaDeclaradaException; 00006 import plp.orientadaObjetos1.excecao.declaracao.ClasseNaoDeclaradaException; 00007 import plp.orientadaObjetos1.excecao.declaracao.ProcedimentoJaDeclaradoException; 00008 import plp.orientadaObjetos1.excecao.declaracao.ProcedimentoNaoDeclaradoException; 00009 import plp.orientadaObjetos1.excecao.declaracao.VariavelJaDeclaradaException; 00010 import plp.orientadaObjetos1.excecao.declaracao.VariavelNaoDeclaradaException; 00011 import plp.orientadaObjetos1.expressao.leftExpression.Id; 00012 import plp.orientadaObjetos1.memoria.AmbienteCompilacao; 00013 import plp.orientadaObjetos1.memoria.AmbienteExecucao; 00014 import plp.orientadaObjetos1.memoria.DefClasse; 00015 import plp.orientadaObjetos1.util.TipoClasse; 00019 public class DecClasseSimples implements DecClasse { 00023 protected Id nomeClasse; 00027 protected DecVariavel atributos; 00031 protected 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 AmbienteExecucao elabora(AmbienteExecucao ambiente) 00051 throws ClasseJaDeclaradaException, ClasseNaoDeclaradaException { 00052 00053 ambiente.mapDefClasse(nomeClasse, new DefClasse(atributos,metodos)); 00054 return ambiente; 00055 } 00056 00065 public boolean checaTipo(AmbienteCompilacao ambiente) 00066 throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException, 00067 ClasseJaDeclaradaException, ClasseNaoDeclaradaException, 00068 ProcedimentoNaoDeclaradoException, ProcedimentoJaDeclaradoException { 00069 00070 ambiente.mapDefClasse(nomeClasse, new DefClasse(atributos,metodos)); 00071 boolean resposta = false; 00072 ambiente.incrementa(); 00073 if (atributos.checaTipo(ambiente)){ 00074 ambiente.mapTipo(new Id("this"), new TipoClasse(nomeClasse)); 00075 resposta = metodos.checaTipo(ambiente); 00076 } 00077 ambiente.restaura(); 00078 return resposta; 00079 } 00080 }