felipe de souza tortato - ufsc

128
Felipe de Souza Tortato DESENVOLVIMENTO DE SOFTWARE WEB PARA DIMENSIONAMENTO DE CONDENSADORES DO TIPO WIRE- ON-TUBE, PARA APLICAÇÃO NA INDÚSTRIA DE REFRIGERAÇÃO Trabalho de Conclusão de Curso submetido ao Departamento de Engenharia Elétrica e Eletrônica da Universidade Federal de Santa Catarina para a obtenção do título de Bacharel em Engenharia Eletrônica Orientador: Prof. Dr. Mauricio Valencia Ferreira da Luz Florianópolis 2019

Upload: others

Post on 29-Nov-2021

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Felipe de Souza Tortato - UFSC

Felipe de Souza Tortato

DESENVOLVIMENTO DE SOFTWARE WEB PARA

DIMENSIONAMENTO DE CONDENSADORES DO TIPO WIRE-

ON-TUBE, PARA APLICAÇÃO NA INDÚSTRIA DE

REFRIGERAÇÃO

Trabalho de Conclusão de Curso

submetido ao Departamento de

Engenharia Elétrica e Eletrônica da

Universidade Federal de Santa Catarina

para a obtenção do título de Bacharel

em Engenharia Eletrônica

Orientador: Prof. Dr. Mauricio

Valencia Ferreira da Luz

Florianópolis

2019

Page 2: Felipe de Souza Tortato - UFSC

Ficha de identificação da obra elaborada pelo autor

através do Programa de Geração Automática da Biblioteca Universitária

da UFSC.

Tortato, Felipe de Souza

Desenvolvimento de Software WEB para

Dimensionamento de Condensadores do Tipo Wire-On-

Tube, para Aplicação na Indústria de Refrigeração /

Felipe de Souza Tortato ; orientador, Mauricio

Valencia Ferreira da Luz, 2019.

128 p.

Trabalho de Conclusão de Curso (graduação) -

Universidade Federal de Santa Catarina, Centro

Tecnológico, Graduação em Engenharia Eletrônica,

Florianópolis, 2019.

Inclui referências.

1. Engenharia Eletrônica. 2. Programação WEB. 3.

Ferramenta de Engenharia. 4. Modelagem UML. I. Luz,

Mauricio Valencia Ferreira da. II. Universidade

Federal de Santa Catarina. Graduação em Engenharia

Eletrônica. III. Título.

Page 3: Felipe de Souza Tortato - UFSC
Page 4: Felipe de Souza Tortato - UFSC

Este trabalho é dedicado aos meus pais.

Page 5: Felipe de Souza Tortato - UFSC

AGRADECIMENTOS

Agradeço primeiramente a Deus, pelo dom da vida, por ter

chegado até aqui e pelas pessoas que Ele coloca no meu caminho.

Aos meus pais, Gilberto e Sandra, por todo o carinho, suporte e

cobranças dados ao longo de toda a minha vida e formação, possibilitando

que eu me tornasse um engenheiro.

À minha amada, Amanda, que esteve do meu lado nos meus

últimos semestres no curso, por todo apoio, compreensão e por ser minha

parceira de todas as horas.

Aos amigos de curso, em especial Bruno, Ericson, Fernando, José,

Maicon e Túlio, com quem compartilhei momentos de dificuldade e

nervosismo, mas também de alegrias ao longo do curso.

Aos amigos de outros cursos que, mesmo não estudando o mesmo

conteúdo que o meu, me apoiaram de todas as maneiras possíveis, em

especial, os amigos com os quais passei muitas noites estudando junto,

Artur, Gustavo, José e Rodrigo.

Ao meu orientador, Mauricio Valencia Ferreira da Luz, pelas

discussões, indicações e apoio no desenvolvimento deste trabalho.

A todos os colegas de trabalho no NEO Empresarial, que

contribuíram para com o meu desenvolvimento profissional e pessoal,

durante os anos nos quais trabalhamos juntos. Se hoje me sinto um

profissional preparado para resolver problemas, devo isso a vocês.

Aos bons professores que tive, pelo profissionalismo, competência

e por sua dedicação e empenho em formar excelentes profissionais.

Page 6: Felipe de Souza Tortato - UFSC
Page 7: Felipe de Souza Tortato - UFSC

O sucesso nasce do querer, da determinação e

persistência em se chegar a um objetivo. Mesmo

não atingindo o alvo, quem busca e vence

obstáculos, no mínimo fará coisas admiráveis.

(José de Alencar)

Page 8: Felipe de Souza Tortato - UFSC
Page 9: Felipe de Souza Tortato - UFSC

RESUMO

As ferramentas disponíveis para simulação de sistemas térmicos

fornecem soluções não específicas para os usuários, adicionando assim

um passo extra de manipulação de dados, de modo a se obter os resultados

desejados. Além disso, essas ferramentas exigem uma versão desktop

instalada para a realização das simulações. Esse trabalho descreve os

passos de desenvolvimento para um aplicativo WEB customizado para

simulação de trocadores de calor do tipo arame sobre tubo. Os passos de

desenvolvimento consistem no entendimento do problema enfrentado

pelo usuário, a modelagem do software por meio de diagramas UML, o

desenvolvimento do algoritmo e a programação dos arquivos utilizando

as linguagens de programação e os frameworks WEB mais utilizados no

mercado. No final, mostram-se as capturas de tela da ferramenta

desenvolvida, como resultados deste trabalho.

Palavras-chave: Programação WEB. Ferramenta de Engenharia.

Modelagem UML.

Page 10: Felipe de Souza Tortato - UFSC
Page 11: Felipe de Souza Tortato - UFSC

ABSTRACT

Available tools for thermal systems simulation provide nonspecific

solutions for the users, adding an extra step of filtering data to reach the

desired outputs. Moreover, these tools require a desktop installed version

to perform the simulations. This work describes the development steps of

a of a custom heat exchanger simulation tool embedded in a WEB

application. The development steps comprise the understanding of the

problem faced by the user of the tool, the modelling of the software

through UML diagrams, the algorithm development and the programming

of files applying some of the most used WEB languages and frameworks.

In the end, screenshots of the developed application are shown as results

of this work.

Keywords: WEB Programming. Engineering Tool. UML Modeling.

Page 12: Felipe de Souza Tortato - UFSC
Page 13: Felipe de Souza Tortato - UFSC

LISTA DE FIGURAS

Figura 1 - Trocador de calor do tipo WOT. .......................................... 27 Figura 2 - Diagrama simples de interação entre cliente e servidor a partir

de uma requisição. ................................................................................. 34 Figura 3 - Divisão da página em 12 colunas com o Bootstrap. ............. 38 Figura 4 - Exemplo com duas colunas md-6, tela de largura 1000 pixels.

............................................................................................................... 39 Figura 5 - Exemplo com duas colunas md-6, tela de largura 900 pixels.

............................................................................................................... 40 Figura 6 - Model-View-Controller. ....................................................... 41 Figura 7 - Interesse no tópico AngularJS nas pesquisas do Google. ..... 42 Figura 8 - Pesquisa de frameworks preferidos pelos programadores WEB.

............................................................................................................... 43 Figura 9 - Diagrama de classes com baixo nível de detalhamento. ....... 47 Figura 10 - Diagrama de classes com alto nível de detalhamento. ........ 48 Figura 11 - Diagrama de caso de uso. ................................................... 51 Figura 12 - Diagrama de classes............................................................ 52 Figura 13 - Diagrama de objetos. .......................................................... 53 Figura 14 - Diagrama de pacotes. .......................................................... 54 Figura 15 - Diagrama de sequência. ...................................................... 55 Figura 16 - Diagrama de comunicação. ................................................. 56 Figura 17 - Diagrama de estados. .......................................................... 57 Figura 18 - Diagrama de atividades. ..................................................... 59 Figura 19 - Diagrama de componentes. ................................................. 60 Figura 20 - Diagrama de implementação. ............................................. 61 Figura 21 - Visão Geral de Uso do Sistema. ......................................... 65 Figura 22 - Captura de tela de um fragmento do aplicativo antigo. ...... 70 Figura 23 - Captura de tela da página de Login. ................................... 83 Figura 24 - Captura de tela da página do trocado WOT do usuário

especialista. ........................................................................................... 84 Figura 25 - Captura de tela da funcionalidade de visualização do objeto

em 3D. ................................................................................................... 85 Figura 26 - Captura de tela dos modos de inserção da ferramenta. ....... 86 Figura 27 - Captura de tela do auxílio visual dos parâmetros. .............. 87 Figura 28 - Captura de tela da função de salvamento de dados de cálculo. ............................................................................................................... 88 Figura 29 - Captura de tela do modo de inserção dos parâmetros para

cálculo multiparamétrico. ...................................................................... 89 Figura 30 - Captura de tela do modo de visualização dos resultados do

cálculo multiparamétrico. ...................................................................... 90

Page 14: Felipe de Souza Tortato - UFSC

Figura 31 - Captura de tela da página de Documentação. ..................... 91 Figura 32 - Captura de tela da página de edição da Documentação. ..... 92 Figura 33 - Captura de tela da página de gerenciamento de usuários. .. 93 Figura 34 - Capturas de tela da view de dimensionamento de trocadores

WOT simuladas para um Samsung Galaxy S5. .................................... 94 Figura 35 - Capturas de telas de Documentação (a) e de expansão do menu

(b), simuladas para um Samsung Galaxy S5. ........................................ 95 Figura 36 - Captura de tela da página de Documentação, simulada para

um Ipad. ................................................................................................ 96 Figura 37 - Diagrama de atividades para o front-end: Login. ............. 105 Figura 38 - Diagrama de atividades para o front-end: Cálculo simples

(parte 1/2). ........................................................................................... 106 Figura 39 - Diagrama de atividades para o front-end: Cálculo simples

(parte 2/2). ........................................................................................... 107 Figura 40 - Diagrama de atividades para o front-end: Cálculo

multiparamétrico (parte 1/2). .............................................................. 108 Figura 41 - Diagrama de atividades para o front-end: Cálculo

multiparamétrico (parte 2/2). .............................................................. 109 Figura 42 - Diagrama de atividades para o back-end: Cálculo. .......... 110 Figura 43 - Diagrama de atividades para o back-end: Banco de dados

(parte 1/2). ........................................................................................... 111 Figura 44 - Diagrama de atividades para o back-end: Banco de dados

(parte 2/2). ........................................................................................... 112 Figura 45 - Diagrama de estados para um usuário comum no

dimensionamento de um trocador WOT. ............................................ 113 Figura 46 - Diagrama de caso de uso para o procedimento de login e

redirecionamento (parte 1/2). .............................................................. 114 Figura 47 - Diagrama de caso de uso para o procedimento de login e

redirecionamento (parte 2/2). .............................................................. 115 Figura 48 - Diagrama de caso de uso para navegação no menu do usuário

tipo Administrador. ............................................................................. 116 Figura 49 - Diagrama de caso de uso para navegação no menu do usuário

tipo Especialista ou Técnico. .............................................................. 117 Figura 50 - Diagrama de caso de uso para realização do cálculo........ 118 Figura 51 - Diagrama de classes do aplicativo. ................................... 119 Figura 52 - View de login do aplicativo.............................................. 120 Figura 53 - View de cálculo simples do aplicativo (antes do clique

indicado pelo ícone em amarelo). ....................................................... 121 Figura 54 - View de cálculo simples do aplicativo (após o clique indicado

pelo ícone em amarelo da Figura 53). ................................................. 122

Page 15: Felipe de Souza Tortato - UFSC

Figura 55 - View de cálculo multiparamétrico do aplicativo (antes do

clique indicado pelo ícone em amarelo). ............................................. 123 Figura 56 - View de cálculo multiparamétrico do aplicativo (após o clique

indicado pelo ícone em amarelo da Figura 55). .................................. 124 Figura 57 - View de exportar dados para formato de texto e realização do

download. ............................................................................................ 125 Figura 58 - View de documentação para os usuários tipo Especialista e

Técnico. ............................................................................................... 126 Figura 59 - View de edição de documentação para o Administrador.. 127 Figura 60 - View de gerenciamento de usuários para o Administrador.

............................................................................................................. 128

Page 16: Felipe de Souza Tortato - UFSC
Page 17: Felipe de Souza Tortato - UFSC

LISTA DE QUADROS

Quadro 1 - Exemplo em HTML. ........................................................... 36 Quadro 2 - Exemplo em CSS. ............................................................... 37 Quadro 3 - Exemplo de notação em JSON. ........................................... 37 Quadro 4 - Classes para o sistema de grade com Bootstrap. ................. 39 Quadro 5 - Exemplo de uma tabela em um banco de dados.................. 44 Quadro 6 - Algoritmo do solver. ........................................................... 52 Quadro 7 - Algoritmo do solver. ........................................................... 75 Quadro 8 - Algoritmo do Sistema de Autenticação. .............................. 77 Quadro 9 - Algoritmo do Gerenciador do Banco de Dados. ................. 80 Quadro 10 - Tabela de Usuários no Banco de Dados. ........................... 82 Quadro 11 - Tabela de Documentação no Banco de Dados. ................. 82

Page 18: Felipe de Souza Tortato - UFSC
Page 19: Felipe de Souza Tortato - UFSC

LISTA DE ABREVIATURAS E SIGLAS

3D - 3 dimensões, tridimensional

AC - Access Level (Nível de Acesso)

API - Application Programming Interface (Interface de Programação de

Aplicativos)

CSS - Cascading Style Sheets (Folhas de Estilo em Cascata)

DNS - Domain Name System (Sistema de Nomes de Domínio)

HTML - Hypertext Markup Language (Linguagem de Marcação de

Hipertexto)

HTTP - Hypertext Transfer Protocol (Protocolo de Transferência de

Hipertexto)

IIS - Internet Information Services (Serviços de Informações da Internet)

IP - Internet Protocol (Protocolo de Internet)

JS - JavaScript

JSON - JavaScript Object Notation (Notação de Objeto JavaScript)

MPA - Multiple-Page Application (Aplicação de Múltiplas Páginas)

MVC - Model-View-Controller (Modelo-Visão-Controlador)

P&D - Pesquisa e Desenvolvimento

PHP - Hypertext Preprocessor (Pré-processador de Hipertexto)

SPA - Single-Page Application (Aplicação de Página Unica)

SQL - Structured Query Language (Linguagem de Consulta Estruturada)

UML - Unified Modeling Language (Linguagem de Modelagem

Unificada)

WOT - Wire-on-Tube (Arame sobre tubo)

Page 20: Felipe de Souza Tortato - UFSC
Page 21: Felipe de Souza Tortato - UFSC

LISTA DE SÍMBOLOS

{ Início de trecho de código de iteração ou

condição (algoritmo)

} Final de trecho de código de iteração ou

condição (algoritmo)

[ ] Acesso a índices de uma variável do tipo vetor

(algoritmo)

( ) Delimitador de parâmetros para as funções

(algoritmo)

-> Acesso a atributos ou métodos de um objeto

(algoritmo)

... Não repetição de sequência de operações

semelhantes (algoritmo)

< > Delimitador de tag em HTML

Ponto de decisão ou de mesclagem (diagrama

de atividades)

Ação (diagrama de atividades)

Nodo inicial (diagrama de atividades),

Estado inicial (diagrama de máquina de

estados)

Nodo final (diagrama de atividades), Estado final (diagrama de máquina de estados)

Nodo fork ou join (diagrama de atividades)

Page 22: Felipe de Souza Tortato - UFSC

Conector de mesma página (diagrama de

atividades)

Conector de página diferente (diagrama de

atividades)

Classe (diagrama de classes)

Herança (diagrama de classes), Generalização

(diagrama de caso de uso)

Associação (diagrama de classes, diagrama de

caso de uso)

+ Visibilidade pública (diagrama de classes)

- Visibilidade privada (diagrama de classes)

# Visibilidade protegida (diagrama de classes)

~ Visibilidade no pacote (diagrama de classes)

Ator (diagrama de caso de uso)

Estado (diagrama de máquina de estados)

Page 23: Felipe de Souza Tortato - UFSC

SUMÁRIO

1 INTRODUÇÃO ................................................................... 27 1.1 MOTIVAÇÃO ...................................................................... 27

1.2 OBJETIVOS ......................................................................... 28

1.2.1 Objetivo geral ...................................................................... 28

1.2.2 Objetivos específicos ........................................................... 28

2 FUNDAMENTAÇÃO TEÓRICA ..................................... 31 2.1 ORIENTAÇÃO A OBJETOS ............................................... 31

2.1.1 Definição .............................................................................. 31

2.1.2 Objetos ................................................................................. 32

2.1.3 Classes .................................................................................. 32

2.1.4 Herança ................................................................................ 32

2.2 PROGRAMAÇÃO WEB ...................................................... 33

2.2.1 Funcionamento da WEB..................................................... 33

2.2.2 Front-End ............................................................................ 35

2.2.2.1 Linguagens ............................................................................ 35

2.2.2.1.1 HTML .................................................................................... 35

2.2.2.1.2 CSS ........................................................................................ 36

2.2.2.1.3 JavaScript.............................................................................. 37

2.2.2.2 Frameworks ........................................................................... 38

2.2.2.2.1 Bootstrap ............................................................................... 38

2.2.2.2.2 AngularJS .............................................................................. 40

2.2.3 Back-End.............................................................................. 43

2.2.3.1 Linguagens ............................................................................ 43

2.2.3.1.1 PHP ....................................................................................... 43

