Pular para conteúdo

1. Desenho de Software (Padrões de Projeto)

Objetivo

Esta entrega aplica padrões de projeto ao Portal de Notícias Burburinho para solucionar problemas recorrentes de organização, comunicação e evolução do código. Cada padrão deve ser apresentado em um contexto do sistema, representado em UML, implementado em código e demonstrado em execução.

Além de apresentar o resultado, a documentação registra as decisões da equipe, as contribuições individuais, as referências utilizadas e o senso crítico sobre o uso de inteligência artificial generativa.

Organização dos subgrupos

Subequipe Categoria de padrões Padrões ou foco definido Entrega mínima
01 GoFs criacionais Um padrão criacional aplicado ao portal Contexto, UML, código, testes e vídeo em execução
02 GoFs comportamentais State combinado com Chain of Responsibility, Observer e Memento Contexto, UML, código, testes e vídeo de cada padrão
03 GoFs estruturais Decorator aplicado à personalização comemorativa, identidade visual e destaques de notícias na Home Contexto, UML, código, testes e vídeo em execução

Ciclo de aplicação dos padrões

Cada padrão é analisado do problema até a validação da solução:

Problema do domínio
        ↓
Escolha e justificativa do padrão
        ↓
Modelagem em UML
        ↓
Implementação e testes
        ↓
Execução em vídeo
        ↓
Referências, versionamento e senso crítico

O padrão não é tratado como uma solução isolada ou como uma receita de código. A escolha precisa ser justificada pelo problema do Burburinho, e a implementação deve permitir verificar a correspondência entre o contexto, o diagrama, o código e o comportamento observado.

Padrões trabalhados

GoFs criacionais

Os padrões criacionais apoiam a criação de objetos e a configuração de instâncias, reduzindo o acoplamento entre o cliente e as classes concretas. Na Subequipe 01, cada integrante aplicou um padrão diferente a uma necessidade de criação presente no portal:

  • Builder: monta a página de notícia passo a passo a partir de uma mesma estrutura base (título, subtítulo, categoria, capa, autor e blocos de conteúdo). O NoticiaDirector coordena a montagem, enquanto os builders concretos (NoticiaDestaqueBuilder, NoticiaCompactaBuilder e NoticiaMistaBuilder) produzem layouts diferentes, como capa grande em destaque, imagens pequenas ao lado do texto ou título e subtítulo escritos sobre a capa.
  • Singleton: garante uma única instância de RepositorioNoticias, acessada por getInstancia(). Assim, a página inicial, a página de categoria e os destaques consultam os mesmos dados, evitando cópias inconsistentes ou notícias duplicadas.
  • Abstract Factory: cria famílias coerentes de configurações para comunidades (tema visual, política de moderação e widget padrão). O CriadorDeComunidade utiliza apenas a ComunidadeFactory e os produtos abstratos, enquanto as fábricas concretas de Tecnologia, Esportes, Cultura e Política garantem que peças de categorias diferentes não sejam misturadas.

Os padrões também se complementam: a notícia montada pelo Builder é publicada no repositório único mantido pelo Singleton, por intermédio da Redacao. Todas as soluções foram implementadas em JavaScript, executadas no navegador seguindo o protótipo do Figma e demonstradas em vídeo. O detalhamento dos diagramas, da análise crítica dos rascunhos gerados por IA e das contribuições está disponível no Relatório da Subequipe 01.

GoFs comportamentais

Os padrões comportamentais organizam a comunicação entre objetos e a distribuição de responsabilidades:

  • State combinado com Chain of Responsibility: representa mudanças no ciclo de vida de uma publicação e encaminha a análise para os responsáveis adequados.
  • Observer: permite notificar interessados quando ocorre uma alteração relevante, como a publicação de uma notícia ou a mudança de seu status.
  • Memento: preserva estados anteriores para possibilitar a recuperação de uma versão de uma publicação sem expor os detalhes internos do objeto.

Esses padrões estão documentados no relatório da Subequipe 02, com modelagem, implementação, testes e análise crítica do uso de IA.

GoFs estruturais

Os padrões estruturais organizam a composição de classes e objetos, permitindo ampliar funcionalidades sem modificar diretamente os componentes existentes. A Subequipe 03 aplicou o padrão Decorator à Home do portal Burburinho, com o objetivo de acrescentar personalizações visuais e mecanismos de destaque de notícias, preservando a estrutura original da página.

