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

  1. Nível Naive (Iniciante): Uso de loops simples (for, while) e listas (ArrayList).
  2. Nível Profissional: Uso de Mapas (HashMap) para busca eficiente e Conjuntos (HashSet) para lógica de interseção.
  3. 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

  1. Vizinhos: Encontre usuários que deram avaliações similares (mesmo filme, nota \(\ge 4\)).
  2. Candidatos: Filmes que os vizinhos gostaram.
  3. 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"...}, ...]

Checklist de Entrega

Back to top