Partilhar: WhatsApp
aulify · Mini-Projecto
UC UC04371 · T. Produção de Conteúdos I
Versão · Aluno

Mini-Projecto · Biblioteca genérica de conteúdos interativos

Classe base, herança, polimorfismo, design patterns e testes, de raiz
⏱ Duração estimada: 15 horas (≈ 9 aulas) ↗ Referencial SNQ
Índice

Contexto

A "Escola Digital", um centro de formação, quer um pequeno módulo de código que sirva de base a vários produtos: uma plataforma de e-learning, um museu virtual e um catálogo de uma loja. Em vez de construir três soluções separadas, pediram-te uma biblioteca genérica de conteúdos interativos: uma base comum, escrita uma vez, que qualquer um dos três produtos pode estender sem alterar o núcleo.

Trabalhas individualmente ou a pares, em JavaScript, e entregas o código a funcionar mais um pequeno dossiê (requisitos analisados, decisões de design e testes realizados).

Requisitos

Funcionais

Não-funcionais

Fases

Fase 1 · Análise de requisitos (2h) Listar os tipos de conteúdo a suportar e o que têm em comum. Esboçar, em papel ou texto, a árvore de classes.

Fase 2 · Classe base e primeira subclasse (2h) Implementar ConteudoDigital e uma subclasse, com herança e super() corretos.

Fase 3 · Polimorfismo com todas as subclasses (3h) Implementar as restantes subclasses e o ciclo genérico que chama render() sem verificar o tipo.

Fase 4 · Factory e estrutura de dados (2h) Implementar criarConteudo(tipo, ...) e a coleção (array) que gere os conteúdos.

Fase 5 · Adaptação e extensão (2h) Acrescentar um tipo de conteúdo novo (não previsto na Fase 1) só por extensão, sem tocar na classe base.

Fase 6 · Testes e tratamento de erros (2h) Escrever renderSeguro e os testes, incluindo pelo menos um caso-limite por funcionalidade.

Fase 7 · Apresentação (2h) Demonstrar a biblioteca à turma e justificar as decisões de design tomadas no dossiê.

Critérios de avaliação

Critério Peso
Classe base, herança e polimorfismo corretos 25%
Factory e estrutura de dados genérica 15%
Ciclo genérico sem verificação manual de tipo 15%
Tratamento de erros e testes 20%
Extensão sem alterar a classe base (Fase 5) 15%
Dossiê e apresentação 10%

Erros comuns

Bónus (opcional)

Reflexão

No dossiê final, responde: qual foi a decisão de design mais importante para que a Fase 5 (extensão) não exigisse tocar na classe base? E dá um exemplo, fora deste projeto, de um sistema real (aplicação, jogo, site) que provavelmente usa uma classe base genérica com várias subclasses.