NOTAS DO PROFESSOR
- enfatizar: genérico significa "parametrizado por tipo", não "sem tipo". É o oposto de código solto/dinâmico sem controlo.
- erro comum: confundir "genérico" com "qualquer coisa serve". Mostrar que os genéricos continuam a ser verificados pelo compilador.
- analogia: uma forma de bolo (a lógica) que aceita recheios diferentes (os tipos), mas mantém sempre o mesmo processo.
NOTAS DO PROFESSOR
- enfatizar: a escolha da linguagem muda ONDE o erro de tipo aparece, em compilação ou só em execução. Isso tem custo real em produção.
- erro comum: achar que JavaScript "não tem" programação genérica. Tem, é só resolvida em execução (duck typing).
- exemplo: mostrar a mesma função `primeiro(lista)` em JS (funciona com tudo, sem aviso) e em TS com `function primeiro<T>(lista: T[]): T` (com aviso se o tipo não bater certo).
NOTAS DO PROFESSOR
- enfatizar: distinguir os três níveis (gerador de ficheiros, metaprogramação, IA) porque a UC pede os três.
- erro comum: pensar que "código generativo" é só sinónimo de IA. É mais antigo e mais amplo que isso.
- exemplo: um formulário de contacto com 12 campos repetidos é o caso de escola para gerar em vez de copiar e colar.
NOTAS DO PROFESSOR
- enfatizar: uma meta linguagem tem sintaxe própria, mais simples que a linguagem final, precisamente para ser fácil de gerar ou de escrever à mão.
- erro comum: confundir template de texto (substituição simples) com metaprogramação (código que manipula código em memória). São técnicas diferentes.
- exemplo: mostrar um `.hbs` com `{{nome}}` a gerar um cartão de produto HTML para 50 produtos diferentes a partir de um só ficheiro de dados.
NOTAS DO PROFESSOR
- enfatizar: scaffolding poupa tempo E garante consistência entre a equipa, ninguém inventa a sua própria estrutura de pastas.
- erro comum: gerar o esqueleto e nunca mais o adaptar ao projeto real, deixando ficheiros de exemplo esquecidos.
- exercício rápido: correr `npm create vite@latest` em conjunto e explorar a estrutura gerada.
NOTAS DO PROFESSOR
- enfatizar: a IA generativa é uma técnica de código generativo entre outras, não é magia nem substitui o critério técnico.
- erro comum: colar código gerado sem perceber o que faz. Perguntar sempre "consigo explicar esta linha à turma?"
- analogia: é como um estagiário rápido mas sem experiência, produz muito depressa, mas precisa sempre de revisão de um sénior.
NOTAS DO PROFESSOR
- enfatizar: um componente de framework é, na prática, um gerador de HTML parametrizado, a mesma ideia dos blocos anteriores.
- erro comum: reinventar à mão o que o framework já resolve (ex.: atualizar manualmente o DOM em vez de deixar o framework fazê-lo).
- exemplo: mostrar o mesmo cartão de produto como componente React com `props` versus copiado e colado 10 vezes em HTML estático.
NOTAS DO PROFESSOR
- enfatizar: usar um template pronto não é "batota", é reutilização profissional, desde que se perceba o que ele faz.
- erro comum: escolher um framework só porque é o mais falado, sem avaliar se serve o projeto concreto.
- exercício rápido: comparar em conjunto dois starters de projeto (ex.: Vite + React vs Next.js) e listar diferenças.
NOTAS DO PROFESSOR
- enfatizar: um pattern é uma IDEIA, não uma biblioteca. Pode implementar-se de formas ligeiramente diferentes consoante a linguagem.
- erro comum: usar patterns "porque sim", complicando código simples. Um pattern só vale a pena quando resolve um problema real.
- analogia: os patterns são como técnicas de culinária (saltear, gratinar), receitas gerais que se aplicam a pratos diferentes.
NOTAS DO PROFESSOR
- enfatizar: os princípios vêm primeiro, os patterns são consequência. Não é preciso decorar 23 patterns, é preciso perceber os princípios.
- erro comum: aplicar SOLID ao pé da letra em projetos pequenos, criando complexidade desnecessária.
- pergunta à turma: dão um exemplo de código duplicado que já viram (ou escreveram) e que violava o DRY?
NOTAS DO PROFESSOR
- enfatizar: o objetivo comum é esconder o "novo" (new/construtor) atrás de uma interface mais simples e flexível.
- erro comum: abusar do Singleton para tudo, criando estado global escondido, difícil de testar.
- exemplo: mostrar a Factory de componentes interativos no quadro, com um `switch` sobre o tipo.
NOTAS DO PROFESSOR
- enfatizar: Observer é o pattern por trás de quase todos os eventos de UI (`addEventListener`) e do estado reativo em React/Vue.
- erro comum: confundir Adapter (compatibilidade) com Decorator (extensão de comportamento). Pedir à turma a diferença por palavras próprias.
- exercício rápido: identificar o Strategy num sistema de pontuação de quiz com "modo fácil" e "modo difícil".
NOTAS DO PROFESSOR
- enfatizar: herança é "é um" (Quiz É um ComponenteInterativo). Confirmar sempre esta relação antes de usar `extends`.
- erro comum: herdar só para reutilizar código sem existir uma relação lógica real. Nesse caso, composição é melhor.
- exemplo: mostrar uma segunda subclasse, `Galeria extends ComponenteInterativo`, para reforçar o padrão.
NOTAS DO PROFESSOR
- enfatizar: polimorfismo é o que torna a Factory do bloco anterior útil, cria objetos diferentes que se usam da mesma forma depois.
- erro comum: fazer `if (item instanceof Quiz) ... else if (item instanceof Galeria) ...` em vez de deixar o polimorfismo tratar disso.
- pergunta à turma: porque é que isto facilita "adaptar código para automatizar tarefas" (um dos objetivos da UC)?
NOTAS DO PROFESSOR
- enfatizar: metaprogramação é "um nível acima" da programação normal, código sobre código. É poderosa e também mais difícil de depurar.
- erro comum: abusar de metaprogramação em código simples, tornando-o "mágico" e difícil de seguir por outra pessoa.
- analogia: é como um livro de instruções que sabe reescrever-se a si próprio consoante quem o lê.
NOTAS DO PROFESSOR
- enfatizar: decorators são metaprogramação aplicada, "código que envolve código". Ligar ao Decorator pattern do bloco 6.
- erro comum: pensar que decorators são exclusivos do TypeScript/Angular. A ideia existe em várias linguagens (Python `@`, Java anotações).
- exemplo: mostrar rapidamente um `Proxy` simples em consola a intercetar uma leitura de propriedade.
NOTAS DO PROFESSOR
- enfatizar: duck typing é genericidade sem sintaxe de genéricos, o preço é perder a verificação em compilação.
- erro comum: assumir que um objeto tem um método sem verificar, gerando "TypeError: X is not a function" em produção.
- pergunta à turma: porque é que TypeScript existe se JavaScript já é flexível? (segurança e deteção precoce de erros).
NOTAS DO PROFESSOR
- enfatizar: tipagem dinâmica não dispensa validação, só a move para tempo de execução. Alguém tem de a fazer.
- erro comum: confiar cegamente nos dados que chegam de um formulário ou API externa sem validar o tipo.
- exercício rápido: escrever uma função `validarIdade(valor)` que confirma se é número antes de o usar.
NOTAS DO PROFESSOR
- enfatizar: "flexível" não significa "sem opinião nenhuma". Bons frameworks têm convenções fortes E pontos de extensão claros.
- erro comum: lutar contra as convenções do framework em vez de as aprender, reinventando funcionalidades que já existem.
- exemplo: mostrar um hook personalizado simples em React (`useContador`) que reutiliza lógica entre componentes.
NOTAS DO PROFESSOR
- enfatizar: escolher biblioteca é uma decisão de equipa e de longo prazo, não só "o que resolve o problema hoje".
- erro comum: instalar dezenas de dependências pequenas para tarefas triviais, aumentando o risco de segurança e o peso do projeto.
- pergunta à turma: como verificam se uma biblioteca no npm ainda é mantida? (data do último update, issues abertas, downloads).
NOTAS DO PROFESSOR
- enfatizar: automatizar não é só "programar mais", é reconhecer padrões repetitivos e valer a pena investir tempo a resolvê-los uma vez.
- erro comum: passar horas a automatizar uma tarefa que só se faz uma vez. Avaliar sempre o retorno do investimento.
- exemplo: mostrar um script simples que renomeia 20 ficheiros de imagem seguindo uma convenção, em vez de o fazer um a um.
NOTAS DO PROFESSOR
- enfatizar: adaptar um algoritmo a um novo contexto não devia exigir reescrever a lógica, só mudar parâmetros ou dados.
- erro comum: copiar e colar um script inteiro só para mudar um valor, em vez de o parametrizar.
- exercício rápido: pedir à turma para identificar o que mudaria e o que ficaria igual num gerador de certificados para outro curso.
NOTAS DO PROFESSOR
- enfatizar: um erro num gerador propaga-se a tudo o que ele gera, testar o gerador vale mais do que testar um resultado isolado.
- erro comum: testar só no browser do desenvolvedor e assumir que funciona em todo o lado.
- exemplo: mostrar o mesmo componente interativo a falhar em Safari por usar uma função que só existe no Chrome.
NOTAS DO PROFESSOR
- enfatizar: testar em plataformas diferentes não é opcional em conteúdos interativos, o público final usa dispositivos muito variados.
- erro comum: deixar os testes de plataforma para o fim do projeto, quando corrigir já é caro.
- exercício rápido: testar um componente feito na aula em três larguras de ecrã diferentes no DevTools.
NOTAS DO PROFESSOR
- enfatizar: quanto mais automático é o processo, mais depressa um erro de segurança se multiplica por todos os ficheiros gerados.
- erro comum: confiar que "o gerador sabe o que faz" e saltar a revisão de segurança do código produzido.
- exemplo: mostrar um template que insere `{{comentario}}` diretamente em HTML sem escapar, e o que acontece com `<script>alert(1)</script>`.
NOTAS DO PROFESSOR
- enfatizar: segurança no código generativo é responsabilidade de quem integra, não do gerador ou da IA.
- erro comum: assumir que porque o código "corre sem erros" está seguro. Correr sem erro não é o mesmo que ser seguro.
- pergunta à turma: que dados de um formulário de conteúdo interativo (nome, comentário) precisam de ser escapados antes de mostrar no ecrã?
NOTAS DO PROFESSOR
- enfatizar: estas normas não são "extra", fazem parte do referencial oficial da UC e devem ser tratadas com o mesmo rigor técnico.
- erro comum: passar horas seguidas sem pausas "porque o código está quase pronto". Reforçar que a pausa poupa erros e saúde.
- exercício rápido: cada aluno ajusta a sua própria postura e altura de ecrã na sala, com a orientação do professor.
NOTAS DO PROFESSOR
- enfatizar: a ligação entre código eficiente e ambiente é real, um gerador que produz ficheiros desnecessários também gasta energia a mais.
- erro comum: achar que o impacto ambiental do software é irrelevante por não ser "físico". É físico, está nos data centers.
- pergunta à turma: que prática das aulas anteriores (ex.: tree-shaking, gerar só o necessário) também ajuda o ambiente?
NOTAS DO PROFESSOR
- enfatizar: recapitular a cadeia completa, do princípio abstrato (genérico) até à prática concreta (testar, segurança, ambiente).
- erro comum: ver os blocos como assuntos separados. Reforçar que todos se apoiam no mesmo objetivo: escrever menos código repetido, com mais confiança.
- anunciar: as fichas treinam patterns, metaprogramação e geração de código; o projeto constrói um gerador de componentes interativos de raiz.