LABORATÓRIO DE INFORMÁTICAAprender informática
Aprender informática
a jogar.
Desafios curtos, progressivos e alinhados com a idade: hardware, internet, programação, redes, bases de dados, segurança, Git, APIs e arquitetura.
11.º ANO
Missões disponíveis
O progresso é guardado localmente no browser. Não é preciso criar conta para jogar.
GAMIFICAÇÃO
Conquista o laboratório.
Cada missão dá XP. Ao completar jogos desbloqueias medalhas locais sem recolha de dados pessoais.
[{"id":49,"year_level":11,"title":"OOP Architect","slug":"oop-architect","game_type":"match","description":"Associa conceitos de orientação a objetos ao seu significado.","icon":"OOP","difficulty":"avancado","xp_reward":280,"sort_order":10,"active":1,"created_at":"2026-08-31 20:47:06","updated_at":"2026-08-31 20:47:06","config":{"pairs":[["Classe","Modelo que define dados e comportamento"],["Objeto","Instância concreta de uma classe"],["Encapsulamento","Controlar acesso ao estado interno"],["Herança","Especializar/reutilizar comportamento de outra classe"],["Polimorfismo","Usar uma interface comum com implementações diferentes"]]}},{"id":50,"year_level":11,"title":"HTTP & API Lab","slug":"http-api-lab","game_type":"quiz","description":"Interpreta métodos HTTP, códigos de estado e princípios de APIs.","icon":"API","difficulty":"avancado","xp_reward":290,"sort_order":20,"active":1,"created_at":"2026-08-31 20:47:06","updated_at":"2026-08-31 20:47:06","config":{"questions":[{"q":"Que método HTTP é normalmente usado para obter um recurso?","options":["GET","DELETE","PATCH","TRACE-ALL"],"answer":0,"explanation":"GET deve ser usado para leitura sem alterar o recurso."},{"q":"Que código indica “não encontrado”?","options":["200","201","404","5000"],"answer":2,"explanation":"404 Not Found significa que o recurso pedido não foi encontrado."},{"q":"Que código é apropriado após criar um recurso com sucesso?","options":["201","301","401","503"],"answer":0,"explanation":"201 Created indica que um novo recurso foi criado."}]}},{"id":51,"year_level":11,"title":"SQL Join Master","slug":"sql-join-master","game_type":"quiz","description":"Escolhe JOINs e agregações para responder a perguntas de dados.","icon":"JOIN","difficulty":"avancado","xp_reward":300,"sort_order":30,"active":1,"created_at":"2026-08-31 20:47:06","updated_at":"2026-08-31 20:47:06","config":{"questions":[{"q":"Queres todos os alunos, mesmo sem notas. Que JOIN é normalmente adequado partindo de alunos?","options":["LEFT JOIN","INNER JOIN apenas","CROSS JOIN sempre","Nenhum JOIN pode fazê-lo"],"answer":0,"explanation":"LEFT JOIN mantém todas as linhas da tabela à esquerda."},{"q":"Qual função calcula uma média?","options":["COUNT","AVG","MAXTEXT","ORDER"],"answer":1,"explanation":"AVG calcula a média de valores numéricos não nulos."},{"q":"Que cláusula filtra grupos depois de GROUP BY?","options":["HAVING","VALUES","CREATE","OFFSET ONLY"],"answer":0,"explanation":"HAVING aplica condições aos grupos/agregações."}]}},{"id":52,"year_level":11,"title":"Design Pattern Match","slug":"design-pattern-match","game_type":"match","description":"Relaciona padrões conhecidos com o problema que ajudam a organizar.","icon":"PAT","difficulty":"avancado","xp_reward":310,"sort_order":40,"active":1,"created_at":"2026-08-31 20:47:06","updated_at":"2026-08-31 20:47:06","config":{"pairs":[["Factory","Centralizar criação de objetos"],["Observer","Notificar interessados quando algo muda"],["Strategy","Trocar um algoritmo/comportamento por outro"],["Repository","Abstrair acesso a dados"],["Adapter","Compatibilizar interfaces diferentes"]]}},{"id":53,"year_level":11,"title":"REST Resource Quest","slug":"rest-resource-quest","game_type":"sequence","description":"Desenha um fluxo REST simples e previsível para editar um recurso.","icon":"REST","difficulty":"avancado","xp_reward":320,"sort_order":50,"active":1,"created_at":"2026-08-31 20:47:06","updated_at":"2026-08-31 20:47:06","config":{"prompt":"Ordena o fluxo de atualização de um recurso numa API.","items":["Cliente envia PATCH/PUT para o recurso","API autentica e autoriza","API valida o payload","Serviço aplica regras de negócio","Persistência grava a alteração","API devolve estado e representação adequada"]}},{"id":54,"year_level":11,"title":"Memória OOP","slug":"memoria-oop","game_type":"memory","description":"Associa conceitos de programação orientada a objetos às suas ideias-chave.","icon":"OOP","difficulty":"avancado","xp_reward":320,"sort_order":60,"active":1,"created_at":"2026-08-31 20:47:06","updated_at":"2026-08-31 20:47:06","config":{"pairs":[["Classe","Molde"],["Objeto","Instância"],["Encapsulamento","Controlar acesso ao estado"],["Herança","Reutilizar/especializar comportamento"],["Polimorfismo","Mesma abstração, comportamentos diferentes"],["Interface","Contrato"]]}},{"id":55,"year_level":11,"title":"Debug API","slug":"debug-api","game_type":"debug","description":"Analisa pedidos HTTP e identifica erros de desenho de APIs.","icon":"API","difficulty":"avancado","xp_reward":340,"sort_order":70,"active":1,"created_at":"2026-08-31 20:47:06","updated_at":"2026-08-31 20:47:06","config":{"rounds":[{"title":"Password no URL","code":"GET /login?user=ana&password=segredo","question":"Qual é a melhor correção conceptual?","options":["Não colocar credenciais sensíveis no URL; usar autenticação adequada","Adicionar mais parâmetros","Trocar GET por imagem","Remover HTTPS"],"answer":0,"explanation":"URLs podem aparecer em histórico e logs; autenticação deve usar mecanismos próprios e HTTPS."},{"title":"DELETE sem autorização","code":"DELETE /users/42\\nAuthorization: (ausente)","question":"Que controlo essencial falta?","options":["Autenticação/autorização","CSS","Compressão ZIP","DNS reverso"],"answer":0,"explanation":"Operações destrutivas exigem verificar identidade e permissões."}]}},{"id":56,"year_level":11,"title":"Terminal Docker","slug":"terminal-docker","game_type":"terminal","description":"Aprende o vocabulário operacional de containers sem executar Docker real.","icon":"DOCK","difficulty":"avancado","xp_reward":350,"sort_order":80,"active":1,"created_at":"2026-08-31 20:47:06","updated_at":"2026-08-31 20:47:06","config":{"missions":[{"prompt":"Lista containers em execução.","command":"docker ps","success":"docker ps lista containers ativos."},{"prompt":"Mostra também containers parados.","command":"docker ps -a","success":"A opção -a inclui todos os containers."},{"prompt":"Mostra as imagens locais.","command":"docker images","success":"docker images lista imagens disponíveis localmente."}]}}]