public class UmaPilha {
  private UmaCelula topo;

  // O contrutor da classe.
  public UmaPilha () {
    topo = null; // a pilha inicialmente esta vazia
  }

  public boolean pilhaVazia () {
    return topo == null;
  }

  public void empilha (UmaInfo info) throws MinhaExcecao {
    try {
      topo = new UmaCelula (info, topo); 
    }
    catch (java.lang.OutOfMemoryError e) {
      throw new MinhaExcecao("Overflow: acabou a memoria");
    }
  }

  public void desempilha () throws MinhaExcecao {
    if (pilhaVazia()) // (topo == null) 
      throw new MinhaExcecao("Underflow: desempilha");
    else
      topo = topo.retorneProx();
  }

  public UmaInfo retorneTopo () throws MinhaExcecao {
    if (pilhaVazia())  
      throw new MinhaExcecao("Underflow: retorneTopo");
    else
      return topo.retorneInfo();
  }
  
}
