NOTAS DO PROFESSOR
- enfatizar: Java existe há cerca de 30 anos e continua a ser dos mais pedidos no mercado.
- erro comum/pergunta: se corre em qualquer sistema, porque se instala o JDK em cada máquina? Porque cada sistema precisa da sua JVM.
- exemplo/analogia: o bytecode é um guião universal; a JVM é o ator local que o interpreta.
NOTAS DO PROFESSOR
- enfatizar: Distinguir os três tipos de erro, porque cada um se procura de forma diferente.
- erro comum/pergunta: achar que um programa que compila está correto.
- exemplo/analogia: dividir por zero compila sem problema e só falha ao executar.
NOTAS DO PROFESSOR
- enfatizar: Variáveis de objeto guardam referências, não os objetos.
- erro comum/pergunta: o que acontece a `outro` se `nome` deixar de apontar para o objeto? Continua a apontar.
- exemplo/analogia: a referência é a morada, o objeto é a casa; duas moradas iguais levam à mesma casa.
NOTAS DO PROFESSOR
- enfatizar: O pensamento computacional vem antes de qualquer linha de código.
- erro comum/pergunta: abrir o IDE e começar a escrever sem ter decomposto o problema.
- exemplo/analogia: calcular a média de uma turma decompõe-se em ler, somar, dividir e classificar.
NOTAS DO PROFESSOR
- enfatizar: Todo o programa Java combina apenas estas três estruturas.
- erro comum/pergunta: que estrutura usar para pedir uma password até estar certa? Repetição.
- exemplo/analogia: uma receita de cozinha tem sequência, escolhas ("se a massa estiver seca") e repetições ("mexer até ligar").
NOTAS DO PROFESSOR
- enfatizar: O teste de mesa executa o algoritmo à mão antes de o programar.
- erro comum/pergunta: não testar com valores onde o maior é o primeiro, o do meio e o último.
- exemplo/analogia: repetir o teste com 9, 4, 7 e com 4, 7, 9 confirma que o algoritmo é geral.
NOTAS DO PROFESSOR
- enfatizar: Duas ideias: o ciclo pára cedo (`return`) e o limite reduz o trabalho.
- erro comum/pergunta: porque é que 1 e 0 não são primos? A condição `n < 2` trata esse caso.
- exemplo/analogia: para 25, testa 2, 3, 4 e 5; no 5 encontra o divisor e termina.
NOTAS DO PROFESSOR
- enfatizar: Cada fase tem um produto concreto, não é apenas uma etapa de trabalho.
- erro comum/pergunta: tratar os testes como uma fase final em vez de os fazer ao longo do trabalho.
- exemplo/analogia: o produto do desenho é o diagrama de classes e o esquema da base de dados.
NOTAS DO PROFESSOR
- enfatizar: Não há metodologia melhor em abstrato: depende de os requisitos serem estáveis ou não.
- erro comum/pergunta: quando faz sentido a cascata? Com requisitos fechados e conhecidos de antemão.
- exemplo/analogia: a cascata é construir uma ponte por plano; o ágil é afinar um restaurante com o feedback dos clientes.
NOTAS DO PROFESSOR
- enfatizar: A história obriga a dizer para quê, não apenas o quê.
- erro comum/pergunta: requisitos vagos como "deve ser rápido", impossíveis de testar.
- exemplo/analogia: "a listagem abre em menos de 2 segundos com 1000 livros" é um requisito testável.
NOTAS DO PROFESSOR
- enfatizar: Ordenar por dependência e por risco: o modelo vem antes da persistência.
- erro comum/pergunta: que etapa pode ser feita em paralelo com outra? A interface, depois de acordado o modelo.
- exemplo/analogia: estimar horas por etapa dá uma noção do prazo e permite renegociar cedo.
NOTAS DO PROFESSOR
- enfatizar: Três compartimentos por classe: nome, atributos, métodos.
- erro comum/pergunta: desenhar o diagrama depois do código, só para cumprir a entrega.
- exemplo/analogia: ler o diagrama como frases, "um leitor tem muitos empréstimos".
NOTAS DO PROFESSOR
- enfatizar: A interface desenha-se em papel ou em texto antes de se programar.
- erro comum/pergunta: o que acontece se o utilizador escrever "dois" no menu? Mensagem de opção inválida e nova pergunta.
- exemplo/analogia: escrever primeiro as mensagens (`Esse livro já está emprestado. Escolhe outro.`) para serem consistentes.
NOTAS DO PROFESSOR
- enfatizar: As normas são requisitos do projeto, não burocracia.
- erro comum/pergunta: uma aplicação de biblioteca guarda NIF dos leitores. Precisa mesmo? Aplicar o princípio do mínimo necessário.
- exemplo/analogia: antes de usar uma biblioteca num produto comercial, confirmar a licença.
NOTAS DO PROFESSOR
- enfatizar: Versões LTS são as que as empresas usam em produção.
- erro comum/pergunta: "comando não encontrado" por o JDK não estar no `PATH`.
- exemplo/analogia: o Maven usa `JAVA_HOME` para escolher o Java com que compila.
NOTAS DO PROFESSOR
- enfatizar: Saber também trabalhar com um editor simples e o terminal, que é o que há em servidores.
- erro comum/pergunta: o que é refatorar? Mudar a estrutura sem mudar o comportamento.
- exemplo/analogia: renomear um método em todo o projeto com um atalho, em vez de procurar à mão.
NOTAS DO PROFESSOR
- enfatizar: Toda a aplicação Java começa em `public static void main`.
- erro comum/pergunta: ficheiro `helloworld.java` para a classe `HelloWorld`; as maiúsculas contam.
- exemplo/analogia: `java HelloWorld.java` compila e corre num só passo, útil para scripts.
NOTAS DO PROFESSOR
- enfatizar: Cada palavra tem uma razão; a JVM tem de conseguir chamar o método sem criar objetos.
- erro comum/pergunta: o que acontece se tirarmos o `static`? A JVM não encontra o ponto de entrada.
- exemplo/analogia: passar o nome do utilizador como argumento em vez de o pedir.
NOTAS DO PROFESSOR
- enfatizar: Depurar é mais rápido e mais fiável do que espalhar `println`.
- erro comum/pergunta: corrigir o sintoma sem descobrir a causa.
- exemplo/analogia: parar no início de um ciclo e acompanhar o valor de `soma` a cada volta.
NOTAS DO PROFESSOR
- enfatizar: Ler a mensagem inteira é meio caminho andado.
- erro comum/pergunta: porque devemos recompilar a seguir à primeira correção? Porque o compilador analisa por fases: primeiro a sintaxe, depois os tipos.
- exemplo/analogia: um revisor que só começa a verificar os factos depois de o texto estar pontuado.
NOTAS DO PROFESSOR
- enfatizar: Ler a assinatura diz o que entra, o que sai e o que pode correr mal.
- erro comum/pergunta: porque se cria `new ArrayList<>(List.of(...))`? `List.of` é imutável e `removeIf` lançaria `UnsupportedOperationException`.
- exemplo/analogia: procurar um método novo na API antes de pedir a ajuda de um colega.
NOTAS DO PROFESSOR
- enfatizar: A estrutura standard permite que qualquer pessoa ou ferramenta percebam o projeto.
- erro comum/pergunta: colocar testes em `src/main`.
- exemplo/analogia: abrir o projeto de um colega e saber logo onde está cada coisa.
NOTAS DO PROFESSOR
- enfatizar: O Maven protege a equipa de entregar código partido.
- erro comum/pergunta: o que faz `mvn clean`? Apaga a pasta `target/` antes de recompilar.
- exemplo/analogia: acrescentar o JUnit ao `pom.xml` e deixar o Maven descarregá-lo.
NOTAS DO PROFESSOR
- enfatizar: Oito tipos primitivos, de tamanho fixo.
- erro comum/pergunta: escrever `8_000_000_000` sem o `L` final; deixa de caber num `int`.
- exemplo/analogia: `long populacao = 8_000_000_000L;`.
NOTAS DO PROFESSOR
- enfatizar: Para texto usa-se sempre `equals`.
- erro comum/pergunta: comparar `String` com `==`; pode dar certo por acaso e falhar depois.
- exemplo/analogia: `a != 0 && 10 / a > 1` nunca divide por zero.
NOTAS DO PROFESSOR
- enfatizar: Para um tipo menor é preciso cast, e pode perder-se informação.
- erro comum/pergunta: `(int) 3.99` dá 3 ou 4? Dá 3, o cast corta e não arredonda.
- exemplo/analogia: ler uma idade em texto e convertê-la para `int` antes de somar.
NOTAS DO PROFESSOR
- enfatizar: O `switch` com `->` não precisa de `break` e devolve um valor.
- erro comum/pergunta: esquecer o `break` no `switch` tradicional e executar vários casos.
- exemplo/analogia: transformar um número de dia da semana num texto.
NOTAS DO PROFESSOR
- enfatizar: Escolher o ciclo certo pelo que se sabe sobre as repetições.
- erro comum/pergunta: `i <= v.length` num array.
- exemplo/analogia: pedir um valor e validar com `do-while`.
NOTAS DO PROFESSOR
- enfatizar: Aceder a `v[5]` num array de 5 elementos lança `ArrayIndexOutOfBoundsException`.
- erro comum/pergunta: qual o último índice de um array com 10 elementos? 9.
- exemplo/analogia: uma tabela de notas é um array bidimensional (aluno por teste).
NOTAS DO PROFESSOR
- enfatizar: Um método faz uma só coisa e tem um nome que a diz.
- erro comum/pergunta: achar que um método consegue trocar duas variáveis `int` do chamador.
- exemplo/analogia: `somar(2, 3)` escolhe a versão de `int`; `somar(2.5, 3.5)` a de `double`.
NOTAS DO PROFESSOR
- enfatizar: A classe é o molde; o objeto é a instância.
- erro comum/pergunta: para que serve o `this`? Distingue o atributo do parâmetro com o mesmo nome.
- exemplo/analogia: a classe é a planta da casa; os objetos são as casas construídas a partir dela.
NOTAS DO PROFESSOR
- enfatizar: Atributos privados, acesso controlado: o setter valida.
- erro comum/pergunta: atributos `public`, que deixam qualquer código deixar o objeto num estado inválido.
- exemplo/analogia: a idade nunca pode ficar negativa porque só se altera pelo setter.
NOTAS DO PROFESSOR
- enfatizar: A inicialização fica num só construtor; os outros reencaminham.
- erro comum/pergunta: usar `this` dentro de um método `static`.
- exemplo/analogia: um contador `static` que numera os objetos criados.
NOTAS DO PROFESSOR
- enfatizar: Distinguir "é um" de "tem um".
- erro comum/pergunta: uma `Turma` e os seus `Aluno`s são agregação ou composição? Agregação, o aluno existe sem a turma.
- exemplo/analogia: `Casa` e `Divisao` é composição; se a casa desaparece, as divisões também.
NOTAS DO PROFESSOR
- enfatizar: Em execução, os objetos relacionam-se através de referências.
- erro comum/pergunta: tentar um muitos-para-muitos direto, sem classe intermédia.
- exemplo/analogia: a inscrição guarda a data e a nota, que não pertencem nem ao aluno nem à disciplina.
NOTAS DO PROFESSOR
- enfatizar: A herança partilha comportamento e permite evoluir sem alterar a classe base.
- erro comum/pergunta: herdar só para reutilizar código, sem haver relação "é um".
- exemplo/analogia: `Empregado` é uma `Pessoa`; já um `Carro` não deve herdar de `Motor`.
NOTAS DO PROFESSOR
- enfatizar: O método executado é o da classe real do objeto, não o do tipo da variável.
- erro comum/pergunta: acrescentar um `Triangulo` obriga a mexer no ciclo? Não.
- exemplo/analogia: pedir "abre" a uma porta, a uma janela e a um frasco: cada um abre à sua maneira.
NOTAS DO PROFESSOR
- enfatizar: Uma interface é um contrato: diz o que se pode fazer, não como.
- erro comum/pergunta: tentar fazer `new` de uma classe abstrata ou de uma interface.
- exemplo/analogia: `Comparable` é cumprido por `String`, `Integer` e pelas tuas classes.
NOTAS DO PROFESSOR
- enfatizar: Menos código repetitivo e mais segurança de tipos.
- erro comum/pergunta: porque é melhor um `enum` do que um `int` para o estado? O compilador recusa valores inválidos.
- exemplo/analogia: um `record Aluno(String nome, int nota)` em duas linhas.
NOTAS DO PROFESSOR
- enfatizar: Os genéricos dão segurança de tipos em compilação.
- erro comum/pergunta: usar `List` sem tipo e receber `Object`, obrigando a casts.
- exemplo/analogia: `List<String>` recusa à partida um `Integer`.
NOTAS DO PROFESSOR
- enfatizar: `s.replace(...)` sozinho não altera `s`; é preciso guardar o resultado.
- erro comum/pergunta: o que vale `s` depois de `s.toUpperCase();` sem atribuição? Continua igual.
- exemplo/analogia: uma `String` é como texto impresso; para mudar, imprime-se outra folha.
NOTAS DO PROFESSOR
- enfatizar: A escolha depende do acesso que vais fazer, não do hábito.
- erro comum/pergunta: que coleção para contar quantas vezes cada palavra aparece? Um `Map`.
- exemplo/analogia: IDs únicos de utilizadores guardam-se num `Set`.
NOTAS DO PROFESSOR
- enfatizar: Lista ordenada que aceita duplicados e cresce sozinha.
- erro comum/pergunta: alterar uma `List.of(...)` e apanhar `UnsupportedOperationException`.
- exemplo/analogia: carrinho de compras como lista de produtos.
NOTAS DO PROFESSOR
- enfatizar: Pares chave e valor; as chaves são únicas.
- erro comum/pergunta: `get` numa chave inexistente devolve `null`; usar `getOrDefault`.
- exemplo/analogia: `merge(palavra, 1, Integer::sum)` conta ocorrências numa só linha.
NOTAS DO PROFESSOR
- enfatizar: Um `Set` elimina repetições; o `Comparator` ordena sem alterar a classe.
- erro comum/pergunta: como ordenar por nota decrescente e depois por nome? Encadear `thenComparing`.
- exemplo/analogia: classificação de uma turma por nota, com desempate alfabético.
NOTAS DO PROFESSOR
- enfatizar: Um stream não altera a coleção original e só corre quando chega a operação terminal.
- erro comum/pergunta: esperar que `filter` modifique a lista original.
- exemplo/analogia: da lista de produtos, os nomes dos que custam menos de 2 euros.
NOTAS DO PROFESSOR
- enfatizar: Uma exceção é um objeto que sobe a cadeia de chamadas até encontrar um `catch`.
- erro comum/pergunta: porque não se trata um `Error`? São falhas graves da JVM, sem recuperação possível.
- exemplo/analogia: `IOException` ao abrir um ficheiro que não existe.
NOTAS DO PROFESSOR
- enfatizar: O `catch` específico vem antes do geral; `try-with-resources` fecha o recurso sozinho.
- erro comum/pergunta: `catch (Exception e) { }` vazio, que esconde os erros.
- exemplo/analogia: ler um número e pedir de novo se o utilizador escrever texto.
NOTAS DO PROFESSOR
- enfatizar: `throw` lança; `throws` avisa quem chama.
- erro comum/pergunta: quando criar uma exceção própria? Quando o erro tem significado no domínio.
- exemplo/analogia: o levantamento recusado deixa o saldo intacto e o chamador decide o que fazer.
NOTAS DO PROFESSOR
- enfatizar: `Files` e `Path` são a forma moderna; `Files.lines` lê sem carregar tudo em memória.
- erro comum/pergunta: esquecer que estes métodos lançam `IOException`.
- exemplo/analogia: guardar produtos num CSV com `;` como separador e relê-los.
NOTAS DO PROFESSOR
- enfatizar: Os recursos fecham-se pela ordem inversa à de abertura, com `try-with-resources`.
- erro comum/pergunta: palavra-passe escrita no código; ler de variável de ambiente.
- exemplo/analogia: SQLite não precisa de servidor, com URL `jdbc:sqlite:loja.db`.
NOTAS DO PROFESSOR
- enfatizar: Com `PreparedStatement`, o valor nunca é interpretado como comando.
- erro comum/pergunta: o que devolve a versão concatenada se `nome` for `' OR '1'='1`? Todos os utilizadores.
- exemplo/analogia: um formulário de login vulnerável deixa entrar sem palavra-passe.
NOTAS DO PROFESSOR
- enfatizar: O DAO isola o acesso a dados; a transação garante tudo ou nada.
- erro comum/pergunta: SQL espalhado pela interface de utilizador.
- exemplo/analogia: transferir dinheiro debita uma conta e credita outra na mesma transação.
NOTAS DO PROFESSOR
- enfatizar: Preparar, Agir, Verificar; testar o normal, os limites e os erros.
- erro comum/pergunta: um teste que verifica várias coisas e falha por muitas razões.
- exemplo/analogia: `Desconto.aplicar(100.0)` com a condição `>` em vez de `>=` falha no teste do limite.
NOTAS DO PROFESSOR
- enfatizar: Cada defeito corrigido ganha um teste.
- erro comum/pergunta: porque não basta corrigir e seguir em frente? Sem teste, o defeito pode regressar.
- exemplo/analogia: `NullPointerException` na linha 42; a stack trace diz qual a variável nula.
NOTAS DO PROFESSOR
- enfatizar: As convenções poupam tempo de leitura à equipa.
- erro comum/pergunta: nomes como `calc2` ou `x1`.
- exemplo/analogia: extrair a taxa de IVA para uma constante `TAXA_IVA`.
NOTAS DO PROFESSOR
- enfatizar: Os comentários explicam o porquê; o código mostra o quê.
- erro comum/pergunta: o que deve ter o README? Requisitos, como compilar, como executar e como testar.
- exemplo/analogia: um manual com um exemplo de utilização por cada opção do menu.
NOTAS DO PROFESSOR
- enfatizar: Quase todos os erros iniciais cabem nesta tabela.
- erro comum/pergunta: qual destes já cometeram? Pedir exemplos reais.
- exemplo/analogia: remover elementos de uma lista dentro de um `for` mostra `ConcurrentModificationException`.
NOTAS DO PROFESSOR
- enfatizar que testar, depurar e documentar fazem parte do trabalho, não são extras
- pergunta: que parte do ciclo, do planeamento à entrega, ainda parece menos segura?
- exemplo: o mini-projeto percorre todo o ciclo numa aplicação com base de dados