Skip to content

Commit

Permalink
feat (jupyter / lab): exception lab
Browse files Browse the repository at this point in the history
  • Loading branch information
santanche committed Jun 16, 2020
1 parent d88a018 commit 3ec83e6
Show file tree
Hide file tree
Showing 68 changed files with 267 additions and 0 deletions.
File renamed without changes.
267 changes: 267 additions & 0 deletions notebooks/pt/c02oo-java/s14exception/excecoes-jogo.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,267 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Exception\n",
"\n",
"# Tarefa\n",
"\n",
"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.\n",
"\n",
"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.\n",
"\n",
"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."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Modelo do Plano de Exceções\n",
"\n",
"## Diagrama da hierarquia de exceções\n",
"`<Elabore um diagrama com a hierarquia de exceções como detalhado abaixo>`\n",
"\n",
"![Hierarquia Exceções](exception-hierarchy.png)\n",
"\n",
"## Descrição das classes de exceção\n",
"\n",
"`<Monte uma tabela descritiva seguindo o exemplo>:`\n",
"\n",
"Classe | Descrição\n",
"----- | -----\n",
"DivisaoInvalida | Engloba todas as exceções de divisões não aceitas.\n",
"DivisaoInutil | Indica que a divisão por 1 é inútil.\n",
"DivisaoNaoInteira | Indica uma divisão não inteira.\n",
"\n",
"## Testes da Hierarquia de Exceções\n",
"\n",
"Monte um código que teste a sua hierarquia exceções (todas elas) conforme o exemplo a seguir."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"com.twosigma.beaker.javash.bkrdb57d720.DivisaoInvalida"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"public class DivisaoInvalida extends Exception {\n",
" public DivisaoInvalida() {\n",
" super();\n",
" }\n",
"\n",
" public DivisaoInvalida(String message) {\n",
" super(message);\n",
" }\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"com.twosigma.beaker.javash.bkrdb57d720.DivisaoInutil"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"public class DivisaoInutil extends DivisaoInvalida {\n",
" public DivisaoInutil() {\n",
" super();\n",
" }\n",
"\n",
" public DivisaoInutil(String message) {\n",
" super(message);\n",
" }\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"com.twosigma.beaker.javash.bkrdb57d720.DivisaoNaoInteira"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"public class DivisaoNaoInteira extends DivisaoInvalida {\n",
" public DivisaoNaoInteira() {\n",
" super();\n",
" }\n",
"\n",
" public DivisaoNaoInteira(String message) {\n",
" super(message);\n",
" }\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"com.twosigma.beaker.javash.bkrdb57d720.Util"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"public class Util {\n",
" public static int divide(int x, int y) throws DivisaoInvalida {\n",
" int divisao;\n",
" if (y == 1)\n",
" throw new DivisaoInutil(\"Esta divisao eh inutil\");\n",
" if (x%y > 0)\n",
" throw new DivisaoNaoInteira(\"Esta divisao nao eh inteira\");\n",
" divisao = x / y;\n",
" return divisao;\n",
" }\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"=== Primeiro teste\n",
"Resultado da divisao: 4\n",
"=== Segundo teste\n",
"Esta divisao eh inutil\n",
"=== Terceiro teste\n",
"Esta divisao nao eh inteira\n",
"=== Quarto teste\n",
"Ocorreu um erro nao esperado na divisao\n",
"--> Esta divisao nao eh inteira\n"
]
},
{
"data": {
"text/plain": [
"null"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"// codigo testando a Excecao criada\n",
"int numerador = 8;\n",
"int denominador = 2;\n",
"\n",
"System.out.println(\"=== Primeiro teste\");\n",
"\n",
"// testando uma divisao valida\n",
"try {\n",
" int divisao = Util.divide(numerador, denominador);\n",
" System.out.println(\"Resultado da divisao: \" + divisao);\n",
"} catch (DivisaoInvalida erro) {\n",
" System.out.println(\"Ocorreu um erro nao esperado na divisao\");\n",
" System.out.println(erro.getMessage());\n",
"} catch (Exception erro) {\n",
" System.out.println(\"Outro erro: \" + erro.getMessage());\n",
"}\n",
"\n",
"System.out.println(\"=== Segundo teste\");\n",
"\n",
"denominador = 1;\n",
"\n",
"// testando a divisao inutil\n",
"try {\n",
" int divisao = Util.divide(numerador, denominador);\n",
" System.out.println(\"Resultado da divisao: \" + divisao);\n",
"} catch (DivisaoInutil erro) {\n",
" System.out.println(erro.getMessage());\n",
"} catch (Exception erro) {\n",
" System.out.println(\"Outro erro: \" + erro.getMessage());\n",
"}\n",
"\n",
"System.out.println(\"=== Terceiro teste\");\n",
"\n",
"denominador = 3;\n",
"\n",
"// testando a divisao nao inteira\n",
"try {\n",
" int divisao = Util.divide(numerador, denominador);\n",
" System.out.println(\"Resultado da divisao: \" + divisao);\n",
"} catch (DivisaoNaoInteira erro) {\n",
" System.out.println(erro.getMessage());\n",
"} catch (Exception erro) {\n",
" System.out.println(\"Outro erro: \" + erro.getMessage());\n",
"}\n",
"\n",
"System.out.println(\"=== Quarto teste\");\n",
"\n",
"// testando a super classe\n",
"try {\n",
" int divisao = Util.divide(numerador, denominador);\n",
" System.out.println(\"Resultado da divisao: \" + divisao);\n",
"} catch (DivisaoInvalida erro) {\n",
" System.out.println(\"Ocorreu um erro nao esperado na divisao\");\n",
" System.out.println(\"--> \" + erro.getMessage());\n",
"} catch (Exception erro) {\n",
" System.out.println(\"Outro erro: \" + erro.getMessage());\n",
"}"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Java",
"language": "java",
"name": "java"
},
"language_info": {
"codemirror_mode": "text/x-java",
"file_extension": ".java",
"mimetype": "",
"name": "Java",
"nbconverter_exporter": "",
"version": "11.0.7"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 3ec83e6

Please sign in to comment.