diff --git a/docs/ArquiteturaReutilizacao/4.1.1.DASmtp.md b/docs/ArquiteturaReutilizacao/4.1.1.DASmtp.md
new file mode 100644
index 0000000..06ab6a7
--- /dev/null
+++ b/docs/ArquiteturaReutilizacao/4.1.1.DASmtp.md
@@ -0,0 +1,203 @@
+# DAS
+
+## O documento em questão foi criado e desenvolvido pelos alunos [Mateus Orlando](https://github.com/MateusPy), [Pedro Lucas](https://github.com/AlefMemTav) e [Thiago Vivan](https://github.com/thiago-vivan). Para a sua criação, cada aluno fez um ou mais visões para que a produção fosse otimizada, segue a tabela:
+
+| Aluno | Visão |
+|-------------------------------------------------|-------------------------------------------------------------------------|
+| [Mateus Orlando](https://github.com/MateusPy) | Vissão Lógica, Visão de Implantação e Visão de Implementação. |
+| [Pedro Lucas](https://github.com/AlefMemTav) | Visão de Casos de Uso. |
+| [Thiago Vivan](https://github.com/thiago-vivan) | Visão de Estados. |
+
+## 1. Introdução
+
+O **Documento de Arquitetura de Software (DAS)** é um artefato fundamental no desenvolvimento de sistemas de software complexos, oferecendo uma visão abrangente da estrutura e organização do sistema. Ele descreve os componentes principais, suas interações e os princípios de design que guiam sua construção e evolução, facilitando a comunicação entre todas as partes interessadas e garantindo uma compreensão compartilhada do sistema.
+
+O DAS inclui várias visões arquiteturais, como a Visão Lógica, que detalha a organização conceitual do software em termos de camadas, subsistemas, pacotes, classes e interfaces, e a Visão de Implementação, que mostra a organização dos módulos, pacotes e camadas do modelo de implementação. Essas visões ajudam a reduzir a complexidade do sistema, suportam a tomada de decisões informadas e asseguram a manutenção da qualidade e a evolução contínua do software.
+
+## 2. Objetivo
+
+O artefato em questão tem como objetivo representar a arquitetura de software do projeto MyMarket através do modelo arquitetural **4+1** que é uma abordagem estruturada para descrever a arquitetura de software utilizando cinco vistas diferentes para capturar e abordar as diversas preocupações dos stakeholders. Este modelo foi proposto por Philippe Kruchten em 1995 e é amplamente utilizado na engenharia de software.
+
+![alt text](image.png)
+
+
Figura 01: Exemplo de modelo arquitetural 4+1. Fonte: Mateus Orlando, Pedro Lucas e Thiago Vivan.
+
+## 3. Visão de Casos de Uso
+
+Casos de uso são uma técnica de modelagem usada para descrever a funcionalidade de um sistema de forma a demonstrar como ele interage com entidades externas, conhecidas como atores. Em essência, um caso de uso descreve quem pode fazer o quê com o sistema em questão. Esta abordagem é utilizada para capturar requisitos funcionais, fornecendo uma visão clara de como o sistema deve se comportar.
+
+Casos de uso elicitados:
+
+
+| Código | Descrição do Caso de Uso |
+|---------|--------------------------------|
+| UC01 | Visualizar Cliente |
+| UC02 | Editar Cliente |
+| UC03 | Excluir Cliente |
+| UC04 | Consultar Cliente |
+| UC05 | Consultar Produto |
+| UC06 | Excluir Produto |
+| UC07 | Editar Produto |
+| UC08 | Visualizar Produto |
+| UC09 | Consultar Cliente |
+| UC10 | Consultar Cliente |
+| UC11 | Consultar Cliente |
+| UC12 | Cadastrar Material |
+| UC13 | Cadastrar Produto |
+| UC14 | Cadastrar Cliente |
+| UC15 | Cadastrar Pedido |
+| UC16 | Alterar Senha |
+| UC17 | Editar Dados do Usuário |
+| UC18 | Excluir Conta |
+| UC19 | Consultar Material |
+| UC20 | Editar Material |
+| UC21 | Visualizar Material |
+| UC22 | Excluir Material |
+| UC23 | Consultar Pedido |
+| UC24 | Excluir Pedido |
+| UC25 | Visualizar Pedido |
+| UC25 | Visualizar Lucro |
+| UC25 | Editar Pedido |
+
+
+Tabela 1: Casos de uso elicitados.
+Autor: Mateus Orlando.
+
+
+
+
+
Figura 02 - Diagrama de Casos de Uso.
Autor: Pedro Lucas.
+
+### diagrama de casos de uso (DCU)
+
+
+## 4. Visão Lógica
+
+A Visão Lógica é uma parte crucial do modelo arquitetural 4+1, focada na estrutura estática do sistema de software. Esta visão descreve como os principais elementos do sistema, como classes, pacotes e módulos, são organizados e como eles interagem entre si. A Visão Lógica facilita a compreensão das funcionalidades do sistema, destacando as principais entidades e suas relações. Ela é essencial para os desenvolvedores e designers de software, fornecendo uma base sólida para a implementação e evolução do sistema. Através de diagramas de classes e pacotes, a Visão Lógica oferece uma representação clara da arquitetura interna, garantindo que a estrutura do software seja bem compreendida e que os componentes estejam adequadamente organizados para suportar as funcionalidades desejadas.
+
+
+### 4.1 Diagrama de classes
+
+O diagrama de classes é uma representação fundamental na modelagem de sistemas orientados a objetos, oferecendo uma visão detalhada da estrutura estática do sistema. Este diagrama ilustra as classes que compõem o sistema, seus atributos, métodos, e os relacionamentos entre elas, como associações, heranças e dependências. Ao fornecer uma descrição clara das entidades do sistema e suas interações, o diagrama de classes facilita a compreensão da arquitetura interna e serve como uma base sólida para o desenvolvimento e a documentação do software. Ele é amplamente utilizado para projetar e comunicar a estrutura do software entre os membros da equipe de desenvolvimento, garantindo que todos tenham uma visão compartilhada e consistente do sistema.
+
+O diagrama de classes abaixo foi elaborado em conjunto, por todos os alunos do grupo.
+
+Para visualizar o diagrama de classes, clique [aqui](https://lucid.app/documents/embedded/6faa106a-bd21-44dc-8ed7-5a0dd9ee38c8).
+
+
+
+Este diagrama foi elaborado buscando observar e entender as classes existentes na aplicação e como elas se relacionam no escopo analisado, de avaliação de um produto. Com isso esta versão final deste diagrama possui a modelagem dos pontos identificados pelo grupo durante o projeto.
+
+### 4.2 Diagrama de Estados
+
+O diagrama de estados é uma ferramenta essencial na modelagem de sistemas dinâmicos, utilizada para representar os estados possíveis de um objeto ao longo do seu ciclo de vida e as transições entre esses estados. Cada estado reflete uma condição ou situação em que o objeto pode se encontrar, enquanto as transições indicam as mudanças de estado causadas por eventos ou condições específicas. Este diagrama é particularmente útil para entender e projetar o comportamento de objetos complexos que respondem a diversos estímulos. Ao proporcionar uma visualização clara das diferentes fases que um objeto pode atravessar, o diagrama de estados facilita a análise e a documentação dos aspectos dinâmicos do sistema, ajudando a garantir que o comportamento do software seja bem compreendido e corretamente implementado.
+
+O diagrama abaixo, representado na figura 2, foi modelado pelo aluno Guilherme Nishimura.
+
+*Fluxo de Reembolso :*
+
+
Figura 02 - Diagrama de Estados
Autores: Guilherme Nishimura
+
+Este diagrama detalhado foi essencial para garantir que todas as etapas e possíveis estados fossem considerados e bem definidos, proporcionando uma visão abrangente e clara do fluxo de reembolsos.
+
+### 4.3 Diagrama de Pacotes
+
+O diagrama de pacotes é uma ferramenta crucial na modelagem de sistemas de software, utilizada para organizar e visualizar a estrutura modular do sistema. Este diagrama mostra como o sistema é dividido em pacotes, que agrupam classes e outros elementos, e as dependências entre esses pacotes. Ao representar a hierarquia e a organização dos pacotes, o diagrama de pacotes ajuda a gerenciar a complexidade do sistema, facilitando a compreensão de suas partes constituintes e suas interações. Ele é particularmente útil para planejar a arquitetura do sistema, promovendo a modularidade e a reutilização de componentes. Além disso, o diagrama de pacotes auxilia na comunicação entre os membros da equipe de desenvolvimento, garantindo que todos tenham uma visão clara e coerente da estrutura do software.
+
+O diagrama abaixo foi elaborado pelo aluno Mateus Orlando.
+
+
+
+
Figura 03 - Diagrama de Pacotes.
+
Fonte: Mateus Orlando.
+
+
+## 5. Visão de Processo
+
+A visão de processo em um documento de arquitetura de software descreve os processos, atividades e fluxos de trabalho envolvidos no desenvolvimento, manutenção e evolução do software ao longo de seu ciclo de vida. Para representar a sequência lógica das atividades e o fluxo do sistema podemos utilizar do Diagrama de atividades, de sequência ou qualquer outra representação gráfica que indique como as atividades são executadas e como as informações fluem em diferentes partes do sistema.
+
+
+![alt text](sequencia.png)
+
+Figura 04: Diagrama de Sequência. Fonte: Thiago Vivan.
+
+
+## 6. Visão de Implementação
+
+A Visão de Implementação é um componente crítico do modelo arquitetural 4+1, focado em como o sistema de software é organizado em termos de seus componentes de código-fonte. Esta visão descreve a estrutura dos módulos, pacotes e camadas, além de ilustrar como eles são integrados para formar o sistema completo. A Visão de Implementação é essencial para desenvolvedores e gerentes de configuração, pois facilita a compreensão da arquitetura física do software e como as diferentes partes se inter-relacionam. Ao proporcionar uma visão clara da organização do código e das dependências entre os componentes, esta visão ajuda a garantir que o sistema seja modular, escalável e fácil de manter, suportando assim uma implementação eficaz e eficiente do software.
+
+Para esse visão, usamos o diagrama de componentes, apresentado a seguir, feito pelo aluno Guilherme Oliveira.
+
+
+
Figura 05 - Diagrama de Componentes
Autor: Guilherme de Oliveira
+
+
+## 7. Visão de Implantação
+
+Os diagramas de implantação são uma ferramenta essencial para arquitetos de software e engenheiros de sistemas, permitindo a visualização e o planejamento da distribuição física dos componentes de software. Eles garantem que todos os aspectos físicos da implantação do sistema sejam compreendidos e documentados, facilitando a comunicação entre as partes interessadas e assegurando uma implementação bem-sucedida do sistema.
+
+Este documento apresenta a arquitetura de implantação de um sistema distribuído, com foco em eficiência, segurança e escalabilidade. O sistema é estruturado em vários nós principais: Cliente, Proxy, Web Server e Database, cada um contendo componentes e entidades específicas. É importante destacar que o diagrama foi elaborado sem a definição completa das tecnologias a serem utilizadas, podendo sofrer alterações conforme as decisões do grupo evoluem.
+
+
+
Figura 06 - Diagrama de Implantação
Autor: Mateus Orlando
+
+
+
+
+### 7.1 Nó PC/Mobile
+- Componentes:
+ - Browser: Interface de usuário para acesso ao sistema.
+- Comunicação:
+ - Estabelece uma conexão TCP/IP com o nó Proxy.
+
+### 7.2 Nó Proxy
+- Componentes:
+ - Gerenciamento de Cache:
+ - Entidade Cache: Responsável por armazenar dados frequentemente acessados, melhorando a resposta do sistema.
+ - Segurança:
+ - Entidade Filtro de Navegação: Filtra requisições para segurança do sistema.
+- Comunicação:
+ - Conecta-se ao Web Server via HTTPS.
+
+### 7.3 Nó Web Server
+- Componentes:
+ - Permissão de Usuário: Gerencia as permissões e acessos dos usuários.
+ - Federação de Usuário: Facilita a autenticação de usuários de diferentes domínios.
+- Comunicação:
+ - Estabelece uma conexão TCP/IP com o nó DBServer.
+
+### 7.4 Nó Database
+- Componentes:
+ - MySQL: Responsável pelo armazenamento e gerenciamento de dados.
+
+### 7.5 Fluxo de Dados e Controle
+1. Do Cliente ao Proxy: O tráfego inicia no PC ou dispositivo mobile, passa pelo Browser e é direcionado ao Proxy via TCP/IP.
+2. Do Proxy ao Web Server: O Proxy processa as requisições, aplicando cache, segurança, antes de enviar ao Web Server via HTTPS.
+3. Do Web Server ao Database: Após processamento no Web Server, as requisições são encaminhadas para o Database para operações de dados.
+
+### Conclusão
+
+Este sistema apresenta uma arquitetura robusta e segura, com ênfase na eficiência de processamento, segurança da informação e privacidade do usuário. Cada nó e componente foi estrategicamente posicionado para otimizar a performance, garantir a segurança e permitir a escalabilidade do sistema. Através do detalhamento fornecido pelo diagrama de implantação, conseguimos visualizar claramente a distribuição física dos componentes e as suas interações, assegurando que a infraestrutura do "My Market" seja bem planejada e configurada para atender aos requisitos do projeto de forma eficaz. Esta abordagem não só facilita a comunicação entre as partes interessadas, mas também contribui para uma implementação bem-sucedida e sustentável do sistema.
+
+
+## Referências
+
+> **Arquitetura e Desenho de Software - Aula DAS**. Material de apoio em slides. Milene Serrano.
+
+> FAKHROUTDINOV, Kirill. UML. UML 2.5 Diagrams Overview. [S. l.], 2023. Disponível em: https://www.uml-diagrams.org/uml-25-diagrams.html. Acesso em: 02 ago. 2024.
+
+
+## Versionamento
+
+| Versão | Alteração | Responsável | Revisor | Data de realização |
+| :------: | :---: | :-----: | :----: | :----: |
+| 1.0 | Inicio da estrutura do documento. | [Mateus Orlando](https://github.com/MateusPy), [Pedro Lucas](https://github.com/AlefMemTav) e [Thiago Vivan](https://github.com/thiago-vivan) | [Thiago Vivan](https://github.com/thiago-vivan) | 02/08/2024 |
+| 2.0 | Alteração da descrção do diagrama de implantação | [Mateus Orlando](https://github.com/MateusPy), [Pedro Lucas](https://github.com/AlefMemTav) e [Thiago Vivan](https://github.com/thiago-vivan) | [Thiago Vivan](https://github.com/thiago-vivan) | 03/08/2024 |
+| 3.0 | Modelagem do diagrama de implantação | [Mateus Orlando](https://github.com/MateusPy), [Pedro Lucas](https://github.com/AlefMemTav) e [Thiago Vivan](https://github.com/thiago-vivan) | [Thiago Vivan](https://github.com/thiago-vivan) | 03/08/2024 |
+| 3.1 | Adição do diagrama de implantação na documentação | [Mateus Orlando](https://github.com/MateusPy), [Pedro Lucas](https://github.com/AlefMemTav) e [Thiago Vivan](https://github.com/thiago-vivan) | [Thiago Vivan](https://github.com/thiago-vivan) | 05/08/2024 |
+| 4.0 | Adição dos seguintes diagramas a Visão Lógica: Classes, Estados e Pacotes | [Mateus Orlando](https://github.com/MateusPy), [Pedro Lucas](https://github.com/AlefMemTav) e [Thiago Vivan](https://github.com/thiago-vivan) | [Thiago Vivan](https://github.com/thiago-vivan) | 05/08/2024 |
+| 5.0 | Adição da Visão de Implementação | [Mateus Orlando](https://github.com/MateusPy), [Pedro Lucas](https://github.com/AlefMemTav) e [Thiago Vivan](https://github.com/thiago-vivan) | [Thiago Vivan](https://github.com/thiago-vivan) | 05/08/2024 |
+| 5.0 | Adição da Visão de Casos de Uso | [Mateus Orlando](https://github.com/MateusPy), [Pedro Lucas](https://github.com/AlefMemTav) e [Thiago Vivan](https://github.com/thiago-vivan) | [Thiago Vivan](https://github.com/thiago-vivan) | 05/08/2024 |
+
+
+
diff --git a/docs/ArquiteturaReutilizacao/4.2.1.mateus.md b/docs/ArquiteturaReutilizacao/4.2.1.CPFValidator.md
similarity index 89%
rename from docs/ArquiteturaReutilizacao/4.2.1.mateus.md
rename to docs/ArquiteturaReutilizacao/4.2.1.CPFValidator.md
index 604becc..1e3810c 100644
--- a/docs/ArquiteturaReutilizacao/4.2.1.mateus.md
+++ b/docs/ArquiteturaReutilizacao/4.2.1.CPFValidator.md
@@ -2,7 +2,7 @@
## CPF Validator
-Na segunda etapa do projeto, foram modelados diagramas que se enquadravam em duas denominações os Estáticos(Classes, Pacotes, Componentes e Implantação) e os Dinâmicos(de Atividades e o de Estados), por meio dos quais podemos observar e compreender diversas pates do sistema. Ao olhar para o diagrama de **classes**, especificamente para a classe **Cliente** constatamos que o usuário cliente tem que possuir um cpf, e para isso, no momento do login, o cpf inserido deve ser validado.
+Na segunda etapa do projeto, foram modelados diagramas que se enquadravam em duas denominações os Estáticos(Classes, Pacotes, Componentes e Implantação) e os Dinâmicos(de Atividades e o de Estados), por meio dos quais podemos observar e compreender diversas partes do sistema. Ao olhar para o diagrama de **classes**, especificamente para a classe **Cliente** constatamos que o usuário cliente tem que possuir um cpf, e para isso, no momento do login, o cpf inserido deve ser validado.
Para essa validação, foi utilizado um código já existente utilizado por um dos membros em outros projetos e foi adaptado para o nosso contexto. O código em questão foi criado utilizando o padrão GoF Strategy que será apresentado a seguir:
@@ -45,7 +45,7 @@ A classe ValidadorCPFContext, apresentada na figura 04 abaixo, é usada para apl
### 5. Exemplo de Uso
-Para testar o validador, fizemos o teste apresentado abaixo na figura 05 e06.
+Para testar o validador, fizemos o teste apresentado abaixo na figura 05 e 06.
![image](https://github.com/user-attachments/assets/9746cb35-3937-482b-8398-69ef4a564d9d)
@@ -56,6 +56,8 @@ Para testar o validador, fizemos o teste apresentado abaixo na figura 05 e06.
Figura 05: Resultado do teste. Fonte: Mateus Orlando.
+**Manual do teste: [clique aqui](https://github.com/UnBArqDsw2024-1/2024.1_G7_My_Market/blob/reutilizacaoMateus/docs/ArquiteturaReutilizacao/cpfValidador/comoRodar.md)**
+
## Versionamento
| Versão | Alteração | Responsável | Revisor | Data de realização |
diff --git a/docs/ArquiteturaReutilizacao/4.2.2.ChainsOfResponsibility.md b/docs/ArquiteturaReutilizacao/4.2.2.ChainsOfResponsibility.md
new file mode 100644
index 0000000..a7858d5
--- /dev/null
+++ b/docs/ArquiteturaReutilizacao/4.2.2.ChainsOfResponsibility.md
@@ -0,0 +1,92 @@
+# Reutilização
+
+# Chains Of Responsibility
+
+## Objetivo
+
+Na terceira entrega do projeto fomos introduzidos aos Gofs, que são padrões de design amplamente utilizados por desenvolvedores para criar software mais flexível, reutilizável e de fácil manutenção. Dentre eles estão os GoFs comportamentais que se concentram na interação entre objetos. Nesse sentido um dos Gofs comportamentais utilizados foi o **Chains Of Responsibility** que é um padrão que permite que um pedido seja processado por uma cadeia de handlers (manipuladores), onde cada handler tem a oportunidade de processar o pedido ou passá-lo para o próximo na cadeia.
+
+Tendo isso em vista, para o projeto My Market um pedido precisa passar por um processamento até ser confirmado a venda. Logo, o padrão **Chains Of Responsibility** foi utilizado para a implementação dessa funcionalidade assim como é apresentado no diagrama abaixo, modelado utilizando a ferramenta online [Lucidchart](https://www.lucidchart.com/pages/) pelos alunos [Mateus Orlando](https://github.com/MateusPy), [Pedro Lucas](https://github.com/AlefMemTav) e [Thiago Vivan](https://github.com/thiago-vivan):
+
+![image](https://github.com/user-attachments/assets/767e17d8-0009-4954-a945-230d875ed61e)
+
+Figura 01: Diagrama de Classes utilizando o padrão comportamental Chains of Responsibility. Fonte: Mateus Orlando, Pedro Lucas e Thiago Vivan.
+
+O padrão Strategy define uma família de algoritmos, encapsula cada um deles e os torna intercambiáveis. No caso do validador de CPF, você pode implementar o padrão Strategy se desejar ter diferentes métodos de validação que podem ser aplicados de acordo com a necessidade.
+
+
+Neste sentido, criaremos diferentes estratégias para validar o CPF de um usuário:
+
+## Código
+
+O código em java a seguir foi desenvolvido pelos alunos [Mateus Orlando](https://github.com/MateusPy), [Pedro Lucas](https://github.com/AlefMemTav) e [Thiago Vivan](https://github.com/thiago-vivan).
+
+### 1. Interface
+
+A interface Handler, apresentada na figura 02 abaixo, abstrai a lógica de encadeamento e processamento dos handlers, permitindo que cada implementação concreta de um handler se concentre em sua lógica específica.
+
+![image](https://github.com/user-attachments/assets/191fb79c-9aee-4591-828a-27673fc534f4)
+
+Figura 02: Interface Handler. Fonte: Mateus Orlando.
+
+### 2. Classe BaseHandler
+
+A classe BaseHandler, apresentada na figura 03 abaixo, serve como uma base para outros handlers. Ao implementar a lógica de encadeamento aqui, as subclasses podem se concentrar apenas em suas responsabilidades específicas, reutilizando o código de encadeamento.
+
+![image](https://github.com/user-attachments/assets/ca68867f-ce0d-4338-ba8e-574d430e4647)
+
+Figura 03: Classe BaseHandler. Fonte: Mateus Orlando.
+
+### 3. Classe EstoqueHandler
+
+A classe EstoqueHandler, apresentada na figura 04 abaixo, lida com a primeira etapa do processo de validação do pedido (verificação de estoque). Se o estoque for suficiente, o pedido segue para o próximo handler na cadeia.
+
+![image](https://github.com/user-attachments/assets/5db8b08b-0680-4151-b455-75ae7106e098)
+
+Figura 04: Classe EstoqueHandler. Fonte: Mateus Orlando.
>
+
+### 4. Classe PagamentoHandler
+
+A classe PagamentoHandler, apresentada na figura 05 abaixo, lida com a segunda etapa do processo de validação do pedido (validação de pagamento). Se o pagamento for validado, o pedido segue para o próximo handler na cadeia.
+
+![image](https://github.com/user-attachments/assets/97adf628-0b7a-48ec-9feb-1b1eb7db0d90)
+
+Figura 05: Classe PagamentoHandler. Fonte: Mateus Orlando.
+
+### 5. Classe GerenteHandler
+
+A classe GerenteHandler, apresentada na figura 06 abaixo, lida com a etapa final do processo de validação do pedido (aprovação gerencial). Se o pedido for aprovado pelo gerente, ele pode ser finalizado ou continuar na cadeia, se necessário.
+
+![image](https://github.com/user-attachments/assets/62c5d26f-0193-4e8b-9bfe-59421ee286e4)
+
+Figura 06: Classe GerenteHandler. Fonte: Mateus Orlando.
+
+### 6. Classe Request
+
+A classe Request, apresentada na figura 07 abaixo, encapsula os dados que precisam ser verificados em cada etapa do processo. Cada handler acessa esses dados para determinar se o pedido deve ser processado ou rejeitado.
+
+![image](https://github.com/user-attachments/assets/469b9764-2f76-4207-b084-1d779d8d205a)
+
+Figura 07: Classe Request. Fonte: Mateus Orlando.
+
+### 7. Exemplo de Uso
+
+Para testar a funcionalidade, fizemos o teste apresentado abaixo na figura 08 e 09.
+
+![image](https://github.com/user-attachments/assets/dee94c50-fb71-482e-b370-887b5fb3c4b6)
+
+Figura 08: Classe ChainOfResponsibility que testa a funcionalidade. Fonte: Mateus Orlando.
+
+![image](https://github.com/user-attachments/assets/528a42b2-d0aa-4a2f-9f9a-f4f0dfb21cd2)
+
+Figura 09: Resultado do teste. Fonte: Mateus Orlando.
+
+**Manual do teste: [clique aqui](https://github.com/UnBArqDsw2024-1/2024.1_G7_My_Market/blob/reutilizacaoMateus/docs/ArquiteturaReutilizacao/ChainsOfResponsibility/comoRodar.md)**
+
+## Versionamento
+
+| Versão | Alteração | Responsável | Revisor | Data de realização |
+| :------: | :---: | :-----: | :----: | :----: |
+| 1.0 | Criação do código | [Mateus Orlando](https://github.com/MateusPy) | 22/07/2024 |
+| 2.0 | Documentação do código de Processo de pagamento | [Mateus Orlando](https://github.com/MateusPy) | 14/08/2024 |
+| 2.1 | Adição das imagens ao documento | [Mateus Orlando](https://github.com/MateusPy) | 14/08/2024 |
diff --git a/docs/ArquiteturaReutilizacao/Observer.md b/docs/ArquiteturaReutilizacao/4.2.3.Observer.md
similarity index 100%
rename from docs/ArquiteturaReutilizacao/Observer.md
rename to docs/ArquiteturaReutilizacao/4.2.3.Observer.md
diff --git a/docs/ArquiteturaReutilizacao/ChainsOfResponsibility/BaseHandler.java b/docs/ArquiteturaReutilizacao/ChainsOfResponsibility/BaseHandler.java
new file mode 100644
index 0000000..5f3677d
--- /dev/null
+++ b/docs/ArquiteturaReutilizacao/ChainsOfResponsibility/BaseHandler.java
@@ -0,0 +1,19 @@
+package ChainsOfResponsibility;
+
+public abstract class BaseHandler implements Handler {
+ private Handler nextHandler;
+
+ @Override
+ public Handler setNext(Handler handler) {
+ this.nextHandler = handler;
+ return handler;
+ }
+
+ @Override
+ public String handle(Request request) {
+ if (this.nextHandler != null) {
+ return this.nextHandler.handle(request);
+ }
+ return null;
+ }
+}
diff --git a/docs/ArquiteturaReutilizacao/ChainsOfResponsibility/ChainOfResponsibilityTest.java b/docs/ArquiteturaReutilizacao/ChainsOfResponsibility/ChainOfResponsibilityTest.java
new file mode 100644
index 0000000..01bcf97
--- /dev/null
+++ b/docs/ArquiteturaReutilizacao/ChainsOfResponsibility/ChainOfResponsibilityTest.java
@@ -0,0 +1,47 @@
+package ChainsOfResponsibility;
+
+public class ChainOfResponsibilityTest {
+ public static void main(String[] args) {
+ // Criar os handlers
+ Handler estoqueHandler = new EstoqueHandler();
+ Handler pagamentoHandler = new PagamentoHandler();
+ Handler gerenteHandler = new GerenteHandler();
+
+ // Configurar a cadeia de responsabilidade
+ estoqueHandler.setNext(pagamentoHandler).setNext(gerenteHandler);
+
+ // Criar um objeto de request que passará pela cadeia
+ Request request1 = new Request();
+ request1.setEstoqueDisponivel(true);
+ request1.setPagamentoValidado(true);
+ request1.setAprovadoPeloGerente(true);
+
+ // Teste 1: Todos os passos são bem-sucedidos
+ System.out.println("Teste 1: " + estoqueHandler.handle(request1)); // Esperado: cadeia completa sem rejeições
+
+ // Teste 2: Estoque insuficiente
+ Request request2 = new Request();
+ request2.setEstoqueDisponivel(false);
+ request2.setPagamentoValidado(true);
+ request2.setAprovadoPeloGerente(true);
+
+ System.out.println("Teste 2: " + estoqueHandler.handle(request2)); // Esperado: Pedido rejeitado: estoque insuficiente.
+
+ // Teste 3: Pagamento não validado
+ Request request3 = new Request();
+ request3.setEstoqueDisponivel(true);
+ request3.setPagamentoValidado(false);
+ request3.setAprovadoPeloGerente(true);
+
+ System.out.println("Teste 3: " + estoqueHandler.handle(request3)); // Esperado: Pedido rejeitado: pagamento não validado.
+
+ // Teste 4: Não aprovado pelo gerente
+ Request request4 = new Request();
+ request4.setEstoqueDisponivel(true);
+ request4.setPagamentoValidado(true);
+ request4.setAprovadoPeloGerente(false);
+
+ System.out.println("Teste 4: " + estoqueHandler.handle(request4)); // Esperado: Pedido rejeitado: não aprovado pelo gerente.
+ }
+}
+
diff --git a/docs/ArquiteturaReutilizacao/ChainsOfResponsibility/EstoqueHandler.java b/docs/ArquiteturaReutilizacao/ChainsOfResponsibility/EstoqueHandler.java
new file mode 100644
index 0000000..39ba668
--- /dev/null
+++ b/docs/ArquiteturaReutilizacao/ChainsOfResponsibility/EstoqueHandler.java
@@ -0,0 +1,13 @@
+package ChainsOfResponsibility;
+
+public class EstoqueHandler extends BaseHandler {
+ @Override
+ public String handle(Request request) {
+ if (request.isEstoqueDisponivel()) {
+ System.out.println("Estoque verificado.");
+ return super.handle(request);
+ } else {
+ return "Pedido rejeitado: estoque insuficiente.";
+ }
+ }
+}
diff --git a/docs/ArquiteturaReutilizacao/ChainsOfResponsibility/GerenteHandler.java b/docs/ArquiteturaReutilizacao/ChainsOfResponsibility/GerenteHandler.java
new file mode 100644
index 0000000..e28799e
--- /dev/null
+++ b/docs/ArquiteturaReutilizacao/ChainsOfResponsibility/GerenteHandler.java
@@ -0,0 +1,13 @@
+package ChainsOfResponsibility;
+
+public class GerenteHandler extends BaseHandler {
+ @Override
+ public String handle(Request request) {
+ if (request.isAprovadoPeloGerente()) {
+ System.out.println("Aprovado pelo gerente.");
+ return super.handle(request);
+ } else {
+ return "Pedido rejeitado: não aprovado pelo gerente.";
+ }
+ }
+}
diff --git a/docs/ArquiteturaReutilizacao/ChainsOfResponsibility/Handler.java b/docs/ArquiteturaReutilizacao/ChainsOfResponsibility/Handler.java
new file mode 100644
index 0000000..a63573e
--- /dev/null
+++ b/docs/ArquiteturaReutilizacao/ChainsOfResponsibility/Handler.java
@@ -0,0 +1,6 @@
+package ChainsOfResponsibility;
+
+public interface Handler {
+ Handler setNext(Handler handler);
+ String handle(Request request);
+}
diff --git a/docs/ArquiteturaReutilizacao/ChainsOfResponsibility/PagamentoHandler.java b/docs/ArquiteturaReutilizacao/ChainsOfResponsibility/PagamentoHandler.java
new file mode 100644
index 0000000..fb442c9
--- /dev/null
+++ b/docs/ArquiteturaReutilizacao/ChainsOfResponsibility/PagamentoHandler.java
@@ -0,0 +1,13 @@
+package ChainsOfResponsibility;
+
+public class PagamentoHandler extends BaseHandler {
+ @Override
+ public String handle(Request request) {
+ if (request.isPagamentoValidado()) {
+ System.out.println("Pagamento validado.");
+ return super.handle(request);
+ } else {
+ return "Pedido rejeitado: pagamento não validado.";
+ }
+ }
+}
diff --git a/docs/ArquiteturaReutilizacao/ChainsOfResponsibility/Request.java b/docs/ArquiteturaReutilizacao/ChainsOfResponsibility/Request.java
new file mode 100644
index 0000000..4c8dd40
--- /dev/null
+++ b/docs/ArquiteturaReutilizacao/ChainsOfResponsibility/Request.java
@@ -0,0 +1,31 @@
+package ChainsOfResponsibility;
+
+public class Request {
+ private boolean estoqueDisponivel;
+ private boolean pagamentoValidado;
+ private boolean aprovadoPeloGerente;
+
+ public boolean isEstoqueDisponivel() {
+ return estoqueDisponivel;
+ }
+
+ public void setEstoqueDisponivel(boolean estoqueDisponivel) {
+ this.estoqueDisponivel = estoqueDisponivel;
+ }
+
+ public boolean isPagamentoValidado() {
+ return pagamentoValidado;
+ }
+
+ public void setPagamentoValidado(boolean pagamentoValidado) {
+ this.pagamentoValidado = pagamentoValidado;
+ }
+
+ public boolean isAprovadoPeloGerente() {
+ return aprovadoPeloGerente;
+ }
+
+ public void setAprovadoPeloGerente(boolean aprovadoPeloGerente) {
+ this.aprovadoPeloGerente = aprovadoPeloGerente;
+ }
+}
diff --git a/docs/ArquiteturaReutilizacao/ChainsOfResponsibility/comoRodar.md b/docs/ArquiteturaReutilizacao/ChainsOfResponsibility/comoRodar.md
new file mode 100644
index 0000000..50b2197
--- /dev/null
+++ b/docs/ArquiteturaReutilizacao/ChainsOfResponsibility/comoRodar.md
@@ -0,0 +1,21 @@
+# Passo a Passo para testar o validador
+
+1 - vá ao diretório ArquiteturaReutilizacao
+
+2 - compile os arquivos através do código:
+
+```
+javac ChainsOfResponsibility/*.java
+```
+
+3 - Execute a classe teste ChainOfResponsibilityTest:
+
+```
+java ChainsOfResponsibility.ChainOfResponsibilityTest
+```
+
+## **Obs**: Após a compilação, certifique-se de que os arquivos .class estão no diretório ChainsOfResponsibility. O Java precisa encontrar a classe compilada no mesmo diretório indicado pelo pacote, semelhante a imagem abaixo:
+
+![image](https://github.com/user-attachments/assets/e6089d29-6616-4230-a6ef-cb30540167a7)
+
+Figura 01: Arquivos ".class". Fonte: Mateus Orlando
diff --git a/docs/ArquiteturaReutilizacao/image.png b/docs/ArquiteturaReutilizacao/image.png
new file mode 100644
index 0000000..03c77c2
Binary files /dev/null and b/docs/ArquiteturaReutilizacao/image.png differ
diff --git a/docs/ArquiteturaReutilizacao/sequencia.png b/docs/ArquiteturaReutilizacao/sequencia.png
new file mode 100644
index 0000000..b92a0eb
Binary files /dev/null and b/docs/ArquiteturaReutilizacao/sequencia.png differ
diff --git a/docs/PadroesDeProjeto/src/ChainsOfResponsibility/BaseHandler.java b/docs/PadroesDeProjeto/src/ChainsOfResponsibility/BaseHandler.java
new file mode 100644
index 0000000..5f3677d
--- /dev/null
+++ b/docs/PadroesDeProjeto/src/ChainsOfResponsibility/BaseHandler.java
@@ -0,0 +1,19 @@
+package ChainsOfResponsibility;
+
+public abstract class BaseHandler implements Handler {
+ private Handler nextHandler;
+
+ @Override
+ public Handler setNext(Handler handler) {
+ this.nextHandler = handler;
+ return handler;
+ }
+
+ @Override
+ public String handle(Request request) {
+ if (this.nextHandler != null) {
+ return this.nextHandler.handle(request);
+ }
+ return null;
+ }
+}
diff --git a/docs/PadroesDeProjeto/src/ChainsOfResponsibility/ChainOfResponsibilityTest.java b/docs/PadroesDeProjeto/src/ChainsOfResponsibility/ChainOfResponsibilityTest.java
new file mode 100644
index 0000000..01bcf97
--- /dev/null
+++ b/docs/PadroesDeProjeto/src/ChainsOfResponsibility/ChainOfResponsibilityTest.java
@@ -0,0 +1,47 @@
+package ChainsOfResponsibility;
+
+public class ChainOfResponsibilityTest {
+ public static void main(String[] args) {
+ // Criar os handlers
+ Handler estoqueHandler = new EstoqueHandler();
+ Handler pagamentoHandler = new PagamentoHandler();
+ Handler gerenteHandler = new GerenteHandler();
+
+ // Configurar a cadeia de responsabilidade
+ estoqueHandler.setNext(pagamentoHandler).setNext(gerenteHandler);
+
+ // Criar um objeto de request que passará pela cadeia
+ Request request1 = new Request();
+ request1.setEstoqueDisponivel(true);
+ request1.setPagamentoValidado(true);
+ request1.setAprovadoPeloGerente(true);
+
+ // Teste 1: Todos os passos são bem-sucedidos
+ System.out.println("Teste 1: " + estoqueHandler.handle(request1)); // Esperado: cadeia completa sem rejeições
+
+ // Teste 2: Estoque insuficiente
+ Request request2 = new Request();
+ request2.setEstoqueDisponivel(false);
+ request2.setPagamentoValidado(true);
+ request2.setAprovadoPeloGerente(true);
+
+ System.out.println("Teste 2: " + estoqueHandler.handle(request2)); // Esperado: Pedido rejeitado: estoque insuficiente.
+
+ // Teste 3: Pagamento não validado
+ Request request3 = new Request();
+ request3.setEstoqueDisponivel(true);
+ request3.setPagamentoValidado(false);
+ request3.setAprovadoPeloGerente(true);
+
+ System.out.println("Teste 3: " + estoqueHandler.handle(request3)); // Esperado: Pedido rejeitado: pagamento não validado.
+
+ // Teste 4: Não aprovado pelo gerente
+ Request request4 = new Request();
+ request4.setEstoqueDisponivel(true);
+ request4.setPagamentoValidado(true);
+ request4.setAprovadoPeloGerente(false);
+
+ System.out.println("Teste 4: " + estoqueHandler.handle(request4)); // Esperado: Pedido rejeitado: não aprovado pelo gerente.
+ }
+}
+
diff --git a/docs/PadroesDeProjeto/src/ChainsOfResponsibility/EstoqueHandler.java b/docs/PadroesDeProjeto/src/ChainsOfResponsibility/EstoqueHandler.java
new file mode 100644
index 0000000..39ba668
--- /dev/null
+++ b/docs/PadroesDeProjeto/src/ChainsOfResponsibility/EstoqueHandler.java
@@ -0,0 +1,13 @@
+package ChainsOfResponsibility;
+
+public class EstoqueHandler extends BaseHandler {
+ @Override
+ public String handle(Request request) {
+ if (request.isEstoqueDisponivel()) {
+ System.out.println("Estoque verificado.");
+ return super.handle(request);
+ } else {
+ return "Pedido rejeitado: estoque insuficiente.";
+ }
+ }
+}
diff --git a/docs/PadroesDeProjeto/src/ChainsOfResponsibility/GerenteHandler.java b/docs/PadroesDeProjeto/src/ChainsOfResponsibility/GerenteHandler.java
new file mode 100644
index 0000000..e28799e
--- /dev/null
+++ b/docs/PadroesDeProjeto/src/ChainsOfResponsibility/GerenteHandler.java
@@ -0,0 +1,13 @@
+package ChainsOfResponsibility;
+
+public class GerenteHandler extends BaseHandler {
+ @Override
+ public String handle(Request request) {
+ if (request.isAprovadoPeloGerente()) {
+ System.out.println("Aprovado pelo gerente.");
+ return super.handle(request);
+ } else {
+ return "Pedido rejeitado: não aprovado pelo gerente.";
+ }
+ }
+}
diff --git a/docs/PadroesDeProjeto/src/ChainsOfResponsibility/Handler.java b/docs/PadroesDeProjeto/src/ChainsOfResponsibility/Handler.java
new file mode 100644
index 0000000..a63573e
--- /dev/null
+++ b/docs/PadroesDeProjeto/src/ChainsOfResponsibility/Handler.java
@@ -0,0 +1,6 @@
+package ChainsOfResponsibility;
+
+public interface Handler {
+ Handler setNext(Handler handler);
+ String handle(Request request);
+}
diff --git a/docs/PadroesDeProjeto/src/ChainsOfResponsibility/PagamentoHandler.java b/docs/PadroesDeProjeto/src/ChainsOfResponsibility/PagamentoHandler.java
new file mode 100644
index 0000000..fb442c9
--- /dev/null
+++ b/docs/PadroesDeProjeto/src/ChainsOfResponsibility/PagamentoHandler.java
@@ -0,0 +1,13 @@
+package ChainsOfResponsibility;
+
+public class PagamentoHandler extends BaseHandler {
+ @Override
+ public String handle(Request request) {
+ if (request.isPagamentoValidado()) {
+ System.out.println("Pagamento validado.");
+ return super.handle(request);
+ } else {
+ return "Pedido rejeitado: pagamento não validado.";
+ }
+ }
+}
diff --git a/docs/PadroesDeProjeto/src/ChainsOfResponsibility/Request.java b/docs/PadroesDeProjeto/src/ChainsOfResponsibility/Request.java
new file mode 100644
index 0000000..4c8dd40
--- /dev/null
+++ b/docs/PadroesDeProjeto/src/ChainsOfResponsibility/Request.java
@@ -0,0 +1,31 @@
+package ChainsOfResponsibility;
+
+public class Request {
+ private boolean estoqueDisponivel;
+ private boolean pagamentoValidado;
+ private boolean aprovadoPeloGerente;
+
+ public boolean isEstoqueDisponivel() {
+ return estoqueDisponivel;
+ }
+
+ public void setEstoqueDisponivel(boolean estoqueDisponivel) {
+ this.estoqueDisponivel = estoqueDisponivel;
+ }
+
+ public boolean isPagamentoValidado() {
+ return pagamentoValidado;
+ }
+
+ public void setPagamentoValidado(boolean pagamentoValidado) {
+ this.pagamentoValidado = pagamentoValidado;
+ }
+
+ public boolean isAprovadoPeloGerente() {
+ return aprovadoPeloGerente;
+ }
+
+ public void setAprovadoPeloGerente(boolean aprovadoPeloGerente) {
+ this.aprovadoPeloGerente = aprovadoPeloGerente;
+ }
+}