17 Projeto final: TutorJavaBot
Uma entrega integrada, testável e evolutiva
17.1 Objetivo
Construir um chatbot de console que aplique os fundamentos e as decisões de design estudadas. A entrega deve funcionar, comunicar erros de forma clara e permitir a adição de comandos sem alterar o núcleo do processador.
17.2 Requisitos obrigatórios
O programa deve:
- executar em Java 21 ou superior;
- permanecer ativo até o comando
sair; - reconhecer
oi,ajuda,dica,quiz,historicoesair; - normalizar espaços e diferenças entre maiúsculas e minúsculas;
- rejeitar entrada vazia sem registrá-la;
- guardar interações em memória;
- salvar o histórico em UTF-8 ao encerrar;
- tratar falha de entrada e saída sem encerrar abruptamente;
- impedir comandos duplicados;
- passar pelos testes e pelo roteiro manual do capítulo anterior.
17.3 Arquitetura recomendada
Responsabilidades:
AplicacaoConsole: entrada, saída e ciclo de vida;TutorJavaBot: coordena processamento e histórico;RegistroComandos: registra e localiza comandos;Comando: contrato polimórfico;Historico: registra, consulta e salva interações.
Não crie classes apenas para aumentar a quantidade de arquivos. Cada separação deve reduzir uma responsabilidade real.
17.4 Contrato dos comandos
| Comando | Resposta ou efeito |
|---|---|
oi |
apresentação do bot |
ajuda |
lista obtida do próprio registro |
dica |
dica de Java |
quiz |
pergunta e validação de resposta |
historico |
últimas interações, sem registrar a consulta |
sair |
encerra e tenta salvar o histórico |
| desconhecido | orienta a usar ajuda |
Defina “interação” como um par formado pela entrada processada e pela resposta. Essa definição deve ser usada no contador, no histórico e nos testes.
17.5 Roteiro de implementação
17.5.1 Etapa 1 — domínio mínimo
Implemente Historico e seus testes:
- rejeitar entrada vazia;
- registrar duas linhas por interação;
- devolver cópia somente para leitura;
- calcular total corretamente.
17.5.2 Etapa 2 — comandos
Implemente a interface:
Crie uma classe por comando quando houver regra própria. Registre as implementações em Map<String, Comando>.
17.5.3 Etapa 3 — coordenação
TutorJavaBot normaliza a entrada, consulta o registro e grava o resultado. Console e arquivos não devem aparecer dentro das implementações de comandos simples.
17.5.4 Etapa 4 — persistência
Use Files.write ou Files.writeString e propague IOException até a fronteira da aplicação. O console decide qual mensagem mostrar.
17.5.5 Etapa 5 — validação
Execute:
Depois, percorra os casos manuais abaixo.
17.6 Roteiro de aceitação
- Inicie o programa e digite
AJUDA. - Execute
oi,dicae um comando desconhecido. - Pressione Enter sem texto.
- Consulte
historico. - Execute
quizcom resposta correta e incorreta. - Digite
SAIR. - Abra o arquivo gerado e compare-o com as interações mostradas.
A entrada vazia, a consulta ao histórico e o comando de saída não devem aumentar o total de interações.
17.7 Critérios de avaliação
| Critério | Peso |
|---|---|
| comportamento e contrato dos comandos | 30% |
| organização e encapsulamento | 20% |
| tratamento de erros e persistência | 15% |
| testes automatizados | 15% |
| legibilidade e nomes | 10% |
| experiência no console | 10% |
17.8 Exemplo de referência
Uma implementação completa, sem bibliotecas externas, está em examples/src/Capitulo16Projeto.java. Leia-a depois de concluir sua primeira versão e compare decisões, não apenas linhas.
17.9 Evoluções opcionais
- carregar perguntas de quiz de um arquivo;
- persistir data e hora de cada interação;
- migrar os testes para JUnit;
- criar interface gráfica com JavaFX;
- expor o processador por uma API;
- integrar um modelo de linguagem atrás de uma nova implementação de
Comando.
Cada evolução deve começar com um contrato e um teste. Recursos externos não devem comprometer o funcionamento básico do chatbot.
A entrega está pronta quando compila do zero, passa pelos testes, completa o roteiro de aceitação e pode receber um novo comando sem editar o processador central.