Skip to content

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

Figura 6: Diagrama de classes da aplicação
Fonte: Autores.


Figura 7: Classe Observador
Fonte: Autores.


Figura 8: Classe Observável
Fonte: Autores.


Figura 9: Aplicação no projeto no cadastro de um técnico
Fonte: Autores.