MVC e projeto integrador

Separar regras, apresentação e ações, seguindo um movimento completo e os seus testes.

TLDR

Perguntar sobre esta página

ChatGPTClaudePerplexityGrokGeminiCopiar e abrirDeepSeekCopiar e abrir

Papéis

PapelGuardaNão faz
ModelEstado e invariantes, como limites 0 a 4.Nada de Swing ou terminal.
ViewApresenta estado, encaminha eventos.Não valida movimentos.
ControllerInterpreta ação, pede ao modelo, coordena vista.Não inventa estado.
MontagemEscolhe implementações e liga objetos.Não decide regras.

Variante desta página: controlador atualiza a vista; alternativa usa Observer do modelo para a vista.

Mostrar o estado aceite

Arena 0 a 4, herói em 2:

AntesPedidoDestinoAceite?Mostrado
2+13Sim3
3+25Não3
3-12Sim2
void mover(int deslocamento) {
    modelo.mover(deslocamento);
    vista.mostrar(modelo.getX());
}

Ler getX() depois da tentativa mostra o aceite, nunca o pedido. (long) x + deslocamento evita overflow antes de validar. Listener Swing só encaminha:

somar.addActionListener(evento -> controlador.mover(1));

O listener curto corre na EDT; o trabalho demorado usa worker e regressa à EDT. Implementação completa.

Testar e integrar

  • Modelo sem janela: construção inválida, aceites, ambos os limites, deslocamentos extremos. Recusa conserva a posição.
  • Controlador com vista em memória: de 4, pede +1, espera 4. Só a recusa distingue destino pedido de estado aceite.
  • Vista: tradução e eventos enviados. Depois, a ligação inteira.
  • assertEquals no JUnit; assert de Java exige -ea.
  • Uma funcionalidade completa primeiro; contratos combinados antes de dividir trabalho; integra cedo. Padrões só perante a variação que resolvem; relatório justifica com código e comportamento preservado.

À tua maneira

Aparência

Modo de cor
Tema
Cor de destaque

Leitura

Fonte de leitura

Álgebra, lógica e uma ideia de cada vez.

Código

Fonte do código

Navegação

Cursor de leitura, sem edição. h, j, k, l movem; / pesquisa nesta página. v seleciona caracteres; V seleciona linhas; y copia. Tab permite destacar ou comentar. Espaço ou Enter abre blocos recolhíveis. Nos cartões, h, j, k, l mudam o foco.

CSS personalizado

Ativa uma sugestão ou guarda o teu CSS. Só muda este navegador.

Usa --page, --text e --accent para acompanhar o tema.

Seletores e recuperação

.site-header, .prose, .course-card, [data-reading-history], [data-playground] e .page-actions.

Abre a aparência com a tecla vírgula ou no rodapé. Se o CSS esconder os controlos, abre esta página sem CSS personalizado.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

Copiar fórmula

A cópia automática não está disponível. Copia o LaTeX abaixo.

Pesquisar nesta página

Enter procura · n / N repetem · Esc cancela. Ctrl / Cmd K pesquisa todo o site.

Atalhos de teclado

Clica numa tecla para a mudar. Esc cancela. Backspace desativa.

PesquisarCtrl / Cmd K

Os atalhos não interferem enquanto escreves. Tab e Enter funcionam sempre.