Enunciado: Implementação em Java
Este documento detalha as tarefas a serem implementadas no paradigma Orientado a Objetos.
Níveis de Dificuldade
Você pode optar por implementar este trabalho em 3 níveis de complexidade. A escolha impacta na nota máxima ou bônus (a critério do professor).
- Nível Naive (Iniciante): Uso de loops simples (
for,while) e listas (ArrayList). - Nível Profissional: Uso de Mapas (
HashMap) para busca eficiente e Conjuntos (HashSet) para lógica de interseção. - Nível Avançado (Expert): Uso exclusivo de Java Streams e Lambdas, sem loops explícitos.
Modelo de Dados
Você deve criar as classes: * Filme: id, titulo, genero, diretor… * Usuario: id, nome, idade… * Avaliacao: uid, fid, nota.
Fase 1: Consultas
Assinaturas sugeridas (adapte para sua classe de Controle):
// Retorna filmes de um gênero
public List<Filme> filmesPorGenero(String genero);
// Retorna filmes após ano X
public List<Filme> filmesDeAnoSuperior(int ano);Fase 2: Regras de Negócio
// Calcula média
public double mediaAvaliacoes(int uid);
// Retorna filmes que o usuário NÃO assistiu
public List<Filme> filmesNaoAvaliados(int uid);
// Determina se usuário é "Hater"
public boolean isUsuarioHater(int uid);Fase 3: Sistema Colaborativo
O método principal do sistema.
public List<Filme> recomendar(int uid);Regras Obrigatórias
- Vizinhos: Encontre usuários que deram avaliações similares (mesmo filme, nota \(\ge 4\)).
- Candidatos: Filmes que os vizinhos gostaram.
- Filtragem:
- Remover filmes já vistos pelo usuario alvo.
- Anti-Hater: Remover todos os filmes de diretores que o usuário alvo deu nota 1.
- Variação de Matrícula: Aplicar filtro de Idade, Tempo ou Ano.
Exemplo de Teste
// Setup
Sistema s = new Sistema();
s.carregarDados("dataset.json"); // Utilize uma lib JSON ou CSV
// Execução
List<Filme> recom = s.recomendar(1);
System.out.println(recom);
// Saída esperada: [Filme{titulo="Interestelar"...}, ...]