2.2.3.1.2 SQL ....................................................................................... 44

2.2.3.2 Bibliotecas ............................................................................. 45

2.2.3.2.1 CoolProp ............................................................................... 45

Page 24: Felipe de Souza Tortato - UFSC

2.3 MODELAGEM DO PROCESSO – UML ............................ 45

2.3.1 Detalhamento de Informações ........................................... 46

2.3.2 Tipos de Diagramas ............................................................ 48

2.3.2.1 Diagramas de Caso de Uso ................................................... 49

2.3.2.2 Diagramas de Classe ............................................................. 51

2.3.2.3 Diagramas de Objetos ........................................................... 52

2.3.2.4 Diagramas de Pacote ............................................................. 53

2.3.2.5 Diagramas de Sequência ....................................................... 54

2.3.2.6 Diagramas de Comunicação ................................................. 55

2.3.2.7 Diagramas de Máquina de Estados ....................................... 56

2.3.2.8 Diagramas de Atividades ...................................................... 58

2.3.2.9 Diagramas de Componentes ................................................. 59

2.3.2.10 Diagramas de Implementação ............................................... 60

3 METODOLOGIA ............................................................... 63 3.1 ANÁLISE DOS REQUISITOS ............................................ 63

3.2 MODELAGEM DO SOFTWARE ....................................... 64

3.2.1 Diagramas de Atividades .................................................... 65

3.2.2 Diagrama de Estados .......................................................... 66

3.2.3 Diagrama de Caso de Uso .................................................. 66

3.2.4 Diagrama de Classes ........................................................... 67

3.2.4.1 User ....................................................................................... 67

3.2.4.2 Admin ................................................................................... 67

3.2.4.3 Session Manager ................................................................... 68

3.2.4.4 Database ................................................................................ 68

3.2.4.5 Database Connection ............................................................ 68

3.2.4.6 UserInterface ......................................................................... 68

3.2.4.7 Solver .................................................................................... 69

3.3 DESIGN DA INTERFACE .................................................. 69

3.4 DESENVOLVIMENTO DO FRONT-END ......................... 69

Page 25: Felipe de Souza Tortato - UFSC

3.4.1 Situação Inicial .................................................................... 69

3.4.2 Estruturação do front-end .................................................. 71

3.4.2.1 Estrutura mínima para o desenvolvimento ............................ 71

3.4.2.2 Linguagens ............................................................................ 71

3.4.2.3 Bibliotecas e Frameworks ..................................................... 72

3.5 DESENVOLVIMENTO DO BACK-END ........................... 73

3.5.1 Situação inicial ..................................................................... 73

3.5.2 Estruturação do back-end .................................................. 73

3.5.2.1 Estrutura mínima para o desenvolvimento ............................ 73

3.5.2.2 Linguagens ............................................................................ 73

3.5.2.3 Bibliotecas ............................................................................. 74

3.5.3 Algoritmo ............................................................................. 74

3.5.3.1 Solver .................................................................................... 75

3.5.3.2 Sistema de Autenticação ....................................................... 77

3.5.3.3 Gerenciador do Banco de Dados ........................................... 79

3.5.4 Banco de dados .................................................................... 81

3.5.4.1 Tabela de Usuários ................................................................ 81

3.5.4.2 Tabela de Documentação ...................................................... 82

4 RESULTADOS .................................................................... 83 4.1 CAPTURAS DE TELA DO APLICATIVO ......................... 83

4.1.1 Monitor com viewport de 1440 x 900 pixels ...................... 83

4.1.1.1 Login ..................................................................................... 83

4.1.1.2 Tela de Cálculo do Trocador WOT ....................................... 84

4.1.1.3 Tela de Documentação .......................................................... 90

4.1.1.4 Tela de Gerenciamento de Usuários...................................... 92

4.1.2 Dispositivos Móveis ............................................................. 93

5 CONCLUSÃO ..................................................................... 97 5.1 SUGESTÕES PARA TRABALHOS FUTUROS ................ 97

REFERÊNCIAS .................................................................. 99

Page 26: Felipe de Souza Tortato - UFSC

APÊNDICE A - Diagramas de Atividades ...................... 105

APÊNDICE B - Diagramas de Estados ........................... 113

APÊNDICE C - Diagramas de Caso de Uso ................... 114

APÊNDICE D - Diagramas de Classes ........................... 119

APÊNDICE E - Mock-ups das views .............................. 120

Page 27: Felipe de Souza Tortato - UFSC

27

1 INTRODUÇÃO

1.1 MOTIVAÇÃO

O consumo energético com refrigeradores domésticos e freezers

no Brasil, em média, chega a 27% do total residencial, correspondendo

também a cerca de 6% do consumo energético nacional (PROCEL;

ELETROBRÁS, 2007).

Por conta do relativo baixo custo de fabricação, aplicam-se,

amplamente, os condensadores do tipo arame sobre tubo (WOT, do inglês

Wire-on-Tube) em refrigeradores e freezers de uso doméstico (MELO e

HERMES, 2009).

Esse tipo de condensador é composto por um tubo de aço, para

transporte do fluido, e de múltiplos arames de aço, para aumentar a

transferência de calor com o ambiente externo. Esse tubo de aço é

curvado, obtendo-se um formato de uma serpentina, e os múltiplos arames

são soldados paralelamente um ao outro, em ambos os lados do tubo

curvado (AMEEN, MOLLIK, et al., 2006). Mostra-se um desenho desse

componente na Figura 1.

Figura 1 - Trocador de calor do tipo WOT.

Fonte: (BANSAL e CHIN, 2003).

Modelos matemáticos para trocadores de calor têm sido alvo de

estudo de diversos pesquisadores da área de ciências térmicas. Dado o

potencial retorno que melhoras nesse componente podem trazer, deseja-

se encontrar o melhor conjunto de parâmetros de projeto, para entregar os

Page 28: Felipe de Souza Tortato - UFSC

28

melhores resultados em termos de eficiência de consumo de energia, de

material e de espaço físico (BANSAL e CHIN, 2003).

Nesse contexto, o desenvolvimento de softwares de modelagem e

otimização da configuração de componentes surge como um auxílio para

a melhoria dos produtos e redução dos custos associados a testes, pois

evita a necessidade inicial de montagem da configuração para realizá-los

(BANSAL e CHIN, 2003).

Além da real possibilidade de redução de custos para o consumidor

final, a melhoria da eficiência dos condensadores contribui na redução

global do consumo de energia, sendo, então, importante no contexto de

redução de potenciais impactos do aquecimento global (TAGLIAFICO e

TANDA, 1997).

Não se encontrou, nas pesquisas realizadas, um aplicativo WEB

para dimensionamento de condensadores do tipo WOT. A falta de uma

ferramenta WEB, para aplicações como essa, dificulta o repasse de

conhecimento entre a fabricante de um componente de refrigeração e a

equipe técnica que monta soluções a partir desse componente. Essa

brecha de aplicações nesse campo que abre a oportunidade de

contribuição deste trabalho.

1.2 OBJETIVOS

1.2.1 Objetivo geral

Este trabalho estende um projeto anterior desenvolvido para uma

empresa na indústria de refrigeração. Os pontos de partida deste trabalho

foram uma série de algoritmos implementados em PHP e uma interface

de usuário em uma página WEB, voltada a aplicações científicas e de

aprendizado, porém com algumas limitações (citadas no decorrer deste

trabalho).

O objetivo deste projeto foi programar um novo aplicativo WEB,

que resolvesse as limitações da ferramenta anterior, e possuísse uma

estrutura modular e expansível para possíveis futuras funcionalidades.

1.2.2 Objetivos específicos

• Desenvolver templates de páginas e menu de navegação, para o

aplicativo WEB, de maneira que se facilite futura expansão da

ferramenta;

Page 29: Felipe de Souza Tortato - UFSC

29

• Criar a página do trocador WOT, utilizando os cálculos do

programa antigo;

• Criar uma página de documentação que ensine usuários acerca

dos cálculos envolvidos;

• Implementar um sistema de autenticação, com diferentes níveis

de acesso de usuários;

• Hospedar a ferramenta no servidor da empresa.

Page 30: Felipe de Souza Tortato - UFSC
Page 31: Felipe de Souza Tortato - UFSC

31

2 FUNDAMENTAÇÃO TEÓRICA

Nesta seção, dar-se-á a descrição teórica, não exaustiva, dos

elementos utilizados ao longo deste trabalho. Inicialmente, far-se-á a

introdução teórica de orientação a objetos, para compreensão das seções

seguintes, depois dos elementos de programação WEB utilizados neste

projeto. Após isso, explicar-se-ão os principais passos adotados como

metodologia para entendimento do problema que este projeto ataca e

definição do escopo de trabalho.

2.1 ORIENTAÇÃO A OBJETOS

Para a compreensão dos diagramas de modelagem do software,

faz-se essencial a compreensão do paradigma de orientação a objetos.

Nesta seção, dar-se-á uma breve introdução sobre orientação a objetos, de

maneira a facilitar a compreensão das seções seguintes.

2.1.1 Definição

A orientação a objetos tornou-se a principal abordagem para o

desenvolvimento dos softwares modernos. Essa preferência advém das

facilidades associadas à programação não mais de uma sequência de

passos para atingir o objetivo, mas sim, focada em imaginar que o

software modela uma série de objetos que possuem características e que

executam ações (LAFORE, 2002).

Tem-se que para programas pequenos, o procedimento estrutural

de programação, por meio de uma sequência de operações, é suficiente.

Não há necessidade de um paradigma de programação, ditando princípios

de organização para o código. Porém, à medida que os programas se

tornam maiores e mais complexos, o modelo de programação estruturada

apresenta mais limitações, principalmente, por não modelar o mundo real

de maneira lógica, visto que não se pode modelar objetos como dados ou

como funções; ao contrário do paradigma de orientação a objetos, no qual

faz-se a modelagem de objetos do mundo real por meio de atributos e

métodos (LAFORE, 2002).

Nas próximas seções, apresentar-se-ão três conceitos importantes de orientação a objetos, que auxiliam na compreensão do restante deste

trabalho.

Page 32: Felipe de Souza Tortato - UFSC

32

2.1.2 Objetos

Partindo-se da definição formal, dada por (SYKES e

MCGREGOR, 2001), um objeto é “uma entidade operacional que

encapsula tanto os valores de dados específicos quanto o código para

manipulá-los”1. De maneira mais tangível, um objeto no programa,

representa um objeto da vida real, que possui características, chamadas

atributos, e ações para acessar suas características, chamadas métodos.

Tem-se que tratando os termos do código como objetos do mundo real,

facilita-se muito o desenvolvimento de programais mais complexos

(LAFORE, 2002).

Por exemplo, um objeto chamado “Fusca” pode possuir atributos

como: cor, ano, motor, entre outros. Seus métodos podem ser: acelerar,

frear, acender os faróis, entre outros.

2.1.3 Classes

Classes são descrições de objetos similares (LAFORE, 2002), ou

seja, um conjunto de objetos que compartilham de informações

semelhantes (SYKES e MCGREGOR, 2001). Aos objetos criados a partir

de uma determinada classe, dá-se o nome de instância da classe

(LAFORE, 2002).

Por exemplo, no caso do objeto da seção 2.1.2, o Fusca, poderia

ser um objeto da classe carros, a qual possui atributos como cor, ano e

motor; e métodos como acelerar, frear , acender os faróis. A partir da

classe carro, poder-se-ia criar outros objetos, por exemplo, “Gol”.

2.1.4 Herança

Através de heranças, pode-se aproveitar características de uma

classe existente para formar uma nova classe. Chama-se essa classe base

de classe pai, e a classe que herda suas características e ações, de classe

filha (LAFORE, 2002).

Utilizando-se do mesmo exemplo que anteriormente, poder-se-ia

dizer que um “carro” é uma classe herdada de uma classe “veículo”. Desse

modo, características e métodos comuns a todos os veículos seriam herdados pela classe filha “carro”. A classe “carro” por sua vez, teria suas

particularidades, que não seriam comuns a todos os veículos.

1 Tradução feita pelo autor deste trabalho.

Page 33: Felipe de Souza Tortato - UFSC

33

2.2 PROGRAMAÇÃO WEB

O desenvolvimento de software mudou muito nos últimos anos,

evoluindo desde os programas estáticos, feitos para operar em apenas um

tipo de hardware, até atualmente, com conexão à Internet, e operação em

diversos tipos de dispositivos. Em meados de 1980, a maioria dos

softwares era desenvolvida para operar em apenas um computador, para

resolver um problema específico. A partir de 1990, começou-se uma

tendência ao uso de sistemas distribuídos, para processamento de dados

online. Além disso, iniciou-se a propagação de páginas WEB (WOODS,

2016).

Atualmente, a Internet popularizou-se e é disponível para uma

enorme quantidade de usuários. Nesse contexto de massivo uso de

Internet, o desenvolvimento de software também sofreu migração para

plataformas WEB. Constroem-se os programas nessa plataforma

combinando-se: 1) componentes de código aberto, ou seja, pedaços de

código disponíveis para serem utilizados gratuitamente; 2) serviços

remotos disponíveis na Internet; e 3) código personalizado para a

aplicação (WOODS, 2016).

Para seu funcionamento, muitos programas mais complexos

utilizam bibliotecas e frameworks disponíveis por meio de APIs –

Interface de Programação de Aplicativos, do inglês Application User

Interface (TREUDE e ANICHE, 2018), que se tratam de um conjunto de

classes, métodos (NGUYEN, NGUYEN, et al., 2017) e funcionalidades

fornecidos por um terceiro (SAWANT e BACCHELLI, 2015).

A principal vantagem de uma API é a capacidade de reuso de

bibliotecas e funções já existentes, evitando-se, assim, o retrabalho

(SAWANT e BACCHELLI, 2015). Geralmente, a API apresenta-se por

meio de uma documentação que descreve a sua estrutura e como usá-la

(TREUDE e ANICHE, 2018).

2.2.1 Funcionamento da WEB

Objetiva-se, nesta seção, mostrar uma visão geral de como

funciona a WEB, de modo a se entender a separação do código em front-

end e back-end, e como essas partes interagem. Pode-se separar os agentes conectados à rede como clientes e

servidores. Os clientes representam-se por qualquer programa de acesso

à Internet em um dispositivo, por exemplo, um navegador. Já, os

servidores são computadores que armazenam páginas da WEB, sites,

aplicativos, APIs, entre outros. Tem-se que essa relação se inicia quando

Page 34: Felipe de Souza Tortato - UFSC

34

o cliente faz uma requisição ao servidor. O servidor, por sua vez, responde

à solicitação do cliente (MDN WEB DOCS, 2019). Mostra-se essa

relação na Figura 2.

Figura 2 - Diagrama simples de interação entre cliente e servidor a partir de uma

requisição.

Fonte: (MDN WEB DOCS, 2019).

Desse modo, então, ao se digitar o endereço de um site na barra do

navegador, por exemplo, “google.com”, um servidor de sistema de nomes

de domínio (DNS), do inglês Domain Name System, traduzirá esse

endereço digitado para o endereço do servidor no qual o site hospeda-se,

ou seja, o seu real endereço na Internet. Tal endereço de servidor é um

código numérico chamado de número de protocolo de Internet (IP), por

exemplo “172.217.12.206”. Realiza-se essa tradução, dada a maior

facilidade das pessoas em memorizarem um texto, ao invés do conjunto

de números (MDN WEB DOCS, 2019).

Após isso, o cliente, por exemplo o navegador, envia uma

requisição do tipo HTTP (Protocolo de Transferência de Hipertexto, do

inglês Hypertext Transfer Protocol) para o servidor. Esse protocolo é

importante, pois estabelece a linguagem de comunicação entre as duas

partes. O servidor, por sua vez, responde ao cliente com o conteúdo

requisitado, que pode ser a página da WEB, por exemplo, ou um conjunto

de dados, no caso de serviços ou APIs disponíveis pela WEB (MDN WEB

DOCS, 2019).

A programação WEB pode ser dividida em duas frentes: front-end

e back-end. O back-end responde a requisições solicitadas pelo front-end,

o qual possui capacidade computacional limitada (TECHOPEDIA). Em

outras palavras, o front-end responsabiliza-se pela exibição da interface

apresentada ao cliente e o back-end possui a função de processamento de

dados (YUNRUI, 2018). A divisão do código entre front-end e back-end

simplifica o processo de programação e a manutenção de código

(TECHOPEDIA), além de reduzir custos de comunicação e aumentar a

eficiência para produção de um software (YUNRUI, 2018).

Page 35: Felipe de Souza Tortato - UFSC

35

2.2.2 Front-End

O desenvolvimento do front-end consiste na descrição e

programação da interface gráfica com o usuário. Desse modo, é a parte

de um programa WEB relacionada à interação com o usuário e envio de

requisições para o back-end (TECHOPEDIA).

2.2.2.1 Linguagens

Nesta seção, comentar-se-á sobre diversas linguagens utilizadas no

front-end, porém, não se dará foco na sintaxe da linguagem, mas sim, no

entendimento de sua importância.

O front-end de um site WEB é composto por diversas partes, como

arquivos de textos estático, código, folhas de estilos (do inglês stylesheet),

scripts, mídias, entre outros. Nesses arquivos, predominam três

linguagens que são a base para o desenvolvimento de qualquer página no

front-end: HTML, CSS e JavaScript (MDN WEB DOCS, 2019).

2.2.2.1.1 HTML

