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 | — | — |