A implementação foi desenvolvida de maneira evolutiva e incremental, contemplando três frentes:

  • Personalização comemorativa da Home: aplicação de temas de Natal, Halloween e Dia do Estudante, utilizando Decorators responsáveis por paletas de cores, banners, textos, enfeites e animações.
  • Adaptação da identidade visual: incorporação de logos SVG específicas para cada data comemorativa aos Decorators de tema (Tema*Decorator), permitindo substituir dinamicamente a identidade visual padrão do portal.
  • Destaque de notícias: implementação de DestaqueComemorativoDecorator, responsável por inserir notícias relacionadas à data selecionada no início da listagem, e DestaqueInteresseUsuarioDecorator, que identifica e destaca notícias compatíveis com os interesses configurados do usuário.

As funcionalidades são combinadas por meio de uma cadeia de Decorators que compartilham o contrato renderizar(). Dessa forma, os destaques podem ser utilizados individualmente ou em conjunto com as personalizações comemorativas, sem exigir a criação de diferentes versões da Home.

A solução integrada foi documentada por meio de diagrama UML, implementação em JavaScript, testes automatizados e demonstração em vídeo. O detalhamento das decisões arquiteturais, das contribuições e da análise crítica do uso de IA generativa está disponível no Relatório da Subequipe 03.

Relação entre os artefatos

Os artefatos da entrega se complementam em diferentes níveis:

Artefato Pergunta respondida
Contexto Qual problema do Burburinho precisa ser resolvido?
UML Quais papéis, relações e interações formam a solução?
Código Como a solução foi implementada?
Testes O comportamento esperado pode ser verificado?
Vídeo O padrão funciona em uma execução observável?
Referências e senso crítico Por que essa solução foi escolhida e quais são seus limites?

Rastreabilidade

Problema ou funcionalidade Padrão relacionado Evidências
Criar objetos sem acoplar o cliente a classes concretas GoF criacional Relatório da Subequipe 01
Encaminhar uma publicação para etapas de análise Chain of Responsibility Relatório da Subequipe 02 · Demonstração Next.js
Representar o ciclo de vida e as transições de uma publicação State Relatório da Subequipe 02 · Demonstração Next.js
Notificar usuários ou serviços sobre mudanças Observer Relatório da Subequipe 02 · Demonstração Observer + Template Method · vídeo
Recuperar uma versão anterior de uma publicação Memento Relatório da Subequipe 02 · demonstração executável · vídeo
Acrescentar personalizações comemorativas, identidade visual temática e destaques de notícias à Home sem modificar a página base Decorator Relatório da Subequipe 03

Os links de código, vídeos, diagramas, atas e commits devem ser acrescentados nos relatórios à medida que cada evidência for produzida. A descrição do padrão, sozinha, não substitui a comprovação da implementação.

Metodologia geral

O trabalho foi dividido por categorias de padrões. Cada integrante estudou um problema, propôs uma solução e produziu os artefatos correspondentes. As propostas foram discutidas e revisadas em equipe para verificar se o padrão escolhido era adequado ao contexto, se a UML representava o código e se a execução demonstrava o comportamento descrito.

Na consolidação, a equipe deve conferir:

  • se o problema poderia ser resolvido sem o padrão ou se ele realmente reduz um acoplamento ou uma responsabilidade;
  • se os nomes e papéis da UML aparecem de forma coerente na implementação;
  • se os testes cobrem as transições, notificações, restaurações ou criações relevantes;
  • se o vídeo apresenta o padrão em execução, e não apenas o código estático;
  • se cada contribuição possui um registro verificável.

Senso crítico e uso de ferramentas

A inteligência artificial generativa foi utilizada como apoio para compreender os padrões, explorar alternativas, produzir rascunhos de UML e código e revisar explicações. As sugestões geradas não foram consideradas soluções finais: a equipe precisou confrontá-las com o domínio do Burburinho, a literatura de padrões e a execução real do código.

O uso de IA também apresentou riscos. Um rascunho pode aplicar um padrão apenas por semelhança superficial, criar classes desnecessárias ou omitir responsabilidades importantes. Por isso, a validação deve considerar o problema original, a notação UML, os testes e o comportamento observado. Os relatórios individuais registram as lições aprendidas e as correções feitas em cada foco.

Relatórios e participações