A HTML (Linguagem de Marcação de Hipertexto, do inglês

Hypertext Markup Language), como o nome diz, não é uma linguagem

de programação, mas sim, de marcação. Isso quer dizer que ela define a

estrutura do conteúdo a ser mostrado (MDN WEB DOCS, 2019).

Os elementos em HTML são representados por tags, que

representam partes de um conteúdo. Ao ler uma tag, o navegador

reconhece como o conteúdo marcado por essa tag deve ser renderizado

(W3SCHOOLS).

Esse conceito faz-se mais claro com o exemplo do Quadro 1.

Page 36: Felipe de Souza Tortato - UFSC

36

Quadro 1 - Exemplo em HTML.

Código em HTML Visualização no Navegador

<h1>Isto é um título nível 1</h1> Isto é um título nível 1

<h4>Isto é um título nível 4</h4> Isto é um título nível 4

<p>Isto é um parágrafo</p> Isto é um parágrafo

Fonte: do Autor (2019).

Utilizam-se, geralmente, as tags em pares, como mostrado no

exemplo do Quadro 1. Como comentado anteriormente, nota-se que o uso

delas modela a estrutura do texto aparece para o usuário.

2.2.2.1.2 CSS

Outra linguagem importante para desenvolvimento do front-end é

o CSS (Folhas de Estilo em Cascata, do inglês Cascading Style Sheets).

Introduziu-se essa linguagem para que fosse possível formatar o conteúdo

de páginas em HTML, facilitando a adição de estilos em múltiplas

páginas de uma só vez. Descrição de estilos em CSS é algo essencial para

que qualquer página da WEB não seja apenas texto sem formatação, uma

vez que a HTML não deve ser utilizada como meio de formatar uma

página WEB, mas apenas descrevê-la (W3SCHOOLS).

Para utilizar o CSS, escolhe-se o elemento que se deseja estilizar,

por exemplo, um título de nível 1. Após isso, especifica-se qual a

propriedade que deve ser alterada, como, a cor do texto. Por fim, define-

se o valor a ser atribuído para essa propriedade (MDN WEB DOCS,

2019).

A aplicabilidade do CSS torna-se mais clara por meio do exemplo

do Quadro 2. Nota-se que o código no arquivo em CSS é capaz de alterar

propriedades de estilo de um conteúdo marcado em HTML.

Page 37: Felipe de Souza Tortato - UFSC

37

Quadro 2 - Exemplo em CSS.

Código em CSS e HTML Visualização no Navegador

h1 {

color: red;

border: 3px solid black;

}

<h1>Isto é um título nível 1</h1>

Isto é um título nível 1

Fonte: do Autor (2019).

2.2.2.1.3 JavaScript

O JavaScript é a linguagem de programação que adiciona maior

interatividade à página WEB. Por exemplo, com essa linguagem,

descrevem-se funções para responder a um evento causado pelo usuário,

como o clique em um botão (MDN WEB DOCS, 2019). Com funções em

JavaScript, pode-se alterar, criar ou apagar o conteúdo, em HTML, e

estilos, em CSS (W3SCHOOLS), além de realizar requisições ao back-

end.

Uma notação importante em JavaScript e para a WEB, devido à

frequência de uso em armazenamento e transferência de dados entre

cliente e servidor, é o JSON (Notação de Objeto JavaScript, do inglês

JavaScript Object Notation). Apesar de utilizar o formato de objetos em

JavaScript, o JSON é um formato de texto (W3SCHOOLS). Dá-se um

exemplo da notação no Quadro 3.

Quadro 3 - Exemplo de notação em JSON.

Notação em JSON

{

"Carro": [

{“modelo”: “Fusca”, "cor":"Vermelho", "ano":"1960"},

{“modelo”: “Gol”, "cor":"Azul", "ano":"1965"}

]

}

Fonte: do Autor (2019).

Nota-se, no Quadro 3, que há um conjunto de objetos tipo “carro”,

cada um com suas características de modelo, cor e ano, descritos em um

padrão textual.

Page 38: Felipe de Souza Tortato - UFSC

38

2.2.2.2 Frameworks

O propósito do uso de frameworks para programação é facilitar o

processo de desenvolvimento, fazendo com que o foco dos

programadores seja no ato de transformar requisitos de projeto em uma

solução para os clientes. Os frameworks possibilitam que o programador

gaste menos tempo em questões ligadas ao funcionamento e estrutura da

linguagem, e mais tempo melhorando a usabilidade do programa

desenvolvido, por exemplo (TECHNOPEDIA).

Por conta do uso neste projeto, destacar-se-ão, nesta seção, dois

frameworks: Bootstrap e AngularJS.

Há uma série de fatores que devem ser levados em conta na escolha

de um framework. Inicialmente, deve-se saber que tipo de aplicação

deseja-se desenvolver e o tipo de benefício que se quer obter com o

framework (DELčEV e DRAšKOVIć, 2018).

2.2.2.2.1 Bootstrap

O Bootstrap é o framework de construção de páginas WEB que

possibilita o desenvolvimento rápido de layouts responsivos, ou seja,

layouts que se adaptam para diferentes tamanhos de tela do dispositivo

(PERUMAL, TABASSUM, et al., 2018). Esse framework faz isso por

meio de um conjunto de classes em CSS e funções em JavaScript

(BALASUBRAMANEE, WIMALASENA, et al., 2013).

A maneira como o Bootstrap realiza isso é por meio do sistema de

grade. Esse sistema divide a página em até 12 colunas. Como o sistema

de grade do Bootstrap é responsivo, essas 12 colunas podem ser

rearranjadas para que a visualização fique melhor em dispositivos com

telas menores (W3SCHOOLS). Na Figura 3 mostra-se como funciona a

divisão da tela em colunas.

Figura 3 - Divisão da página em 12 colunas com o Bootstrap.

Fonte: (W3SCHOOLS).

Page 39: Felipe de Souza Tortato - UFSC

39

Junto à dimensão dos elementos, define-se, também, para qual

tamanho de tela de dispositivo considera-se aquela dimensão. O Bootstrap

possui por padrão quatro classes para representar o tamanho dos

dispositivos, mostradas no Quadro 4.

Quadro 4 - Classes para o sistema de grade com Bootstrap.

Código Dispositivo alvo Tamanho da tela

xs (extra pequeno) Celulares < 768 pixels de largura

sm (pequeno) Tablets > 768 pixels de largura

md (médio) Pequenos laptops > 992 pixels de largura

lg (grande) Laptops e Desktops > 1200 pixels de largura

Fonte: (W3SCHOOLS).

O uso dessas classes define o comportamento dos elementos de

interface do Bootstrap quando a página é aberta em diferentes

dispositivos.

Na Figura 4, considerou-se uma página com dois blocos de

dimensão 6, no Boostrap, com código de tamanho de tela md. A tela na

qual o dispositivo é testado possui 1000 pixels de largura, ou seja, o

tamanho da tela é maior do que md (992 pixels).

Figura 4 - Exemplo com duas colunas md-6, tela de largura 1000 pixels.

Fonte: (W3SCHOOLS).

Nota-se que o Bootstrap posiciona os elementos,

independentemente do tamanho do texto que há dentro dele, conforme a

especificação da classe utilizada, de duas colunas de dimensão 6. Mostra-

se, na Figura 5, para o mesmo exemplo, o resultado em uma tela de 900

pixels.

Page 40: Felipe de Souza Tortato - UFSC

40

Figura 5 - Exemplo com duas colunas md-6, tela de largura 900 pixels.

Fonte: (W3SCHOOLS).

No caso da na Figura 5, como a tela do dispositivo (900 pixels) é

menor do que o tamanho especificado md (992 pixels), os componentes

em Bootstrap se modificam para melhorar o layout de visualização para

o usuário. Desse modo, garante-se que, independentemente do tamanho

de tela, a página apresentar-se-á de maneira atraente.

2.2.2.2.2 AngularJS

Como visto na seção 2.2.2.1.3, o JavaScript é uma linguagem para

adicionar comportamento dinâmico a uma página WEB. Essa linguagem

possui suporte à arquitetura MVC (Modelo-Visão-Controlador, do inglês

Model-View-Controller), que se utiliza para separar partes do código do

programa, melhorando o entendimento do código, fundamental para

grandes projetos. Diversos frameworks para a linguagem JavaScript

baseiam-se nessa arquitetura (DELčEV e DRAšKOVIć, 2018).

Nessa arquitetura, o modelo é a parte responsável pelo

gerenciamento de dados; a visão, pela exibição de dados para o usuário;

e o Controlador, pela interação entre Modelo e Visão, além da parte lógica

da página (DELčEV e DRAšKOVIć, 2018). A Figura 6 mostra como

funciona a interação entre as partes dessa arquitetura.

Page 41: Felipe de Souza Tortato - UFSC

41

Figura 6 - Model-View-Controller.

Fonte: (FAT, VUJOVIC, et al., 2016).

O AngularJS é um framework para programação no front-end,

baseado em uma arquitetura semelhante à MVC. Dentre as vantagens que

esse framework possui, tem-se a utilização do modelo de aplicação de

página única (SPA), do inglês Single-Page Application. Esse modelo

fornece uma alternativa ao modelo tradicional de páginas WEB, o de

aplicação de múltiplas páginas (MPA), do inglês Multiple-Page

Application (OH, AHN e KIM, 2017).

Em aplicações do tipo MPA, a cada nova requisição realizada, toda

a página é recarregada. Ou seja, ao se clicar em um botão, por exemplo,

a página é totalmente recarregada, mesmo que só tenha sido modificado

um campo dela. Isso causa o efeito de tela branca, enquanto a tela é

carregada. Por outro lado, em aplicações do tipo SPA, apenas parte da

página é recarregada a cada requisição, fazendo com que a atualização da

página não gere redundância de dados e evite o efeito de carregamento de

página mencionado acima (OH, AHN e KIM, 2017), tornando o

comportamento da aplicação WEB semelhante ao comportamento de um

aplicativo Desktop, por exemplo (CHANSUWATH e SENIVONGSE,

2016).

Esse comportamento é obtido, utilizando-se observadores de

eventos (Figura 6), que percorrem laços de verificação de mudanças nas

propriedades de elementos. Quando uma mudança é vista, notifica-se o controlador dessa alteração, iniciando-se um ciclo novo com os dados

atualizados, porém, sem atualizar a página toda (FAT, VUJOVIC, et al.,

2016).

Page 42: Felipe de Souza Tortato - UFSC

42

Uma outra característica importante do AngularJS é a

bidirecionalidade da ligação de dados2, que faz com que mudanças de

dados no modelo sejam propagadas imediatamente na visão, e mudanças

na visão (mudanças causadas por interação na interface) sejam percebidas

imediatamente no modelo (CHANSUWATH e SENIVONGSE, 2016).

Isso ocorre diferentemente do modelo unidirecional, no qual mudanças

no modelo são percebidas pela visão, mas não o contrário (KEJKAR,

KHAN e SHARMA, 2017).

Entretanto, o AngularJS é um framework que vem sendo usado

cada vez menos nos últimos anos, como mostra a consulta realizada no

Google Trends (Figura 7) para o termo AngularJS, no período de

01/01/2016 e 31/05/2019. O valor é normalizado em relação ao período

com o maior número de buscas dentro do intervalo solicitado.

Figura 7 - Interesse no tópico AngularJS nas pesquisas do Google.

Fonte: (GOOGLE TRENDS, 2019).

O decaimento no interesse ocorre devido à finalização programada

do suporte a esse framework, por parte da empresa que o criou, a Google,

tendo em vista a migração para o framework Angular, da mesma empresa.

Apesar de possuírem nomes parecidos, são frameworks diferentes.

Apesar disso, nota-se que esse framework ainda é um dos mais

utilizados. De acordo com o ranking da (HOTFRAMEWORKS, 2019),

mostrado na Figura 8, o AngularJS, representado pela linha verde clara,

2 Tradução feita pelo autor deste trabalho.

Page 43: Felipe de Souza Tortato - UFSC

43

situa-se como um dos frameworks preferidos pelos programadores,

utilizando-se como base pesquisas em plataformas comumente usadas por

eles, como o Github e o Stack Overflow.

Figura 8 - Pesquisa de frameworks preferidos pelos programadores WEB.

Fonte: (HOTFRAMEWORKS, 2019).

2.2.3 Back-End

De maneira geral, o back-end executa funções relacionadas a

operações, processamento e armazenamento de dados, solicitadas pelo

front-end (TECHOPEDIA).

2.2.3.1 Linguagens

Nesta seção, comentar-se-á sobre as duas linguagens utilizadas no

back-end. Da mesma maneira como na descrição do front-end, não dar-

se-á foco na sintaxe da linguagem, mas sim, no entendimento de sua

importância para este projeto. Utilizaram-se duas linguagens para o

desenvolvimento do back-end: PHP e SQL.

2.2.3.1.1 PHP

O PHP (Pré-processador de Hipertexto, do inglês Hypertext Preprocessor) é uma linguagem de scripts utilizada no back-end, ou seja,

no servidor (MDN WEB DOCS, 2019). Dentro de um arquivo do tipo

PHP, pode-se conter códigos de linguagens do front-end, como HTML,

CSS e JavaScript, de modo que uma página poderia ser toda construída

Page 44: Felipe de Souza Tortato - UFSC

44

dentro de um arquivo do tipo PHP (W3SCHOOLS). Apesar disso, como

comentado na seção 2.2.1, recomenda-se a abordagem de separação do

código.

Em termos de uso, a linguagem PHP é a mais difundida no back-

end de páginas WEB, sendo utilizadas para programar desde páginas

simples, até soluções mais complexas (GOPE, SCHLAIS e LIPASTI,

2017).

Por conta da grande adesão dessa linguagem pela comunidade de

desenvolvedores, ela possui uma vasta quantidade de extensões e serviços

disponíveis para interação com outras aplicações, aumentando-se, assim,

a eficiência de programação e o número de funcionalidades (SANTOS,

MENDONCA e MARTINS, 2008). Outro aspecto relevante da

linguagem é a facilidade de instalação e compatibilidade em servidores

HTTP, como Apache e IIS (Internet Information Services), e o suporte a

vários tipos de bancos de dados (W3SCHOOLS).

2.2.3.1.2 SQL

O SQL (Linguagem de Consulta Estruturada, do inglês Structured

Query Language) é uma linguagem utilizada para acesso e manipulação

de bancos de dados. Para aplicação dessa linguagem em páginas WEB,

utiliza-se um sistema de gerenciamento de banco de dados

(W3SCHOOLS), como o SQL Server e o MySQL, que são alguns dos

principais sistemas de bancos de dados relacionais (GOMES, 2019).

O fato de basear-se a linguagem SQL em sistemas de bancos de

dados relacionais, faz com que os dados sejam armazenados em tabelas,

com dados em linhas (entradas) e colunas (campos). O Quadro 5 mostra

um exemplo de uma tabela em um banco de dados.

Quadro 5 - Exemplo de uma tabela em um banco de dados.

id nome_aluno nota

0 Felipe 8

1 Pedro 7

2 Gabriela 8.5

Fonte: do Autor (2019).

Para consultar dados da tabela, executa-se uma query no servidor.

Essas queries são simples em SQL, com linguagem semelhante à

descrição de uma ação com a tabela. Por exemplo, ter-se-ia, para realizar

a leitura da nota do aluno “Felipe”, uma query semelhante a:

Page 45: Felipe de Souza Tortato - UFSC

45

“SELECIONE nota ONDE nome_aluno = “Felipe”. Ao se executar essa

consulta, o servidor retornaria o valor “8”.

2.2.3.2 Bibliotecas

2.2.3.2.1 CoolProp

O CoolProp é uma biblioteca de código aberto (ou seja, livre para

uso) que implementa funções para cálculos de propriedades termofísicas

de diversos fluidos, além de métodos de interpolação, para aumento de

eficiência computacional (BELL, WRONSKI, et al., 2014).

Essa biblioteca encontra-se disponível para uso com diversas

linguagens de programação, incluindo o PHP (BELL, WRONSKI, et al., 2014).

2.3 MODELAGEM DO PROCESSO – UML

Com o aumento contínuo da complexidade dos softwares ao longo

do tempo (FERNÁNDEZ-SÁEZ, GENERO e CHAUDRON, 2012),

aliada à necessidade de entendimento de projetos desenvolvidos há

bastante tempo, a compreensão do sistema sob diferentes perspectivas

torna-se um grande desafio para os engenheiros de software (TILLEY e

HUANG, 2003).

Softwares antigos podem ter sido escritos em linguagens de

programação obsoletas, ter sido desenvolvidos em plataformas não

suportadas atualmente, e até conter adaptações para garantir o

funcionamento, as quais não estavam previstas no planejamento deles.

Por outro lado, softwares modernos podem ser realizados em múltiplas

linguagens de programação e por diferentes equipes (TILLEY e HUANG,

2003).

Nesse contexto, a modelagem de software apresenta-se como um

meio de projetar soluções de maneira correta, garantindo-se que o sistema

passou por uma análise técnica antes de se começar a desenvolver ou

alterar o código (NUGROHO e CHAUDRON, 2009). Além disso, ela

facilita o alinhamento entre o usuário final, consumidor do software, e a

equipe de desenvolvimento (FERNÁNDEZ-SÁEZ, GENERO e CHAUDRON, 2012).

Por outro lado, sob o ponto de vista de documentação, a

modelagem visa garantir a realização dela, evitando-se a perda de

