UNIVERSIDADE FEDERAL DO PARÁ

CAMPUS UNIVERSITÁRIO DE CASTANHAL

FACULDADE DE COMPUTAÇÃO

SISTEMAS DE INFORMAÇÃO

 

 

 

CRIAÇÃO DE UM QUIZ EM SISTEMAS DISTRIBUÍDO COM PYTHON

 

George Lucas Assad[1]

Lucas dos Santos Soares[2]

 

INTRODUÇÃO

Os sistemas distribuídos são amplamente utilizados em vários campos, como computação em nuvem, Internet das Coisas (IoT), jogos online e redes sociais. Isso permite que diferentes partes do sistema sejam executadas em redes, hardwares, computadores com sistemas operacionais e até mesmo usando linguagens de programação totalmente diferentes uns dos outros.

Os Quizzes ainda são amplamente utilizados em vários campos, como educação, entretenimento e marketing. Estes questionários são uma maneira divertida de testar seu conhecimento sobre um tópico específico e podem ser usados para fins educacionais, como por exemplo, para avaliar o conhecimento de alunos.

Este artigo tem como objetivo o desenvolvimento de um questionário em sistemas distribuídos usando a linguagem de programação Python. O tema foi escolhido por ser uma área em constante crescimento e por apresentar desafios interessantes para os desenvolvedores. Python é uma linguagem de alto nível amplamente utilizada para desenvolvimento de aplicações distribuídas devido a sua facilidade de uso e flexibilidade. Ao decorrer do artigo, discutiremos os conceitos básicos de sistemas distribuídos e Python, bem como as etapas envolvidas no desenvolvimento de um quiz em sistemas distribuídos com Python.

 

Palavras-chave: Quiz. Sistemas distribuídos. Python.

 

 

REFERÊNCIAL TEÓRICO

QUIZ

Quiz é um jogo com várias perguntas, podendo ser jogado individualmente ou em grupo com o objetivo de acertar o máximo de respostas. É uma forma popular de avaliar o conhecimento, seja em um ambiente educacional ou em uma plataforma de entretenimento. Os questionários podem ser projetados para serem executados em várias plataformas, incluindo aplicativos móveis, sites e até mesmo ambientes de linha de comando.

 

SISTEMAS DISTRIBUÍDOS

            Um sistema distribuído é definido como um conjunto de componentes de hardware ou software em computadores conectados em rede que se comunicam e coordenam suas ações através do envio de mensagens entre si. (COULOURIS, G. et al, 2001). Tais sistemas oferecem benefícios como desempenho aprimorado, escalabilidade e confiabilidade. Esses sistemas podem ser usados em uma variedade de aplicações, como rede de computadores, computação em nuvem, processamento de big data e em jogos multiplayer online.

           

PYTHON

            Josué Labaki (2003, p. 05) define que “Python é uma linguagem de programação de altíssimo nível (VHLL – Very High Level Language), criada pelo holandês Guido Van Rossum sob o ideal de ‘Programação de Computadores para todos’ “. Python é uma linguagem fácil de aprender e poderosa. Ela apresenta estruturas de dados eficientes de alto nível e uma abordagem simples, mas eficaz, para programação orientada a objetos. A sintaxe simples e a digitação dinâmica do Python, combinadas com sua natureza interpretada, o tornam uma linguagem ideal para o desenvolvimento rápido de programas e aplicativos em muitos domínios e na maioria das plataformas.

 

