Este documento descreve um sistema de nutrição e dietética desenvolvido para otimizar dietas usando o método Simplex de programação linear. O sistema calcula a quantidade de produtos necessários para atender aos requisitos nutricionais de dietas de referência, considerando a composição nutricional de cada produto.
Otimização de dietas nutricionais com método Simplex
1. Universidade Estadual de Campinas - UNICAMP Centro Superior de Educa¸˜o
ca
Tecnol´gica - CESET
o
¸˜ ¸˜
Aplicacao comercial de otimizacao
¸˜ ´
de funcoes usando metodo de
¸˜
solucao Simplex, com foco em
´
sistemas de saude nutricional e
´
dietetica
Vanessa Oliveira Campos
Limeira
2007
2. i
Universidade Estadual de Campinas - UNICAMP Centro Superior de Educa¸˜o
ca
Tecnol´gica - CESET
o
¸˜ ¸˜
Aplicacao comercial de otimizacao
¸˜ ´
de funcoes usando metodo de
¸˜
solucao Simplex, com foco em
´
sistemas de saude nutricional e
´
dietetica
Vanessa Oliveira Campos
Trabalho de Gradua¸˜o Interdisciplinar (TGI)
ca
apresentado ao Centro Superior de Educa¸˜o Tecnol´gica
ca o
- CESET como requisito de conclus˜o do Curso de
a
Tecnologia em Inform´tica.
a
Orientador: Marli Gomes de Freitas Hernandes
Limeira
2007
3. ii
Aos meus amigos Elaine, Fernando e Marcela, e ` minha irm˜ L´
a a ılian.
5. iv
Sum´rio
a
Lista de figuras v
Resumo (Abstract) 1
1 Introdu¸˜o
ca 2
2 Metodologia e tecnologias envolvidas 3
3 Solu¸˜o do problema
ca 8
4 Conclus˜o
a 26
Gloss´rio
a 27
Referˆncias Bibliogr´ficas
e a 30
6. v
Lista de Figuras
Figura 1: Dependˆncia entre os pacotes do Agenda Nutricional . . . . . . . . . . 12
e
Figura 2: Diagrama de Pacotes: Agenda Nutricional: negocios . . . . . . . . . . 13
Figura 3: Diagrama de Pacotes: Agenda Nutricional: persistencia . . . . . . . . 14
Figura 4: Modelo de dados para os produtos e nutrientes . . . . . . . . . . . . . 15
Figura 5: Exemplo de rela¸˜o entre as informa¸˜es, no modelo de dados proposto 15
ca co
Figura 6: Agenda Nutricional: Controle de m´ ltiplas janelas internas . . . . . . 17
u
Figura 7: Agenda Nutricional: Janela padr˜o de consulta de registros . . . . . . 18
a
Figura 8: JMPS: O problema do prot´tipo: quadro inicial do Simplex . . . . . . 19
o
Figura 9: JMPS: O problema do prot´tipo: primeira itera¸ao . . . . . . . . . . . 20
o c˜
Figura 10: JMPS: O problema do prot´tipo: pivoteamento da linha . . . . . . . 20
o
Figura 11: JMPS: O problema do prot´tipo: ajuste das demais linhas da tabela
o 20
Figura 12: JMPS: O problema do prot´tipo: primeira itera¸˜o finalizada . . . . 20
o ca
Figura 13: JMPS: O problema do prot´tipo: resultado ´timo . . . . . . . . . . . 20
o o
Figura 14: JMPS: Solu¸˜o do problema atrav´s do m´todo Gr´fico . . . . . . . . 21
ca e e a
Figura 15: JMPS: Edi¸˜o de problema de otimiza¸˜o . . . . . . . . . . . . . . . 21
ca ca
Figura 16: Estrutura interna do sistema JMPS . . . . . . . . . . . . . . . . . . . 22
Figura 17: Pacote calculo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
7. 1
Resumo (Abstract)
Eficiˆncia e confiabilidade de resultado s˜o as duas caracter´
e a ısticas procuradas com
maior frequˆncia nos softwares atualmente. Desenvolvedores de software est˜o cada vez
e a
mais preocupados em melhorar estes dois pontos nos produtos que oferecem. Para sistemas
que trabalham com volume grande de dados e com necessidade de apresentar resposta
r´pida e precisa ao usu´rio, os desenvolvedores est˜o ` procura de algoritmos que tragam
a a a a
esta caracter´
ıstica.
Os algoritmos matem´ticos que oferecem a modelagem de dados est˜o sendo cada vez
a a
mais procurados para atingir este objetivo. Este trabalho aplica o algoritmo Simplex em
uma situa¸˜o comum do cotidiano de uma software house, mostrando a usabilidade da
ca
modelagem matem´tica para solu¸˜o de problemas complexos.
a ca
8. 2
1 Introdu¸˜o
ca
Todos os dias vemos novas tecnologias surgirem, se aprimorarem. Com elas vˆm o ciclo
e
vicioso de aprimoramento de hardware e software. Novas teorias de todas as disciplinas da
´rea de exatas s˜o utilizadas na computa¸˜o, auxiliando neste aprimoramento cont´
a a ca ınuo.
O software faz parte de uma tendˆncia de evolu¸˜o constante. A Engenharia de
e ca
software est´ constantemente se aperfei¸oando, de forma a trazer cada vez mais t´cnica
a c e
e m´todos eficazes para melhorar o desempenho tanto do processo de desenvolvimento
e
quanto do software em si.
Desta forma, a matem´tica e a inform´tica se unem para trazer o que existe de melhor
a a
em cada e traduzir tudo isto em um software de qualidade, que atenda n˜o somente as
a
necessidades do usu´rio, mas que utilize todo o potencial de hardware dispon´ atual-
a ıvel
mente. Funda¸˜es como a Computational Infrastructure for Operation Research , COIN-
co
OR, trabalham na cria¸˜o e dissemina¸˜o de solu¸˜es computacionais para problemas
ca ca co
matem´ticos.
a
Este trabalho prop˜e demonstrar em uma aplica¸˜o comercial, focada na ´rea de sa´ de,
o ca a u
mais especificamente em nutri¸˜o e diet´tica, o uso de m´todos e modelos matem´ticos
ca e e a
simples para solucionar problemas de c´lculos complexos; neste caso, otimiza¸˜o de prob-
a ca
lemas lineares.
A proposta ´ desenvolver um sistema que se utilize de um m´todo de otimiza¸˜o
e e ca
linear, o m´todo Simplex, para calcular a quantidade de n produtos compondo uma
e
dieta nutricional, de acordo com a composi¸˜o nutricional de cada produto selecionado
ca
para a dieta. O sistema utiliza dietas de referˆncia, que s˜o compostas por nutrientes em
e a
quantidades espec´
ıficas, para calcular as quantidades de cada produto necess´rios a suprir
a
a ingest˜o m´
a ınima ou m´xima de nutrientes da dieta de referˆncia.
a e
Este trabalho est´ organizado em dois cap´
a ıtulos: Metodologia e tecnologias envolvidas,
que descreve o modelo matem´tico escolhido (Simplex) e as tecnologias utilizadas no
a
desenvolvimento do sistema; Solu¸˜o do Problema, subdividindo em se¸˜es que descrevem
ca co
o problema selecionado no projeto, a metodologia utilizada para desenvolver o sistema e
integrar os componentes selecionado. O trabalho ainda conta com Introdu¸˜o, Conclus˜o,
ca a
Gloss´rio e Referˆncias Bibliogr´ficas.
a e a
9. 3
2 Metodologia e tecnologias envolvidas
2.1 O problema
A populariza¸˜o do computador pessoal trouxe consigo uma necessidade de evolu¸˜o
ca ca
do hardware e do software que atingiu largamente todos os n´
ıveis da sociedade - desde
o ambiente dom´stico, com o largo uso do microcomputador para jogos e home office,
e
at´ o ambiente do escrit´rio - independente do setor econˆmico da empresa (ind´ stria,
e o o u
com´rcio e governo). Com a constante adapta¸˜o do software aos servi¸os dispon´
e ca c ıveis e
dos servi¸os aos softwares, criou-se um mercado virtualmente infinito para a produ¸˜o de
c ca
software.
Atualmente, o mercado de software personalizado - software desenvolvido para um fim
espec´
ıfico, em contrapartida ao software de prateleira, feito com caracter´
ısticas gen´ricas
e
e distribu´ em larga escala - tem apresentado um crescimento muito atrativo, que se
ıdo
mostra com o grande n´ mero de empresas desenvolvedoras de software que surgem a cada
u
ano. Com o mercado aberto ` novos sistemas e a competi¸˜o causada pelo n´ mero de
a ca u
empresas especializadas, possuir um diferencial ´ importante.
e
Os softwares produzidos atualmente, de forma personalizada, possuem como requisitos
as regras do neg´cio do cliente, suas necessidades particulares. Sistemas de controle tˆm
o e
dominado a demanda no mercado, pois s˜o servi¸os cruciais dentro das empresas, e estes
a c
sistemas demandam, muitas vezes, c´lculos complexos envolvendo m´ ltiplas vari´veis. A
a u a
demanda constante por performance e velocidade de resposta, aliada ` press˜o de cumprir
a a
cronogramas apertados e o baixo conhecimento da equipe de desenvolvimento em solu¸˜es
co
computacionais complexas, levam ` utiliza¸˜o de c´lculos aproximados com altas taxas
a ca a
de erro.
2.2 Programa¸˜o linear e m´todo Simplex
ca e
A programa¸˜o linear apresenta uma solu¸˜o de baixo custo computacional e com
ca ca
redu¸˜o da margem de erro para problemas de otimiza¸˜o com m´ ltiplas vari´veis, como
ca ca u a
´ o caso de in´ meros sistemas de controle - almoxarifado, finan¸as, produ¸˜o, etc.
e u c ca
10. 4
A programa¸˜o linear consiste em problemas de otimiza¸ao que utilizam fun¸˜es lin-
ca c˜ co
eares. Existem casos t´
ıpicos de programa¸˜o linear, como o Problema de Transporte,
ca
que foi utilizado inicialmente para determinar o menor custo de transporte entre diversas
f´bricas de um produto e diversos centros consumidores [6]. Situa¸˜es t´
a co ıpicas de aplica¸˜o
ca
da programa¸˜o linear s˜o os casos onde se deseja, por exemplo, maximizar o lucro de
ca a
uma empresa, minimizar o custo de produ¸˜o de um determinado produto, etc.
ca
A programa¸˜o linear utiliza-se de um modelo matem´tico composto por uma fun¸˜o
ca a ca
objetiva e de restri¸˜es t´cnicas representadas por inequa¸˜es. Por exemplo:
co e co
Lucro = 2x1 + 3x2 (2.1)
4x1 + 3x2 ≤ 10
t´cnicas
e
6x1 − x2 ≥ 20
Restric˜es
o (2.2)
x1 ≥ 0
de n˜o negatividade
a
x2 ≥ 0
Neste modelo, encontramos os seguintes elementos:
• Vari´veis de decis˜o:
a a s˜o as vari´veis que representam as decis˜es a serem
a a o
tomadas. Por exemplo, em uma f´brica onde se deseja otimizar a produ¸˜o para
a ca
maximizar o lucro, as vari´veis de decis˜o representar˜o os produtos que ela produz.
a a a
No exemplo acima, as vari´veis de decis˜o s˜o x1 e x2 .
a a a
• Fun¸˜o objetivo: representa o objetivo do modelo. No nosso exemplo, maximizar
ca
o lucro.
• Restri¸˜es:
co s˜o representadas por inequa¸˜es lineares e identificam as situa¸˜es
a co co
que imp˜em limita¸˜es ao modelo. Existem dois tipos de restri¸˜es: t´cnicas, por
o co co e
exemplo, quantidades m´
ınimas que devem ser produzidas de um produto; e de n˜o
a
negatividade, que impedem que os valores encontrados para as vari´veis de decis˜o
a a
sejam negativos (n˜o ´ poss´ produzir -20 pe¸as).
a e ıvel c
Para solucionar os problemas de programa¸˜o linear existem diversos algoritmos defini-
ca
dos, como Gauss-Jordan e Simplex. Estes algoritmos e suas variantes definem passos e
pontos de parada para o c´lculo de problemas de otimiza¸˜o. Neste trabalho, optamos
a ca
por utilizar o algoritmo Simplex para solucionar os problemas de otimiza¸˜o propostos.
ca
11. 5
O Simplex ´ o algoritmo b´sico da programa¸˜o linear. Seu objetivo ´ transformar
e a ca e
uma matriz fornecida em outra padronizada, de acordo com a necessidade do problema.
A matriz fornecida ´ criada a partir das equa¸˜es geradas de otimiza¸˜o e restri¸˜es.
e co ca co
Utilizando o exemplo anterior, a matriz inicial ficaria:
4 3 10
(2.3)
6 −1 20
O Simplex soluciona o problema atrav´s de in´ meras itera¸˜es, onde a cada itera¸˜o
e u co ca
ocorre o pivotamento da matriz. Terminam-se as itera¸˜es quando a matriz atinge o
co
estado ´timo, ou seja, quando atingem-se valores para as vari´veis dentro de faixas pr´-
o a e
estabelecidas. Por exemplo, num problema de maximiza¸˜o, quando todas as vari´veis
ca a
encontraram-se com valores maiores ou iguais a zero, identifica uma matriz ´tima.
o
Para exemplificar o funcionamento do algoritmo Simplex, usaremos o problema[7]:
minx1 + 2x2
x1 + x2 ≤ 2
x1 − x2 ≥ 1 (2.4)
s.a.
x1 ≥ 0
x2 ≥ 0
Colocando-o na forma normal1 :
minx1 + 2x2
x1 + x2 + x3 = 2
x1 − x2 − x4 = 1
x1 ≥ 0 (2.5)
s.a.
x2 ≥ 0
x3 ≥ 0
x4 ≥ 0
Multiplicando a equa¸˜o de restri¸˜o x1 - x2 - x4 = 1 por -1, obt´m-se uma solu¸˜o
ca ca e ca
inicial, cuja matriz ´ identidade.
e
1
A forma normal da equa¸ao linear implica em transformar a inequa¸ao em uma equa¸ao, ou seja,
c˜ c˜ c˜
eliminar os sinais de desigualdade, acrescentando vari´veis novas que complementem a solu¸ao da equa¸ao.
a c˜ c˜
Tamb´m conhecida por forma canˆnica.
e o
12. 6
x1 x2 x3 x4 -z
x3 1 1 1 0 0 2
x4 -1 1 0 1 0 -1
-z 1 2 0 0 1 0
Por´m, esta solu¸˜o n˜o ´ admiss´
e ca a e ıvel, pois b2 ≤ 0:
0
p= (2.6)
−1
Introduzindo p como vari´vel x0 na nossa matriz, obtemos:
a
x1 x2 x3 x4 x0 -z
x3 1 1 1 0 0 0 2
x4 -1 1 0 1 -1 0 -1
-z 1 2 0 0 0 1 0
Efetua-se a troca da vari´vel x0 pela x4 , pois esta ´ a que possui valor b negativo.
a e
Obt´m-se o quadro:
e
x1 x2 x3 x4 x0 -z
x3 1 1 1 0 0 0 2
x0 1 -1 0 -1 1 0 1
-z 1 2 0 0 0 1 0
Neste quadro, observa-se que x0 = - x1 + x2 + x4 + 1 . Sendo assim, a vari´vel que
a
deve ser escolhida para entrar na base, no lugar de x0 , ´ aquela que tiver o coeficiente
e
mais positivo na linha da vari´vel x0 . No nosso caso, esta vari´vel ´ a x1 .
a a e
Com esta troca, chegamos ao resultado:
x1 x2 x3 x4 x0 -z
x3 0 2 1 1 -1 0 1
x1 1 -1 0 -1 1 0 1
-z 0 3 0 1 -1 1 -1
O resultado ´timo ´ alcan¸ado quando n˜o existem resultados negativos na linha do
o e c a
z. Note os valores das vari´veis: x1 =0; x2 =3; x3 =0; x4 =1.
a
13. 7
2.3 Arcabou¸o tecnol´gico
c o
O conjunto tecnol´gico mais utilizado atualmente no desenvolvimento de software
o
tem variado entre os baseados em Java e .NET. Adotamos o conjunto para Java neste
trabalho. A escolha pela tecnologia Java tem fundamento no fato de todo o kit necess´rio
a
para desenvolver e manter o software ser gratuito e estar dispon´
ıvel na internet para
aquisi¸˜o, incluindo toda a documenta¸˜o necess´ria para seu entendimento.
ca ca a
Foi utilizado o conjunto de ferramentas:
• Linguagem de programa¸˜o: Java SDK 5.0
ca
2
• Banco de dados: Compat´ JDBC
ıvel
• Infraestrutura de desenvolvimento:
– IDE: Eclipse 3.2
– Framework de banco de dados: Hibernate 3.0
– Gera¸˜o de relat´rios: Jasper Reports 1.2.8
ca o
– Projeto de relat´rios: iReport 1.2.8
o
– Controle de vers˜o: CVS
a
O software produzido neste trabalho ser´ distribu´ gratuitamente, sob licen¸a GPL,
a ıdo c
atrav´s do servi¸o de hospedagem de software SourceForge.net.
e c
2
Devido ao uso do Hibernate nos servi¸os de persistˆncia, utilizamos os bancos de dados PostgreSQL
c e
8.2 e Microsoft SQL Server 2003 nos testes de desenvolvimento.
14. 8
3 Solu¸˜o do problema
ca
3.1 O problema escolhido
O objetivo inicial deste trabalho ´ demonstrar a aplica¸ao de m´todos matem´ticos
e c˜ e a
no cotidiano do desenvolvimento de software. A programa¸ao linear, aplicada com o
c˜
m´todo Simplex, ´ um dos mecanismos com maior potencial de aplica¸˜o, e por isto, foi
e e ca
o escolhido.
O problema selecionado refere-se a um problema de nutri¸˜o. Problemas de nutri¸˜o e
ca ca
diet´tica s˜o constantemente encontrados em livros de programa¸˜o linear nos exemplos e
e a ca
exerc´
ıcios, geralmente de forma simplificada, usando duas ou at´ no m´ximo trˆs vari´veis.
e a e a
Em geral, estes problemas envolvem dois produtos nutricionais (vitaminas, prote´
ınas,
minerais) e deseja minimizar o custo de uma dieta.
O problema proposto neste trabalho ´ mais complexo, j´ que envolve solu¸˜o com-
e a ca
putacional implementada em um sistema, o que nos d´ uma margem de c´lculo maior,
a a
ampliando o n´ mero de vari´veis que poderemos manipular.
u a
A proposta ´ gerar uma dieta nutricional, baseada em componentes nutricionais b´sicos
e a
e uma dieta de referˆncia (por exemplo, a dieta m´
e ınima de 2500 calorias, indicada em
qualquer produto consum´
ıvel), utilizando a tabela nutricional de produtos consum´
ıveis in-
dicada pelo nutricionista ou paciente usu´rio do sistema. O sistema implementa o m´todo
a e
Simplex e realiza os c´lculos a partir da dieta de referˆncia selecionada no momento da
a e
constru¸˜o da dieta nutricional desejada.
ca
Na proposta n˜o est´ incluso tratamento de custo, peso, altura, idade ou quadro cl´
a a ınico
do paciente, ou seja, o sistema n˜o se prop˜e a utilizar-se de heur´
a o ısticas cl´
ınicas para
selecionar a melhor dieta para um paciente. O objetivo ´ gerar uma dieta utilizando-se de
e
uma dieta de referˆncia, criada previamente, e de uma lista de produtos desejados para
e
consumo pelo paciente. Os produtos ser˜o as vari´veis do problema e as restri¸˜es ser˜o
a a co a
geradas a partir da dieta de referˆncia. O fator de minimiza¸˜o ou maximiza¸˜o da dieta
e ca ca
ser´ fornecido, tamb´m, pela dieta de referˆncia - representado por um dos componentes
a e e
desta dieta. Por exemplo, numa dieta recomendada de 2500 calorias/dia, o elemento de
referˆncia ´ a caloria. Neste caso, nosso problema ser´ de maximiza¸˜o, j´ que esta dieta
e e a ca a
15. 9
regula uma ingest˜o m´
a ınima de 2500 calorias por dia. O sistema ir´ calcular a quantidade
a
m´
ınima de cada produto que dever´ ser consumida pelo paciente, a fim de atingir as 2500
a
calorias m´
ınimas desejadas.
3.2 An´lise e solu¸˜o
a ca
Existem poucos componentes dispon´
ıveis prontos que implementem algoritmos de
otimiza¸˜o. Encontramos o componente CLP que implementa diversos algoritmos Sim-
ca
plex linear e n˜o-linear, como o Simplex Primal, Dual Simplex, Simplex n˜o linear, entre
a a
outros. O componente CLP foi desenvolvido utilizando a linguagem de programa¸˜o C++
ca
e ´ distribu´ gratuitamente pela Computational Infrastructure for Operations Research
e ıdo
(COIN-OR), uma funda¸˜o sem fins lucrativos para ciˆncia e educa¸˜o, cuja miss˜o ´ a de
ca e ca a e
criar e disseminar o conhecimento relacionado a todos os aspectos de pesquisa operacional
computacional [2]. O componente CLP foi implementado com o objetivo de ser utilizado
largamente em aplica¸˜es comerciais ou n˜o.
co a
Outro componente pesquisado foi o GLPK - GNU Linear Programming Kit [5], de-
senvolvido em C Ansi. O GLPK implementa os m´todos Simplex (primal e dual), mas
e
foi descartado devido ` tecnologia utilizada em seu desenvolvimento.
a
A escolha pelo arcabou¸o tecnol´gico guiou a escolha do componente a ser utilizado,
c o
o que descartou o uso do CLP pela complexidade da integra¸˜o via chamada nativa de
ca
bibliotecas C++ no Java, o que tornaria o custo do projeto mais alto (aumento signi-
ficativo do prazo para desenvolvimento) e reduziria a manutenibilidade do software final,
pois a integra¸˜o de m´ ltiplas linguagens, al´m de dificultar a manuten¸˜o do software
ca u e ca
pelo pr´prio fato de mesclar duas tecnologias diferentes, impactaria na performance final
o
do sistema, pois existe queda de performance computacional quando se realiza chamadas
nativas, mesmo que ambos os lados do programa estejam muito bem desenvolvidos, e
tenham considerado todos os pontos poss´
ıveis de otimiza¸˜o do desempenho de software.
ca
O GLPK foi desconsiderado pela mesma raz˜o e com o agravante de que n˜o foi desen-
a a
volvido utilizando o paradigma da orienta¸˜o a objetos, o que aumentaria a dificuldade
ca
de integra¸˜o com o Java.
ca
Devido ao fato do objetivo n˜o ser a implementa¸˜o do m´todo Simplex e, sim, a
a ca e
demonstra¸˜o de seu uso, pesquisamos componentes desenvolvidos em Java, similares
ca
16. 10
ao CLP. N˜o foi poss´
a ıvel localizar componentes, por´m, localizamos um desenvolvedor
e
que realizou um projeto acadˆmico similar ao proposto neste trabalho, utilizando Java.
e
Michael Bochenek desenvolveu o applet Java Mathematical Programming Suite [1], por´m,
e
pelo curto prazo estabelecido para o projeto, somente foi implementado o m´todo Simplex
e
e o m´todo Gr´fico para resolu¸˜o de problemas de programa¸˜o linear. Em contato com
e a ca ca
Bochenek, os fontes do applet foram cedidos para serem adaptados a este projeto.
O applet JMPS utiliza o m´todo Simplex para solucionar equa¸˜es prontas ou qualquer
e co
equa¸˜o informada pelo usu´rio. Iremos utilizar o applet fornecido por Bochenek para
ca a
demonstrar o uso do modelo Simplex proposto neste trabalho e ilustrar as itera¸˜es do
co
Simplex, al´m de demonstrar a estrutura interna implementada, as adapta¸˜es necess´rias
e co a
para ser utilizado neste projeto e o desempenho trazido ao c´lculo final proposto.
a
3.2.1 Criando o sistema Agenda Nutricional
O sistema Agenda Nutricional foi projetado para ilustrar o uso do m´todo Simplex no
e
c´lculo da dieta nutricional. O objetivo do sistema Agenda Nutricional ´ o de fornecer fer-
a e
ramentas que auxiliem na prescri¸˜o de uma dieta nutricional. Seus principais elementos
ca
s˜o:
a
1. Cadastro de Produtos: permite manter o cadastro de todos os produtos (ali-
mentos) que estar˜o dispon´
a ıveis para o paciente compor sua dieta.
2. Cadastro de Nutrientes: tabela de dom´
ınio, n˜o ´ poss´ alterar a lista de
a e ıvel
nutrientes existentes atrav´s da aplica¸˜o, por´m o sistema fornece uma lista de
e ca e
nutrientes padronizada [8].
3. Cadastro de Nutricionistas: tabela de dom´
ınio; o objetivo ´ possuir informa¸˜es
e co
do nutricionista necess´rias ` sua identifica¸˜o. A primeira fase do desenvolvimento
a a ca
n˜o inclui o cadastro de nutricionistas; esta funcionalidade ser´ implementada em
a a
fases posteriores.
4. Cadastro de Dietas de referˆncia: permite manter o cadastro das dietas que
e
ser˜o utilizadas como referˆncia na prescri¸˜o ao paciente - uma dieta de referˆncia
a e ca e
´ a dieta de 2500 calorias di´rias para um adulto.
e a
17. 11
5. Cadastro de Pacientes: o cadastro de pacientes permite manter informa¸˜es
co
m´
ınimas necess´rias ` identifica¸˜o do paciente e seu hist´rico cl´
a a ca o ınico.
6. Prescri¸˜o de dietas:
ca permite ao nutricionista prescrever uma dieta a um pa-
ciente cadastrado; o sistema utiliza o m´todo simplex para, implicitamente, calcular
e
as quantidades de cada produto selecionado pelo nutricionista, de acordo com a
quantidade m´
ınima ou m´xima de cada nutriente indicada na dieta de referˆncia,
a e
otimizando de acordo com o produto de referˆncia da mesma.
e
O Agenda Nutricional utiliza um sistema de banco de dados para armazenar as in-
forma¸˜es, por´m n˜o ´ dependente de tecnologia de banco de dados, ou seja, o usu´rio
co e a e a
pode escolher um gerenciador de banco de dados da sua preferˆncia para utilizar o sistema
e
Agenda Nutricional. O sistema foi projetado de forma a ser totalmente independente de
plataforma e de gerenciador de banco de dados. Sua interface foi desenhada para que se
adeque `s configura¸˜es locais do usu´rio. Todas as configura¸˜es b´sicas do sistema po-
a co a co a
dem ser feitas atrav´s de arquivos texto, edit´veis em qualquer editor de texto dispon´
e a ıvel
no computador do usu´rio.
a
Outra caracter´
ıstica importante do sistema ´ a tradu¸˜o para m´ ltiplos idiomas. O
e ca u
sistema foi projetado para permitir a tradu¸˜o de todos os termos para qualquer idioma.
ca
Para isto, existe um arquivo de idiomas onde os termos s˜o categorizados. A vers˜o
a a
principal do sistema foi feita completamente em portuguˆs brasileiro, por´m, havendo a
e e
necessidade de tradu¸˜o para outro idioma, digamos, inglˆs, basta criar uma c´pia do
ca e o
arquivo de idiomas original, traduzir os termos e configurar o sistema para o novo idioma;
ao reiniciar a aplica¸˜o, o sistema identifica o idioma selecionado e utiliza o arquivo de
ca
idiomas adequado.
A arquitetura do sistema ´ muito simples, por´m utiliza-se de quatro camadas: ap-
e e
resenta¸˜o, servi¸os, neg´cios e persistˆncia. As camadas est˜o distribu´
ca c o e a ıdas de forma a
reduzir a interdependˆncia entre elas, assim:
e
18. 12
Figura 1: Dependˆncia entre os pacotes do Agenda Nutricional
e
A n´
ıvel de implementa¸˜o, as chamadas entre as camadas ocorrem no sentido da
ca
camada de apresenta¸˜o para a camada de persistˆncia, ou seja, as classes de apresenta¸˜o
ca e ca
fazem chamadas `s classes de servi¸os, mas n˜o ocorre o inverso - servi¸os chamando
a c a c
apresenta¸˜o. Tamb´m n˜o existe liga¸˜o entre as camadas n˜o adjacentes, ou seja,
ca e a ca a
a camada de apresenta¸˜o desconhece a existˆncia da camada de neg´cios. Assim, as
ca e o
camadas somente possuem comunica¸˜o com as duas camadas adjacentes, o que facilita
ca
a manuten¸˜o, pois ´ poss´ isolar um problema encontrado em uma camada.
ca e ıvel
Os erros ocorridos nas camadas mais internas s˜o encaminhados `s camadas mais
a a
externas atrav´s de exce¸˜es e estas exce¸˜es s˜o tratadas somente na camada de apre-
e co co a
senta¸˜o, onde o usu´rio toma conhecimento delas atrav´s de mensagens padronizadas.
ca a e
As camadas de servi¸os e de neg´cios est˜o intimamente ligadas. Devido ` baixa com-
c o a a
plexidade da aplica¸˜o, a camada de servi¸os foi simplificada, sendo apenas uma camada
ca c
de troca de mensagens, basicamente. Entretanto, a camada de servi¸os possui um forte
c
acoplamento com a camada de apresenta¸˜o. Por exemplo, escolheu-se apresentar os resul-
ca
tados das consultas em forma de tabela na camada de apresenta¸˜o. Deste modo, decidiu-
ca
se centralizar a cria¸˜o desta tabela na camada de servi¸os para que houvesse garantia de
ca c
que a tabela criada sempre fosse a mesma, com as mesmas colunas, comportamento, etc.
Assim, o servi¸o implementado gera uma instˆncia do objeto javax.swing.JTable - tipica-
c a
mente um elemento de apresenta¸˜o - com os dados resultantes da consulta solicitada na
ca
camada de apresenta¸˜o.
ca
19. 13
Figura 2: Diagrama de Pacotes: Agenda Nutricional: negocios
O acesso ao banco de dados ´ feito atrav´s do framework Hibernate, que faz a comu-
e e
nica¸˜o entre a aplica¸˜o e o banco de dados. Al´m de trazer a liberdade de tecnologia -
ca ca e
o Hibernate utiliza conex˜es JDBC ao banco de dados, permitindo que o acesso seja feito
o
a qualquer gerenciador que possua driver JDBC dispon´ -, o Hibernate traz agilidade
ıvel
na constru¸˜o da aplica¸˜o pois ele cria todas as consultas e comandos de manipula¸˜o de
ca ca ca
dados utilizando uma adapta¸˜o pr´pria do SQL chamada HSQL. Ao desenvolvedor basta
ca o
criar os arquivos de mapeamento l´gico do banco de dados, indicando quais vari´veis da
o a
aplica¸˜o est˜o ligadas a quais campos e tabelas do banco. Como o Hibernate somente
ca a
utiliza o arquivo de mapeamento, a aplica¸˜o se torna independente de tecnologia de
ca
banco de dados, sendo necess´rio somente indicar em um arquivo de configura¸˜o pr´prio
a ca o
do Hibernate qual o driver JDBC, o servidor onde o banco de dados est´ instalado e o
a
usu´rio e senha de acesso.
a
20. 14
Figura 3: Diagrama de Pacotes: Agenda Nutricional: persistencia
A estrutura de c´lculo do m´todo Simplex foi embutida na camada de neg´cios, j´ que
a e o a
o c´lculo faz parte da l´gica interna e do conjunto de regras do sistema. Veremos esta
a o
estrutura com mais detalhes na se¸˜o Adaptando o applet para o sistema Agenda
ca
Nutricional e vice-versa.
Com a arquitetura definida, o componente de c´lculo do Simplex selecionado, iniciou-
a
se a pesquisa pela fonte de dados. A maior dificuldade foi encontrar uma fonte de dados
confi´vel, pois para o funcionamento adequado do sistema, ´ necess´rio que a tabela
a e a
nutricional dos produtos esteja correta. O departamento de nutri¸˜o da Universidade
ca
de S˜o Paulo (USP) [4] disponibiliza consulta online ` tabela nutricional dos alimentos
a a
nacionais e de consumo nacional. Por´m, n˜o h´ possibilidade de fazer c´pia completa do
e a a o
banco de dados. O objetivo era o de localizar uma base de dados confi´vel que pudesse
a
ser importada para o Agenda Nutricional sem perda de informa¸˜o e sem impactar no
ca
cronograma estabelecido para o projeto. Em prosseguimento ` pesquisa, localizamos o
a
Banco de Composi¸˜o dos Alimentos do Departamento de Agricultura dos Estados Unidos
ca
- USDA. O USDA disponibiliza o National Nutrient Database for Standard Reference ,
21. 15
que pode ser utilizado gratuitamente. Este banco est´ dispon´ em formatos texto e do
a ıvel
Microsoft Access. O Agenda Nutricional utilizou o Standard Reference 19, de agosto de
2006 [8].
Para modelar o banco de dados, foi utilizado o banco do USDA como base. Neste
modelo temos os elementos Nutriente, Produto e Unidade de Medida. Cada nutriente
possui uma unidade de medida padr˜o. Um produto ´ composto por diversos nutrientes;
a e
a quantidade de cada nutriente ´ indicada a partir de uma quantidade de produto, numa
e
determinada unidade de medida.
Figura 4: Modelo de dados para os produtos e nutrientes
Por exemplo, uma unidade de abacaxi cont´m 476 kcal.
e
Figura 5: Exemplo de rela¸ao entre as informa¸oes, no modelo de dados proposto
c˜ c˜
A partir do modelo proposto para o sistema Agenda Nutricional, foi desenvolvido um
m´todo de migra¸˜o de dados das tabelas do Microsoft Access para o banco de dados do
e ca
sistema. O processo ´ o descrito:
e
22. 16
• Criaram-se as consultas desejadas no MS-Access, de acordo com os dados que deseja-
se importar. Por exemplo, foi criada uma consulta que retorna uma lista dos pro-
dutos dispon´
ıveis e sua composi¸˜o.
ca
• As consultas foram executadas e os resultados salvos em arquivos textos tabulados.
• Desenvolveu-se, em Java, uma ferramenta de migra¸˜o que lˆ os arquivos textos
ca e
tabulados e gera os comandos SQL para inser¸˜o dos dados no banco de dados do
ca
sistema Agenda Nutricional, granvando em arquivos texto estes comandos.
• Os arquivos SQL foram executados no gerenciador de banco de dados escolhido e
os dados importados com sucesso.
Os pr´ximos passos, seguindo o cronograma estabelecido para o projeto, foram im-
o
plementar todas as funcionalidades do sistema que n˜o dependessem do c´lculo que seria
a a
realizado pelo applet - que ainda necessitava adapta¸˜es. Para a apresenta¸˜o, optamos
co ca
por utilizar as ferramentas do Java Swing. Isto trouxe independˆncia de plataforma `
e a
aplica¸˜o e reduziu a necessidade de adapta¸˜es para os diversos sistemas operacionais
ca co
que o usu´rio pode utilizar.
a
A interface gr´fica foi desenvolvida de forma a utilizar os padr˜es de interface conheci-
a o
dos em aplica¸˜es comerciais. O uso de m´ ltiplas janelas independentes foi desconsiderado
co u
pois a maioria do p´ blico est´ acostumada a aplica¸˜es que gerenciam janelas internas.
u a co
Por isto, a camada de apresenta¸˜o foi desenhada de forma a utilizar janelas internas na
ca
aplica¸˜o - modelo MDI. Isto trouxe maior controle das janelas e ampliou o n´ mero de
ca u
janelas que o usu´rio pode manter abertas em seu campo visual. A aparˆncia utiliza o vi-
a e
sual padr˜o do sistema operacional utilizado pelo usu´rio, evitando o desconforto causado
a a
pela mudan¸a brusca de padr˜o de telas.
c a
23. 17
Figura 6: Agenda Nutricional: Controle de m´ ltiplas janelas internas
u
Foram utilizados padr˜es de projeto (Design patterns) que facilitaram a implementa¸˜o
o ca
de diversas caracter´
ısticas da interface. Todas as janelas implementam o padr˜o Singleton,
a
n˜o permitindo m´ ltiplas instˆncias da mesma janela durante a execu¸˜o do sistema.
a u a ca
Desta forma, economiza-se mem´ria do computador, pois a m´quina virtual do Java
o a
consome muita mem´ria para construir a janela. Assim, utilizamos o padr˜o Composite
o a
para armazenar as instˆncias das janelas e reduzir o tempo de abertura das mesmas.
a
Os conceitos de Orienta¸˜o a Objetos foram aplicados amplamente, inclusive no de-
ca
senho da interface. Observando o pacote apresenta¸˜o, podemos notar o uso de abstra¸˜o,
ca ca
heran¸a e encapsulamento, que s˜o os trˆs pilares da orienta¸˜o a objetos.
c a e ca
A classe abstrata apresentacao.adicionais.JanelaInterna implementa os padr˜es Sin-
o
gleton e Composite. Ela cont´m referˆncia a todas as janelas abertas do sistema. Esta
e e
classe gerencia todas as janelas internas da aplica¸˜o. Ela tamb´m ´ a classe m˜e de todas
ca e e a
as janelas de cadastro e consulta.
No pacote apresentacao.consultas, possu´
ımos uma classe abstrata ConsultaForm que
24. 18
´ filha de apresentacao.adicionais.JanelaInterna e m˜e de todas as classes Consulta. Esta
e a
classe determina o leiaute padr˜o das janelas de consulta e todas as telas de consulta
a
herdam suas caracter´
ısticas.
Figura 7: Agenda Nutricional: Janela padr˜o de consulta de registros
a
A ultima tarefa do projeto foi a adapta¸˜o do applet JMPS para realizar o c´lculo do
´ ca a
m´todo Simplex, conforme pode ser visto nas se¸˜es seguintes.
e co
3.2.2 O funcionamento do Applet
O sistema Java Mathematical Programming Suite - JMPS [1] ´ um sistema de com-
e
posi¸˜o muito simples. Bochenek n˜o utilizou arquiteturas complexas e n˜o utilizou-se
ca a a
de recursos como pacotes e estruturas mais complexas para organizar o sistema. Isto
dificultou o entendimento do software no in´
ıcio, pois o sistema n˜o apresentava nenhuma
a
documenta¸˜o ou estrutura de referˆncia que pudesse ser utilizada.
ca e
Como o JMPS ´ um applet e n˜o foi desenvolvido como um componente reaproveit´vel,
e a a
as camadas de neg´cio e apresenta¸˜o estavam mescladas, ou seja, n˜o havia separa¸˜o
o ca a ca
25. 19
formal entre as a¸˜es de apresenta¸˜o e de neg´cio. Se observarmos a arquitetura pro-
co ca o
posta do Agenda Nutricional, veremos que existe completa separa¸˜o entre neg´cio e
ca o
apresenta¸˜o, o que nos d´ liberdade para reutilizar a camada de neg´cios em outros pro-
ca a o
jetos, sem necessidade de adapta¸˜es - por exemplo, se quisermos distribuir uma vers˜o
co a
web do Agenda Nutricional, basta reprojetar a camada de apresenta¸˜o e de servi¸os, pois
ca c
os dados ser˜o tratados da mesma maneira, independente da forma como estes dados ser˜o
a a
apresentados. Isto n˜o ocorre no sistema JMPS, por isto houve necessidade de grande
a
adapta¸˜o do c´digo, inclusive para n˜o prejudicar a arquitetura do Agenda Nutricional.
ca o a
O primeiro passo foi entender como o JMPS funciona. Para isto, utilizamos as equa¸˜es
co
que ele traz de exemplo e inserimos tamb´m equa¸˜es retiradas da bibliografia de re-
e co
ferˆncia. Vamos apresentar neste trabalho a resolu¸˜o passo-a-passo de uma equa¸˜o
e ca ca
sugerida pelo sistema JMPS e, logo em seguida, a forma como ele monta uma nova
equa¸˜o, por exemplo, inserida pelo usu´rio - esta montagem ser´ utilizada internamente
ca a a
pelo Agenda Nutricional para iniciar o c´lculo.
a
Um dos exemplos propostos pelo JMPS ´ o seguinte problema de otimiza¸˜o:
e ca
maxz = 3x1 + 5x2
x1 ≤ 4
2x2 ≤ 12
(3.1)
s.a. 3x1 + 2x2 ≤ 18
x1 ≥ 0
x2 ≥ 0
O primeiro quadro do Simplex ´ montado:
e
Figura 8: JMPS: O problema do prot´tipo: quadro inicial do Simplex
o
Escolhe-se a vari´vel que ser´ utilizada no pivotamento:
a a
26. 20
Figura 9: JMPS: O problema do prot´tipo: primeira itera¸˜o
o ca
Realiza-se o pivotamento e os valores da linha s˜o recalculados (dividindo-se o valor
a
pelo valor do pivot):
Figura 10: JMPS: O problema do prot´tipo: pivoteamento da linha
o
O restante da tabela ´ ajustado:
e
Figura 11: JMPS: O problema do prot´tipo: ajuste das demais linhas da tabela
o
Finaliza-se a itera¸˜o:
ca
Figura 12: JMPS: O problema do prot´tipo: primeira itera¸ao finalizada
o c˜
Nova itera¸˜o ´ feita, seguindo os mesmos passos da itera¸˜o anterior. Neste problema,
ca e ca
s˜o somente necess´rias duas itera¸˜es para chegar-se ao resultado ´timo:
a a co o
Figura 13: JMPS: O problema do prot´tipo: resultado otimo
o ´
27. 21
O sistema tamb´m oferece a resolu¸˜o atrav´s do m´todo Gr´fico, para o mesmo
e ca e e a
problema:
Figura 14: JMPS: Solu¸ao do problema atrav´s do m´todo Gr´fico
c˜ e e a
O JMPS possui uma funcionalidade de inclus˜o de problemas novos. Estes problemas
a
s˜o inseridos atrav´s de uma interface pr´pria e podem ser utilizados na funcionalidade
a e o
de solu¸˜o pelos m´todos Simplex e Gr´fico, conforme o exemplo anterior. A interface
ca e a
para inserir o novo problema ´ muito simples:
e
Figura 15: JMPS: Edi¸ao de problema de otimiza¸ao
c˜ c˜
O sistema solicita o n´ mero de vari´veis do problema e o n´mero de restri¸˜es. Con-
u a u co
forme esta informa¸˜es, s˜o solicitadas a fun¸˜o a ser otimizada, o m´todo (minimiza¸˜o
co a ca e ca
ou maximiza¸˜o) e as restri¸˜es. O problema, ent˜o, est´ pronto para ser solucionado
ca co a a
atrav´s do m´todo Simplex ou Gr´fico.
e e a
Para efeito ilustrativo, reorganizamos as classes de implementa¸˜o do JMPS em pa-
ca
cotes, de acordo com seus objetivos e similaridades:
28. 22
Figura 16: Estrutura interna do sistema JMPS
No pacote applet, concentramos as classes principais de apresenta¸˜o, que gerenciam
ca
as telas do sistema JMPS e tratam da exibi¸˜o dos dados. O pacote methods cont´m
ca e
as classes principais dos m´todos propostos pelo JMPS - o m´todo Big M possui classe
e e
mas n˜o foi completamente implementado e n˜o possui apresenta¸˜o no applet. Os pa-
a a ca
cotes misc e segundo cont´m classes que s˜o compartilhadas pelos m´todos do JMPS.
e a e
Numa compara¸˜o com a arquitetura adotada pelo Agenda Nutricional, estas classes rep-
ca
resentariam as camadas de neg´cios e servi¸os. A dificuldade em separar apresenta¸˜o
o c ca
de neg´cios no JMPS ocorreu principalmente pelo fato de que mensagens ao usu´rio s˜o
o a a
tratadas nas classes do pacote misc e n˜o somente no pacote applet, como seria de se
a
esperar. Trataremos das classes importantes ao Simplex na pr´xima se¸˜o.
o ca
3.2.3 Adaptando o applet para o sistema Agenda Nutricional e
vice-versa
A primeira tarefa de adapta¸˜o foi tratar o JMPS de forma a extrair o componente
ca
de c´lculo de dentro do applet. Assim, analizamos a estrutura do JMPS, retiramos as
a
diretivas de apresenta¸˜o e incorporamos no Agenda Nutricional.
ca
O JMPS utiliza diversas classes para construir um problema a ser calculado. Esta
estrutura ´ composta pelas classes:
e
29. 23
• Constraint - gerencia as restri¸˜es
co
• ComplexConstraint - cont´m os dados de uma restri¸˜o
e ca
• ConstraintContainer - cont´m todas as restri¸˜es de um problema
e co
• SimpleConstraint - gerencia restri¸˜es com uma unica vari´vel
co ´ a
• ZFunction - fun¸˜o a ser otimizada
ca
• TableData - tabela que armazena os valores a serem manipulados na otimiza¸˜o
ca
• SimplexMethod - implementa o m´todo Simplex
e
• MathUtil - conjunto de opera¸˜es matem´ticas necess´rias ao m´todo Simplex
co a a e
• Number - gerencia os valores utilizados no c´lculo. Internamente, trata todos os
a
valores como ponto flutuante.
Estas estrutura foram adaptadas e adicionadas ao Agenda Nutricional no pacote ne-
gocios.dieta.calculo, conforme abaixo:
Figura 17: Pacote calculo
30. 24
A classe negocios.dieta.calculo.CalculoDietaOtimizada ´ chamada pela classe nego-
e
cios.dieta.DietaPrescrita no momento em que est´ preparando os dados para enviar para
a
a camada de persistˆncia. A classes CalculoDietaPersonalizada recebe um objeto Di-
e
etaPrescrita que cont´m todos os produtos e a dieta de referˆncia indicada pelo usu´rio
e e a
do sistema. A classe CalculoDietaOtimizada cria instˆncias de:
a
• ZFunction: a fun¸˜o a ser otimizada ´ constru´ utilizando-se somente os nutrientes
ca e ıda
presentes na dieta de referˆncia; cada produto ´ uma vari´vel da fun¸˜o principal
e e a ca
e a quantidade do nutriente de referˆncia presente no produto ´ utilizado como
e e
coeficiente da vari´vel equivalente na equa¸˜o.
a ca
• ConstraintContainer: o sistema gera uma restri¸˜o para cada nutriente da dieta de
ca
referˆncia.
e
• TableData: ´ criada uma instˆncia vazia; ´ neste objeto que ser˜o armazenados os
e a e a
valores finais do c´lculo.
a
Para realizar o c´lculo, o JMPS utiliza os valores armazenados em TableData, as
a
restri¸˜es e a fun¸˜o Z. O c´lculo sobre estes valores (atrav´s dos pivotamentos) determina
co ca a e
o crit´rio de parada e o t´rmino do c´lculo, chegando ao resultado ´timo.
e e a o
Foi necess´rio realizar diversas adapta¸˜es no c´digo do JMPS e no modelo de dados
a co o
do sistema Agenda Nutricional, para que os dois pudessem se comunicar adequadamente.
O controle de fluxo do c´lculo do Simplex estava nas classes de apresenta¸˜o, pois a cada
a ca
itera¸˜o eram apresentadas mensagens ao usu´rio (conforme pode ser visto na se¸˜o an-
ca a ca
terior). No JMPS a classe SimplexMethod se ocupa somente dos c´lculos; toda a regra
a
do algoritmo est´ fora da classe, neste caso, na classe de apresenta¸˜o. Para que n˜o hou-
a ca a
vesse impacto no resultado, optou-se por n˜o realizar esta altera¸˜o neste momento, pois
a ca
requer um estudo mais delicado do JMPS que n˜o era poss´ de encaixar no cronograma
a ıvel
do projeto. Assim, limitamo-nos a incluir um m´todo privado na classe CalculoDietaO-
e
timizada que realiza as chamadas aos m´todos corretos do Simplex, de acordo com a
e
l´gica do JMPS. N˜o havia sido previsto vari´veis de controle na dieta de referˆncia para
o a a e
gerenciar o m´todo de c´lculo (minimiza¸˜o e maximiza¸˜o) e indicar o produto de re-
e a ca ca
ferˆncia. Tais controles foram adicionados para que pudesse ser realizado o acoplamento
e
dos dois sistemas.
31. 25
Observamos que n˜o houve impacto no tempo de resposta da prescri¸˜o ap´s a inclus˜o
a ca o a
dos mecanismos de c´lculos usando o Simplex. O tempo que o algoritmo utilizou para
a
realizar os c´lculos ´ impercept´ ao usu´rio, principalmente pelo fato de tal mecanismo
a e ıvel a
estar embutido na a¸˜o de persistˆncia dos dados no banco de dados, que ´ uma opera¸˜o
ca e e ca
lenta, j´ que realiza opera¸˜es de leitura e grava¸˜o de disco.
a co ca
32. 26
4 Conclus˜o
a
A implementa¸˜o do Simplex utilizada n˜o impactou no desempenho geral do sistema e
ca a
trouxe redu¸˜o da margem de erro nos c´lculo, pois n˜o foram feitos c´lculos aproximados,
ca a a a
mas utilizou-se um algoritmo de otimiza¸˜o comprovadamente eficiente.
ca
Apesar de ainda ser necess´rio uma s´rie de ajustes arquiteturais no cocmponente
a e
JMPS, a utiliza¸˜o deste componente ´ muito simples. Notamos durante o uso e an´lise do
ca e a
JMPS que existem liga¸˜es entre as classes principais que provavelmente s˜o desnecess´rias.
co a a
Por exemplo, para o c´lculo do Simplex, n˜o seria necess´rio utilizar quatro objetos de
a a a
restri¸˜o diferentes, mas somente um seria o suficiente para o c´lculo adequado. Uti-
ca a
lizar padr˜es de projeto, como o Composite provavelmente ajudaria na performance e
o
simplificaria ainda mais o componente.
Pudemos obsevar que a implementa¸˜o de algoritmos matem´ticos requer estudos
ca a
aplicados do algoritmo e da linguagem de programa¸˜o a ser utilizada e adapta¸˜es s˜o
ca co a
necess´rias. Utilizar-se de abstra¸˜es ´ imprescind´
a co e ıvel para identificar os objetos mais
prov´veis na manipula¸˜o dos dados produzidos e consumidos pelo m´todo selecionado.
a ca e
No caso do Simplex, selecionado para uso neste projeto, abstraiu-se a fun¸˜o Z (fun¸˜o a
ca ca
ser otimizada) e as restri¸˜es (equa¸˜es que restringem o espectro dos dados).
co co
Percebemos que, se n˜o for prevista na fase de projeto a utiliza¸˜o de algum m´todo
a ca e
espec´
ıfico, como foi o caso deste projeto, o impacto de incluir tal m´todo no sistema
e
´ muito alto, pois impacta no modelo de dados, nos casos de uso, no projeto em si
e
(componentes, pacotes e classes) e na interface ao usu´rio.
a
Entretanto, pudemos notar que ´ totalmente vi´vel a utiliza¸˜o de modelos matem´ticos
e a ca a
no cotidiano de desenvolvimento de software e estes modelos devem ser considerados nos
´
primeiros est´gios da engenharia de software. E importante que o analista de requisitos
a
tenha conhecimento de tais modelos, podendo identificar potenciais utilizadores. Ao ar-
quiteto e projetista ´ ainda mais importante possuir tal conhecimento, pois pode incluir na
e
arquitetura e no projeto do sistema o uso de padr˜es de projeto e de m´todos matem´ticos
o e a
que solucionem os problemas levantados pelo analista de requisitos, facilitando, assim, o
uso de tais mecanismos no desenvolvimento do sistema.
33. 27
Gloss´rio
a
.NET Plataforma de desenvolvimento de software da Microsoft, concorrente do
Java. O .NET fornece diversas ferramentas para o desenvolvimento de
software, por´m seu ponto fraco ainda ´ a portabilidade - assim como o
e e
Java, o .NET trabalha em diversos contextos, mas n˜o possui compilador
a
para outros sistemas operacionais que n˜o o da Microsoft, apesar de estar
a
em fase de desenvolvimento dos mesmos.
API Application Programming Interface. Interface para o c´digo-fonte de uma
o
aplica¸˜o ou biblioteca; comp˜e a documenta¸˜o de desenvolvimento.
ca o ca
Applet Aplica¸˜o executada dentro do contexto de outra aplica¸˜o, geralmente
ca ca
um navegador de internet.
Caloria Unidade de medida de energia.
Framework Conjunto de c´digos, modelos, bilbiotecas, componentes, etc, reutiliz´veis
o a
que ajudam no desenvolvimento de software.
GNU O Projeto GNU tem por objetivos desenvolver um sistema operacional do
tipo Unix inteiramente com software livre. Os sistemas Linux s˜o do tipo
a
GNU.
GPL GNU Public Licence. Licen¸a de software mais utilizada atualmente em
c
projetos de software livre; em resumo, protege a liberdade do software,
garantindo que o software distribu´ via GPL possui c´digo aberto e
ıdo o
pode ser distribu´ livremente.
ıdo
Hibernate Servi¸o de persistˆncia e consulta a bancos de dados relacionais ou de
c e
objetos com alto desempenho. Pode ser utilizado com Java e com .NET.
34. 28
Home Office
Tendˆncia mundial de metodologia de trabalho, onde a pessoa opta por
e
trabalhar em casa.
IDE Integrated Development Environment - Ambiente integrado de desenvolvi-
mento. Software utilizado para auxiliar e agilizar o desenvolvimento de
software. Geralmente oferece ferramentas de auto-complemento, ajuda
online e dicas.
iReport Ferramenta visual para projetar relat´rios para o Jasper.
o
Jasper Ferramenta de gera¸˜o de relat´rios para Java.
ca o
Java Linguagem de programa¸˜o da Sun Microsystems, cujo compilador ´ dis-
ca e
tribu´ gratuitamente. O Java tem como principal caracter´
ıdo ıstica a porta-
bilidade - existem vers˜es do compilador para diversos sistemas opera-
o
cionais; al´m disto, o Java permite trabalhar com ambientes texto, gr´fico,
e a
web e port´teis.
a
JDBC API para Java que define o modo como um cliente (aplica¸˜o) acessa um
ca
banco de dados.
MDI Multiple Document Interface. M´todo de organiza¸˜o de janelas que con-
e ca
siste em uma janela principal (gerenciador) e n janelas filhas, controladas
pela janela principal e dispostas de forma a permanecerem internas ` janela
a
principal. Neste modelo, todas as janelas do sistema permanecem juntas.
SDK Software Development Kit. Conjunto de ferramentas de desenvolvimento
utilizadas para criar aplica¸˜es, frameworks, consoles, etc.
co
Sistemas de controle de vers˜o
a
Software espec´
ıfico utilizado para gerenciar as altera¸oes realizadas em um
c˜
software em desenvolvimento. Os sistemas de controle de vers˜o fornecem
a
ferramentas para acompanhar as altera¸˜es realizadas, voltar uma vers˜o
co a
do c´digo, etc. Muito utilizado em ambientes de m´ ltiplos desenvolve-
o u
dores.
35. 29
Software de prateleira
Software produzido com caracter´
ısticas gen´ricas, com o objetivo de ser
e
distribu´ em larga escala. Geralmente propriet´rio, ou seja, desenvolvido
ıdo a
por uma empresa e vendido sob licen¸as restritas de uso.
c
Software house
Empresa especializada em desenvolvimento de software. F´brica de soft-
a
ware.
SoureForge.net
O maior site de desenvolvimento de software livre no mundo, atualmente.
Hospeda mais de 100.000 projetos, fornecendo diversas ferramentas de
apoio ao desenvolvimento, como gerenciador de tarefas, gerenciador de
bugs, f´runs, sistemas de controle de vers˜o, etc.
o a
36. 30
Referˆncias Bibliogr´ficas
e a
[1] BOCHENEK, Michael. The Java Mathematical Programming Suite .
Dispon´ em: http://sourceforge.net/projects/javamathprog/
ıvel
[2] COIN-OR. CLP Component . Dispon´
ıvel em: http://www.coin-
or.org/Clp/faq.html
[3] DEAN, Warren. A industrializa¸˜o durante a Rep´blica Velha in Hist´ria
ca u o
Geral da Civiliza¸˜o Brasileira: III. O Brasil Republicano: 1. Estrutura de poder e
ca
economia (1889-1930), 4a edi¸˜o . S˜o Paulo: Difel (1985).
ca a
[4] Departamento de alimentos e nutri¸˜o experimental da Faculdade de Ciˆncias Far-
ca e
macˆuticas - USP. Tabela de brasileira de composi¸˜o de alimentos . Projeto
e ca
Integrado de composi¸˜o de alimentos. Universidade de S˜o Paulo. Dispon´ em:
ca a ıvel
http://www.fcf.usp.br/tabela/index.asp
[5] GNU Linear Programming Kit. GLPK Component . Dispon´
ıvel em:
http://www.gnu.org/software/glpk
[6] LACHTERMACHER, Gerson, Pesquisa Operacional na tomada de decis˜es. S˜o
o a
Paulo: Campus (2005).
[7] PATR´
ICIO, Jo˜o. M´todo Simplex
a e in Investiga¸˜o operacional . Ano letivo
ca
2006/2007. Dispon´ em: http://www.aim.estt.ipt.pt/ jmmp/InvestOperacional/
ıvel
[8] US Department of Agriculture. Composition od Foods Raw, Pro-
cessed, Prepared. USDA National Nutrient Database for Stan-
dard Reference, Release 19. Baltimore: August, 2006. Dispon´
ıvel em:
http://www.nal.usda.gov/fnic/foodcomp/Data/HG72/hg72.html