informações no decorrer do projeto (NUGROHO e CHAUDRON, 2009),

Page 46: Felipe de Souza Tortato - UFSC

46

mas também no futuro, desse modo prevenindo-se o problema de

entendimento de projeto, como mencionado acima.

Entre as possibilidades para a modelagem de software, vê-se a

Linguagem de Modelagem Unificada (UML), do inglês, Unified

Modeling Language, como um padrão no desenvolvimento de softwares

modernos. Trata-se de uma linguagem visual para descrição de requisitos

de alto nível do sistema, por meio de diagramas, formas, setas

representando funcionalidades, blocos do código e relações, por exemplo

(TILLEY e HUANG, 2003).

Por conta disso, no processo de manutenção de softwares mais

complexos, os autores (ARISHOLM, BRIAND, et al., 2006) mostram

que o uso da UML tende a resultar em maior corretude funcional, ou seja,

aderência do resultado com a especificação; além da melhora de

qualidade do projeto.

2.3.1 Detalhamento de Informações

Em se tratando de UML, outro aspecto relevante a se levar em

consideração é o nível de detalhamento de informações nos diagramas. O

nível de detalhamento refere-se à quantidade de informação utilizada para

representar o elemento modelado e, portanto, impactam no entendimento

e na manutenibilidade do modelo pelos envolvidos (NUGROHO, 2009).

Por exemplo, para o diagrama de classes, explicado com mais detalhes na

seção 2.3.2.2, um modelo com nível de detalhamento baixo apresenta

apenas o nome da classe, sem especificar detalhes como métodos e

atributos (NUGROHO, 2009), como mostrado na Figura 9.

Page 47: Felipe de Souza Tortato - UFSC

47

Figura 9 - Diagrama de classes com baixo nível de detalhamento.

Fonte: (NUGROHO, 2009).

Por outro lado, para diagramas de classes com níveis maiores de

detalhamento, mostram-se informações sobre os métodos e atributos da

classe, nome e direção das associações, entre outros (NUGROHO, 2009),

tal como na Figura 10.

Page 48: Felipe de Souza Tortato - UFSC

48

Figura 10 - Diagrama de classes com alto nível de detalhamento.

Fonte: (NUGROHO, 2009).

Entretanto, ao se falar sobre documentação, sempre há o

compromisso entre o valor agregado por ela, em relação ao tempo

investido. Por conta disso, diversos estudos são guiados para buscar

entender a relação entre o nível de detalhamento da modelagem e o

retorno trazido por ela (ARISHOLM, BRIAND, et al., 2006).

(NUGROHO, 2009) mostra que os benefícios de um maior nível

de detalhamento dos modelos são percebidos quando se usam eles como

guias de implementação do software. Por outro lado, como análise de alto

nível do sistema, essa relação é pouco significativa.

Deve-se então, buscar-se um ponto ótimo para a modelagem UML,

que se encaixe dentro do que realmente é necessário em termos de

documentação do software, assumindo-se o compromisso entre o retorno

causado pela boa documentação e os custos associados a ela (BRIAND,

2003).

2.3.2 Tipos de Diagramas

Nesta seção, apresentar-se-ão os principais diagramas de UML. Os

diagramas apresentados nas seções 2.3.2.1, 2.3.2.2, 2.3.2.5 e 2.3.2.8

foram elaborados no contexto deste projeto e apresentar-se-ão na seção 3.

Page 49: Felipe de Souza Tortato - UFSC

49

Dar-se-á a explicação dos diagramas, com maior ênfase nos

diagramas elaborados neste projeto. Utilizar-se-ão, como base, os

manuais: (FOWLER e SCOTT, 2000), (RUMBAUGH, JACOBSON e

BOOCH, 2005) e (AMBLER, 2005). O objetivo desta seção não é servir

como guia para implementação de diagramas UML, mas fornecer a base

teórica para a compreensão daqueles elaborados neste projeto. Para

utilização como guia, recomenda-se o uso do manual do autor (AMBLER,

2005).

2.3.2.1 Diagramas de Caso de Uso

Antes de iniciar a explicação do diagrama, necessita-se a

compreensão dos conceitos de ator e caso de uso.

Um ator é a idealização de alguém ou algo que utiliza o sistema

modelado. Ou seja, o ator pode ser uma pessoa, uma organização, um

sistema externo, entre outros. Durante a execução do software, um

usuário dele pode ser representado por vários atores, assim como vários

usuários podem ser representados pelo mesmo ator. Representam-se os

atores por bonecos “palito” no diagrama (RUMBAUGH, JACOBSON e

BOOCH, 2005).

Já, um caso de uso é uma funcionalidade vista externamente pelos

atores, representando um comportamento do sistema (RUMBAUGH,

JACOBSON e BOOCH, 2005). Também pode ser visto como uma

sequência de ações que geram valor a um ator. Representa-se um caso de

uso por uma elipse no diagrama (AMBLER, 2005).

Um diagrama de caso de uso é, então, segundo (RUMBAUGH,

JACOBSON e BOOCH, 2005), “um diagrama que mostra os

relacionamentos entre atores e casos de uso dentro de um sistema”3.

Os casos de uso podem participar de diversos tipos de

relacionamento: associação, generalização, inclusão e extensão.

Representam-se os relacionamentos por linhas no diagrama de caso de

uso (RUMBAUGH, JACOBSON e BOOCH, 2005).

A associação possui a função de conectar um caso de uso com um

ator que participa desse caso (RUMBAUGH, JACOBSON e BOOCH,

2005).

A generalização ocorre quando há um caso de uso, ou um ator, que é semelhante a um caso de uso base, ou um ator base, e herda

características do seu parente, além de possuir outras características

próprias (FOWLER e SCOTT, 2000).

3 Tradução feita pelo autor deste trabalho.

Page 50: Felipe de Souza Tortato - UFSC

50

Em um relacionamento do tipo include, um caso de uso base pode

adicionar comportamentos de outro caso de uso (RUMBAUGH,

JACOBSON e BOOCH, 2005), e sabe-se quando esse novo caso de uso

será invocado, ou seja, sabe-se que em determinado momento, uma

função, por exemplo, será invocada no código (AMBLER, 2005).

Já, um relacionamento do tipo extend, ocorre quando se insere um

comportamento adicional em um caso de uso tido como base, dentro de

determinadas condições, chamadas de pontos de extensão (FOWLER e

SCOTT, 2000). Desse modo, não se sabe quando esse caso de uso pode

acontecer e nem se ele vai ou não acontecer (AMBLER, 2005).

Esses conceitos ficam mais claros com um exemplo de diagrama

de caso de uso, como o mostrado na Figura 11.

Primeiramente, nota-se a existência de dois atores: o estudante e o

estudante internacional. O estudante internacional herda diversas

características de um estudante regular, por isso, há uma seta, partindo do

estudante internacional, apontada para o estudante. Entre os casos de uso,

há generalização no de “matricular um membro da família na

universidade”, que é um caso específico de “matricular um estudante na

universidade”.

Além disso, nota-se que há uma extensão entre os casos de uso

“fazer a verificação de segurança” e “matricular o estudante na

universidade”. Isso ocorre, pois há uma sequência lógica entre esses dois

casos de uso, que podem fazer com que o segundo caso de uso seja, ou

não, executado.

Por fim, há uma inclusão entre “matricular o estudante na

universidade” e “matricular no seminário”, pois sabe-se que a matrícula

no seminário será realizada e sabe-se quando isso vai ocorrer.

Page 51: Felipe de Souza Tortato - UFSC

51

Figura 11 - Diagrama de caso de uso.

Fonte: (AMBLER, 2005).

2.3.2.2 Diagramas de Classe

Utilizam-se os diagramas de classe para exibir as classes do

sistema, as relações entre elas e os principais atributos e métodos delas.

Esse tipo de diagrama auxilia na implementação de softwares com

orientação à objetos (AMBLER, 2005).

As associações são as linhas que conectam as diversas classes no

diagrama. Associações mais complexas, que possuem atributos e métodos

para representá-las, podem ser inseridas em um diagrama de classes por

meio de linhas tracejadas (AMBLER, 2005).

Uma associação também pode conter multiplicidade, indicando o

número de objetos (exemplares de uma classe) que podem conter naquela

associação. A multiplicidade é representada por números acima da linha

de associação. Por exemplo, uma associação do tipo 1:*, indica que há

uma instância da primeira classe, para múltiplas instâncias da segunda

classe (RUMBAUGH, JACOBSON e BOOCH, 2005).

Mostra-se um exemplo de diagrama de classes na Figura 12. Nota-

se que é possível, que nenhum estudante esteja relacionado a um curso,

mas um estudante pode estar relacionado a múltiplos (*) cursos. A relação

que une os estudantes e o curso é uma matrícula, que possui atributos e

métodos próprios.

Page 52: Felipe de Souza Tortato - UFSC

52

Figura 12 - Diagrama de classes.

Fonte: (AMBLER, 2005).

Utiliza-se uma simbologia em diagramas de classes para indicar a

visibilidade de um atributo ou método, de acordo com o mostrado no

Quadro 6.

Quadro 6 - Algoritmo do solver.

Símbolo Descrição

+ Visibilidade pública, acessível a qualquer objeto no sistema

- Visibilidade privada, acessível à classe que o implementa

# Visibilidade protegida, acessível à classe que o implementa

e subclasses

~ Visibilidade no pacote, acessível à classes do mesmo pacote Fonte: (AMBLER, 2005).

2.3.2.3 Diagramas de Objetos

Utilizam-se diagramas de objetos para exibir instâncias, por

exemplo, de um diagrama de classes, em determinado período. Desse

modo, pode-se explorar situações reais de relacionamentos entre objetos

do sistema (AMBLER, 2005).

Utilizando-se como exemplo, novamente, o do estudante, nota-se

que no diagrama de objetos, dá-se nome às instâncias das classes, e criam-

se variações delas, simulando possibilidades de execução real, conforme

mostrado na Figura 13.

Page 53: Felipe de Souza Tortato - UFSC

53

Figura 13 - Diagrama de objetos.

Fonte: (AMBLER, 2005).

2.3.2.4 Diagramas de Pacote

Pacotes de classes representam um conjunto de classes que

possuem algo em comum, por exemplo, funcionalidades semelhantes,

implementação conjunta, alta colaboração entre elas (AMBLER, 2005).

Não se dispõe de regras para a separação de pacotes, mas deve-se ter em

mente que esse procedimento visa facilitar a manutenção do modelo

(RUMBAUGH, JACOBSON e BOOCH, 2005).

Um diagrama de pacotes, então, simboliza a relação entre diversos

pacotes de um modelo. Dentro de cada pacote, podem conter classes,

relações entre elas, casos de uso, e tudo o que seja exclusivo para aquele

pacote (RUMBAUGH, JACOBSON e BOOCH, 2005).

Os pacotes são representados por desenhos semelhantes a uma

pasta e as relações, por linhas tracejadas com uma seta ao final

(RUMBAUGH, JACOBSON e BOOCH, 2005).

A Figura 14 mostra um exemplo de diagrama de pacotes para um

subsistema de compra de tickets. Nota-se que é possível haver pacotes

dentro de pacotes, no caso de esses pacotes possuírem características

semelhantes. Além disso, há a dependência de pacotes externos para o

funcionamento de classes dentro de um pacote, por exemplo, alguma

classe do pacote de “seleção de assento” necessita algum atributo ou

método de alguma classe do pacote de “banco de dados de assentos”.

Page 54: Felipe de Souza Tortato - UFSC

54

Figura 14 - Diagrama de pacotes.

Fonte: (RUMBAUGH, JACOBSON e BOOCH, 2005).

Pode-se montar, também, diagramas de caso de uso para pacotes,

como uma forma de organizar requisitos de uso (AMBLER, 2005).

2.3.2.5 Diagramas de Sequência

No diagrama de sequência, representa-se uma série de interações

entre objetos, descrevendo-se a mensagem passada entre eles e a ordem

(no tempo) em que elas são enviadas. Para isso, utiliza-se a dimensão

vertical do diagrama para o tempo e a horizontal, para a participação dos

objetos na interação (RUMBAUGH, JACOBSON e BOOCH, 2005).

Na Figura 15 mostra-se um exemplo de diagrama de sequência,

novamente, para a compra de tickets. Nota-se a sequência de atividades

que ocorre para a compra. Inicia-se a sequência com a solicitação do

totem de atendimento, controlado por um usuário, passando-se a

responsabilidade para o caixa. Após isso, os assentos disponíveis são

mostrados e a responsabilidade retorna para o totem para a seleção. E

assim por diante, até a conclusão da compra.

Page 55: Felipe de Souza Tortato - UFSC

55

Figura 15 - Diagrama de sequência.

Fonte: (RUMBAUGH, JACOBSON e BOOCH, 2005).

A linha pontilhada na vertical representa a lifeline do objeto ao

longo do tempo, ou seja, o que acontece durante a vida daquele objeto. A

quantidade de tempo aumenta no eixo vertical de cima para baixo

(RUMBAUGH, JACOBSON e BOOCH, 2005).

2.3.2.6 Diagramas de Comunicação

Assim como o diagrama de sequência, o diagrama de comunicação

também mostra a interação entre os objetos, mas de maneira mais

explícita (RUMBAUGH, JACOBSON e BOOCH, 2005), mostrando o

papel de cada um deles na colaboração para a execução de alguma

operação (AMBLER, 2005). Como não há uma dimensão de tempo, ao

Page 56: Felipe de Souza Tortato - UFSC

56

contrário do diagrama de sequência, dá-se a noção de sequência

utilizando-se números sequenciais no diagrama (RUMBAUGH,

JACOBSON e BOOCH, 2005).

Utilizando-se o mesmo exemplo do diagrama de sequência, de

compra de tickets, mostra-se um exemplo de diagrama de comunicação

na Figura 16.

Figura 16 - Diagrama de comunicação.

Fonte: (RUMBAUGH, JACOBSON e BOOCH, 2005).

Nota-se, novamente, a existência de um totem de compras. A

primeira interação começa no ato de uma requisição desse totem, indicada

por um número 1, seguida por uma busca no banco de dados, número 2.

Assim por diante, até retornar ao totem, no número 4, apresentando-o a

oferta de assentos. A interação segue até a efetuação da compra.

2.3.2.7 Diagramas de Máquina de Estados

Por meio dos diagramas de máquina de estados, pode-se

representar o comportamento dinâmico do programa, a partir de certo

Page 57: Felipe de Souza Tortato - UFSC

57

estado, provocado por eventos. Com isso, prevê-se os rumos do programa

quando esse é submetido a um evento (AMBLER, 2005).

Um estado pode ser definido por um conjunto de valores para os

objetos em determinado período, que possuem um comportamento

idêntico (RUMBAUGH, JACOBSON e BOOCH, 2005). Ou seja, para

determinado estado, por exemplo, um estado “A”, o comportamento dele

a um evento “X” será sempre igual.

No diagrama, desenha-se o estado em um retângulo com bordas

arredondadas. As transições entre estados representam-se por setas e as

condições de transição apresentam-se junto às setas (RUMBAUGH,

JACOBSON e BOOCH, 2005). Na Figura 17, mostra-se um exemplo de

diagrama de estados.

Figura 17 - Diagrama de estados.

Fonte: (RUMBAUGH, JACOBSON e BOOCH, 2005).

Nota-se, no exemplo, que há um estado inicial de “Aguardo”. Esse

estado aguarda um evento, que pode ser de valor da ordem recebida

“maior do que 25” ou “menor do que 25”. Para cada caso, ocorre a

transição para um estado diferente. Espera-se chegar ao estado de

“Processar Ordem”.

Page 58: Felipe de Souza Tortato - UFSC

58

2.3.2.8 Diagramas de Atividades

Os diagramas de atividades mostram uma sequência de atividades

realizadas em um programa. Esses diagramas fornecem suporte para

ilustrar tanto comportamentos condicionais quanto paralelos das

atividades (FOWLER e SCOTT, 2000). Faz-se isso por meio de um grafo

de nodos e fluxos, mostrando o fluxo de controle no decorrer do programa

executado (RUMBAUGH, JACOBSON e BOOCH, 2005). Desse modo,

lendo-se o diagrama de cima para baixo, pode-se compreender os passos

de computação para atingir determinado resultado.

Nesse tipo de diagrama, representam-se as atividades por um

retângulo de bordas arredondadas e os fluxos de controle, por setas. Além

disso, pode-se haver pontos de sincronização, que podem ser do tipo join

ou fork, ambos representados por uma barra horizontal. Nos pontos do

tipo join, aguarda-se o encerramento das atividades que se conectam na

região superior da barra, antes de dar início à atividade conectada na

região inferior dela. O inverso dos pontos do tipo join são os do tipo fork,

nos quais, a partir de uma atividade conectada na parte superior da barra,

executam-se outras atividades em paralelo, conectadas na parte inferior

dela (RUMBAUGH, JACOBSON e BOOCH, 2005).

Na Figura 18 mostra-se um exemplo de um diagrama de atividades.

Além dos elementos citados anteriormente, há também um losango entre

algumas atividades. Essa forma indica que a passagem por aquela

atividade para a próxima é condicional, ou seja, há um ponto de decisão

do programa, que precisa respeitar as condições daquele ponto para ter

prosseguimento (AMBLER, 2005).

O exemplo da Figura 18 se trata do processamento de uma ordem.

O círculo preto preenchido representa o início do processo. Após a

