Orientação a Objeto - Visibilidade

Objetivos da seção

Escopo de variáveis

9parts.gif (8805 bytes)

Encapsulação

Encapsulação e métodos "accessor" get/set

public class Semaforo {
  public static final int VERMELHO = 0;
  public static final int AMARELO = 1;
  public static final int VERDE = 2;

  private int corAtual;

  public Semaforo() {
    this(VERMELHO);
  }

  public Semaforo(int cor) {
    corAtual = cor;
  }

  public void muda() {
    switch(corAtual) {
    case VERMELHO:
      corAtual = VERDE;
      break;
    case AMARELO:
      corAtual = VERMELHO;
      break;
    case VERDE:
      corAtual = AMARELO;
      break;
    }
  }

  public int getCorAtual() {
    return corAtual;
  }

  private static String[] nomeCor = {"VERMELHO", "AMARELO", "VERDE" };
  public String getNomeCorAtual() {
    return nomeCor[getCorAtual()];
  }

  public String toString() {
    return "semaforo esta " + getNomeCorAtual();
  }
}

Especificadores de controle de acesso

A visibilidade public

A visibilidade private

A visibilidade protected

Packages

A visibilidade "package"

Um exemplo

public class Agencia {
  ...
  /**
   * Fecha uma conta.
   * @param número O número da conta a fechar.
   * @throws NaoPodeFecharContaException se a conta não existir ou tiver saldo
   */
  /* observe visibilidade "package": tem que fechar a partir de fechar() da conta */
  static void fecharConta(int número) throws NaoPodeFecharContaException {
    abrirCaixa();
    Conta c = localizarConta(número);
    if(c == null) {
      throw new NaoPodeFecharContaException(c, "Conta nao existe");
    }
    if(c.getSaldo() != 0.0) {
      throw new NaoPodeFecharContaException(c, "Saldo nao esta zerado");
    }
    contas.remove(Integer.toString(número));
    // tem que repensar o fechamento de contas porque
    // do jeito que esta, nao some do arquivo agencia.txt
  }
  ...
}

oo-8 programa anterior próxima