BIBLIOTECAS PYTHON

            Bibliotecas em Python são conjuntos de módulos e funções úteis que reduzem o uso de código no programa (M., 2022). Esses módulos são bem documentados e oferecem uma maneira eficiente de realizar tarefas comuns sem a necessidade de escrever código do zero. Desenvolvedores profissionais aproveitam esses módulos para economizar tempo e aumentar a eficiência no processo de programação.

            Há uma ampla variedade de bibliotecas Python disponíveis para atender a diversas necessidades. Algumas das bibliotecas mais populares incluem NumPy e pandas para processamento de dados, scikit-learn e TensorFlow para aprendizado de máquina, Matplotlib e Seaborn para visualização de dados, e Django e Flask para desenvolvimento web, entre muitas outras. Para o desenvolvimento do Quiz em Sistemas Distribuído será utilizado as bibliotecas socket, pickle e tkinter.

            SOCKET

            A biblioteca socket em Python fornece acesso à interface de soquetes BSD (Berkeley Socket Distribution), que é uma maneira de se comunicar com outros programas usando o protocolo TCP/IP (“HOWTO sobre a Programação de Soquetes — documentação Python 3.8.16”, [s.d.]). Essa biblioteca permite a criação de conexões de rede, que envia e recebe dados através dessas conexões.

            PICKLE

            A biblioteca pickle em Python implementa protocolos binários para serializar e deserializar uma estrutura de objeto Python. “Pickling” é o processo pelo qual uma hierarquia de objetos Python é convertida em um fluxo de bytes, e “unpickling” é a operação inversa, na qual um fluxo de bytes (de um arquivo binário ou objeto semelhante a bytes) é convertido de volta em uma hierarquia de objetos (“pickle — Python object serialization”, [s.d.]). Isso permite o salvamento e carregamento de objetos complexos em Python.

            TKINTER

            A biblioteca Tkinter é a interface padrão do Python para o kit de ferramentas GUI Tcl/Tk. Ela permite que você crie interfaces gráficas de usuário (GUIs) para seus programas em Python (“tkinter — Interface Python para Tcl/Tk”, [s.d.]). Com Tkinter, é possivel criar janelas, diálogos, botões, menus e outros elementos de interface mais comuns.

 

DESENVOLVIMENTO

METODOLOGIA

            Para o desenvolvimento do quiz, foi utilizado o Python 3. Foram criados dois arquivos principais, o server.py e o client.py. Usando a biblioteca socket para fazer a conexão entre o servidor e o cliente. A biblioteca pickle foi utilizada para transformar as tuplas de perguntas em bytes e serem transportadas e a biblioteca tkinter foi usada para a criação da interface no lado do cliente.

 

            INTERFACE GRÁFICA

            Utilizando o Tkinter foi criado uma interface exibindo 4 perguntas e um botão para respondê-las, mostrado na Imagem 01 abaixo.

 

Imagem 01 – Interface do Cliente

 

FONTE: Autores

            O jogo continua até que todas as perguntas tenham sido respondidas ou até que o jogador erre uma resposta. Se o jogador acertar todas as perguntas, uma mensagem de parabéns é exibida, Imagem 02. Caso contrário, uma mensagem de fim de jogo é exibida, Imagem 03.

 

Imagem 02 – Resposta Correta

 

FONTE: Autores

 

Imagem 03 – Resposta Errada

 

FONTE: Autores

            DESENVOLVIMENTO DO QUIZ

            O código consiste em um sistema de quiz em rede, composto por dois arquivos: server.py e client.py. O sistema de quiz utiliza o protocolo TCP/IP para comunicação entre o servidor e o cliente.

 

            SERVIDOR

            No código do servidor é definido duas funções principais, handle_client() e start_server().

 Na função start_server(), o servidor aguarda uma conexão de cliente em um determinado endereço IP e porta, mostrado na Imagem 04, foi criado as variáveis HOST e PORT, respectivamente com os valores, '127.0.0.1' e 1234.

 

Imagem 04 – start_server()

 

FONTE: Autores

 

Na linha 2, a variável server_socket é instanciada com a criação do servidor na configurações IPV6 e o protocolo TCP/IP, respectivamente socket.AF_NET e socket.SOCK_STREAM. A função server_socket.bind((HOST, PORT)) define o endereço e porta de conexão do servidor, já definido anteriormente e o server_socket.listen() aguarda a conexão com um cliente. Na linha 9 mostra é onde a conexão com o cliente é aceita.

 

Assim que um cliente se conecta, o servidor estabelece uma conexão e inicia o jogo. A Imagem 05 mostra a conexão bem-sucedida do cliente no servidor.

 

Imagem 05 – Cliente Conectado

FONTE: Autores

 

            Já na função handle_client() o servidor possui uma lista de perguntas, opções de resposta e respostas corretas. Cada pergunta é representada como uma tupla contendo a pergunta em si, uma lista de opções e o índice da resposta correta dentro da lista de opções. A seguir na Imagem 06.

 

 

Imagem 06 – Perguntas e Resposta

 