configuração inicial da ordem, há um ponto de decisão, verificando se é

uma “ordem única” ou se é uma “inscrição”. Para cada caso, há um fluxo

de programa diferente. É importante ressaltar que, caso os dois fluxos de

código voltem a se cruzar novamente, um novo símbolo condicional deve

ser colocado para juntar os fluxos. Isso ocorre no segundo losango do

exemplo da Figura 18. O círculo preto preenchido com um círculo de raio

maior ao seu redor indica o fim do processo.

Page 59: Felipe de Souza Tortato - UFSC

59

Figura 18 - Diagrama de atividades.

Fonte: (RUMBAUGH, JACOBSON e BOOCH, 2005).

2.3.2.9 Diagramas de Componentes

Um componente pode representar um sistema físico ou uma parte

de um sistema que possua uma lógica. Tem-se que o comportamento de

um componente pode ser descrito de maneira concisa e suas interfaces

com outros componentes também. Desse modo, por meio de um diagrama

de componentes, pode-se compreender o papel daquele componente no

sistema, suas interfaces com o mundo externo a ele, ou seja, com outros componentes e o sistema, mas não se compreende detalhes de sua

implementação. Desse modo, pensando-se num sistema como um todo,

poder-se-ia trocar um componente por outro que possua a mesma

Page 60: Felipe de Souza Tortato - UFSC

60

funcionalidade e as mesmas interfaces (RUMBAUGH, JACOBSON e

BOOCH, 2005).

Os componentes podem possuir interfaces que eles suportam,

assim como eles necessitam de interfaces para poder funcionar. Pode-se

pensar nessas interfaces como uma relação de dependência entre

múltiplos componentes (RUMBAUGH, JACOBSON e BOOCH, 2005).

No diagrama, as interfaces suportadas representam-se por um

círculo fechado e as interfaces necessárias, por um círculo semiaberto.

Portas são representadas por um quadrado e as interfaces devem estar

atreladas a uma porta (RUMBAUGH, JACOBSON e BOOCH, 2005).

Mostra-se um exemplo de diagrama de componentes na Figura 19.

Figura 19 - Diagrama de componentes.

Fonte: (RUMBAUGH, JACOBSON e BOOCH, 2005).

Um componente pode ser feito de outros componentes, que

também possuem interfaces. Nota-se, no exemplo da Figura 19, que o

componente “Sistema de Viagens” é feito com diversos outros

componentes conectados internamente. Há um console com o usuário,

como entrada de dados, e como saída, tem-se a realização da reserva.

2.3.2.10 Diagramas de Implementação

O diagrama de implementação mostra uma visão do sistema como

um todo, em termos de componentes de hardware e software. Usa-se esse

tipo de diagrama para analisar dependências que o sistema possa possuir

Page 61: Felipe de Souza Tortato - UFSC

61

e prever possíveis problemas de instalação, por exemplo, definindo uma

estratégia de implementação (AMBLER, 2005).

Nesse diagrama, pode-se ver o arranjo físico de nodos, ou seja,

recursos computacionais, representados por um paralelepípedo. Por

exemplo, no diagrama da Figura 20, mostra-se um nodo “servidor”, que

se comunica com o nodo “cliente”. Os nodos podem conter artefatos, que

são as entidades físicas, no caso do exemplo, um arquivo “.jar”. Porém,

podem ser artefatos do tipo banco de dados, páginas da WEB,

executáveis, entre outros (RUMBAUGH, JACOBSON e BOOCH, 2005).

Figura 20 - Diagrama de implementação.

Fonte: (RUMBAUGH, JACOBSON e BOOCH, 2005).

Page 62: Felipe de Souza Tortato - UFSC
Page 63: Felipe de Souza Tortato - UFSC

63

3 METODOLOGIA

No presente capítulo, descrever-se-á o desenvolvimento deste

trabalho, considerando-se as principais etapas da execução: análise de

requisitos, modelagem do software, definição de design e interações com

o usuário do software, desenvolvimento do front-end e do back-end.

Nas seções referentes ao desenvolvimento, apresentar-se-ão tanto

as condições do trabalho anteriormente elaborado, quanto as

contribuições deste trabalho.

3.1 ANÁLISE DOS REQUISITOS

Satisfazendo as metodologias de desenvolvimento de software

convencionais, inicialmente, buscou-se a compreensão do problema junto

aos potenciais clientes da ferramenta. Para isso, realizou-se uma reunião

para entendimento do problema do cliente e percepção sobre possíveis

soluções.

Nessa reunião, o cliente relatou as dificuldades encontradas no

dimensionamento de componentes de sistemas de refrigeração,

destacando, principalmente:

• a despadronização dos métodos de cálculos entre os diferentes

setores de P&D (Pesquisa e Desenvolvimento) dentro da

empresa, devido à falta de uma ferramenta unificada e utilizada

por todas as áreas;

• a dificuldade de repasse de informações aos parceiros de áreas

que não são de P&D, por conta do alto nível de complexidade da

linguagem utilizada nos softwares de engenharia disponíveis na

empresa.

Além disso, o vasto volume de conhecimento que a empresa

acumulou ao longo dos anos, através de P&D interno e de parcerias com

universidades, apresentou-se como uma possibilidade para expansão

futura da ferramenta.

Como resultado da etapa de análise dos requisitos, listaram-se os

necessários do software a ser desenvolvido:

1. Interface WEB, no padrão visual da empresa;

2. Menu de navegação;

3. Facilmente expansível;

4. Compatível com IIS e Microsoft SQL Server.

Page 64: Felipe de Souza Tortato - UFSC

64

A partir desses requisitos, apresentou-se um conjunto de propostas

de componentes que poderiam ser integrados à ferramenta. Por decisão

do cliente, optou-se por fazer um aplicativo para dimensionamento de

trocadores de calor WOT. Desse modo, a ferramenta deveria, a partir de

parâmetros inseridos pelo usuário, calcular, utilizando propriedades

termodinâmicas, os resultados para o dado dimensionamento.

Com base na decisão supracitada, listaram-se novos requisitos para

a parte visual da ferramenta:

1. Campos de inserção para propriedades geométricas do trocador;

2. Campos de inserção para propriedades físicas do fluido utilizado;

3. Botões de cálculo para execução das funções do aplicativo;

4. Dados de entrada do usuário e resultados do cálculo aparecendo

na mesma tela;

5. Geração de gráficos;

6. Possibilidade de inserção de um conjunto de entradas para obter

um conjunto de saídas;

7. Possibilidade de exportação dos dados em formato de texto.

Nos itens 4 e 6 da lista de requisitos, destacam-se duas dificuldades

anteriormente enfrentadas pelo cliente: a primeira, pela impossibilidade,

no software anterior, de se comparar o valor colocado na entrada e o

resultado do cálculo; e a segunda, no processo de geração de curvas, no

qual se fazia necessária a repetição do cálculo diversas vezes, alterando-

se os parâmetros manualmente.

3.2 MODELAGEM DO SOFTWARE

Neste capítulo, como forma de modelagem do software

desenvolvido, apresentar-se-ão diagramas de UML, que se consideraram

relevantes para o procedimento do trabalho. Usaram-se os diagramas para

modelagem do sistema, com fim de entendimento do problema e

direcionamento para a solução. Não se esperava partir do diagrama UML

diretamente para um código.

Para compreensão do sistema como um todo, a Figura 21 mostra o

comportamento esperado para um usuário comum do software, ou seja,

um usuário não administrador. De maneira mais resumida, espera-se que o usuário logue no aplicativo, insira parâmetros para os cálculos e

visualize os resultados.

Page 65: Felipe de Souza Tortato - UFSC

65

Figura 21 - Visão Geral de Uso do Sistema.

Fonte: do Autor (2019).

Descrever-se-ão, nas próximas seções, outras funcionalidades do

software, de maneira não exaustiva, buscando-se, primariamente, a

compreensão geral acerca do processo de desenvolvimento e

funcionamento do sistema. Nessa etapa, adotou-se um ponto

intermediário de detalhamento dos diagramas, tendo em vista a ideia de

entendimento do problema e não implementação da solução por terceiros.

Por conta disso, processos chave do software apresentam-se com maior

nível de detalhamento, ao passo em que outros possuem maior abstração.

3.2.1 Diagramas de Atividades

Desenharam-se os diagramas de atividades para diferentes usos do

aplicativo, separando-os entre back-end e front-end.

Entre os diagramas do front-end, descreveram-se a atividade de

login, a de cálculo simples, com um conjunto de parâmetros, e a de

cálculo multiparamétrico, com vários conjuntos de parâmetros. Entende-

InícioLogar no sistema

Navegar nos menus

Inserir parâmetros de

cálculo

Pressionar botão de cálculo

Aguardar resultados

Salvar resultados

Visualizar resultados

Page 66: Felipe de Souza Tortato - UFSC

66

se um conjunto de parâmetros, como os parâmetros necessários para

chegar aos resultados para dada geometria e propriedades do fluido.

Múltiplos conjuntos, então, geram múltiplos resultados, podendo-se

traçar uma curva de comportamento de um resultado, com base na

variação de um parâmetro.

Também, nos diagramas do back-end, descreveram-se os fluxos de

atividades para a realização do cálculo e acesso ao banco de dados.

Por conta do tamanho dos diagramas, a fim de melhorar a

visualização deles, preferiu-se mostrá-los nas figuras do APÊNDICE A.

3.2.2 Diagrama de Estados

Desenhou-se um diagrama de estados para um usuário comum,

considerando-se a utilização para o cálculo do trocador WOT, conforme

especificado em 3.1.

Para facilitar a visualização do diagrama, desconsiderou-se alguns

estados possíveis não tão usuais e designou-se nomes arbitrários para os

botões que geram eventos na interface do aplicativo.

Os estados compreendidos neste diagrama representam os

templates das views que são mostradas ao usuário. Desse modo, o que o

usuário vê seria, por exemplo, a tela de login, a tela de cadastro, a tela de

recuperar senha, e assim por diante, conforme mostrado no APÊNDICE

B. Nas telas que possuem diferentes visualizações, que dependem do

nível de acesso do usuário (AL), adicionou-se uma barra vertical (“|”),

para representar um filtro de seleção de componentes na página.

3.2.3 Diagrama de Caso de Uso

Desenvolveu-se o diagrama de caso de uso para três níveis de

usuário do aplicativo: administrador do sistema, especialista e técnico.

O administrador é o usuário capaz de administrar o acesso de

usuários, cadastrando-os ou removendo-os no banco de dados; e o texto

presente na página de documentação, também salvo no banco de dados.

O especialista é o usuário que pode realizar dimensionamento de

trocadores WOT, possuindo acesso a mais parâmetros de inserção, antes

do cálculo; e mais campos de visualização, após o cálculo. Por fim, o técnico é o usuário que também pode realizar

dimensionamento de trocadores WOT, porém não possui acesso a

parâmetros mais específicos, facilitando o uso em atividades cotidianas.

Os diagramas de caso de uso, considerando os três possíveis níveis

supracitados, apresentam-se nas figuras do APÊNDICE C.

Page 67: Felipe de Souza Tortato - UFSC

67

3.2.4 Diagrama de Classes

O diagrama de classes do aplicativo apresenta-se no APÊNDICE

D. Para sua construção, levou-se, em consideração, as seguintes classes:

3.2.4.1 User

Trata-se de um usuário do aplicativo que, portanto, pode ser tanto

de nível especialista, quanto de nível técnico.

Estes usuários são diferenciados pelos seus atributos: e-mail,

senha, nível de acesso e token. Os dois primeiros atributos são utilizados

para acessar o aplicativo, através da tela de login. Utiliza-se o nível de

acesso para classificar o usuário e mostrar a ele as informações adequadas

para a sua necessidade.

Ambos os níveis de usuário supracitados possuem acesso às

mesmas páginas. Porém, o usuário de nível técnico pode modificar apenas

alguns parâmetros de entrada, pelo fato dos outros serem padronizados

para a sua aplicação; bem como, não pode visualizar todos os resultados

do cálculo, visto que são irrelevantes para sua aplicação e tornariam a

ferramenta menos objetiva.

O token é um código aleatório gerado no primeiro acesso, ou

primeiro acesso após logout, do usuário em um dispositivo. Ele é utilizado

para manter a sessão do usuário ativa nesse dispositivo, a fim de evitar a

necessidade de se inserir usuário e senha sempre que o usuário acessar a

ferramenta.

Os métodos, que representam as ações executadas por esses

usuários, são: solicitar login ou logout para o gerenciador de sessão

(3.2.4.3), inscrever-se no aplicativo, ler seus próprios atributos, ler a

documentação do aplicativo, ler e modificar o token local (no dispositivo

em uso) e provocar eventos através da interface. Os usuários do aplicativo

não possuem autorização para alterar os dados previamente cadastrados

no momento da inscrição.

3.2.4.2 Admin

A classe Admin é herdada da classe User. Por conta disso, ela compartilha dos mesmos atributos e métodos citados em 3.2.4.1. Porém,

além dos métodos da classe pai, ela possui métodos próprios, para

possibilitá-la a modificar o nível de acesso de outros usuários,

determinando se os novos cadastros agrupar-se-ão na categoria de

especialista ou técnico; para permitir que o administrador remova

Page 68: Felipe de Souza Tortato - UFSC

68

usuários; e, para permitir que a documentação acessível aos outros

usuários seja alterada.

3.2.4.3 Session Manager

Trata-se de um administrador virtual para gerenciar as sessões para

os usuários logados. Seus métodos são relacionados às rotinas de criação

e encerramento de sessão, quando solicitado pelos usuários da classe User

ou pelo administrador, através da geração de um token; e à rotina de

verificação da sessão ativa em determinado dispositivo, comparando-se o

token armazenado no banco de dados e o token armazenado no

dispositivo.

3.2.4.4 Database

Esta classe representa a base de dados do aplicativo, ou seja, as

tabelas que armazenam informações. Utilizam-se as tabelas desta base de

dados para armazenar os atributos da lista de usuários, citados em 3.2.4.1,

e para armazenar o texto editável que é exibido na aba de documentação.

O único método disponível para esta classe é o de executar uma

query no banco de dados para adicionar, atualizar ou remover

informações.

3.2.4.5 Database Connection

Esta classe representa a conexão com a base de dados do

aplicativo. Por conta disso, seus atributos são: nome de usuário e senha

para acesso à base de dados, nome do servidor utilizado e nome da base

de dados, para efetuar a conexão.

Os possíveis procedimentos para essa classe são: iniciar a conexão,

encerrar comunicação e verificar o status da conexão.

3.2.4.6 UserInterface

Essa classe representa o template de interface que é comum a todas

as views. Por conta disso, seus atributos são do tipo template (em HTML, CSS e JS), sendo eles: o menu de navegação superior, o rodapé (footer) e

o conteúdo das páginas.

Os métodos para essa classe relacionam-se à decodificação de

eventos gerados pelo usuário, como por exemplo, clicar um botão e

Page 69: Felipe de Souza Tortato - UFSC

69

preencher um formulário; e o redirecionamento para outras páginas, na

navegação do usuário.

3.2.4.7 Solver

Refere-se à classe que executa os cálculos de dimensionamento de

componentes, com base nos parâmetros passados a ela através da

interface. Desse modo, cada tipo de componente possui um objeto dessa

classe, com os métodos para: decodificar a requisição feita ao servidor,

ler os parâmetros de cálculo, realizar os cálculos para o componente em

questão e retornar os resultados para a interface.

3.3 DESIGN DA INTERFACE

Seguindo-se os requisitos citados em 3.1, esboçou-se, uma

interface conceitual e apresentou-se ela em uma reunião. Nessa reunião,

fizeram-se presentes o responsável pelo projeto na empresa e outro

potencial usuário da ferramenta, que possuía grande experiência com

ferramentas de engenharia utilizadas na empresa.

Ambos trouxeram ideias para melhorar a usabilidade da interface

e uma segunda versão dela foi elaborada a partir dessa reunião. Os

formatos que se poderia esperar para as telas são mostrados no

APÊNDICE E.

Ao final do desenvolvimento, as telas ficaram semelhantes ao

projeto, com pequenas alterações. A explicação da funcionalidade de cada

uma delas, será dada no capítulo 4.

3.4 DESENVOLVIMENTO DO FRONT-END

3.4.1 Situação Inicial

Como comentado anteriormente, dispunha-se de uma ferramenta

semelhante para realizar dimensionamento de componentes de

engenharia. Entre os problemas relatados, pela empresa com essa

ferramenta, continham: o fato de ela não possuir um padrão de parâmetros

e resultados utilizados pela empresa no dia-a-dia, inviabilizando o seu uso pelos colaboradores; e dificuldades de visualização dos dados, por conta

do layout aplicado. A Figura 22 mostra uma captura de tela da ferramenta

antiga, com os campos de inserção, resultados e métodos dos cálculos

propositalmente borrados.

Page 70: Felipe de Souza Tortato - UFSC

70

Em relação às dificuldades de visualização, citados pela empresa,

nota-se, pela marcação 1, que os campos de inserção de parâmetros e de

resultados não podem ser visualizados ao mesmo tempo, por limitações

de espaço, visto que são muitos campos. Pelo mesmo motivo, a marcação

3 mostra que os gráficos também não podem ser visualizados lado a lado

com os resultados ou com os parâmetros de entrada.

Já, a marcação 2 refere-se ao problema de quantidade de

informação, sem a passagem de um filtro por elas, por conta da

inexistência de diferentes níveis de acesso. Nesse quadro, mostra-se o

