Pular para conteúdo

3.5. Iniciativas Extras (Padrões de Projeto)



Autores: Altino Arthur, Márcio Henrique e Daniel de Sousa


Entidades Principais e Seus Papéis

O sistema é centrado em algumas entidades principais:

  • Pessoa: Uma classe abstrata que serve como base para PessoaCuidador e PessoaMonitorada, definindo atributos comuns como nome, gênero, CPF e data de nascimento. Cada pessoa tem um Contato e um Endereço associados.
  • Pessoa Monitorada: Representa o indivíduo que está sendo monitorado. Pode ter um histórico de Monitoramentos, e sua situação atual pode ser verificada. Uma Pessoa Monitorada utiliza um ou mais Sensores.
  • Pessoa Cuidador: O indivíduo responsável por monitorar uma ou mais Pessoas Monitoradas. Recebe Notificações e pode confirmar seu recebimento.
  • Sensor: Um dispositivo que coleta dados para o monitoramento, com atributos como ID, tipo e localização. É crucial que esteja calibrado para leituras precisas.
  • Monitoramento: Representa um registro de dados coletados por um Sensor em um determinado momento, incluindo a situação detectada (ex: "QuedaDetectada", "TudoBem"), variações de graus e tempo parado. Cada monitoramento está associado a um ResultadoAnalise.
  • ResultadoAnalise: Contém o resultado da análise de um monitoramento, indicando o risco de queda, se deve notificar e a situação final.
  • Notificacao: Objeto que encapsula os detalhes de um alerta (prioridade, estado, tipo de alerta) a ser enviado a um PessoaCuidador, utilizando um padrão Strategy para o método de envio.

Fluxo de Comportamento

O comportamento do sistema pode ser compreendido através dos seguintes fluxos:

Criação e Processamento de Monitoramento

  • O ServicoMonitoramento é o ponto central. Ele pode criarMonitoramento a partir de um cuidador, uma pessoa monitorada e um sensor.
  • O método processarMonitoramento é invocado para analisar os dados. Ele utiliza o ServicoQueda e o AnalisadorPostura para determinar se uma queda ocorreu.
  • O ServicoQueda utiliza o SensorValidator para garantir que o sensor está calibrado antes de analisar os dados e gerar um ResultadoAnalise.
  • O AnalisadorPostura calcula variações de ângulo e tempo parado a partir dos dados do sensor.

Detecção de Queda e Notificação (Padrão Observer)

  • Quando o ServicoMonitoramento processa um Monitoramento e o ResultadoAnalise indica uma situação crítica (ex: "QuedaDetectada"), ele atua como um "Subject" ou "Publisher" no padrão Observer.
  • Ele notificaObservadores (implementações da interface Notificador).
  • A Notificação (um observador) é acionado e, por sua vez, criando uma notificação baseada no ResultadoAnalise para o PessoaCuidador associado.
  • Comcomitante tem uma função responsável por registrar o log da notificação.

Envio de Notificações (Padrão Strategy)

  • A Notificacao é configurada com uma estratégia de envio (ex: SMS, Email, Push) definida pelo atributo tipoAlerta.
  • Quando o método enviar() da Notificacao é chamado, ela delega a tarefa à sua estrategia de envio (implementação de IEnvio).
  • As classes EstrategiaSMS, EstrategiaEmail, e EstrategiaPush implementam a lógica específica para enviar notificações via seus respectivos canais.
  • O PessoaCuidador tem um método receberNotificacao e confirmarRecebimento.

Relações e Dependências Chave

  • Associações: Pessoas (Cuidador e Monitorada) se associam a Contato e Endereço. Uma Pessoa Monitorada possui histórico de Monitoramentos e é monitorada por um ou mais Pessoas Cuidadoras. Pessoas Monitoradas utilizam Sensores.
  • Dependências: O ServicoMonitoramento depende de ServicoQueda, AnalisadorPostura, Notificacao, Monitoramento, PessoaCuidador e PessoaMonitorada. O ServicoQueda depende do SensorValidator e gera ResultadoAnalise.
  • Herança: PessoaCuidador e PessoaMonitorada herdam de Pessoa. As estratégias de envio (EstrategiaSMS, EstrategiaEmail, EstrategiaPush) implementam a interface IEnvio. Os ouvintes de queda (NotificadorCuidador, RegistradorLog) implementam a interface ListenerQueda.

Histórico de Versões

Versão Commit da Versão Data Descrição Autor(es) Revisor(es) Descrição da Revisão Commit da Revisão
1.0 Ver Commit 29/05/2025 Correções gerais ao diagrama de classes Altino Arthur, Márcio Henrique e Daniel de Sousa Revisor