Aplicação GoF's Comportamentais
1. Versionamento
Versão | Data | Descrição | Autor(es) |
---|---|---|---|
1.0 | 16/03/2022 | Abertura do documento | Brenno e Vitor Lamego |
1.1 | 16/03/2022 | Adição da aplicação State | Brenno |
1.2 | 16/03/2022 | Adição da aplicação Memento | Vitor Lamego |
1.3 | 18/03/2022 | Adição da aplicação Observer | Thiago |
1.3.1 | 20/03/2022 | Revisão por pares | Carlos e João |
2. Introdução
Após estudo dos padrões GOFs comportamentais, iremos demonstrar como eles podem ser aplicados no nosso contexto de estudo, isso é, utilizando Flutter, desenvolvido em Dart, e Django REST, desenvolvido em Python, de forma que os padrões podem ser aplicados a fim de colaborarem com um melhor desenvolvimento do código e padronização desses fatores.
3. Metodologia
A metodologia utilizada para a elaboração do documento foi cada membro responsável por esta tarefa documentar um padrão de projeto encontrado no código desenvolvido. Sendo assim, serão demonstrados três padrões de projetos, sendo eles: State, Memento e Observer. Vale ressaltar que o documento está sujeito a atualizações, caso o grupo sinta necessidade de apresentar novos padrões, ou até mesmo atualizar os já existentes.
4. GoF's Comportamentais
4.1 State
O padrão de projeto State apresenta a possibilidade de alterar o comportamento de um objeto tendo como base o estado atual. Ao utilizar o framework flutter é possível alterar elementos de uma página a partir da classe State. Ao criar uma página que estende a classe StatefulWidget é possível realizar alterações em estados nas páginas a partir do método setState.
Figura 1: Modelagem State
Fonte: Autores
Em nosso projeto esse padrão está sendo utilizado para que informações presentes nas telas da aplicação sejam alteradas de acordo com a necessidade, como exemplificado abaixo na tela de login:
Figura 2: Aplicação State
Fonte: Autores
4.2 Memento
A partir do estudo conseguimos definir que o padrão de projeto Memento salva e restaura estados anteriores de um objeto a partir de uma pilha. Além disso, foi definido a participação de duas classes dentro desse padrão de projeto, que serão comentadas posteriormente. A partir disso, foi feita uma análise no Flutter para identificar possíveis aplicações do padrão estudado.
Utilizando o Flutter, podemos perceber que a navegação a partir das interfaces do app são realizadas utilizando o padrão de Memento. A partir de uma pilha de memória, onde os estados das páginas vão sendo armazenados e restaurados quando for necessário.
Sendo assim, dentro do padrão temos a participação de duas classes: Cuidadora e Originadora. A partir disso, podemos definir que no Flutter a classe Navigator é a classe Cuidadora em questão, uma vez que é responsável por armazenar o histórico de cada estado da originadora em uma pilha e por sua vez, a classe Page acaba sendo a originadora nessa ocasião, sendo responsável por reproduzir cópias do seu próprio estado.
A seguir serão apresentadas imagens referentes às classes que fazem parte do padrão do projeto e a sua utilização no nosso aplicativo:
Figura 3: Classe Cuidadora
Fonte: Autores.
Figura 4: Classe Originadora
Fonte: Autores.
Figura 5: Aplicação no projeto
Fonte: Autores.
4.3 Observer
O padrão de projeto Observer fornece um mecanismo eficiente para reagir a determinadas alterações em um determinado objeto. Sendo assim, pode ser utilizado quando há a necessidade de realizar tarefas após uma determinada ação. Para isso, duas classes abstratas foram criadas: Observador, que representa um objeto que está aguardando alguma modificação, como mostra a Figura 5 e 6; e a Observável, que representa um objeto que suas alterações estão sendo observadas por outros objetos observadores, como mostra a Figura 7.
Em nosso projeto, há a necessidade de cadastrar um técnico e realizar diversas tarefas após isso. Como mostra a Figura 8, pode-se utilizar o padrão Observer para que diversas tarefas, como enviar um e-mail, SMS ou notificar a Emater, sejam executadas assim que um técnico é cadastrado. Desta forma, é possível adicionar novas tarefas de forma simples e eficiente