método de cálculo utilizado pela ferramenta, que é uma informação

irrelevante para alguns usuários da ferramenta.

Figura 22 - Captura de tela de um fragmento do aplicativo antigo.

Fonte: do Autor (2019).

Além disso, fez-se toda a renderização da interface no back-end,

misturando-se a parte de código e a parte visual no mesmo arquivo,

prejudicando a manutenibilidade da ferramenta e interpretação dos

códigos. Outro aspecto negativo em relação a isso, é o efeito de “página

branca”, enquanto a nova página é carregada, ao navegar pelo menu, por

exemplo, como comentado na seção 2.2.1. Entende-se que a renderização

no back-end pode possuir vantagens em outros tipos de projetos, nos quais

não há atualização de dados com a mesma frequência.

Por conta disso, propôs-se a separação entre front-end e back-end, atribuindo-se ao primeiro a renderização (parte visual) e, ao segundo, a

execução de requisições realizadas ao servidor (acesso à base de dados e

cálculos), como uma API.

Page 71: Felipe de Souza Tortato - UFSC

71

3.4.2 Estruturação do front-end

Dividir-se-á a estruturação do front-end em quatro partes: as

ferramentas utilizadas para a construção do aplicativo, as linguagens, as

bibliotecas e os frameworks escolhidos.

3.4.2.1 Estrutura mínima para o desenvolvimento

Para visualização do aplicativo WEB, ao longo do

desenvolvimento, fez-se necessária a utilização de um servidor WEB. O

ambiente do servidor foi um computador com sistema operacional

Ubuntu 18.04 e o servidor Apache2. Como ambiente de desenvolvimento,

utilizou-se o Sublime 3.

3.4.2.2 Linguagens

Para descrição da parte visual do front-end, utilizaram-se

linguagens padrão para aplicativos e sites WEB: HTML e CSS. A

primeira, para a descrição dos elementos que apareceriam na interface; e

a segunda, para customização desses elementos.

Os principais elementos em HTML utilizados foram: <table> e

derivados, para a construção de tabelas de entrada do usuário e de

resultados; <input>, para inserção de dados por parte do usuário; <div>,

para divisão de seções na página; e <button>, para descrever botões

utilizáveis pelo usuário.

Utilizou-se a linguagem CSS para personalização dos elementos

em HTML. Desse modo, tendo em vista os requisitos visuais do projeto,

as propriedades mais utilizadas foram as de alteração de cor dos campos,

das bordas, e das fontes; preenchimento e margem, para melhor

distribuição e posicionamento dos elementos; e propriedades dinâmicas,

para criar destaque, por exemplo, quando um usuário passa o mouse sobre

um botão.

Já, para implementação de funções mais complexas à interface,

utilizou-se a linguagem JavaScript. Com isso, foi possível chamar

funções quando algum evento é disparado, por exemplo. No aplicativo,

programaram-se as funções em JavaScript para: gerar animações de auxílio ao uso do aplicativo, utilizar pop-ups para inserção de dados e

conectar-se com o back-end através de requisições HTTP.

Page 72: Felipe de Souza Tortato - UFSC

72

3.4.2.3 Bibliotecas e Frameworks

As bibliotecas foram essenciais para acelerar o processo de

desenvolvimento do aplicativo, dada a possibilidade de reuso de código

já desenvolvido. Para o front-end desse aplicativo, utilizaram-se

bibliotecas em CSS e Javascript.

A principal biblioteca de CSS utilizada foi o Bootstrap, com o

intuito de tornar a interface responsiva, para diferentes tamanhos de tela,

através da utilização de sistema de grids. Além disso, essa biblioteca

proporcionou o uso de diversos componentes predefinidos, facilitando o

processo de criação da interface.

Em JavaScript, utilizou-se a biblioteca Chart.js para a plotagem

dos gráficos; a biblioteca Handsontable, para utilização de planilhas de

inserção de dados por células; e a biblioteca de JavaScript do Bootstrap,

para efeitos e animações que não seriam possíveis apenas com a

biblioteca de CSS.

Para a criação de um aplicativo WEB com experiência similar a

um aplicativo equivalente em Desktop (SPA), utilizou-se o framework de

JavaScript AngularJS. Com isso, foi possível atribuir controladores

(controllers) para cada página, de modo a controlar os dados delas; filtros

(filters), para formatação de dados; diretivas (directives), para a extensão

de templates em HTML; e serviços (services), para execução de diversas

funções na aplicação.

Como previamente comentado, utilizou-se um controlador por

página, para realizar operações sobre os dados. Qualquer alteração em

alguma variável realizada pelo controlador é vista imediatamente na

interface, e vice-e-versa, devido ao mecanismo de two-way data binding.

Utilizaram-se filtros para ordenação de dados em tabelas. Não se

criaram diretivas para este projeto, pois não se viu necessidade para tal.

Por outro lado, utilizaram-se amplamente os serviços na

construção do aplicativo. Os principais serviços utilizados do AngularJS

foram: $http, relacionado a requisições HTTP para o servidor; $location,

relacionado à localização das páginas; $window, relacionado à janela do

navegador; e $sanitize, relacionado à remoção de tags potencialmente

perigosas ao aplicativo.

Page 73: Felipe de Souza Tortato - UFSC

73

3.5 DESENVOLVIMENTO DO BACK-END

3.5.1 Situação inicial

Como comentado em 3.4.1, não se dispunha de uma separação no

código entre as linguagens de back-end e de front-end, pois ambas

estavam presentes no mesmo arquivo, dificultando a leitura e manutenção

do código.

Além disso, por ter se tratado de um protótipo, a versão antiga do

back-end não continha mecanismos de verificação dos valores inseridos

pelo usuário e nem tratadores de erros para as funções implementadas. No

front-end, verificava-se para algumas inserções, por exemplo, para

valores fora dos limites possíveis. Quando isso acontecia, uma pop-up

aparecia avisando sobre o erro de inserção. Porém, caso ocorresse algum

erro de cálculo, ou caso algum recurso do back-end estivesse

indisponível, erros poderiam acontecer, sem ocorrer tratamento e/ou

envio de feedbacks ao usuário da ferramenta.

3.5.2 Estruturação do back-end

Dividir-se-á a estruturação do back-end em 3 partes: as ferramentas

utilizadas para a construção do aplicativo, as linguagens e as bibliotecas

escolhidas. Não se utilizaram frameworks no back-end, visto que não se

encontrou necessidade para tal, ao longo da programação dessa parte.

3.5.2.1 Estrutura mínima para o desenvolvimento

Para a visualização de resultados e testes ao longo do

desenvolvimento, utilizou-se o mesmo servidor Apache2, do front-end,

rodando em um computador com sistema operacional Ubuntu 18.04.

Além disso, instalou-se o PHP 5.6, para suportar a programação na

linguagem PHP; e o MySQL 5.7.26, para rodar o banco de dados para

testes. Como ambiente de desenvolvimento, utilizou-se também o

Sublime 3.

3.5.2.2 Linguagens

Como já se dispunha dos cálculos implementados em PHP,

escolheu-se por manter essa linguagem no back-end. Essa decisão evitou

a necessidade da tradução do código já disponível para uma nova

linguagem, e focou o trabalho nessa linguagem no provisionamento do

Page 74: Felipe de Souza Tortato - UFSC

74

servidor. Além disso, fez-se a disponibilização das funções por meio de

uma API para transferência de parâmetros e acesso aos resultados, em

PHP.

Para acesso ao banco de dados, para as funções de controle de

acesso e armazenamento de informações de documentação, utilizou-se

um banco de dados de linguagem SQL. Para a versão inicial do aplicativo,

optou-se por MySQL, pela facilidade de uso junto ao PHP e fácil

gerenciamento de informações com a ferramenta phpMyAdmin.

Desse modo, separou-se o back-end: na parte matemática, com os

cálculos e o uso da biblioteca CoolProp, citada em 3.5.2.3; e na parte de

estrutura para funcionamento do aplicativo, com a estruturação do banco

de dados e a disponibilização de APIs.

3.5.2.3 Bibliotecas

Utilizou-se a biblioteca CoolProp, para PHP, para a realização de

cálculos envolvendo as propriedades de fluidos, essencial para que o

aplicativo pudesse dimensionar o trocador de calor.

Enfrentaram-se dificuldades na configuração dessa biblioteca para

o PHP na tentativa de sua instalação em um sistema operacional de 32

bits (Raspbian), no qual se tentava rodar o servidor. O problema

encontrado foi o da não possibilidade de se compilar a biblioteca em

sistema operacional de 32 bits, por conta de flags de compilação para 64

bits. Além disso, a biblioteca em versões mais antigas não funcionava

com as versões mais novas do PHP. Após inúmeras tentativas, optou-se

por rodar o servidor no sistema operacional Ubuntu 18.04, de 64 bits,

como comentado na seção 3.5.2.1, no qual não se encontraram mais

problemas para instalação.

3.5.3 Algoritmo

Nesta seção, descrever-se-ão os algoritmos base para as principais

funções adaptadas ou implementadas no PHP. Entende-se que todas as

rotinas implementadas se baseiam nesses algoritmos com poucas

mudanças.

As chaves “{“ e “}” indicam, respectivamente, o início e o final de um trecho de código de iteração ou de condição. Utilizou-se os colchetes

“[“ e “]” para acessar índices das variáveis tipo vetor, de uma dimensão,

ou matriz, de mais dimensões. Usou-se os parênteses “(“ e “)” para a

transferência de parâmetros para as funções. O símbolo de reticências “...”

indica que naquela parte do código ocorre uma sequência de operações

Page 75: Felipe de Souza Tortato - UFSC

75

semelhantes. A seta “->” indica acesso a algum atributo ou método do

objeto. O texto entre “/* */” indica o comentário da função da linha.

3.5.3.1 Solver

Mostra-se o algoritmo do solver no Quadro 7. Esta parte do

aplicativo responsabiliza-se por realizar o dimensionamento, através da

resolução do problema térmico, com base nos parâmetros passados.

Quadro 7 - Algoritmo do solver.

Algoritmo

aguardar_requisicao_servidor() {} /* Arquivo aguarda requisição do

servidor */

se(recebeu_requisicao == true) { /* Evento de requisição do servidor */

parametros[] =

converter_json_para_vetor_objeto(ler_parametros_recebidos()) /* Lê os

parâmetros enviados junto à requisição, ou seja, os parâmetros de cálculo

*/

numero_de_sistemas = conta_tamanho(parametros[]) /* Verifica a

quantidade de objetos de parâmetros, ou seja, quantos sistemas devem ser

simulados */

iterar(de numero_iteracao_sistema = 1 ate numero_de_sistemas) { /*

Iterador para buscar a solução para cada sistema a ser simulado */

se(checa_validade_parametros(parametros[numero_iteracao_sistema])

== valido) { /* Verifica se os parâmetros estão íntegros e se são

compatíveis com o cálculo solicitado (API genérica) */

continua()

}

se_nao {

retorna_erro()

finaliza()

}

Page 76: Felipe de Souza Tortato - UFSC

76

parametros_si =

converter_unidades(parametros[numero_iteracao_sistema]) /* Realiza

conversão dos parâmetros para o sistema internacional de medidas,

para uso nos cálculos */

iterar(de numero_iteracao_passo 1 ate numero_passos) { /* O número

de passos que serão dados no cálculo, o que define a precisão do

cálculo. Por exemplo, para um tubo de 1 metro, 10 passos, significaria

que os cálculos seriam realizados para 10 centímetros, 20 centímetros e

assim em diante até 1 metro */

se(parametros_si->parametro_1 == condicao_1) { /* Verificações e

cálculos: a partir desse trecho, o software faz verificações e direciona

os cálculos, salva os valores em variáveis e realiza todos os cálculos

para cada passo indicado */

variavel_1[numero_iteracao_passo] = calculo_CoolProp_caso_1()

}

se_nao {

variavel_1[numero_iteracao_passo] =

calculo_CoolProp_nao_caso_1()

}

...

se(parametros_si->parametro_N == condicao_N) { /* Por exemplo,

verifica se algum parâmetro é um valor ou outro, ou se está dentro de

um range de valores, para ver qual função utilizar. Como não há um

padrão de verificação, não se pôde utilizar outro loop */

variavel_N[numero_iteracao_passo] = calculo_CoolProp_caso_N()

/* Salva o valor de um resultado para aquele passo */

}

se_nao {

variavel_N[numero_iteracao_passo] =

calculo_CoolProp_nao_caso_N()

}

Page 77: Felipe de Souza Tortato - UFSC

77

}

resultados_sistemas[numero_iteracao_sistema] =

criar_objeto(variavel_1[]..., variavel_N[]) /* Salva um objeto com os

resultados de cada passo para aquele sistema */

}

responder_para_servidor(converter_vetor_objeto_para_json(resultados_s

istemas[])) /* Retorna os resultados para o solicitante através do servidor

*/

}

Fonte: do Autor (2019).

3.5.3.2 Sistema de Autenticação

Mostra-se o algoritmo do Sistema de Autenticação no Quadro 8.

Programou-se esta parte do aplicativo para controlar os acessos ao

aplicativo, direcionar os usuários para as páginas corretas e gerenciar as

informações e permissões de usuários.

Quadro 8 - Algoritmo do Sistema de Autenticação.

Algoritmo

aguardar_requisicao_servidor() {} /* Arquivo aguarda requisição do

servidor */

