Identificação | Nome | Formação |
---|---|---|
![]() |
André Corrêa da Silva | Graduando em Engenharia de Software (UnB) |
![]() |
Gabriel Mariano da Silva | Graduando em Engenharia de Software (UnB) |
Tabela 1: Identificação dos Autores
O building block contido neste repositório tem por objetivo a implementação de uma Estrutura de Votação Simples, onde é proposto que o agente mediador escolha um valor numérico inteiro dado um intervalo pré-definido e que os agentes votantes busquem, dentro deste intervalo, escolher um número. O agente votante cuja escolha numérica mais se aproximar do valor definido pelo mediador é estabelecido como o vencedor. Há também a possibilidade de empate.
Inicialmente, o agente creator instancia todo o cenário para a execução das atividades do building block, criando os agentes votantes e o mediador das possíveis votações, para além de enviar uma mensagem de start para um agente votante escolhido randomicamente, a qual desencadeará toda a votação que será realizada.
O agente votante, tendo recebido uma mensagem de start por parte do agente creator, envia ao mediador uma mensagem solicitando a realização de uma votação, a qual é respondida pelo mesmo com um código identificador da votação a ser realizada e os valores mínimo e máximo para a eventual escolha dos votos.
O agente votante que solicitou a eleição, tendo recebido as informações iniciais da mesma pelo agente mediator, envia aos demais agentes votantes um convite para a mesma. Todos os agentes participantes da votação se registram nas páginas amarelas (i.e., no DF) com o código recebido, possibilitando assim a identificação de todos os participantes da mesma. O agente votante também se responsabiliza por informar ao mediador o quórum de agentes votantes convidados para a eleição.
Uma vez que todos os agentes votantes tenham se registrado na votação e informado o mesmo ao agente mediador o mesmo, este então solicita os votos a todos os participantes.
Os agentes votantes então escolhem um número randômico dentre o intervalo inicialmente fornecido e o enviam ao mediador. O agente votante que escolher o número mais próximo ao inicialmente escolhido pelo mediador é declarado o vencedor da votação. Há também a possibilidade de empate.
Por fim, o agente mediador informa os vencedores a todos os agentes votantes participantes e se responsabiliza por apagar todas as informações referentes à votação executada, permitindo assim que outras votações sejam requisitadas.
Abaixo, é apresentado o Diagrama de Classes que visa representar a estrutura e organização das classes que compõem o sistema, para além das relações entre estas.
Figura 1: Diagrama de Classes da Aplicação
Já abaixo, é apresentado o Diagrama de Sequências, o qual busca apresentar os fluxos de interação e algumas de suas nuances entre todas as classes (instanciadas enquanto agentes) da aplicação desenvolvida.
Figura 2: Diagrama de Sequências da Aplicação
Abaixo, na Figura 3, são apresentados os agentes participantes da votação através da visualização fornecida pelo sniffer. Nela, é possível ver o agente creator, o agente mediador e os agentes votantes.
Figura 3: Visualização dos Agentes pelo Sniffer
Já na Figura 4, vista abaixo, é possível ver a mensagem de start enviada do agente votante escolhido para o agente mediador, solicitando assim o início de uma votação.
Figura 4: Mensagem de Start Solicitando a Realização de uma Votação
Em seguida, na Figura 5, é possível ver a mensagem retornada do mediator para o agente votante com os dados respectivos à votação a ser realizada (i.e., o código identificador da votação e os limiares inferiores e superiores da votação).
Figura 5: Mensagem com as Informações da Votação
Por fim, é apresentado na Figura 6 a mensagem contendo o voto de um dos agentes participantes da votação, enviado ao agente mediator.
Figura 6: Mensagem com o Voto Enviado ao Mediador
- Criação de votação: mediante solicitação de um agente votante, é esperado que o agente mediador seja capaz de criar uma votação com um código de identificação único no contexto de execução e um intervalo de valores numéricos definido;
- Compartilhamento de votação: mediante recebimento do código de votação do mediador, é esperado que o agente votante que solicitou a votação compartilhe esse código com os outros agentes votantes, os quais devem se registrar no DF com o devido código para a efetiva participação na votação;
- Solicitação dos votos: após a visualização no DF dos agentes participantes da votação estabelecida, o agente mediador deve solicitar aos mesmos seus votos;
- Fornecimento dos votos: os agentes votantes devem, mediante requisição do agente, enviar seus votos ao agente mediador, os quais devem ser compostos por um número dentro do intervalo proposto;
- Contabilização do resultado: após o recebimento dos votos de todos os agentes votantes, o agente mediador deve ser capaz de avaliar os votos recebidos e determinar o vencedor da votação ou o empate da mesma;
- Informação do resultado: após a contabilização do resultado, o agente mediador deve informar a todos os agentes votantes participantes o resultado da votação;
- Deleção da votação: após a realização da votação, o agente mediador se responsabilizará por remover do DF os nomes dos agentes votantes da votação realizada.
Para a efetiva execução do building block disposto no repositório, se faz necessária a instalação e configuração do software Maven em sua máquina. Para tal, basta seguir as instruções de instalação dispostas na documentação do Maven. Para o desenvolvimento do building block, foi utilizado o Maven na versão 3.8.7. Além disso, todas as instruções de execução consideram o uso de sistemas operacionais baseados em Linux.
Para a execução do building block, é possível utilizar-se do Makefile adicionado ao repositório ao seguir os seguintes passos:
- Primeiramente, clone o repositório em sua máquina:
git clone https://github.com/SMA-building-blocks/simple-voting-structure.git
- Em seguida, vá para a pasta do repositório:
cd simple-voting-structure
- Para realizar a build do projeto e executá-lo em seguida, execute o seguinte comando:
make build-and-run
🚨 IMPORTANTE: Ao executar o projeto, primeiro será realizada a criação de todos os agentes participantes. Logo após, para a efetiva realização do propósito desejado pelo building block, é necessário pressionar ENTER no terminal para a continuidade da execução do código. Esta decisão foi tomada em prol de uma facilitação do uso do sniffer para a visualização da comunicação entre os agentes participantes.
- É possível realizar apenas a build do projeto com o seguinte comando:
make build
- Similarmente, é possível rodar o projeto após a geração de sua build com o seguinte comando:
make run
- É possível alterar a quantidade de agentes participantes ao passar a variável QUORUM seguida do número desejado, como pode ser visto abaixo (onde N representa o número desejado de agentes):
make build-and-run QUORUM=N
- Por fim, para apagar os arquivos derivados da build do projeto, execute o seguinte comando:
make clean
- Para ter acesso a uma série de informações úteis para a execução do building block, basta executar o seguinte comando:
make help