Cheat sheet

Contratos, condições e decisões para rever Git, Java, testes, UML e desenho de aplicações.

Perguntar sobre esta página

ChatGPTClaudePerplexityGrokGeminiCopiar e abrirDeepSeekCopiar e abrir

Cada linha resume uma decisão explicada nas lições. Escolhe pela condição, confirma na ligação.

Git e Gradle

DecisãoCondição e comando
O que entra no commitadd congela o instante; sem novo add, o commit ignora a edição posterior. Confere diff --cached.
Integrar branchesAntepassado permite fast-forward; divergência combina e pode criar merge com dois pais. Integra no branch atual.
Obter ou publicarfetch sem integrar; pull --ff-only só sem divergência; push publica.
Desfazer partilhadorevert cria inversão. reset --hard destrói edição local.
Build reproduzívelWrapper no Git, ./gradlew, options.release = 8.
JUnit e execuçãouseJUnitPlatform() seleciona a plataforma; Jupiter precisa das dependências e do motor no projeto. run executa a classe principal configurada (Main no exemplo).

Áreas · Branches · Remoto · Gradle

Java: valores e tipos

DecisãoCondição
Passagem de argumentosPor valor, incluindo referências. Mutar partilha-se; reatribuir o parâmetro não.
Aritmética inteiraConverte para long antes de somar. byte++ converte de volta, 127 passa a -128.
finalFixa a variável, não o objeto.
Igualdade== em referências é identidade; em primitivos compara valores. equals(Object) é igualdade lógica, com @Override. Iguais partilham hashCode.
TreeSetComparação zero é duplicado. Ordena por x e depois y, com Integer.compare. Não mudes campos de ordem ou hash no conjunto.
ColeçõesList mantém sequência com posições e duplicados; Set unicidade; Map um valor por chave; implementações Hash* não garantem ordem de iteração.
ExposiçãoVista acompanha a origem; cópia separa a coleção, não elementos mutáveis.
GenéricosInvariantes. Origem ? extends T, destino ? super T. extends não é imutabilidade.

Referências · Igualdade · Genéricos

Concorrência, I/O e Swing

DecisãoCondição
Arrancar e esperarstart() inicia; run() direto é chamada normal; join() espera. sleep() não sincroniza.
Proteger estadoMesmo monitor em todos os acessos. volatile publica, sem tornar ++ atómico.
Esperar condiçãowhile, não if: ao voltar a adquirir o monitor, outra thread pode já ter mudado o estado; há despertares sem notificação.
Ler textoInputStreamReader com codificação explícita dentro de BufferedReader; try-with-resources fecha.
Interface sem bloqueiosListener na EDT cria worker e termina; doInBackground sem Swing; done atualiza na EDT.

Monitores · Espera · I/O · Swing

SOLID e testes

IdeiaCondição decisiva
SRPSepara razões independentes para mudar.
OCPProtege o cliente estável; a montagem regista alternativas.
LSPSem pré-condições mais fortes nem pós-condições mais fracas.
ISPCliente só depende das operações que usa.
DIPRegra e detalhes dependem do contrato. Injeção sem contrato não é DIP.
Teste útilEsperado do contrato: normais, fronteiras, erros.
Stub / respostaStub responde com valores; se o resultado já prova o comportamento, verificar a chamada é normalmente redundante.
Mock / interaçãoMock verifica a interação quando o contrato pede o efeito, a quantidade ou a ordem que as asserções não observam.
Cobertura / mutaçãoExecutar não prova asserção. Morto é detetado; sobrevivente pode ser equivalente.
RefatoraçãoPreserva observável em passos pequenos, cada um testado.

SOLID · JUnit · Mockito · Mutação · Refatorar

Padrões: problema e custo

ProblemaPadrão e custo
Trocar algoritmoStrategy; a escolha concreta vive na configuração.
Reagir por estadoState; transições têm dono. Enumeração pode chegar.
Guardar pedidoCommand; undo pede estado anterior e política.
Notificar interessadosObserver; subscrição tem ciclo de vida e política de remoção.
Árvore uniformeComposite; partilha conta repetido. Não é posse UML.
Criação por subclassesFactory Method; sem redefiníveis no construtor.
Família de produtosAbstract Factory; produto novo muda contrato e fábricas.
Traduzir interfaceAdapter; fixa unidades, erros e perdas.
Somar comportamentoDecorator; ordem pode mudar o total. Delegar não é notificar.
Instância globalSingleton; protege a criação, não campos mutáveis nem testes.

Padrões · Strategy e State · Delegação

UML e arquitetura

PerguntaDiagrama e leitura
Como se relacionam?Classes. Losango cheio no todo é composição; campo não prova posse. Multiplicidade num extremo conta objetos desse extremo por um objeto do outro.
Em que ordem?Sequência, tempo para baixo é ordem. alt separa por guardas; comum aos ramos fica depois.
Por que ligações?Comunicação, ordem por numeração; interna durante 2 é 2.1.
Quando reage como?Estados, evento [guarda] / efeito. Regiões ortogonais evitam repetir combinações.
Onde vive a regra?MVC: modelo valida, vista apresenta o aceite, controlador coordena.
Onde vive o caso de uso?Service Layer coordena; Domain Model protege invariantes; Repository fala o domínio; empty() é ausência, não falha.

Classes · Sequência · Estados · MVC · Camadas · Persistência

À 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.