package loo1.plp.orientadaObjetos1.declaracao.procedimento; import loo1.plp.expressions2.memory.VariavelJaDeclaradaException; import loo1.plp.expressions2.memory.VariavelNaoDeclaradaException; import loo1.plp.orientadaObjetos1.comando.Procedimento; 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.expressao.leftExpression.Id; import loo1.plp.orientadaObjetos1.memoria.AmbienteCompilacaoOO1; /** * Classe que representa mais de uma declara��o de procedimento. */ public class DecProcedimentoComposta implements DecProcedimento{ /** * Primeira Declara��o de procedimento. */ private DecProcedimento declaracao1; /** * Restante da declara��o de procedimento composta. */ private DecProcedimento declaracao2; /** * Construtor * @param parametro1 Primeira Declara��o de procedimento. * @param parametro2 Restante da declara��o de procedimento composta. */ public DecProcedimentoComposta(DecProcedimento declaracao1, DecProcedimento declaracao2){ this.declaracao1 = declaracao1; this.declaracao2 = declaracao2; } /** * Obt�m o procedimento Obt�m o procedimento identificado por id. * @param id O identificador do procedimento. * @return o procedimento Obt�m o procedimento identificado por id. * @throws ProcedimentoNaoDeclaradoException se n�o houver * nenhum procedimento identificado por id. */ public Procedimento getProcedimento(Id id) throws ProcedimentoNaoDeclaradoException { Procedimento procedimento; try { procedimento = declaracao1.getProcedimento(id); } catch(ProcedimentoNaoDeclaradoException e) { procedimento = declaracao2.getProcedimento(id); } return procedimento; } /** * Verifica se a declara��o est� bem tipada, ou seja, se a * express�o de inicializa��o est� bem tipada. * @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, ProcedimentoJaDeclaradoException, ProcedimentoNaoDeclaradoException, ClasseNaoDeclaradaException,ClasseJaDeclaradaException{ return declaracao1.checaTipo(ambiente) && declaracao2.checaTipo(ambiente); } }