00001 package plp.orientadaObjetos1.expressao.valor; 00002 00003 import plp.orientadaObjetos1.excecao.declaracao.ClasseNaoDeclaradaException; 00004 import plp.orientadaObjetos1.memoria.AmbienteCompilacaoOO1; 00005 import plp.orientadaObjetos1.memoria.AmbienteExecucaoOO1; 00006 import plp.orientadaObjetos1.util.Tipo; 00007 import plp.orientadaObjetos1.util.TipoPrimitivo; 00011 public class ValorRef implements Valor{ 00015 public static final int VALOR_INICIAL = 0; 00019 private int valor; 00024 public ValorRef(int valor){ 00025 if ( valor >= ValorRef.VALOR_INICIAL){ 00026 this.valor = valor; 00027 } 00028 else this.valor = VALOR_INICIAL; 00029 } 00030 00035 public int valor() { 00036 return valor; 00037 } 00043 public Valor avaliar(AmbienteExecucaoOO1 ambiente) throws ClasseNaoDeclaradaException { 00044 return this; 00045 } 00046 00047 //Os métodos getTipo e checaTipo de ValorRef 00048 //não foram utilizados nessa linguagem. 00049 public int hashCode() { 00050 return valor; 00051 } 00057 public Tipo getTipo(AmbienteCompilacaoOO1 amb) { 00058 return TipoPrimitivo.TIPO_INTEIRO; 00059 } 00065 public boolean checaTipo(AmbienteCompilacaoOO1 amb) { 00066 return true; 00067 } 00073 public boolean equals(Valor val){ 00074 if ( val instanceof ValorRef) 00075 return valor == ((ValorRef)val).valor(); 00076 else return false; 00077 } 00078 00083 public ValorRef incrementa(){ 00084 valor = valor + 1; 00085 return this; 00086 } 00087 }