Exception

Tarefa

Planeje um conjunto de exceções a ser usado no jogo que está sendo desenvolvido. Isso envolve criar classes de exceções específicas para controlar falhas do jogo e montar pequenos testes ilustrativos conforme detalhado a seguir.

No exemplo a seguir, é criado um cenário de uma divisão inteira em que não é aceita uma divisão por 1, nem uma divisão que não gere um número inteiro. Note que este é um cenário fictício simplificado.

Segue abaixo o modelo de como deve ser documentado o plano de exceções. Tudo o que for indicado entre <...> indica algo que deve ser substituído pelo indicado. No modelo são colocados exemplos ilustrativos, que serão substituídos pelos do seu projeto.

Modelo do Plano de Exceções

Diagrama da hierarquia de exceções

<Elabore um diagrama com a hierarquia de exceções como detalhado abaixo>

Descrição das classes de exceção

<Monte uma tabela descritiva seguindo o exemplo>:

Classe Descrição
DivisaoInvalida Engloba todas as exceções de divisões não aceitas.
DivisaoInutil Indica que a divisão por 1 é inútil.
DivisaoNaoInteira Indica uma divisão não inteira.

Testes da Hierarquia de Exceções

Monte um código que teste a sua hierarquia exceções (todas elas) conforme o exemplo a seguir.


In [1]:
public class DivisaoInvalida extends Exception {
   public DivisaoInvalida() {
      super();
   }

   public DivisaoInvalida(String message) {
      super(message);
   }
}


Out[1]:
com.twosigma.beaker.javash.bkrdb57d720.DivisaoInvalida

In [2]:
public class DivisaoInutil extends DivisaoInvalida {
   public DivisaoInutil() {
      super();
   }

   public DivisaoInutil(String message) {
      super(message);
   }
}


Out[2]:
com.twosigma.beaker.javash.bkrdb57d720.DivisaoInutil

In [3]:
public class DivisaoNaoInteira extends DivisaoInvalida {
   public DivisaoNaoInteira() {
      super();
   }

   public DivisaoNaoInteira(String message) {
      super(message);
   }
}


Out[3]:
com.twosigma.beaker.javash.bkrdb57d720.DivisaoNaoInteira

In [4]:
public class Util {
   public static int divide(int x, int y)  throws DivisaoInvalida {
      int divisao;
      if (y == 1)
         throw new DivisaoInutil("Esta divisao eh inutil");
      if (x%y > 0)
         throw new DivisaoNaoInteira("Esta divisao nao eh inteira");
      divisao = x / y;
      return divisao;
   }
}


Out[4]:
com.twosigma.beaker.javash.bkrdb57d720.Util

In [5]:
// codigo testando a Excecao criada
int numerador = 8;
int denominador = 2;

System.out.println("=== Primeiro teste");

// testando uma divisao valida
try {
   int divisao = Util.divide(numerador, denominador);
   System.out.println("Resultado da divisao: " + divisao);
} catch (DivisaoInvalida erro) {
   System.out.println("Ocorreu um erro nao esperado na divisao");
   System.out.println(erro.getMessage());
} catch (Exception erro) {
   System.out.println("Outro erro: " + erro.getMessage());
}

System.out.println("=== Segundo teste");

denominador = 1;

// testando a divisao inutil
try {
   int divisao = Util.divide(numerador, denominador);
   System.out.println("Resultado da divisao: " + divisao);
} catch (DivisaoInutil erro) {
   System.out.println(erro.getMessage());
} catch (Exception erro) {
   System.out.println("Outro erro: " + erro.getMessage());
}

System.out.println("=== Terceiro teste");

denominador = 3;

// testando a divisao nao inteira
try {
   int divisao = Util.divide(numerador, denominador);
   System.out.println("Resultado da divisao: " + divisao);
} catch (DivisaoNaoInteira erro) {
   System.out.println(erro.getMessage());
} catch (Exception erro) {
   System.out.println("Outro erro: " + erro.getMessage());
}

System.out.println("=== Quarto teste");

// testando a super classe
try {
   int divisao = Util.divide(numerador, denominador);
   System.out.println("Resultado da divisao: " + divisao);
} catch (DivisaoInvalida erro) {
   System.out.println("Ocorreu um erro nao esperado na divisao");
   System.out.println("--> " + erro.getMessage());
} catch (Exception erro) {
   System.out.println("Outro erro: " + erro.getMessage());
}


=== Primeiro teste
Resultado da divisao: 4
=== Segundo teste
Esta divisao eh inutil
=== Terceiro teste
Esta divisao nao eh inteira
=== Quarto teste
Ocorreu um erro nao esperado na divisao
--> Esta divisao nao eh inteira
Out[5]:
null