package loo1.plp.orientadaObjetos1.declaracao.classe; import loo1.plp.expressions2.memory.VariavelJaDeclaradaException; import loo1.plp.expressions2.memory.VariavelNaoDeclaradaException; import loo1.plp.orientadaObjetos1.excecao.declaracao.ClasseJaDeclaradaException; import loo1.plp.orientadaObjetos1.excecao.declaracao.ClasseNaoDeclaradaException; import loo1.plp.orientadaObjetos1.excecao.declaracao.ProcedimentoJaDeclaradoException; import loo1.plp.orientadaObjetos1.excecao.declaracao.ProcedimentoNaoDeclaradoException; import loo1.plp.orientadaObjetos1.memoria.AmbienteCompilacaoOO1; import loo1.plp.orientadaObjetos1.memoria.AmbienteExecucaoOO1; /** * Classe representando a declara��o de mais de uma classe. */ public class DecClasseComposta implements DecClasse{ /** * Primeira declara��o de classe. */ private DecClasse declaracao1; /** * Segunda declara��o de classe, que pode ser simples ou composta. */ private DecClasse declaracao2; /** * Construtor. * @param parametro1 Primeira declara��o de classe. * @param parametro2 Segunda parte da declara��o de classe composta. */ public DecClasseComposta(DecClasse declaracao1, DecClasse declaracao2){ this.declaracao1 = declaracao1; this.declaracao2 = declaracao2; } /** * Cria um mapeamento do identificador para esta declara��o * de classe no ambiente de execucao * @param ambiente o ambiente que contem o mapeamento entre identificadores * e valores. * @return o ambiente modificado pela inicializa��o da classe. */ public AmbienteExecucaoOO1 elabora(AmbienteExecucaoOO1 ambiente) throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException, ClasseNaoDeclaradaException, ClasseJaDeclaradaException, ProcedimentoNaoDeclaradoException,ProcedimentoJaDeclaradoException{ return declaracao2.elabora(declaracao1.elabora(ambiente)); } /** * Verifica se a declara��o est� bem tipada, ou seja, se as duas * declara��es est�o bem tipadas * @param ambiente o ambiente que contem o mapeamento entre identificadores * e seus tipos. * @return true se os tipos da declara��o s�o v�lidos; * false caso contrario. */ public boolean checaTipo(AmbienteCompilacaoOO1 ambiente) throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException, ClasseJaDeclaradaException, ClasseNaoDeclaradaException, ProcedimentoNaoDeclaradoException,ProcedimentoJaDeclaradoException{ return declaracao1.checaTipo(ambiente) && declaracao2.checaTipo(ambiente); } }