FONTE: Autores

 

            As perguntas são iteradas usando um loop for. Durante cada iteração, o servidor envia a pergunta, as opções e um sinalizador para indicar se é o fim do jogo para o cliente. O servidor usa o módulo pickle para serializar os dados e enviá-los como bytes pelo socket. Abaixo em Imagem 07.

 

 

Imagem 07 – Envio de perguntas

 

FONTE: Autores

 

Por fim na linha 20 mostrado na Imagem 07, o cliente é fechado assim que o quiz é finalizado.

 

CLIENTE

            O cliente, por sua vez, inicia uma conexão com o servidor. Ele utiliza a biblioteca Tkinter para criar uma interface gráfica simples com uma janela, uma pergunta, opções de resposta e um botão para enviar a resposta, mostrado na Imagem 08.

 

 

Imagem 08 – Conectando e criando uma interface

 

FONTE: Autores

 

            Nas linhas 1 a 5, da Imagem 08 é a conexão do cliente ao servidor e das linhas 7 a 12 a criação da interface com o Tkinter.

 

Quando o cliente envia uma resposta, através da função enviar_resposta() visto na Imagem 09. A resposta é convertida em string e enviada para o servidor através do socket. Em seguida, o cliente recebe o resultado do servidor, que pode ser "acertou" ou "errou". Com base nesse resultado, uma caixa de diálogo é exibida informando se a resposta estava correta ou incorreta.

A pergunta e as opções de resposta são atualizadas usando a função atualizar_pergunta() mostrado na Imagem 10. Se a resposta estiver correta, a função é chamada novamente para atualizar a próxima pergunta. Se a resposta estiver incorreta, o cliente encerra a conexão com o servidor e fecha a janela.

 

 

Imagem 09 – Função enviar_resposta()

 

FONTE: Autores

 

Imagem 10 – Função atualizar_pergunta()

 

FONTE: Autores

 

 

O jogo continua até que todas as perguntas tenham sido respondidas ou até que o jogador erre uma resposta. Se o jogador acertar todas as perguntas, uma mensagem de parabéns é exibida. Caso contrário, uma mensagem de fim de jogo é exibida.

 

UTILIZANDO O PROGRAMA

Para utilizar o sistema, é precisa executar o arquivo server.py em um terminal ou ambiente Python. Em seguida, execute o arquivo client.py em outro terminal ou ambiente Python. A interface gráfica será exibida e será possível interagir respondendo às perguntas do quiz.

Os arquivos estão disponíveis em um repositório público no GitHub, no endereço: https://github.com/DEV-LUK4Z/projeto_de_sistemas_distribuidos

 

CONCLUSÃO

O artigo apresentou uma metodologia para o desenvolvimento de uma implementação básica de um quiz em sistemas distribuído, demonstrando como é possível criar uma aplicação cliente-servidor para esse propósito.

A metodologia utilizada pode ser aplicada a outros projetos semelhantes, o que amplia ainda mais sua relevância, sendo possível personalizar as perguntas, as opções de resposta e o número necessário de acertos para vencer o jogo de acordo com as necessidades do utilizador.

           

 

 

REFERÊNCIAS

COULOURIS, George; DOLLIMORE, Jean; KINDBERG, Tim. Sistemas distribuidos. Addison Wesley, 2001.

 

HOWTO sobre a Programação de Soquetes — documentação Python 3.8.16. Disponível em: . Acesso em: 10 jun. 2023.

 

LABAKI, Josué; WOISKI, E. R. Introdução a python–Módulo A. Grupo Python, UNESP-Ilha Solteira, 2003.

 

M., L. Bibliotecas Python: Qual é a melhor para cada situação? Disponível em: . Acesso em: 10 jun. 2023.

 

O tutorial de Python. Disponível em: . Acesso em: 10 jun. 2023

 

pickle — Python object serialization. Disponível em: . Acesso em: 10 jun. 2023.

 

Quiz - Conceito, Definição e O que é Quiz. Disponível em: . Acesso em: 10 jun. 2023.

 

tkinter — Interface Python para Tcl/Tk. Disponível em: . Acesso em: 10 jun. 2023.

 

 

 

[1] Discente de Sistemas de Informação da UFPA Castanhal

[2] Discente de Sistemas de Informação da UFPA Castanhal