se(recebeu_requisicao == true) { /* Evento de requisição do servidor */

parametros = converter_json_para_objeto(ler_parametros_recebidos()) /*

Lê os parâmetros enviados junto à requisição, ou seja, os parâmetros da

operação com usuários a ser realizada */

se(checa_validade_parametros(parametros == valido) { /* Verifica se os

parâmetros estão íntegros e se são compatíveis com a operação com

usuários solicitada (API genérica) */

continua()

}

se_nao {

Page 78: Felipe de Souza Tortato - UFSC

78

retorna_erro()

finaliza()

}

seleciona(parametros->funcao_escolhida) { /* Um seletor para escolher,

dentre as funções escolhidas, qual será o direcionamento do código */

caso "login": /* Quando o usuário já é cadastrado e solicita um login */

se(checa_credenciais_usuario(parametros->username, parametros-

>senha) == "ativo") {

cria_token_usuario(parametros->username) /* Um token para

manter sua sessão ativa é criado */

redirecionar_usuario(parametros->nivel_acesso) /* Redireciona o

usuário para a página inicial do seu nível de acesso */

}

se_nao() {

retorna_erro()

}

caso "logout": /* Deleta o token e torna o usuário inativo naquele

dispositivo até um novo login */

deleta_token_usuario(parametros->username)

caso "novo_usuario": /* Quando o usuário se cadastra na ferramenta */

se(checa_informacoes(parametros) == "ok") {

solicita_insercao_usuario(parametros) /* O usuário é inserido na

base de dados, mas ainda não pode acessar antes da aprovação do

Administrador */

}

se_nao {

retorna_erro()

Page 79: Felipe de Souza Tortato - UFSC

79

}

caso "modificar_acesso": /* Função disponível para o Administrador,

para alterar o status de algum usuário */

modificar_acesso(parametros->username, nivel)

caso "recuperar_senha": /* Quando o usuário perde a sua senha e deseja

recuperá-la */

enviar_codigo_recuperacao(parametros->username, parametros-

>informacoes_recuperacao)

caso "atualizar_senha": /* Quando o usuário pretende alterar a senha */

se(checa_informacoes(parametros) == "ok") {

atualiza_senha(parametros->username, parametros->senha)

}

se_nao {

retorna_erro()

}

}

responder_para_servidor(codigo_resposta) /* Retorna código de sucesso

ou erro para o servidor */

}

Fonte: do Autor (2019).

3.5.3.3 Gerenciador do Banco de Dados

Mostra-se o algoritmo do Gerenciador do Banco de Dados no

Quadro 9. Essa parte do código no back-end serve para executar queries

e acessar os dados salvos no banco de dados do aplicativo, tanto na base

de usuários quanto na base de documentação.

Page 80: Felipe de Souza Tortato - UFSC

80

Quadro 9 - Algoritmo do Gerenciador do Banco de Dados.

Algoritmo

aguardar_requisicao_servidor() {} /* Arquivo aguarda requisição do servidor */

se(recebeu_requisicao == true) { /* Evento de requisição do servidor */

parametros = converter_json_para_objeto(ler_parametros_recebidos()) /* Lê

os parâmetros enviados junto à requisição, ou seja, os parâmetros da

operação com usuários a ser realizada */

se(checa_validade_parametros(parametros == valido) { /* Verifica se os

parâmetros estão íntegros e se são compatíveis com a operação de banco de

dados solicitada (API genérica) */

continua()

}

se_nao {

retorna_erro()

finaliza()

}

seleciona(parametros->funcao_escolhida) { /* Um seletor para escolher,

dentre as funções escolhidas, qual será a query executada no banco de dados

*/

caso "inserção": /* Quando se deseja inserir algo na tabela */

query = "INSERE NA tabela_1 (colunas) VALORES (parametros-

>valores)"

caso "remoção": /* Quando se deseja remover algo da tabela */

query = "DELETA DE tabela_1 ONDE coluna_1 = parametros-

>condicoes[1]"

caso "edição": /* Quando se deseja atualizar algo na tabela */

query = "ATUALIZA tabela_1 COLOQUE coluna_1 = parametros-

>valores[1] ONDE coluna_2 = parametros->condicoes[2]"

caso "consulta": /* Quando se deseja ler dados da tabela */

query = "SELECIONA DE tabela_1 ONDE coluna_1 = parametros-

>condicoes_1"

}

Page 81: Felipe de Souza Tortato - UFSC

81

se(verifica_credenciais(parametros->usernameDB, parametros->senhaDB)

== "ok") { /* Se as credenciais do usuário estão de acordo para se conectar,

executa a query */

resultado = executar_query(parametros->query)

responder_para_servidor(converter_vetor_objeto_para_json(resultado)) /*

Retorna resultados da consulta */

}

se_nao {

retorna_erro()

}

}

Fonte: do Autor (2019).

3.5.4 Banco de dados

Como comentado anteriormente, necessitava-se a adição de níveis

de acesso para diferentes usuários castrados na ferramenta. Além disso,

precisava-se salvar informações de documentação.

3.5.4.1 Tabela de Usuários

Fez-se uma tabela para usuários com as seguintes colunas: “id”

(tipo número inteiro), “email” (tipo string “VARCHAR”), “password”

(tipo string “VARCHAR”), “access_level” (tipo número inteiro) e

“token” (tipo string “VARCHAR”). A coluna de “id” incrementa-se

automaticamente e serve como uma chave para cada linha da tabela,

facilitando-se o acesso de informações. Além disso, para manter a

segurança das senhas inseridas, armazenaram-se elas utilizando-se a

criptografia MD5.

No Quadro 10, mostra-se o formato dessa tabela no banco de

dados, populada com dados meramente ilustrativos.

Page 82: Felipe de Souza Tortato - UFSC

82

Quadro 10 - Tabela de Usuários no Banco de Dados.

id email password access_level token

0 [email protected] 1e877f98d8b... 0 34vryr66

1 [email protected] 493e8f9a9c3... 1 53hg535

2 [email protected] 42354efaa44... 2 y34534g

3 [email protected] 65465efa841... 1 645huki

Fonte: do Autor (2019).

Cada entrada da tabela é representada por uma linha. Tem-se que

há apenas um usuário do tipo administrador, mas pode-se haver diferentes

usuários de outros tipos. Cada novo usuário é cadastrado nessa base.

3.5.4.2 Tabela de Documentação

Fez-se uma tabela para armazenar a documentação com as

seguintes colunas: “id” (tipo número inteiro) e “doc” (tipo string

“VARCHAR”). A coluna “doc” salva o texto da documentação, em

formato HTML.

No Quadro 11, mostra-se o formato dessa tabela no banco de

dados, populada com dados meramente ilustrativos.

Quadro 11 - Tabela de Documentação no Banco de Dados.

id doc

0 <p> Lorem ipsum dolor sit amet, consectetur … </p>

Fonte: do Autor (2019).

Page 83: Felipe de Souza Tortato - UFSC

83

4 RESULTADOS

4.1 CAPTURAS DE TELA DO APLICATIVO

Nesta seção, apresentar-se-ão os resultados do desenvolvimento do

aplicativo. Por questões de confidencialidade de métodos de cálculo da

ferramenta, borraram-se alguns campos de inserção e de visualização.

Apresentaram-se os resultados em três modos de visualização

distintos. Descrever-se-á a funcionalidade de cada view do aplicativo com

capturas de tela com viewport de 1440 x 900 pixels. Após isso, mostram-

se as capturas de tela das versões móveis celular e tablet, mas sem

explicação de funcionamento, uma vez que essas visualizações

compartilham das mesmas funcionalidades (ou menos) que as do

aplicativo rodando em uma tela com maior viewport.

4.1.1 Monitor com viewport de 1440 x 900 pixels

4.1.1.1 Login

Desenvolveu-se a tela de login, de maneira semelhante à projetada

(Figura 52), utilizando-se cores e a imagem de acordo com a identidade

visual da empresa. O resultado é mostrado na Figura 23.

Figura 23 - Captura de tela da página de Login.

Fonte: do Autor (2019).

Page 84: Felipe de Souza Tortato - UFSC

84

Conforme mostrado na Figura 23, há campos para a inserção de

nome de usuário e senha; uma checkbox, para que o usuário permaneça

logado; um botão principal para efetuar o login e dois botões do tipo link

abaixo do botão principal, para as opções de recuperação de senha e de

cadastro.

4.1.1.2 Tela de Cálculo do Trocador WOT

Ao conseguir realizar o login, o usuário do tipo especialista

visualiza a tela mostrada na Figura 24. Para a construção dessa tela,

baseou-se no projeto mostrado na Figura 54.

Figura 24 - Captura de tela da página do trocado WOT do usuário especialista.

Fonte: do Autor (2019).

Nota-se que a parte de conteúdo da tela divide-se em três colunas.

Na primeira coluna, apresentam-se dois modos de visualização. O modelo

mostrado na parte superior da primeira coluna é uma visualização 3D do

componente (uma funcionalidade adicionada ao longo da execução do

projeto), para que o usuário possa conferir a geometria do equipamento.

O modelo na parte inferior da primeira coluna mostra a vista frontal do

componente, com legenda que auxilia na identificação dos campos de

preenchimento.

Abaixo do objeto 3D, colocou-se um botão do tipo link, disponível

apenas na versão para telas com maior viewport, para que fosse possível

Page 85: Felipe de Souza Tortato - UFSC

85

ampliar a visualização do objeto 3D, resultando na janela mostrada na

Figura 25.

Figura 25 - Captura de tela da funcionalidade de visualização do objeto em 3D.

Fonte: do Autor (2019).

Na segunda coluna, pode-se inserir os parâmetros para os cálculos.

Alguns deles devem ser inseridos com valores pré-estabelecidos, através

de um menu de seleção, como mostrado na Figura 26.

Page 86: Felipe de Souza Tortato - UFSC

86

Figura 26 - Captura de tela dos modos de inserção da ferramenta.

Fonte: do Autor (2019).

Os parâmetros numéricos devem ser inseridos digitando-se o valor

no campo. Além disso, no campo de seleção mais à direita, pode-se

selecionar a unidade daquele valor inserido, por exemplo, metros ou

milímetros.

Além disso, ao se passar com o ponteiro do mouse, pelos

parâmetros geométricos, mostra-se um círculo em destaque sobre a

imagem do componente (Figura 27), com o intuito de facilitar o

entendimento do usuário sobre qual parâmetro deve ser inserido naquele

campo.

Page 87: Felipe de Souza Tortato - UFSC

87

Figura 27 - Captura de tela do auxílio visual dos parâmetros.

Fonte: do Autor (2019).

Por fim, na terceira coluna mostram-se os resultados dos cálculos.

Na parte superior, o usuário visualiza os principais resultados, podendo

também alterar as unidades da visualização com os campos de seleção.

Logo abaixo, plotam-se gráficos para a visualização de parâmetros

dependentes do passo do cálculo.

Para salvar os resultados, ao se clicar no botão de salvar resultados

(segundo, da esquerda para a direita), o aplicativo gera um arquivo no

formato texto e disponibiliza-o para download, como mostrado na Figura

28, de acordo com o projeto da Figura 57. O arquivo gerado contém os

parâmetros inseridos pelo usuário e os resultados.

Page 88: Felipe de Souza Tortato - UFSC

88

Figura 28 - Captura de tela da função de salvamento de dados de cálculo.

Fonte: do Autor (2019).

Ao se clicar no terceiro botão da esquerda para a direita, pode-se

também salvar os logs gerados pelo aplicativo. Mostram-se os logs na

parte mais inferior da tela. Eles indicam no caso de algum erro ter

acontecido por motivos comuns, como: falha de conexão, parâmetros

inválidos e indisponibilidade de serviços. Além disso, disponibiliza-se

status dos cálculos e pode-se mostrar informações sobre o método de

cálculo utilizado (não se implementou essa funcionalidade).

Por fim, ao se clicar no quarto botão da esquerda para a direita,

abre-se uma janela pop-up com uma tabela para inserção de dados do

cálculo multiparamétrico. Nessa janela, pode-se inserir os mesmos

parâmetros para até 10 configurações diferentes. Com base nisso, geram-

se, por exemplo, 10 pontos de operação diferentes que podem ser

comparados para escolher um dimensionamento ótimo para o

componente. Mostra-se o projeto dessa janela na Figura 55 e o resultado

do desenvolvimento na Figura 29.

Nota-se que o formato de inserção é bem simples e semelhante a

algum software de edição de planilhas. Desse modo, caso o usuário tenha

os seus parâmetros em uma tabela do Microsoft Excel ou do Google

Sheets, por exemplo, pode-se simplesmente copiar os parâmetros e colar

no aplicativo.

Page 89: Felipe de Souza Tortato - UFSC

89

Figura 29 - Captura de tela do modo de inserção dos parâmetros para cálculo

multiparamétrico.

Fonte: do Autor (2019).

Ao se clicar no botão de calcular, enviam-se os parâmetros para o

solver no servidor e ele retorna os resultados para todas as diferentes

combinações de parâmetros enviados. Um bloco em verde indica que a

operação foi realizada com sucesso.

O formato de retorno é uma tabela semelhante à tabela de inserção

de parâmetros. Então, pode-se copiar os dados e colar em alguma outra

tabela, ou gerar um documento de texto de saída com esses novos valores.

Para gerar o arquivo de texto, basta clicar-se no botão de salvamento.

Mostra-se o projeto inicial da tela de resultados do cálculo

mutiparamétrico na Figura 56. Pode-se ver a página desenvolvida na

Figura 30.

A funcionalidade de cálculo multiparamétrico encontra-se

disponível apenas para o aplicativo na versão para telas com maior

viewport, uma vez que seu uso em um aplicativo móvel seria complicado,

por conta da alta quantidade de dados em uma tela muito pequena e maior

esforço no uso de funções de copiar e colar.

Page 90: Felipe de Souza Tortato - UFSC

90

Figura 30 - Captura de tela do modo de visualização dos resultados do cálculo

multiparamétrico.

Fonte: do Autor (2019).

4.1.1.3 Tela de Documentação

Por meio da tela de Documentação, o usuário pode aprender a usar

a ferramenta e entender os cálculos envolvidos nela. Para usuários

comuns da ferramenta, essa página se apresenta como um texto estático.

Mostra-se o projeto dessa página na Figura 58. Como resultado do

desenvolvimento, tem-se a página de documentação com formato similar

a uma Wiki, como mostrado na Figura 31.

Page 91: Felipe de Souza Tortato - UFSC

91

Figura 31 - Captura de tela da página de Documentação.

Fonte: do Autor (2019).

Para se alterar o conteúdo da página de Documentação, necessita-

se logar no aplicativo como Administrador e escolher, no menu, a opção

de documentação. Pode-se visualizar o projeto inicial da página de

Documentação na Figura 59. Seguindo-se o projeto, construiu-se a página

mostrada na Figura 32.

Na página de edição de documentação, o modo de inserção da

documentação é na linguagem HTML. Caso o editor já possua

familiaridade com a linguagem, pode-se inserir o código diretamente no

campo à esquerda (Figura 32). Já, à direita, visualiza-se,

instantaneamente, a maneira como a documentação aparecerá na tela de

Documentação para os usuários comuns da ferramenta.

Porém, caso o editor não possua conhecimento sobre a linguagem

HTML, adicionou-se um conjunto de botões na parte inferior da tela

(abaixo do campo de edição), para auxiliá-lo na inserção da

documentação. Por meio dos botões, o usuário pode inserir formatos de

texto pré-definidos, como:

• Quatro níveis de texto: <h1>, <h3>, <h5> e <p>, para os títulos

e subtítulos de textos e parágrafos;

• Quebra de linha, para separar parágrafos;

• Linha divisória, para separar índices;

• Deixar o texto negrito, itálico, sublinhado ou subscrito;

Page 92: Felipe de Souza Tortato - UFSC

92

• Listagem de itens;

• Criar blocos de texto com linha ao redor (panel).

Figura 32 - Captura de tela da página de edição da Documentação.

Fonte: do Autor (2019).

4.1.1.4 Tela de Gerenciamento de Usuários

Desenvolveu-se, por último, a tela de gerenciamento de usuários.

Ela serve para que o Administrador possa aprovar ou reprovar as

solicitações de acesso à ferramenta, além de atribuir níveis de acesso aos

usuários. Para isso, o projeto da Figura 60 previa a listagem de todos os

usuários em uma tabela, possibilitando a seleção de múltiplos usuários

para realização de uma mesma operação.

Mostra-se o resultado do desenvolvimento dessa tela na Figura 33.

Diferentemente do projeto, fez-se uma tabela mais simples, apenas com a

possibilidade de aprovação ou recusa da solicitação. Além disso, colocou-

se um campo para filtro de busca de usuários, para o caso de múltiplos

usuários estarem cadastrados na ferramenta.

Page 93: Felipe de Souza Tortato - UFSC

93

Figura 33 - Captura de tela da página de gerenciamento de usuários.

Fonte: do Autor (2019).

4.1.2 Dispositivos Móveis

Apesar de não ser um requisito do projeto, pelo uso da biblioteca

responsiva Bootstrap, a adaptação da parte visual do aplicativo WEB para

dispositivos móveis agradou o cliente e facilitou os testes do aplicativo

entre os envolvidos.

Visto que as funcionalidades do aplicativo já foram explicadas na

seção 4.1.1, nesta seção apresentar-se-ão apenas as capturas de tela em

celulares e tablets, de modo a evitar a repetição do conteúdo.

As capturas de tela foram realizadas utilizando-se o modo de

visualização do navegador, mudando-se o dispositivo para um Samsung

Galaxy S5, com tela de dimensões 360 x 640 pixels. Mostra-se, na Figura

34 (a) a parte superior da tela de dimensionamento dos trocadores de calor

WOT. Nota-se que ela possui os mesmos componentes da tela da versão

Desktop, mas empilhadas, de modo a caber em uma tela mais estreita.

Visualiza-se, na Figura 34 (b), a parte de gráficos para o mesmo

dispositivo.

Page 94: Felipe de Souza Tortato - UFSC

94

Figura 34 - Capturas de tela da view de dimensionamento de trocadores WOT

simuladas para um Samsung Galaxy S5.

(a) (b)

Fonte: do Autor (2019).

Simulou-se também, a tela de documentação para a versão móvel,

mostrada na Figura 35 (a). Pela limitação de espaço, recolhe-se o menu

superior do aplicativo e ele permanece oculto até que se clique no botão

“hambúrguer” (com três linhas horizontais) que ativa a expansão do

menu, como na Figura 35 (b).

Page 95: Felipe de Souza Tortato - UFSC

95

Figura 35 - Capturas de telas de Documentação (a) e de expansão do menu (b),

simuladas para um Samsung Galaxy S5.

(a) (b)

Fonte: do Autor (2019).

Além disso, simulou-se o uso para o modelo Ipad, com dimensões

1024 x 1366 pixels. Mostra-se, na Figura 36, a tela de Documentação

capturada na simulação do Ipad.

Page 96: Felipe de Souza Tortato - UFSC

96

Figura 36 - Captura de tela da página de Documentação, simulada para um Ipad.

Fonte: do Autor (2019).

Page 97: Felipe de Souza Tortato - UFSC

97

5 CONCLUSÃO

Neste trabalho apresentou-se o processo de criação de um

aplicativo WEB, passando-se pelas etapas iniciais de especificação do

problema e modelagem do software, e posterior programação.

Tinha-se como objetivo inicial o desenvolvimento de um

aplicativo que superasse as limitações da ferramenta já disponível, além

de apresentar-se de maneira expansível para futuras funcionalidades.

Com base nos resultados, pode-se afirmar que o objetivo geral do projeto

foi alcançado com sucesso, tendo o projeto recebido bons feedbacks na

sua entrega final.

Entretanto, não se cumpriram os dois últimos objetivos

específicos, que dizem respeito à implementação do nível de acesso aos

usuários e à hospedagem da ferramenta no servidor da empresa. Não se

cumpriu o primeiro por questões de priorização de atividades por parte da

empresa, que deu preferência para a realização de mudanças em outros

aspectos do aplicativo. Já, o segundo não se cumpriu por conta da demora

na aprovação de projeto do setor de TI (tecnologia da informação) da

empresa, inviabilizando a hospedagem em primeiro momento.

A entrega do aplicativo agradou os responsáveis na empresa e

resultou no interesse de outros que não estavam envolvidos,

originalmente, no desenvolvimento da ferramenta. Com isso, após a

entrega deste projeto, já se iniciou a expansão da ferramenta para

implementação de novas funcionalidades.

5.1 SUGESTÕES PARA TRABALHOS FUTUROS

Como comentado anteriormente na conclusão, sugere-se a

continuidade do uso da ferramenta e expansão para novas

funcionalidades.

Também, para garantia da segurança da aplicação, deve-se

despender maiores esforços na questão de segurança de software. Não se

deu foco nesse aspecto neste projeto, uma vez que se acreditava que ele

seria inserido na Intranet da empresa, tomando-se apenas o cuidado de

elaborar validações para os formulários.

Ressalta-se também que, dependendo do tipo de projeto, a escolha de um framework que poderia cair em desuso em poucos anos, como o

caso do AngularJS, não seria a recomendação. Por exemplo, no caso de

uma equipe de desenvolvimento maior, no qual poucos integrantes

possuíssem familiaridade com esse framework, dar-se-ia a preferência

para o aprendizado de um framework com suporte prolongado. Utilizou-

Page 98: Felipe de Souza Tortato - UFSC

98

se, porém o AngularJS, por conta da maior familiaridade do autor deste

projeto com este framework. Além disso, caso se fizesse necessário o

aprendizado desde o começo de qualquer outro, possivelmente, não se

teriam resultados tão expressivos quanto os obtidos.

No caso do desenvolvimento do software do princípio, escolher-se

ia, para o back-end, o Python como linguagem de programação para

implementação dos métodos e o framework Flask-RESTful, para a

programação da API, dada a quantidade de documentação disponível. Já,

para o front-end, escolher-se iam as mesmas linguagens (HTML, CSS e

JavaScript) e, pelos motivos já comentados, além do Bootstrap, um

framework com suporte continuado e comum entre os programadores: o

Vue.js.

Page 99: Felipe de Souza Tortato - UFSC

99

REFERÊNCIAS

AMBLER, S. W. The Elements of UML 2.0 Style. Cambridge:

Cambridge University Press, 2005.

AMEEN, A. et al. Numerical analysis and experimental investigation into

the performance of a wire-on-tube condenser of a retrofitted refrigerator.

International Journal of Refrigeration, v. 29, p. 495-504, 2006.

ARISHOLM, E. et al. The Impact of UML Documentation on Software

Maintenance: An Experimental Evaluation. IEEE Transactions on

Software Engineering, 32, 2006. 365 - 381.

BALASUBRAMANEE, V. et al. Twitter Bootstrap and AngularJS:

Frontend Frameworks to expedite Science Gateway development. 2013

IEEE International Conference on Cluster Computing (CLUSTER),

Indianapolis, 2013.

BANSAL, P. K.; CHIN, T. C. Modelling and optimisation of wire-and-

tube condenser. International Journal of Refrigeration, v. 26, p. 601-

613, 2003.

BELL, I. H. et al. Pure and Pseudo-pure Fluid Thermophysical Property

Evaluation and the Open-Source Thermophysical Property Library

CoolProp. Industrial & Engineering Chemistry Research, v. 53, p.

2498-2508, jan. 2014.

BRIAND, L. C. Software Documentation: How Much is Enough?

Seventh European Conference on Software Maintenance and

Reengineering, 2003. Proceedings., Benevento, 2003.

CHANSUWATH, W.; SENIVONGSE, T. A model-driven development

of web applications using AngularJS framework. 2016 IEEE/ACIS 15th

International Conference on Computer and Information Science

(ICIS), 2016.

DELčEV, S.; DRAšKOVIć, D. Modern JavaScript frameworks: A

Survey Study. Modern JavaScript frameworks: A Survey Study, p.

106-109, 2018.

Page 100: Felipe de Souza Tortato - UFSC

100

FAT, N. et al. Comparison of AngularJS framework testing tools. 2016

Zooming Innovation in Consumer Electronics International

Conference (ZINC), p. 76-79, 2016.

FERNÁNDEZ-SÁEZ, A. M.; GENERO, M.; CHAUDRON, M. R. V.

Does the Level of Detail of UML Models Affect the Maintainability of

Source Code? In: Kienzle J. (eds) Models in Software Engineering.

MODELS 2011. Lecture Notes in Computer Science., Berlin,

Heidelberg, 7167, 2012. 134-148.

FOWLER, M.; SCOTT, K. UML Distilled: A Brief Guide to the

Standard Object. 2ª. ed. [S.l.]: Pearson Education, 2000.

GOMES, P. C. T. Quais os principais bancos de dados e quais suas

diferenças? OpServices, 2019. Disponivel em:

<https://www.opservices.com.br/banco-de-dados/>. Acesso em: 15 jul.

2019.

GOOGLE TRENDS, 2019. Disponivel em:

<https://trends.google.com.br/trends/explore?date=2016-01-

01%202019-05-31&q=%2Fm%2F0j45p7w>. Acesso em: 27 jun. 2019.

GOPE, D.; SCHLAIS, D. J.; LIPASTI, M. H. Architectural support for

server-side PHP processing. 2017 ACM/IEEE 44th Annual

International Symposium on Computer Architecture (ISCA), p. 507-

520, 2017.

HOTFRAMEWORKS. Find your new favorite web framework:

Measuring web framework popularity so you can find interesting

frameworks to check out, 2019. Disponivel em:

<https://hotframeworks.com/>. Acesso em: 27 jun. 2019.

KEJKAR, G.; KHAN, A.; SHARMA, R. An Enhancement for Candidate

Recruitment System using Angularjs. 2017 International Conference

on Innovations in Information, Embedded and Communication

Systems (ICIIECS), 2017.

LAFORE, R. Object-Oriented Programming in C++. 4ª. ed.

Indianapolis: Sams Publishing, 2002.

Page 101: Felipe de Souza Tortato - UFSC

101

MDN WEB DOCS. CSS basics, 2019. Disponivel em:

<https://developer.mozilla.org/en-

US/docs/Learn/Getting_started_with_the_web/CSS_basics>. Acesso

em: 27 jun. 2019.

MDN WEB DOCS. Getting started with the Web, 2019. Disponivel em:

<https://developer.mozilla.org/en-

US/docs/Learn/Getting_started_with_the_web>. Acesso em: 26 jun.

2019.

MDN WEB DOCS. How the Web works, 2019. Disponivel em:

<https://developer.mozilla.org/en-US/docs/MDN/About>. Acesso em:

26 jun. 2019.

MDN WEB DOCS. HTML Basics, 2019. Disponivel em:

<https://developer.mozilla.org/en-

US/docs/Learn/Getting_started_with_the_web/HTML_basics>. Acesso

em: 26 jun. 2019.

MDN WEB DOCS. JavaScript basics, 2019. Disponivel em:

<https://developer.mozilla.org/en-

US/docs/Learn/Getting_started_with_the_web/JavaScript_basics>.

Acesso em: 27 jun. 2019.

MDN WEB DOCS. PHP, 2019. Disponivel em:

<https://developer.mozilla.org/en-US/docs/Glossary/PHP>. Acesso em:

27 jun. 2019.

MELO, C.; HERMES, C. J. L. A heat transfer correlation for natural draft

wire-and-tube condensers. International Journal of Refrigeration, v.

32, p. 546-555, 2009.

NGUYEN, T. D. et al. Exploring API Embedding for API Usages and

Applications. Buenos Aires: IEEE. 2017.

NUGROHO, A. Level of detail in UML models and its impact on model comprehension: A controlled experiment. Information and Software

Technology, 51, n. 12, 2009. 1670 - 1685.

NUGROHO, A.; CHAUDRON, M. R. V. Evaluating the Impact of UML

Modeling on Software Quality: An Industrial Case Study. In: Schürr A.,

Page 102: Felipe de Souza Tortato - UFSC

102

Selic B. (eds) Model Driven Engineering Languages and Systems.

MODELS 2009. Lecture Notes in Computer Science, Berlin,

Heidelberg, 5795, 2009. 181-195.

OH, J.; AHN, W. H.; KIM, T. Web app restructuring based on shadow

DOMs to improve maintainability. 2017 8th IEEE International

Conference on Software Engineering and Service Science (ICSESS),

p. 118-122, 2017.

PERUMAL, S. A. et al. Development of an Efficient Timetable System

using AngularJS and Bootstrap 3. 2018 8th IEEE International

Conference on Control System, Computing and Engineering

(ICCSCE), p. 70-75, 2018.

PROCEL; ELETROBRÁS. Pesquisa de Posse de Equipamentos e

Hábitos de Uso - Classe Residencial. Rio de Janeiro. 2007.

RUMBAUGH, J.; JACOBSON, I.; BOOCH, G. The Unified Modeling

Reference Manual. 2ª. ed. Boston: Pearson Education, 2005.

SANTOS, J.; MENDONCA, J.; MARTINS, J. C. Instrumentation

Remote Control through Internet with PHP. 2008 IEEE Conference on

Virtual Environments, Human-Computer Interfaces and

Measurement Systems, 2008.

SAWANT, A. A.; BACCHELLI, A. A Dataset For API Usage. 2015 12th

Working Conference on Mining Software Repositories, p. 506-509,

2015.

SYKES, D. A.; MCGREGOR, J. D. A practical guide to testing object-

oriented software. Upper Saddle River: Pearson Education, 2001.

TAGLIAFICO, L.; TANDA, G. Radiation and natural convection heat

transfer from wire-and-tube heat exchangers in refrigeration appliances.

International Journal of Refrigeration, v. 20, p. 461-469, 1997.

TECHNOPEDIA. What is Software Framework? Disponivel em:

<https://www.techopedia.com/definition/14384/software-framework>.

Acesso em: 27 jun. 2019.

Page 103: Felipe de Souza Tortato - UFSC

103

TECHOPEDIA. What is a Back-End System? Disponivel em:

<https://www.techopedia.com/definition/1405/back-end-system>.

Acesso em: 26 jun. 2019.

TECHOPEDIA. What is a Front-End System? Disponivel em:

<https://www.techopedia.com/definition/3799/front-end-system>.

Acesso em: 26 jun. 2019.

TILLEY, S. R.; HUANG, S. A qualitative assessment of the efficacy of

UML diagrams as a form of graphical documentation in aiding program

understanding. Proceedings of the 21st annual international

conference on Documentation, SIGDOC 2003, San Francisco, 2003.

184-191.

TREUDE, C.; ANICHE, M. Where does Google find API

documentation? 2018 ACM/IEEE 2nd International Workshop on

API Usage and Evolution, p. 19-22, 2018.

W3SCHOOLS. Bootstrap Grids. Disponivel em:

<https://www.w3schools.com/bootstrap/bootstrap_grid_basic.asp>.

Acesso em: 27 jun. 2019.

W3SCHOOLS. CSS Introduction. Disponivel em:

<https://www.w3schools.com/css/css_intro.asp>. Acesso em: 27 jun.

2019.

W3SCHOOLS. HTML Introduction. Disponivel em:

<https://www.w3schools.com/html/html_intro.asp>. Acesso em: 26 jun.

2019.

W3SCHOOLS. Introduction to SQL. Disponivel em:

<https://www.w3schools.com/sql/sql_intro.asp>. Acesso em: 27 jun.

2019.

W3SCHOOLS. JavaScript Introduction. Disponivel em:

<https://www.w3schools.com/js/js_intro.asp>. Acesso em: 27 jun. 2019.

W3SCHOOLS. JavaScript JSON. Disponivel em:

<https://www.w3schools.com/js/js_json.asp>. Acesso em: 27 jun. 2019.

Page 104: Felipe de Souza Tortato - UFSC

104

W3SCHOOLS. PHP 5 Introduction. Disponivel em:

<https://www.w3schools.com/php/php_intro.asp>. Acesso em: 27 jun.

2019.

WOODS, E. Software Architecture in a Changing World. IEEE

Software, v. 33, n. 6, p. 94-97, 2016.

YUNRUI, Q. Front-End and Back-End Separation for Warehouse

Management System. 2018 11th International Conference on

Intelligent Computation Technology and Automation, p. 204-208,

2018.

Page 105: Felipe de Souza Tortato - UFSC

105

APÊNDICE A - Diagramas de Atividades

Figura 37 - Diagrama de atividades para o front-end: Login.

Fonte: do Autor (2019).

Page 106: Felipe de Souza Tortato - UFSC

106

Figura 38 - Diagrama de atividades para o front-end: Cálculo simples (parte 1/2).

Fonte: do Autor (2019).

Page 107: Felipe de Souza Tortato - UFSC

107

Figura 39 - Diagrama de atividades para o front-end: Cálculo simples (parte 2/2).

Fonte: do Autor (2019).

Page 108: Felipe de Souza Tortato - UFSC

108

Figura 40 - Diagrama de atividades para o front-end: Cálculo multiparamétrico

(parte 1/2).

Fonte: do Autor (2019).

Page 109: Felipe de Souza Tortato - UFSC

109

Figura 41 - Diagrama de atividades para o front-end: Cálculo multiparamétrico

(parte 2/2).

Fonte: do Autor (2019).

Page 110: Felipe de Souza Tortato - UFSC

110

Figura 42 - Diagrama de atividades para o back-end: Cálculo.

Fonte: do Autor (2019).

Page 111: Felipe de Souza Tortato - UFSC

111

Figura 43 - Diagrama de atividades para o back-end: Banco de dados (parte 1/2).

Fonte: do Autor (2019).

Page 112: Felipe de Souza Tortato - UFSC

112

Figura 44 - Diagrama de atividades para o back-end: Banco de dados (parte 2/2).

Fonte: do Autor (2019).

Page 113: Felipe de Souza Tortato - UFSC

113

APÊNDICE B - Diagramas de Estados

Figura 45 - Diagrama de estados para um usuário comum no dimensionamento

de um trocador WOT.

Fonte: do Autor (2019).

Login

Load page template

Recuperar

Load page template

Cadastrar

Load page template

Home | AL

Load page template

WOT | AL

Load page template

Calcular

Show Loading Info

Error

Show Error Info

Page 114: Felipe de Souza Tortato - UFSC

114

APÊNDICE C - Diagramas de Caso de Uso

Figura 46 - Diagrama de caso de uso para o procedimento de login e redirecionamento (parte 1/2).

Fonte: do Autor (2019).

Page 115: Felipe de Souza Tortato - UFSC

115

Figura 47 - Diagrama de caso de uso para o procedimento de login e redirecionamento (parte 2/2).

Fonte: do Autor (2019).

Page 116: Felipe de Souza Tortato - UFSC

116

Figura 48 - Diagrama de caso de uso para navegação no menu do usuário tipo Administrador.

Fonte: do Autor (2019).

Page 117: Felipe de Souza Tortato - UFSC

117

Figura 49 - Diagrama de caso de uso para navegação no menu do usuário tipo Especialista ou Técnico.

Fonte: do Autor (2019).

DimensionarVentiladores

Dimensionar Compressores

Visualizar Menu de Usuário

Usuário

DimensionarDispositivos de

Expansão

Dimensionar Condensadores

Selecionar Opção de Menu

DimensionarMicro-canal

DimensionarEvaporador No-frost

DimensionarCondensador Skin

DimensionarWire-on-Tube

Selecionar Opção de Sub-Menu

Inserir Parâmetros

<<extend>><<extend>>

<<extend>>

DimensionarEvaporadores

Page 118: Felipe de Souza Tortato - UFSC

118

Figura 50 - Diagrama de caso de uso para realização do cálculo.

Fonte: do Autor (2019).

Page 119: Felipe de Souza Tortato - UFSC

119

APÊNDICE D - Diagramas de Classes

Figura 51 - Diagrama de classes do aplicativo.

Fonte: do Autor (2019).

User

- tinyint accessLevel- String email- String password- String token

+ boolean User(String email, String password)+ tinyint getAccessLevel(String email)+ String getLocalToken()+ boolean setLocalToken(String)+ String getDocumentation()+ boolean askLogin(String email, String password)+ boolean askLogout(user.email)+ makeInterfaceEvent(event e)

SessionManager

+ boolean createSession(user)+ boolean checkSession(String localToken)+ boolean closeSession(user)- String generateToken()UserInterface

- element navigationMenu- element footer- element content

- decodeEvent (event e)- redirectUser()

*:1

Admin

+ boolean writeDocumentation(String documentation)+ boolean setAccessLevel(String email, tinyint accessLevel)+ boolean removeUser(String email)

DatabaseConnection

- String dbUser- String dbPassword- String dbServer- String dbName

+ boolean connectionOpen()+ boolean connectionClose()+ boolean checkConnectionStatus()1

:*

1:1

Database

- String documentation- User[] users

+ boolean executeQuery(String query)

1:1

Solver

+ decodeRequest(request r, params [])- readParametersFromServer(Parameter[] params)- writeResultsToServer(Parameter[] params)- String solveDesign()

*:*

*:*

*:1

*:1

Page 120: Felipe de Souza Tortato - UFSC

120

APÊNDICE E - Mock-ups das views

Figura 52 - View de login do aplicativo.

Fonte: do Autor (2019).

Page 121: Felipe de Souza Tortato - UFSC

121

Figura 53 - View de cálculo simples do aplicativo (antes do clique indicado pelo ícone em amarelo).

Fonte: do Autor (2019).

Page 122: Felipe de Souza Tortato - UFSC

122

Figura 54 - View de cálculo simples do aplicativo (após o clique indicado pelo ícone em amarelo da Figura 53).

Fonte: do Autor (2019).

Page 123: Felipe de Souza Tortato - UFSC

123

Figura 55 - View de cálculo multiparamétrico do aplicativo (antes do clique indicado pelo ícone em amarelo).

Fonte: do Autor (2019).

Page 124: Felipe de Souza Tortato - UFSC

124

Figura 56 - View de cálculo multiparamétrico do aplicativo (após o clique indicado pelo ícone em amarelo da Figura 55).

Fonte: do Autor (2019).

Page 125: Felipe de Souza Tortato - UFSC

125

Figura 57 - View de exportar dados para formato de texto e realização do download.

Fonte: do Autor (2019).

Page 126: Felipe de Souza Tortato - UFSC

126

Figura 58 - View de documentação para os usuários tipo Especialista e Técnico.

Fonte: do Autor (2019).

Page 127: Felipe de Souza Tortato - UFSC

127

Figura 59 - View de edição de documentação para o Administrador.

Fonte: do Autor (2019).

Page 128: Felipe de Souza Tortato - UFSC

128

Figura 60 - View de gerenciamento de usuários para o Administrador.

Fonte: do Autor (2019).