Instituto Superior de Ensino e Pesquisa de Ituiutaba
FEIT – Fundação Educacional de Ituiutaba
UEMG – Universidade do Estado de Minas Gerais
ROBERTO GUIMARÃES DUTRA DE OLIVEIRA
UTILIZAÇÃO DE RECURSOS JAVA NA PLATAFORMA
ANDROID PARA FACILITAR O PROCESSO DE
COMPRA
ITUIUTABA
2012
ROBERTO GUIMARÃES DUTRA DE OLIVEIRA
UTILIZAÇÃO DE RECURSOS JAVA NA PLATAFORMA
ANDROID PARA FACILITAR O PROCESSO DE
COMPRA
Trabalho de Conclusão de Curso apresentado à
Universidade do Estado de Minas Gerais –
Fundação Educacional de Ituiutaba como pré-
requisito para obtenção parcial de créditos em
Bacharel em Engenharia de Computação.
Orientadora: Prof. Dra. Mônica Rocha Ferreira
de Oliveira
ITUIUTABA
2012
UTILIZAÇÃO DE RECURSOS JAVA NA PLATAFORMA
ANDROID PARA FACILITAR O PROCESSO DE
COMPRA
ROBERTO GUIMARÃES DUTRA DE OLIVEIRA
Professora orientadora:
_______________________________________________________
Prof(a). Dra Mônica Rocha Ferreira de Oliveira
Avaliadores:
_______________________________________________________
Adriana de Souza Guimarães
_______________________________________________________
Saulo Moraes Garcia Júnior
Ituiutaba
2012
AGRADECIMENTOS
A Deus.
Aos meus pais, Samir e Mírian, que sempre me apoiaram, acreditaram e
investiram em mim, e aos meus familiares que sempre me incentivaram.
A minha namorada, Mariana, pelo apoio e compreensão nos momentos difíceis e
pela motivação nas situações em que nada parecia dar certo.
Aos meus colegas de sala pelas tristezas e alegrias compartilhadas durante esses
anos de convivência.
Aos meus professores pelos ensinamentos passados em sala de aula, colaborando
para minha formação profissional, e a minha orientadora, Mônica, pela orientação e
disposição, contribuindo para o desenvolvimento e conclusão deste trabalho.
“Quão melhor é adquirir a sabedoria do
que o ouro! e quão mais excelente é
adquirir a prudência do que a prata!”
Provérbios 16:16
RESUMO
Com a evolução da tecnologia e o mundo globalizado, as atividades diárias parecem
aumentar e se tornarem cada vez mais complexas. Nem sempre é tão simples dispor de
tempo para realizar atividades rotineiras como, por exemplo, ir às compras. Uma
possível solução para simplificar este processo é a integração da tecnologia ao dia a dia.
A evolução dos celulares cresce em grande escala, não somente o número de
consumidores, mas também as tecnologias disponíveis para esses aparelhos.
Tecnologias que antes eram disponíveis apenas para notebooks e computadores, como
as redes sem fio (wireless) alcançam também os celulares, permitindo que eles tenham
uma interação maior com outros dispositivos e também as linguagens de programação
de alto nível, permitindo a construção de aplicativos dos mais variados tipos. O objetivo
deste projeto é facilitar ao máximo o processo de compra realizado pelo cliente, desde
antes de chegar ao comércio até o momento de encontrar a posição dos produtos nas
prateleiras. Para o desenvolvimento do projeto será usada a linguagem de programação
Java e a plataforma de desenvolvimento para dispositivos móveis Android.
Palavras-chave: Android; Java; Tecnologia; Dispositivos móveis.
ABSTRACT
Due to the evolution in technology and to the globalized world, daily activities seem to
have been becoming more and more complicated. It is not always an easy task to
dispose of time to do routine activities, such as, going shopping. A viable solution to
simplify this process is the integration of technology to our daily lives. Mobile phones
evolve at a great speed, not only concerning the number of consumers, but also the
available technologies for those devices. Technologies which used to be available only
for notebooks and desktops computers, such as wireless are also reaching mobile
phones, allowing them to have a greater interaction with other devices as well as to the
high level programming language, enabling the building of the most varied types of
applicatives. The aim of this project is to make the shopping process, the easiest
possible to the consumer from the moment he leaves his house to that moment when he
tries to find the goods on the market’s shelves. For the development of the project both
the programming language Java and the platform for mobile devices Android will be
used.
Key words: Android; Java; Technology; Mobile devices.
LISTA DE FIGURAS
Figura 1 - Arquitetura do NetBeans (HUANG, 2010). .................................................................. 32
Figura 2 - Arquitetura do Eclipse (ECLIPSE, 2007). ...................................................................... 34
Figura 3 - Processo de compilação e interpretação utilizado pelo Java (FREITAS, 2010). .......... 39
Figura 4 - Ciclo de vida de uma thread (RAMOS e TEODOROWITSCH, 2009). ............................ 43
Figura 5 - Arquitetura da plataforma Android (PRADO, 2011). .................................................. 45
Figura 6 – Aplicativo Barcode Scanner (BESTANDROID, 2009). .................................................. 49
Figura 7 - Mapa do Brasil no Google Maps (GOOGLE, 2012). ..................................................... 49
Figura 8 - Cidade de Ituiutaba vista no modo mapa (GOOGLE, 2012). ....................................... 50
Figura 9 - Cidade de Ituiutaba vista no modo satélite (GOOGLE, 2012). .................................... 50
Figura 10 - Cidade de Ituiutaba vista no modo terreno (GOOGLE, 2012). .................................. 51
Figura 11 - Diagrama de caso de uso do servidor. ...................................................................... 56
Figura 12 - Diagrama de caso de uso do cliente. ........................................................................ 64
Figura 13 – Diagrama de sequência do usuário – Efetuar log-in. ............................................... 69
Figura 14 – Diagrama de sequência do usuário – Cadastrar produto. ........................................ 69
Figura 15 - Diagrama de sequência do usuário - Visualizar produto. ......................................... 69
Figura 16 – Diagrama de sequência do usuário - Editar produto. .............................................. 70
Figura 17 - Diagrama de sequência do usuário - Excluir produto. .............................................. 70
Figura 18 - Diagrama de sequência do usuário - Produtos mais buscados. ................................ 71
Figura 19 - Diagrama de sequência do usuário - Abrir/Fechar conexão. .................................... 71
Figura 20 - Diagrama de sequência do administrador – Cadastrar usuário. ............................... 72
Figura 21 - Diagrama de sequência do administrador - Editar usuário. ..................................... 72
Figura 22 - Diagrama de sequência do administrador - Visualizar usuário. ................................ 73
Figura 23 - Diagrama de sequência do administrador - Excluir usuário. .................................... 73
Figura 24 - Diagrama de sequência do administrador - Gerar relatório usuário. ....................... 73
Figura 25 - Diagrama de sequência do cliente - Buscar produto pelo nome. ............................. 74
Figura 26 - Diagrama de sequência do cliente - Buscar produto pelo código de barras. ........... 75
Figura 27 - Diagrama de sequência do cliente - Visualizar produtos mais buscados. ................ 75
Figura 28 - Diagrama de sequência do cliente - Ligar para estabelecimento. ............................ 76
Figura 29 - Diagrama de sequência do cliente – Visualizar mapa. .............................................. 76
Figura 30 - Diagrama de sequência do cliente - Visualizar posição comércio. ........................... 76
Figura 31 - Diagrama de sequência do cliente - Visualizar própria posição................................ 77
Figura 32 - Diagrama de classe do servidor. ............................................................................... 78
Figura 33 - Diagrama de classe do cliente. .................................................................................. 79
Figura 34 - Tela de acesso ao sistema. ........................................................................................ 80
Figura 35 - Acesso ao sistema como administrador. .................................................................. 81
Figura 36 - Acesso ao sistema como usuário comum. ................................................................ 82
Figura 37 - Permitir conexões dos clientes. ................................................................................ 83
Figura 38 - Bloquear conexões dos clientes. ............................................................................... 84
Figura 39 - (a) Tela inicial do software do cliente. (b) Tela escolha de opções. .......................... 88
Figura 40 - (a) Escolha da opção “Buscar pelo Nome”. (b) Inserção do nome do produto. ....... 98
Figura 41 - (a) Escolha do produto. (b) Visualização das informações do produto. ................... 99
Figura 42 - (a) Escolha da opção “Buscar pelo código de barras”. (b) Leitura código de barras.
................................................................................................................................................... 100
Figura 43 - Visualização das informações do produto. ............................................................. 100
Figura 44 - (a) Escolha da opção “Produtos Mais Buscados”. (b) Escolha do produto. ............ 101
Figura 45 - Visualização das informações do produto. ............................................................. 102
Figura 46 - (a) Escolha da opção “Ligar para o Estabelecimento”. (b) Realização da chamada.
................................................................................................................................................... 103
Figura 47 - Escolha da opção “Como Chegar?”. ........................................................................ 104
Figura 48 - (a) Visualização modo satélite. (b) Visualização modo mapa. ................................ 105
Figura 49 - (a) Mapa centralizado no estabelecimento. (b) Mapa centralizado no cliente ...... 106
LISTA DE TABELAS
Tabela 1 - Caso de uso do cliente: efetuar log-in. ....................................................................... 57
Tabela 2 - Caso de uso do cliente: cadastrar produto................................................................. 57
Tabela 3 - Caso de uso do cliente: editar produto. ..................................................................... 58
Tabela 4 - Caso de uso do cliente: visualizar produto. ................................................................ 58
Tabela 5 - Caso de uso do cliente: excluir produto. .................................................................... 59
Tabela 6 - Caso de uso do cliente: Visualizar produtos mais buscados. ..................................... 59
Tabela 7 - Caso de uso do cliente: Abrir/Fechar conexão. .......................................................... 60
Tabela 8 - Caso de uso do administrador: cadastrar usuário. ..................................................... 60
Tabela 9 - Caso de uso do administrador: editar usuário. .......................................................... 61
Tabela 10 - Caso de uso do administrador: visualizar usuário. ................................................... 61
Tabela 11 - Caso de uso do administrador: excluir usuário. ....................................................... 62
Tabela 12 - Caso de uso do administrador: verificar relatório de usuários. ............................... 62
Tabela 13 - Caso de uso do cliente: buscar produto pelo nome. ................................................ 65
Tabela 14 - Caso de uso do cliente: buscar produto pelo código de barras. .............................. 65
Tabela 15 - Caso de uso do cliente: visualizar produtos mais buscados. .................................... 66
Tabela 16 - Caso de uso do cliente: ligar para o estabelecimento. ............................................. 66
Tabela 17 - Caso de uso do cliente: visualizar mapa. .................................................................. 67
Tabela 18 - Caso de uso do cliente: visualizar posição comércio. ............................................... 67
Tabela 19 - Caso de uso do cliente: visualizar própria posição. .................................................. 68
LISTA DE ABREVIATURAS E SIGLAS
ABI – Allied Business Intelligence
ADT – Android Development Tools
AOSP – Android Open Source Project
API – Application Programming Interface
ARPA – Advanced Research Projects Agency
BCPL – Basic Combined Programming Language
BDS – BREW Distribution System
BREW – Binary Runtime Environment for Wireless
CDMA – Code Division Multiple Access
CPU – Central Processing Unit
DDL – Data Definition Language
DEC – Digital Equipment Corporation
DML – Data Manipulation Language
EJB – Enterprise JavaBeans
GPS – Global Positioning System
HP – Hewlett-Packard
HTML – HyperText Markup Language
HTTP – HyperText Transfer Protocol
IBM – International Business Machines
IDE – Integrated Development Environment
iOS – iPhone Operating System
IP – Internet Protocol
JAR – Java Archive
JDK – Java Development Kit
JIT – Just In Time
JMS – Java Messege Service
JVM – Java Virtual Machine
J2EE – Java 2 Enterprise Edition
J2ME – Java 2 Micro Edition
J2SE – Java 2 Standard Edition
MacOS – Macintosh Operating System
MPL – Mozilla Public License
NT – New Technology
OHA – Open Handset Alliance
PC – Personal Computer
PDA – Personal Digital Assistants
PDP-11 – Programmed Data Processors
PHP – Personal Home Page
PUC – Pontifícia Universidade Católica
QR – Quick Response
RMI – Remote Method Invocation
RMS – Record Management System
SDK – Software Development Kit
SGBD – Sistema Gerenciador de Banco de Dados
SPL – Sun Public License
SQL – Structured Query Language
TCP – Transmission Control Protocol
TECGRAF – Grupo de Tecnologia em Computação Gráfica
UDP – User Datagrama Protocol
UML - Unified Modeling Language
UNIX - Uniplexed Information and Computing System
XML – Extensible Markup Language
SUMÁRIO
1 INTRODUÇÃO ................................................................................................................ 16
1.1 Mercado de celulares .............................................................................................................. 17
1.2 Identificação do problema ...................................................................................................... 18
1.3 Objetivos ................................................................................................................................. 18
1.3.1 Objetivo geral ............................................................................................................................ 18
1.3.2 Objetivos específicos ................................................................................................................ 19
1.4 Justificativa ............................................................................................................................. 19
1.5 Organização do trabalho ......................................................................................................... 20
2 ESTADO DA ARTE ........................................................................................................ 21
2.1 Linguagens para dispositivos móveis ....................................................................................... 21
2.1.1 Lua ............................................................................................................................................. 21
2.1.2 C/C++ ......................................................................................................................................... 22
2.1.3 Python ....................................................................................................................................... 23
2.1.4 Java ........................................................................................................................................... 23
2.2 Plataformas de desenvolvimento ............................................................................................ 24
2.2.1 Android ...................................................................................................................................... 25
2.2.2 Symbian..................................................................................................................................... 25
2.2.3 BREW......................................................................................................................................... 26
2.2.4 Windows Mobile ....................................................................................................................... 27
2.3 Conclusão ................................................................................................................................ 28
3 REFERENCIAL TEÓRICO ............................................................................................. 29
3.1 IDE ........................................................................................................................................... 29
3.1.1 NetBeans ................................................................................................................................... 29
i. Histórico .................................................................................................................................... 30
ii. Arquitetura................................................................................................................................ 31
iii. Utilização................................................................................................................................... 32
3.1.2 Eclipse ....................................................................................................................................... 33
i. Histórico .................................................................................................................................... 33
ii. Arquitetura................................................................................................................................ 34
iii. Utilização................................................................................................................................... 35
3.2 Java ......................................................................................................................................... 36
3.2.1 Plataformas ............................................................................................................................... 36
3.2.2 Características ........................................................................................................................... 37
3.2.3 JVM ........................................................................................................................................... 38
3.2.4 Garbage Collection .................................................................................................................... 39
3.2.5 Sockets ...................................................................................................................................... 40
3.2.6 Threads ..................................................................................................................................... 42
3.3 Google Android ....................................................................................................................... 44
3.3.1 Arquitetura................................................................................................................................ 44
3.3.2 Classes Activity e View .............................................................................................................. 46
3.3.3 Classe R e Arquivo AndroidManifest ......................................................................................... 47
3.3.4 XML ........................................................................................................................................... 47
3.3.5 Barcode Scanner ....................................................................................................................... 48
3.4 Google Maps ........................................................................................................................... 49
3.5 Banco de Dados ....................................................................................................................... 51
3.5.1 SQLite ........................................................................................................................................ 52
3.6 Conclusão ................................................................................................................................ 53
4 ESTUDO DE CASOS ....................................................................................................... 55
4.1 Diagrama de caso de uso ......................................................................................................... 55
4.2 Diagrama de sequência ........................................................................................................... 68
4.3 Diagrama de classe .................................................................................................................. 77
4.4 Desenvolvimento do software servidor ................................................................................... 80
4.4.1 Acesso ao sistema ..................................................................................................................... 80
4.4.2 Utilização das threads ............................................................................................................... 82
4.4.3 Transmissão dos dados via sockets ........................................................................................... 85
4.5 Desenvolvimento do software do cliente ................................................................................ 87
4.5.1 Interface do software ................................................................................................................ 88
4.5.2 Transmissão dos dados via sockets ........................................................................................... 89
4.5.3 Leitura do código de barras ...................................................................................................... 90
4.5.4 Armazenamento do histórico de buscas ................................................................................... 92
4.5.5 Realização de ligações ............................................................................................................... 94
4.5.6 Mapas e GPS ............................................................................................................................. 94
4.6 Testes ...................................................................................................................................... 97
4.6.1 Buscar produto pelo nome ....................................................................................................... 97
4.6.2 Buscar produto pelo código de barras ...................................................................................... 99
4.6.3 Produtos mais buscados ......................................................................................................... 101
4.6.4 Ligar para estabelecimento..................................................................................................... 102
4.6.5 Como chegar ao estabelecimento .......................................................................................... 103
4.7 Conclusão .............................................................................................................................. 106
5 CONCLUSÃO ................................................................................................................ 108
5.1 Trabalhos futuros .................................................................................................................. 109
6 REFERÊNCIAS ............................................................................................................. 110
16
1 Introdução
A globalização é caracterizada por um mundo em transformação, composto por
mudanças rápidas e de várias naturezas, com novidades cotidianas, o que exige uma
readequação e adaptação contínua do ser humano, principalmente dentro do mundo
organizacional, exigindo cada vez mais das pessoas (BEDANI, 2011).
É sabido que o tempo é limitado e independente do que aconteça no mundo
globalizado e da rapidez das mudanças, o dia continuará composto por 24 horas. Daí a
importância de revisitar a forma vivida e saber administrar as mudanças e a diversidade
de atividades no dia a dia, o que requer uma melhor gestão do tempo. Surge então a
tecnologia como meio de auxiliar as pessoas, aumentando a sua produtividade na
medida em que libera o seu usuário de tarefas repetitivas, cansativas ou perigosas
(BEDANI, 2011).
O uso de celulares tornou-se algo natural na sociedade atual. O avanço das
tecnologias, no âmbito da mobilidade, tem possibilitado o aumento da capacidade de
armazenamento e processamento dos dispositivos móveis. A praticidade de se
comunicar e efetuar tarefas, antes só possíveis em um PC - Personal Computer - vem
conquistando um número cada vez maior de pessoas. Os usuários podem ouvir músicas,
ver vídeos, ler arquivos e, inclusive, navegar na Internet (ARAÚJO, 2010).
O mercado de dispositivos móveis cresce em grande escala. A consultoria de
mercado da ABI Research (Allied Business Intelligence) diz que 2010 foi um grande
ano para as aplicações móveis e estimou que os downloads nas lojas deste tipo de
software duplicaram neste ano. De acordo com a consultoria, o download de aplicações
móveis cresceu aproximadamente 145 por cento neste ano, alcançando os 5,9 milhões
de dólares, contra os 2,9 mil milhões registrados em 2009. Com base neste crescente
mercado, há um aumento na demanda por aplicações que possam ser executadas em
dispositivos portáteis, com a possibilidade de comunicação com outras aplicações
(NÓBREGA, 2010).
17
A arquitetura para dispositivos móveis necessita de um tratamento diferenciado
das demais tecnologias, pois estes dispositivos têm uma quantidade limitada de
memória e menor poder de processamento. Como a diversidade de dispositivos é quase
ilimitada, a necessidade de ter aplicações portáveis entre os dispositivos, fácil adaptação
à crescente inovação e a segurança, por isso a tecnologia Java foi escolhida (SOUSA,
2010).
1.1 Mercado de celulares
O mundo está se tornando cada vez mais digital. Nas últimas três décadas os
celulares passaram por diversas mudanças, passando de imensos terminais com pouca
inteligência para pequenos computadores pessoais (smartphones), capazes de transmitir
voz e dados. Essa evolução abriu um universo de oportunidades para operadoras,
fabricantes e integradores (ARAÚJO, 2006).
O número de telefones inteligentes no mercado vem crescendo gradativamente
nos últimos anos, devido, principalmente, às novas maneiras de como as pessoas estão
se comunicando, interagindo e trabalhando. Há uma necessidade por provimento de
serviços e acesso às informações de forma eficiente e rápida, especialmente no âmbito
de dispositivos móveis. Existem, atualmente, mais de bilhões de usuários vinculados
a alguma operadora telefônica móvel e a tendência é aumentar ainda mais esses
números. Este aumento do número de aparelhos móveis provoca uma demanda por
novos serviços e aplicativos em variadas plataformas nos quais eles são desenvolvidos e
distribuídos (CARACIOLO, 2009).
Com essa evolução dos celulares, diversos desenvolvedores de software
começaram a escrever aplicativos para plataformas móveis, a fim de lucrar neste novo
mercado emergente. Os desenvolvedores precisam conhecer a fundo este vasto campo
de possibilidades e driblar algumas dificuldades como, por exemplo, o poder de
processamento limitado, telas reduzidas, limitações de memória, dentre outros
fatores que passam a exigir uma maior habilidade dos programadores para a construção
de aplicativos eficientes e usáveis (CARACIOLO, 2009).
18
O mercado tem um número de telefones móveis celulares que ultrapassa o de
terminais fixos. São mais de um bilhão e meio de telefones celulares, sem contar com
outros dispositivos móveis como os PDAs (Personal Digital Assistants). A cada dia que
passa surge aparelhos mais potentes, com novas funcionalidades como capacidade de
capturar imagens e vídeo e reproduzir músicas. Para que esses recursos disponíveis
sejam aproveitados da melhor maneira possível, é preciso que sejam desenvolvidos
aplicativos em linguagens voltadas para dispositivos móveis (ARAÚJO, 2006).
1.2 Identificação do problema
É possível desenvolver um sistema que simplifique todo o processo de compras
do consumidor, desde ao sair de casa até a localização dos produtos nas prateleiras do
estabelecimento comercial?
1.3 Objetivos
1.3.1 Objetivo geral
O objetivo geral deste projeto é facilitar a vida do cliente, evitando a perda de
tempo durante uma tarefa simples e rotineira como fazer compras. Com a utilização do
software desenvolvido, o cliente encontrará o estabelecimento com o uso dos mapas e
também terá maior facilidade em localizar os produtos desejados de uma loja ou
supermercado, sem a necessidade de procurar o produto prateleira por prateleira ou
pedir diversas informações a algum funcionário do estabelecimento.
Já os proprietários do estabelecimento terão um sistema de busca de produtos
eficazes. Conseguirão assim, além de boas avaliações de seus clientes, obterem uma
nova clientela atraída pela praticidade e facilidade em encontrar a mercadoria desejada,
e conseguirão também gerenciar quais os produtos que mais são buscados por eles.
19
1.3.2 Objetivos específicos
Para tanto, os seguintes objetivos específicos foram definidos:
a) Pesquisar e conhecer a fundo a linguagem de programação para
dispositivos móveis Android;
b) Realizar a comunicação entre softwares desktop e softwares mobile,
através do uso de sockets;
c) Integração do Google Maps em uma aplicação para dispositivos móveis;
d) Utilização de recursos de GPS e marcação de locais no mapa.
1.4 Justificativa
Toda pessoa que se encontra na posição de consumidor consegue ver a
dificuldade ao entrar em um estabelecimento e procurar um produto sem ter uma
referência exata de onde o mesmo se encontra. Em alguns supermercados, ainda existem
banners com informações da categoria do produto que se encontram nos corredores,
mas isso não deixa totalmente explícito, pois alguns produtos podem encaixar em mais
de uma categoria.
Outro fator que influenciou no desenvolvimento do projeto, foi o interesse
pessoal na área de programação para desktops e dispositivos móveis.
Por último, o gosto por celulares e as tecnologia que os englobam, a
oportunidade de desenvolver um aplicativo próprio e vê-lo funcionar, foram de forte
influência ao escolher o tema da monografia.
20
1.5 Organização do trabalho
O projeto está organizado em cinco capítulos, a saber:
O capítulo 1 apresenta a introdução referente ao assunto, a identificação do
problema, os objetivos e a justificativa do projeto.
O capítulo 2 apresenta algumas das linguagens de programação para dispositivos
móveis, assim como, as plataformas de desenvolvimento.
O capítulo 3 compreende as ferramentas que foram utilizadas para o
desenvolvimento do projeto.
O capítulo 4 consiste nos diagramas UML (Unified Modeling Language) dos
softwares, seu desenvolvimento e os testes.
O capítulo 5 apresenta as considerações finais e a conclusão do projeto.
21
2 Estado da Arte
Neste capítulo serão abordadas algumas das linguagens de programação e
plataformas de desenvolvimento para celulares mais conhecidas e utilizadas
mundialmente.
2.1 Linguagens para dispositivos móveis
Diversas linguagens de programação podem ser usadas para o desenvolvimento
de aplicativos para os dispositivos móveis. Algumas são baseadas em marcação, onde o
processamento é feito em um servidor remoto até as linguagens tradicionais, e usadas
principalmente por telefones celulares (JOHNSON, 2007). As linguagens tradicionais,
como Lua, C++, Python e Java, permitem o desenvolvimento de aplicações mais
complexas, que podem executar algo no próprio dispositivo, armazenarem dados,
conectarem com servidores remotos, entre diversos recursos existentes, sendo usadas
para desenvolvimento de aplicativos para dispositivos portáteis.
2.1.1 Lua
Lua é uma linguagem de script amplamente usada nas mais diversas áreas, desde
grandes aplicativos para desktops até software para sistemas embarcados. Lua é a
linguagem mais usada atualmente para jogos, e é parte do padrão Ginga para o sistema
brasileiro de televisão digital. É inteiramente projetada, implementada e desenvolvida
no Brasil, por uma equipe na PUC-Rio (Pontifícia Universidade Católica do Rio de
Janeiro) e nasceu no TECGRAF (Grupo de Tecnologia em Computação Gráfica)
(IERUSALIMSCHY, 2009).
Combina sintaxe simples para programação procedural com poderosas
construções para descrição de dados baseadas em tabelas associativa e semântica
extensível. É interpretada a partir de bytecodes para uma máquina virtual baseada em
22
registradores, e tem gerenciamento automático de memória com coleta de lixo
incremental. Lua roda em todas as versões do Unix (Uniplexed Information and
Computing System) e do Windows, e também em dispositivos móveis, como
computadores de mão e celulares que usam BREW (Binary Runtime Environment for
Wireless), Symbian, Pocket PC (Personal Computer) (LUA, 2011).
2.1.2 C/C++
A linguagem C foi criada por Dennis Ritchie em um DEC (Digital Equipment
Corporation) PDP-11 (Programmed Data Processors), usando o sistema operacional
Unix e é o resultado do processo de desenvolvimento iniciado com outra linguagem,
chamada BCPL (Basic Combined Programming Language), desenvolvida por Martin
Richards. A linguagem C tornou-se uma das linguagens de programação mais usadas, e
tem sido utilizada na criação de alguns dos mais importantes produtos de software dos
últimos anos (ROMÃO, 2002).
Quanto ao seu nível, pesquisadores e programadores encontram certa dificuldade
em classificá-la, sendo que alguns autores costumam defini-la como de nível baixo,
como o Assembley e outros como nível médio. Porém é uma linguagem altamente
portável, ou seja, tendo seu código escrito em uma máquina pode facilmente ser
compilado em outra. Hoje em dia, essa vantagem não fica tão evidente, pois existe certa
padronização. Mas até poucos anos atrás havia uma grande diversidade de hardware, o
que causava problemas de incompatibilidade com diversas linguagens. Os arquitetos de
C pensaram nisso, criando uma linguagem que ao invés de comandos, usa funções para
a entrada e saída de dados (ROMÃO, 2002).
Em 1980, Bjarne Stroustrup desenvolveu o C++ como uma ampliação da
linguagem C e foi inicialmente chamado C com classes. Hoje em dia, uma grande
quantidade de empresas de softwares utiliza o C++. O crescimento da linguagem na
área de dispositivos móveis se fortaleceu pela integração com o sistema operacional
Symbian. É uma das melhores linguagens de programação existentes por conseguir
agrupar uma funcionalidade que envolve formulações altamente abstratas como classes,
23
que permitem um trabalho de alto nível e formulações de baixo nível, como o uso de
chamadas de interrupções que realizam tarefas altamente específicas (BUENO, 2002).
2.1.3 Python
Python é uma linguagem de programação de script orientada a objetos,
disponível para diversas plataformas e ambientes. Permite que programas sejam escritos
de forma compacta e legível, possibilitando o rápido aprendizado. Os códigos escritos
em Python são geralmente menores em comparação a códigos equivalentes em C++
ou Java devido ao seu mecanismo de abstração de tipos o qual permite expressar
operações bastante complexas com apenas um comando. É uma linguagem simples, de
código aberto e se aplica a dispositivos móveis (CARACIOLO, 2009).
Possui estruturas de dados de alto-nível eficientes, bem como adota uma
abordagem simples e efetiva para a programação orientada a objetos. Sua sintaxe
elegante e tipagem dinâmica, em adição a sua natureza interpretada, tornam Python
ideal para o desenvolvimento rápido de aplicações em diversas áreas e na maioria das
plataformas disponíveis. O interpretador de Python é facilmente extensível
incorporando novas funções e tipos de dados implementados em C ou C++ e se adequa
como linguagem de extensão para customizar aplicações (ROSSUM, 2004).
2.1.4 Java
Em 1991, na Sun Microsystems, foi iniciado o Green Project, o berço do Java,
uma linguagem de programação orientada a objetos. Os mentores do projeto eram
Patrick Naughton, Mike Sheridan, e James Gosling. O objetivo do projeto não era a
criação de uma nova linguagem de programação, mas antecipar e planejar a "próxima
onda" do mundo digital. Eles acreditavam que em algum tempo haveria uma
convergência dos computadores com os equipamentos e eletrodomésticos comumente
usados pelas pessoas no seu dia a dia (PAULA FILHO, 2008).
24
A Sun anunciou o Java formalmente durante uma conferência, em maio de 1995.
A linguagem chamou a atenção da comunidade de negócios, devido ao enorme interesse
que a web despertava na época. Além disso, também tinha o grande apelo da
portabilidade. Por isso, o Java passou a ser utilizado para desenvolver aplicativos
corporativos de grande porte e aprimorar a funcionalidade de servidores, assim como no
desenvolvimento de aplicativos para dispositivos móveis (CROCE FILHO e RIBEIRO,
2010).
Desde seu lançamento, em maio de 1995, a plataforma Java foi adotada mais
rapidamente do que qualquer outra linguagem de programação na história da
computação. Em 2003 atingiu a marca de quatro milhões de desenvolvedores em todo
mundo. Ela continua crescendo e oferecendo qualidade, desempenho e segurança
(PAULA FILHO, 2008).
O forte crescimento do Java e sua aceitação no mundo da programação fizeram
com que grandes companhias aderissem a esta linguagem. Um dos casos mais recente
foi a criação da plataforma Android, tendo o Java como raiz, pela gigante Google. A
criação do Android veio da necessidade da Google em possuir uma parte do mercado de
dispositivos móveis, e que contivesse suas características, como o desempenho,
inteligência e fácil manutenção.
2.2 Plataformas de desenvolvimento
Uma plataforma de desenvolvimento é um ambiente que possibilita a criação,
confecção ou desenvolvimento de softwares. Elas devem atender as necessidades de
baixo poder de processamento e baixo custo de memória, pois, embora os celulares já
tenham grande nível de avanço em capacidade de memória bem como de
processamento, esses dois quesitos ainda estão longe de alcançar o nível dos desktops.
No mercado atual, existem várias plataformas de desenvolvimento para celulares como
as plataformas Android, Symbian, BREW e Windows Mobile (BUGARIN, BORGES e
DATTOLI, 2009).
25
2.2.1 Android
Android é uma plataforma desenvolvida pela Google voltada para dispositivos
móveis. Em 5 de novembro de 2007, a empresa tornou pública a primeira plataforma
Open Source de desenvolvimento para dispositivos móveis baseada na plataforma Java
com sistema operacional Linux, na qual foi chamada de Android. Essa plataforma é
mantida pela OHA (Open Handset Alliance), um grupo formado por mais de 40
empresas as quais se uniram para inovar e acelerar o desenvolvimento de aplicações,
serviços, trazendo aos consumidores uma experiência mais rica em termos de recursos,
menos dispendiosa em ternos financeiros para o mercado móvel. Pode-se dizer que a
plataforma Android é a primeira plataforma móvel completa, aberta e livre (SILVA,
2010).
O AOSP (Android Open Source Project) está encarregado da manutenção e
desenvolvimento do Android. O objetivo principal é construir uma plataforma de
software excelente para usuários de todos os tipos. Uma série de empresas empenhou
muitos engenheiros para atingir esse objetivo, e o resultado é uma produção total de
produtos de alta qualidade, cuja fonte é aberta para customização e portabilidade
(AMORIM, 2011).
2.2.2 Symbian
Symbian é o sistema operacional mais antigo de smartphones ainda em
desenvolvimento. Iniciou no ano de 1998, em um consórcio entre a Ericsson, Nokia,
Motorola e Psion. Dez anos depois, a Nokia comprou o resto das ações pertencentes a
Sony Ericsson e fundou o Symbian Foundation, com o objetivo de abrir o código do
Symbian (OKADA, 2011).
Com a explosão de consumo dos telefones celulares, a Symbian começou a
desenvolver sistemas para as grandes empresas do ramo, principalmente para a Nokia,
Ericsson e Motorola. Ele é um sistema totalmente modular e permite que cada empresa
crie sua própria interface, portanto este sistema não tem uma cara definida. O software
26
final instalado no dispositivo móvel pode ser um simples sistema de textos em telas
monocromáticas, até um sistema operacional completo e potente (RODRIGUES, 2007).
Este sistema operacional é predominantemente baseado em um ambiente gráfico
bastante simples, onde sua grande preocupação é evitar ao máximo o desperdício de
recursos do celular, como bateria e memória. Para isso ele conta com diversos
mecanismos que são eficientes ao tratar desses problemas (RODRIGUES, 2007).
A plataforma Symbian já foi o sistema operacional mobile mais popular do
mundo, graças ao lançamento de bons celulares equipados com o sistema na época de
ouro da Nokia. Porém a chegada do iPhone e Android e a demora para o Symbian se
adaptar aos novos tempos, onde interfaces otimizadas a toque se tornaram obrigatórias,
tiveram consequência na perda de popularidade do Symbian (OKADA, 2011).
2.2.3 BREW
BREW é um sistema operacional, desenvolvido pela Qualcomm, semelhante ao
Symbian. Possui mensagens, navegação pela Internet e trabalha com a tecnologia de
comunicação CDMA (Code Division Multiple Access). Inclui plataforma de aplicativos
e ferramentas de portagem para fabricantes de dispositivos, como o BREW SDK
(Software Development Kit) e o BDS (BREW Distribution System). Este sistema de
distribuição é controlado e gerenciado pelas operadoras, o que lhes permite obter
aplicativos dos desenvolvedores, comercializá-los e coordenar os processos de
faturamento e pagamento. (BALSEMÃO, 2008).
A plataforma consiste em um conjunto de bibliotecas binárias compiladas,
ligadas para execução nativa e otimizada de forma a permitir que os aplicativos
aproveitem os recursos e serviços de comunicação móvel. Ela controla o fluxo de
eventos de e para os aplicativos, iniciando, interrompendo, suspendendo e retomando a
execução em resposta a eventos apropriados (OLIVEIRA, 2011).
27
Também provê acesso às funções de baixo nível subjacentes do dispositivo de
comunicação móvel através de sua interface de aplicativos. Os desenvolvedores podem
usar o BREW SDK e a linguagem C/C++ e Java para escrever software para o
dispositivo sem precisar ter qualquer conhecimento de sua complexidade. Como a
interface de aplicativos não muda, portar aplicativos de um dispositivo BREW para
outro se torna simples. Essas interfaces são coleções de funções relacionadas a um
serviço específico (OLIVEIRA, 2011).
2.2.4 Windows Mobile
O Windows Mobile é a plataforma para smartphones da Microsoft, que vem se
esforçando para manter o sistema relevante frente aos concorrentes. Diferente do que
temos nos computadores, onde o Windows possui quase 90% do mercado, o Windows
Mobile tem uma participação relativamente pequena nos smartphones, sendo pouco
superior a 15% do total (MORIMOTO, 2010).
Nasceu com a versão 2003 do Visual Studio e hoje em dia existem algumas
versões de Windows Mobile, como o Windows Mobile 5.0 e o 6.0 que utilizam o DOT
NET Compact Framework 2.0. Até o Visual Studio 2005, para se desenvolver uma
aplicação Windows Mobile era necessário utilizar pelo menos a versão profissional que
permitia o desenvolvimento de aplicações Windows Mobile 2003, e para desenvolver
aplicações Mobile 5.0 era necessário fazer o download das ferramentas de
desenvolvimento para a plataforma Windows Mobile 5.0 (OLIVEIRA, 2010).
A ideia era que os aparelhos servissem como opções mais leve e barata que os
notebooks, permitindo editar documentos e executar outras tarefas básicas. O problema
era que eles eram muito lentos e limitados e na época ainda não existiam muitos
softwares para a plataforma, de forma que eles acabaram não emplacando. Alguns
fabricantes, incluindo a HP (Hewlett-Packard), continuaram lançando modelos
aperfeiçoados, incluindo processadores mais rápidos e telas coloridas, mas nenhum se
tornou um grande sucesso de vendas (MORIMOTO, 2010).
28
O Windows Mobile perdeu terreno rapidamente com a chegada do iOS (iPhone
Operating System) e Android. Os principais fatores foram: a lentidão do sistema e a
interface pouco otimizada para telas de toque, com botões pequenos e opções
espalhadas em múltiplos menus. A Microsoft continua fazendo pequenos investimentos
no sistema, trazendo uma interface mais otimizada a telas sensíveis ao toque e
melhoramentos para os dispositivos embarcados que ainda são equipados com o sistema
(OKADA, 2011).
2.3 Conclusão
O crescimento do mercado dos celulares, a rápida evolução no poder de
processamento e a integração de novas funções fizeram com que grandes empresas
investissem no desenvolvimento de novos modelos e também de linguagens que
aderissem e fossem capazes de usar da melhor forma possível os recursos desses
dispositivos. A Google tratou de entrar no jogo do mercado e investiu em sua própria
plataforma de desenvolvimento, aproveitando a popularidade e aceitação que a
linguagem Java tem no mercado mundial, conseguiu forte aprovação e hoje o sistema
Android está presente nos celulares de grandes empresas e tornando-se a plataforma de
desenvolvimento para dispositivos móveis mais usada. No próximo capítulo serão
descritas as ferramentas e as plataformas de desenvolvimento utilizadas para a criação
dos softwares.
29
3 Referencial Teórico
Neste capítulo serão abordadas as ferramentas e as linguagens de programação
utilizadas no desenvolvimento do projeto.
3.1 IDE
IDE, do inglês Integrated Development Environment ou Ambiente Integrado de
Desenvolvimento, é um programa de computador que reúne características e
ferramentas de apoio ao desenvolvimento de software com o objetivo de facilitar este
processo (BASSI, 2011).
Com o uso das IDEs, o desenvolvedor terá, em apenas um software, todos os
itens necessários para o desenvolvimento de um programa, desde o código fonte e a
criação da interface gráfica para usuários, a compilação e criação de arquivos
executáveis além da possibilidade de depuração do código e constante atualização e
melhorias da ferramenta por parte dos desenvolvedores em consequência do código
fonte aberto.
Para o desenvolvimento do projeto foram utilizadas duas das IDEs mais usadas
atualmente para o desenvolvimento na linguagem Java , o NetBeans e o Eclipse.
3.1.1 NetBeans
O NetBeans é um ambiente de desenvolvimento integrado gratuito e de código
aberto para desenvolvedores de software na linguagem Java, C/C++, PHP (Personal
Home Page) , Ruby, entre outras. É executado em várias plataformas, como Windows,
Linux, Solaris e MacOS (Macintosh Operating System) e oferece aos desenvolvedores
ferramentas necessárias para criação de aplicativos profissionais de desktop,
empresariais, web e dispositivos móveis (OFICINA DA NET, 2008).
30
i. Histórico
O projeto do NetBeans foi iniciado em 1996 por dois estudantes tchecos na
Universidade de Charles, em Praga, quando a linguagem de programação Java ainda
não era tão popular como atualmente. Primeiramente o nome do projeto era Xelfi, em
alusão ao Delphi, pois, a pretensão deste projeto era ter funcionalidades semelhantes às
plataformas populares da época que eram mais atrativas por serem ferramentas visuais e
mais fáceis de serem usadas (NETBEANS, 2011).
Em 1999, o projeto já havia evoluído para uma IDE proprietária, com o nome de
NetBeans DeveloperX2, que dava suporte ao Swing, uma API (Application
Programming Interface) que desenha por conta própria todos os componentes, sem
necessidade de delegar essa função ao sistema operacional. Os aprimoramentos no
desempenho vindos com o JDK 1.3 (Java Development Kit), lançado no outono de
1999, tornou o NetBeans uma escolha viável para ferramentas de desenvolvimento
(NETBEANS, 2011).
No verão de 1999, a Sun Microsystems queria ter melhores ferramentas de
desenvolvimento Java e se interessou pelo NetBeans, o qual iria se tornar o conjunto de
ferramentas estrela do próprio criador do Java. No outono, com a próxima geração do
NetBeans Developer em beta, uma negociação foi obtida (NETBEANS, 2011).
Nos dias de hoje, o NetBeans fornece uma base sólida para a criação de projetos
e módulos, possui um grande conjunto de bibliotecas, módulos, protocolos e
ferramentas para a construção de aplicativos de software, além de uma documentação
vasta inclusive em português bem organizada, tais ferramentas auxiliam o
desenvolvedor de forma a escrever seu software de maneira mais rápida. A distribuição
da ferramenta é realizada sob as condições da SPL (Sun Public License), uma variação
da MPL (Mozilla Public License), esta licença tem como objetivo garantir a
redistribuição de conhecimento à comunidade de desenvolvedores quando novas
funcionalidades forem incorporadas à ferramenta (OFICINA DA NET, 2008).
31
Atualmente está distribuído em diversos idiomas e isto o torna cada vez mais
popular, facilitando o acesso a iniciantes em programação e possibilitando o
desenvolvimento de aplicativos multilíngue.
ii. Arquitetura
A arquitetura do NetBeans divide-se em duas seções principais: O core, também
chamado de application runtime, e as APIs abertas, que podem ser encontradas nos
pacotes Java org.netbeans.core.* e org.openide.*, respectivamente. O core implementa
muitas interfaces definidas nas APIs abertas e o runtime engine do NetBeans. As APIs
abertas são o conjunto de ferramentas disponíveis para se escrever plug-ins que
funcionarão dentro do NetBeans. Um plug-in é um arquivo de extensão JAR (Java
Archive) que contém classes Java e um arquivo denominado manifest que descreve para
o NetBeans runtime o que é o plug-in, como instalá-lo e desinstalá-lo (PRADO, 2006).
Tanto para IDEs como para qualquer outra aplicação, essa arquitetura traz
inúmeras vantagens. Como, por exemplo, a habilidade para suportar múltiplas línguas
ou a habilidade para envolver a funcionalidade de outras ferramentas de
desenvolvimento e apresentá-la dentro do IDE. Um simples exemplo deste tipo de
habilidade são os compiladores externos e máquinas virtuais Java. Eles podem ser
usados para compilação e execução definindo-se serviços que lançam um processo
externo e mostram a saída deste processo. Um exemplo mais complexo seria a
integração de uma ferramenta de XML (Extensible Markup Language) pré-existente, ela
poderia ser integrada diretamente através da interface gráfica do NetBeans (PRADO,
2006).
A figura 1 representa detalhadamente os componentes que fazem parte da
arquitetura do NetBeans.
32
Figura 1 - Arquitetura do NetBeans (HUANG, 2010).
• Startup - Fornece o método principal da aplicação, bem como todo o código
necessário para iniciá-lo (NETBEANS, 2011).
• Bootstrap – Permite que o Runtime Container entenda como carregar e compor
em uma única aplicação os módulos (NETBEANS, 2011).
• Filesystem API – Fornece à aplicação um sistema de arquivos virtual
(NETBEANS, 2011).
• Module System API – Fornece o acesso ao ciclo de vida dos módulos do
aplicativo (NETBEANS, 2011).
• Utilities API - Inclui diversas classes de utilitários compartilhados entre os
outros módulos no recipiente de tempo de execução (NETBEANS, 2011).
iii. Utilização
O NetBeans foi utilizado para o desenvolvimento do servidor na linguagem
Java. Um dos motivos para a escolha do NetBeans foi o conhecimento prévio da IDE,
já tendo experiência no ambiente de desenvolvimento e conhecendo bem os recursos
disponíveis.
33
Outro fator significante para escolha do NetBeans foi a integração da API Swing
que fornece componentes gráficos de alto nível, possibilitando uma melhor
compatibilidade entre vários sistemas que tem suporte ao Java. Com a utilização do
Swing é possível que aplicações tenham diferentes tipos de visuais (“Look and Feel”).
3.1.2 Eclipse
Eclipse é uma comunidade de código aberto cujos projetos são concentrados na
criação de uma plataforma de desenvolvimento aberta composta de estruturas,
ferramentas e tempos de execução extensíveis para desenvolvimento, implementação e
gerenciamento de software por todo o ciclo de vida. Eclipse ajuda a cultivar uma
comunidade de software livre e um ecossistema de produtos e serviços complementares
(ANISZCZYK e GALLARDO, 2012).
i. Histórico
O Projeto Eclipse foi originalmente criado pela IBM (International Business
Machines) em novembro de 2001 e suportado por um consórcio de fornecedores de
software. A Eclipse Foundation foi criada em janeiro de 2004 como uma organização
sem fins lucrativos independente para atuar como organizadora da comunidade Eclipse.
Foi criada para permitir o surgimento de uma comunidade ao redor do Eclipse
independente de fornecedor, transparente e aberta. Hoje é composta por pessoas e
organizações de uma seção transversal do segmento de mercado de software
(ANISZCZYK e GALLARDO, 2012).
A Eclipse Foundation gerencia e dirige o desenvolvimento contínuo do Eclipse e
fornece serviços para a comunidade, mas não emprega os desenvolvedores de software
livre que realmente trabalham nos projetos Eclipse. Os desenvolvedores do Eclipse são
normalmente empregados pelas organizações ou são desenvolvedores independentes
que trabalham como voluntários em um projeto de software livre (ANISZCZYK e
GALLARDO, 2012).
34
A IDE Eclipse possui facilidades que vão desde a rápida visualização de todos
os arquivos contidos no projeto, ferramentas de gerenciamento de trabalho coletivo, um
Package Explorer que permite visualizar toda a estrutura de diretórios e arquivos
contidos no projeto e Wizards que são programas que auxiliam na construção rápida de
aplicações com características iniciais já conhecidas (TEIXEIRA, 2008).
ii. Arquitetura
Além da pequena runtime, a plataforma do Eclipse consiste do workbench,
workspace, help, entre outros componentes, representados na figura 2.
Figura 2 - Arquitetura do Eclipse (ECLIPSE, 2007).
A runtime tem como função descobrir quais plug-ins estão disponíveis no
diretório de plug-ins do Eclipse. Cada plug-in tem um arquivo XML que lista as
conexões necessárias. Estas conexões incluem extensões que apontam para outros plug-
ins. Por ter um grande número de plug-ins, muitos não são carregados até que sejam
requeridos de fato, minimizando assim tempo de inicialização e recursos do sistema
(GONÇALVES, 2006).
O workspace é responsável por administrar os recursos do usuário que são
organizados em um ou mais projetos. Cada projeto corresponde a um subdiretório do
35
diretório de workspace do Eclipse. Cada projeto pode conter arquivos e diretórios.
Normalmente cada diretório corresponde a um subdiretório do diretório do projeto, mas
um diretório também pode ser unido a um diretório em qualquer lugar no sistema
(GONÇALVES, 2006).
O workbench é a interface gráfica do usuário do Eclipse. Além de exibir os
familiares menus e caixas de ferramentas, é organizado em perspectivas que contém
visões e editores (GONÇALVES, 2006).
Como a própria plataforma do Eclipse, o componente de ajuda é um sistema de
documentação extensível. Ferramentas podem adicionar documentação em formato
HTML (HyperText Markup Language) e, usando XML é definida uma estrutura de
navegação. Refletindo o modo como plug-ins se conectam com outros plug-ins,
ferramentas de documentação podem inserir tópicos em uma árvore de tópico
preexistente (GONÇALVES, 2006).
iii. Utilização
O Eclipse foi utilizado para o desenvolvimento do software do celular, na
plataforma Android e na linguagem de programação Java, por dois motivos, o primeiro
e mais significativo é que o plug-in oficinal da plataforma Android, o ADT (Android
Development Tools), só foi desenvolvido para o Eclipse. Existem outros, porém não são
tão completos e estáveis quanto o do Eclipse. O plug-in ADT, desenvolvido pela
Google, integra o Eclipse ao Android SDK permitindo a execução, depuração e testes
das aplicações diretamente no Eclipse. O ADT estende os recursos do Eclipse para
permitir a rápida configuração de projetos, criação de aplicações, adição de
componentes e depuração de aplicações (OLIVEIRA, 2010).
A segunda razão de ter escolhido o Eclipse é por ele apresentar uma parte visual
dos arquivos XML. O programador tem a opção de fazer a criação dos layouts da
aplicação tanto pelo código fontes do arquivo XML, digitando o código de cada um dos
componentes, tanto pela parte visual, bastando que o programador arraste os
36
componentes para a tela e posicione-os da maneira desejada, facilitando assim a criação
dos layouts.
3.2 Java
Java é uma linguagem de programação e uma plataforma de computação
lançada pela Sun Microsystems em 1995. É a tecnologia que capacita muitos programas
da mais alta qualidade, como utilitários, jogos e aplicativos corporativos, entre muitos
outros, por exemplo. O Java é executado em mais de 850 milhões de computadores
pessoais e em bilhões de dispositivos em todo o mundo, inclusive telefones celulares e
dispositivos de televisão (ORACLE, 2011).
3.2.1 Plataformas
A tecnologia Java está organizada em três plataformas com objetivos
específicos:
• Java 2 Standard Edition (J2SE ou Java SE): ferramentas e APIs essenciais
para qualquer aplicação Java, inclusive para as outras plataformas. É utilizado para
desenvolver aplicações desktop, com ou sem interface gráfica (BRAZ, 2004).
• Java 2 Enterprise Edition (J2EE ou Java EE): ferramentas e APIs para o
desenvolvimento de aplicações distribuídas. Engloba tecnologias como RMI (Remote
Method Invocation), EJB (Enterprise JavaBeans), JMS (Java Messege Service) (BRAZ,
2004).
• Java 2 Micro Edition (J2ME ou Java ME): ferramentas e APIs para o
desenvolvimento de aplicações para aparelhos portáteis (BRAZ, 2004).
Para o desenvolvimento do servidor foi utilizado a plataforma Java SE.
37
3.2.2 Características
A linguagem Java exibe importantes características que, em conjunto,
diferenciam-na de outras linguagens de programação. Dentre essas características as
mais relevantes são: orientada a objetos, independente de plataforma, desempenho,
segurança e multithreaded (PAULA FILHO, 2008).
• Orientada a Objetos: Java é uma linguagem puramente orientada a objetos,
pois, com exceção de seus tipos primitivos de dados, tudo em Java são classes ou
instâncias de classes. Java atende a todos os requisitos necessários para que uma
linguagem seja considerada orientada a objetos (PAULA FILHO, 2008).
• Independente de Plataforma: Java é uma linguagem independente de
plataforma, ou seja, os programas em Java não são compilados para uma plataforma de
hardware específica, mas sim para uma forma intermediária de código destinada à JVM
(Java Virtual Machine). O formato intermediário é chamado de bytecodes, uma espécie
de linguagem de máquina da JVM que utiliza instruções e tipos primitivos de tamanho
fixo, ordenação big-endian e uma biblioteca de classes padronizada. A máquina virtual
Java é na verdade um interpretador de bytecodes para a plataforma na qual é executada.
Em razão da possibilidade de se implementar uma JVM para qualquer plataforma, é
viável que um mesmo programa Java seja executado em qualquer destas arquiteturas
(PAULA FILHO, 2008).
• Desempenho: Java foi projetada para ser compacta, independente de
plataforma e para utilização em rede, o que levou à decisão de ser interpretada com o
emprego do esquema de bytecodes. Nas primeiras versões, o Java oferecia desempenho
apenas razoável devido ao mecanismo de interpretação. Esta limitação foi superada pela
incorporação de um compilador JIT (Just In Time) na JVM capaz de converter os
bytecodes em código nativo durante a carga do programa, possibilitando uma melhora
significativa no desempenho dos programas Java, equiparando-os ao desempenho
obtido com programas nativos (PAULA FILHO, 2008).
38
• Segurança: Considerando a possibilidade de que aplicações sejam obtidas por
meio de uma rede, a linguagem Java possui mecanismos de segurança que podem, no
caso de applets, evitar, por exemplo, qualquer operação no sistema de arquivos da
máquina-alvo, minimizando problemas de segurança. Tal mecanismo é flexível o
suficiente para determinar se uma applet é considerada segura, especificando nesta
situação diferentes níveis de acesso ao sistema-alvo (PAULA FILHO, 2008).
• Multithreaded: Java oferece recursos para o desenvolvimento de aplicações
capazes de executar múltiplas rotinas concorrentemente, possibilitando inclusive sua
sincronização. Cada uma destas rotinas é como um fluxo de execução independente,
usualmente denominada thread. As threads são um importante recurso de programação
para construção de aplicações mais sofisticadas (PAULA FILHO, 2008).
3.2.3 JVM
A Java Virtual Machine é um programa que carrega e executa os aplicativos
Java, convertendo os bytecodes em código executável de máquina. Ela é responsável
pelo gerenciamento dos aplicativos, à medida que são executados (BAPTISTA,
PALANGANI e DELDOTO, 2009).
Graças à máquina virtual Java, os programas podem funcionar em qualquer
plataforma de hardware e software que possua uma versão da JVM, tornando assim
essas aplicações independentes da plataforma onde funcionam (BAPTISTA,
PALANGANI e DELDOTO, 2009).
A arquitetura da JVM permite um controle muito fino sobre as liberadas para o
código que está rodando na máquina virtual. Isso permite a execução de código
confiável de fontes remotas, um modelo usado pelos applets. Os applets rodam dentro
de uma máquina virtual incorporada ao browser do usuário, executando o código
baixado de um servidor HTTP (HyperText Transfer Protocol) remoto. O código remoto
roda em uma sandbox, que protege o usuário de códigos maliciosos. O autor do applet
pode aplicar um certificado para assinar digitalmente o applet como seguro, dando a ele
39
permissão de sair da sandbox e acessar livremente a máquina onde está rodando
(BAPTISTA, PALANGANI e DELDOTO, 2009).
A figura 3 mostra de forma esquemática o processo de compilação e
interpretação utilizado pelo Java, para conversão dos programas (código-fonte) em
linguagem de máquina.
Figura 3 - Processo de compilação e interpretação utilizado pelo Java (FREITAS, 2010).
3.2.4 Garbage Collection
No C, C++ e em outras linguagens, o programa desenvolvido é responsável pela
alocação e deslocação da memória, o que é um dos principais pontos causadores de
erros. Em Java, quando um objeto é criado, a memória necessária é alocada
automaticamente para ele, pois não há forma de se manipular a memória diretamente.
Podem existir inúmeras variáveis no programa referenciando um mesmo objeto e,
durante o ciclo de execução do programa, o Java verifica se um objeto ainda está sendo
referenciado por alguma variável e, caso não esteja, ele libera automaticamente esta área
que não está sendo utilizada. Ou seja, quando não resta mais nenhuma referência para
um objeto, ele é marcado para ser coletado pelo garbage colletor ou “coletor de lixo”,
que libera a memória ocupada por ele (BRAZ, 2004).
40
O coletor de lixo é executado de tempos em tempos num processo de baixa
prioridade. Quando a JVM não está realizando nenhum processamento, ela executa o
coletor de lixo que vasculha a memória em busca de algum objeto criado e não
referenciado. Quando uma grande quantidade de objetos ou objetos muito grandes não
são mais necessários e não se quer esperar até que o coletor de lixo seja executado para
liberar essa memória, pode-se chamá-lo explicitamente no programa (BRAZ, 2004).
3.2.5 Sockets
Os computadores da Internet são conectados entre si pelo protocolo TCP/IP
(Transmission Control Protocol/ Internet Protocol). Na década de 1980, a ARPA
(Advanced Research Projects Agency) do governo norte-americano forneceu recursos
financeiros à universidade da Califórnia em Berkeley com a finalidade de oferecer uma
implementação UNIX do pacote de protocolos TCP/IP. O que foi desenvolvido então
ficou conhecido como interface de sockets. Hoje, a interface de sockets é o método mais
utilizado para acesso a uma rede TCP/IP (HOPSON e INGRAM, 1997).
Um socket essencialmente é uma conexão de dados transparente entre dois
computadores em uma rede. Ele é identificado pelo endereço de rede dos computadores
e por seus pontos finais e uma porta em cada computador. Os computadores em rede
direcionam os streams de dados recebidos da rede para programas receptores
específicos, associando cada programa a um número diferente, a porta do programa. Da
mesma forma, quando o tráfego de saída é gerado, o programa de origem recebe um
número de porta para a transação. Caso contrário, o computador remoto poderia não
responder à entrada (HOPSON e INGRAM, 1997).
Socket é uma abstração para representar um ponto de conexão em uma rede
TCP/IP. Quando dois computadores querem manter uma conversação, cada um deles
utiliza um socket. Um computador é chamado servidor, ele abre um socket e presta
atenção às conexões. O outro computador denomina-se cliente, ele chama o socket
servidor para iniciar a conexão. Para estabelecer uma conexão, é necessário apenas um
endereço de destino e um número de porta (HOPSON e INGRAM, 1997).
41
Os sockets têm dois modos principais de operação: o modo baseado em
conexões e o modo sem conexão. Os baseados em conexões operam como um telefone,
tendo de estabelecer uma conexão e suspender a ligação. Tudo que flui entre esses dois
eventos chegam na mesma ordem em que foram transmitidos. Os sockets sem conexão
operam como o correio, a entrega não é garantida, e os diferentes itens da
correspondência podem chegar em uma ordem diferente daquela em que foram
enviados (HOPSON e INGRAM, 1997).
O modo a ser utilizado é determinado pelas necessidades de um aplicativo. Se a
conformidade é importante, então a operação baseada em conexões é a melhor opção.
Os servidores de arquivos precisam fazer todos os seus dados chegarem corretamente e
em sequência. Se alguma parte dos dados se perdesse, a utilidade do servidor seria
invalidada. Quando precisar de confiabilidade, a aplicação terá que pagar um preço.
Garantir a sequência e a correção dos dados exigem processamento extra e utilização de
mais memória. Esse overhead adicional pode reduzir o tempo de resposta de um
servidor (HOPSON e INGRAM, 1997).
A operação sem conexão utiliza o UDP (User Datagrama Protocol). Um
datagrama é uma unidade autônoma que tem todas as informações necessárias para
tentar fazer sua entrega. Similar a um envelope, o datagrama tem um endereço do
destinatário e do remetente e contém em seu interior os dados a serem enviados. Um
socket nesse modo de operação não precisa se conectar a um socket de destino, ele
simplesmente envia o datagrama. A operação sem conexão é rápida e eficiente, mas não
é garantida (HOPSON e INGRAM, 1997).
A operação baseada em conexões emprega o TCP. Um socket nesse modo de
operação precisa se conectar ao destino antes de transmitir os dados. Uma vez
conectados, os sockets são acessados pelo uso de uma interface de fluxos: abertura-
leitura-escrita-fechamento. Tudo que é enviado por um socket é recebido pela outra
extremidade da conexão, exatamente na mesma ordem em que foi transmitido. A
operação baseada em conexões é menos eficiente do que a operação sem conexão, mas
é garantida (HOPSON e INGRAM, 1997).
42
Para atender os requisitos do projeto e realizar a comunicação entre os softwares
foram usados os sockets baseados em conexão.
3.2.6 Threads
Thread, ou processo leve, é a unidade básica de utilização da CPU (Central
Processing Unit), consistindo de um contador de programa, um conjunto de
registradores e uma pilha de execução. São estruturas de execução pertencentes a um
processo e assim compartilham os segmentos de código e dados e os recursos alocados
ao sistema operacional pelo processo (SAUVÉ e SANTOS JÚNIOR, 2000).
O conceito de thread foi criado com dois objetivos. O primeiro foi a facilidade
de comunicação entre unidades de execução e redução do esforço para manutenção
dessas unidades. Isso foi conseguido através da criação dessas unidades dentro de
processos, fazendo com que todo o esforço para criação de um processo, manutenção do
espaço de endereçamento lógico, fosse aproveitado por várias unidades processáveis,
conseguindo também facilidade na comunicação entre essas unidades (SAUVÉ e
SANTOS JÚNIOR, 2000).
Uma thread é similar aos programas sequenciais, pois possuem início, sequência
de execução e um fim. Contudo, uma thread não é um programa, ela não pode ser
executada sozinha. Ela deve ser inserida no contexto de uma aplicação, onde essa
aplicação possuirá vários pontos de execuções distintos, cada ponto representado por
uma thread (SAUVÉ e SANTOS JÚNIOR, 2000).
Do momento em que é criada até ser finalizada, a thread passa por diversos
estados e transições. Este conjunto de estados e transições caracteriza o seu ciclo de
vida, o qual pode ser visualizado na figura 4.
43
Figura 4 - Ciclo de vida de uma thread (RAMOS e TEODOROWITSCH, 2009).
As threads são criadas a partir de sua instanciação. Ao chamar o método start(),
ela será colocada na lista de threads prontas a serem executadas pelo sistema
operacional. Quando o sistema operacional seleciona uma thread para ser executada, ela
permanece no estado execução, produzindo as ações do método run() (RAMOS e
TEODOROWITSCH, 2009).
Ela permanece em execução até que seu tempo de uso da CPU se esgote ou com
a chamada do método sleep(), permaneça no estado suspenso durante o tempo
estabelecido e volte ao estado pronto. Em seguida, quando executa o método wait(), ela
permanece no estado suspenso até que outra thread execute o método notify() ou
notifyAll(), voltando ao estado pronto (RAMOS e TEODOROWITSCH, 2009).
Quando necessita de uma operação de entrada e saída, a thread fica no estado
bloqueado até que a operação seja concluída, voltando ao estado pronto. Se a thread
finalizar a execução do seu método run() ou quando for executado o método interrupt(),
ela vai para o estado finalizado (RAMOS e TEODOROWITSCH, 2009).
44
As threads foram usadas para manter a porta de comunicação do servidor aberta
enquanto espera por conexões dos clientes via sockets. Elas foram escolhidas por
permitirem múltiplas conexões simultâneas, o que não é suportado pelos métodos.
3.3 Google Android
O Google Android é uma plataforma de código aberto, para dispositivos móveis,
sendo composta por um sistema operacional, middleware, aplicativos e interface de
usuário. Neste sentido os recursos mais importantes desta plataforma móvel são a
máquina virtual, o navegador, a biblioteca 2D e 3D e o banco de dados SQLite (FARIA,
2008).
Com algumas exceções, a maior parte do Google Android é distribuído sob a
licença Apache 2.0, como descreve Lecheta, (2009):
“A licença do Android é flexível e permite que cada fabricante
possa realizar alterações no código-fonte para customizar seus
produtos, e o melhor de tudo, sem necessidade de compartilhar
essas alterações com ninguém. O Android também é “free”, e os
fabricantes podem usar e abusar dele sem precisar pagar por
isso” (LECHETA, 2009, p.22).
3.3.1 Arquitetura
A arquitetura da plataforma Android é composta por cinco camadas: Linux,
Kernel, Libraries, Android Runtime, Application Framework e Applications. Essa
divisão pode ser observada na Figura 5.
45
Figura 5 - Arquitetura da plataforma Android (PRADO, 2011).
A camada Linux kernel atua como uma camada de abstração entre o hardware e
o software do dispositivo. O Android conta com a versão 2.6 do kernel do Linux
responsável pelos seguintes serviços: segurança, gerenciamento de memória, gestão de
processos, rede e drivers (HASLINGER, 2009).
A camada Libraries é composta por um conjunto de bibliotecas C/C++ utilizadas
por vários componentes do sistema. Sendo que estas funcionalidades são oferecidas aos
desenvolvedores na camada Application Framework (HASLINGER, 2009).
A terceira camada, Android Runtime, é o ambiente de execução da plataforma
Android composto por uma máquina virtual e um conjunto de funcionalidades
fornecidas pelas bibliotecas da linguagem de programação Java. Cada aplicação
Android é uma instância da máquina virtual Dalvik, ou seja, cada aplicação é executada
como um processo distinto dos demais. A Dalvik é uma máquina virtual desenvolvida
especialmente para obter maior desempenho em hardwares com pouco poder de
processamento (HASLINGER, 2009).
Sobre as camadas descritas anteriormente, está localizada a camada Application
Framework. Nessa camada são encontrados todos os recursos e APIs utilizadas pelos
46
aplicativos, como: botões, caixas de texto e outros componentes para composição do
layout das aplicações (HASLINGER, 2009).
A última camada da arquitetura é denominada Applications, na qual se
encontram todos os aplicativos do Android, como navegador web, agenda, jogos entre
outros (HASLINGER, 2009).
3.3.2 Classes Activity e View
As classes Activity e View são responsáveis pela representação gráfica de uma
aplicação Android. A classe android.app.Activity representa uma tela da aplicação,
sendo esta tela composta por elementos visuais, os quais são representados pela classe
android.view.View, como afirma Lecheta, (2009):
“Essas duas classes que sempre andam juntas. A activity define
que existe uma tela, controla seu estado e a passagem de
parâmetros de uma tela para outra, define os métodos que serão
chamados quando o usuário pressionar algum botão. Mas a
activity precisa exibir elementos visuais na tela, e este é o papel
da classe View, que tem a finalidade de desenhar algo na tela
(LECHETA, 2009, p.55).”
No Android, o layout da tela pode ser criado utilizando as classes da API Java
ou podem ser definidos os elementos da tela dentro de um arquivo XML, sendo que este
segundo método deixa o código mais limpo e facilita sua leitura, permitindo a separação
entre a parte visual da aplicação e a lógica da programação, facilitando futuras
manutenções do código.
Para se exibir uma view definida em um arquivo XML, é necessário a utilização
do método setContentView que faz a ligação entre a activity e a view recebida como
parâmetro.
47
3.3.3 Classe R e Arquivo AndroidManifest
A classe R é utilizada para acesso dos recursos do projeto como, por exemplo,
um arquivo XML referente ao layout de uma tela. O arquivo AndroidManifest.xml é o
local onde estão todas as configurações para a execução de uma aplicação. Esta classe é
gerada automaticamente e contém constantes para acessar vários recursos do projeto.
Sempre que um arquivo for adicionado a uma pasta do projeto uma nova constante será
criada na classe R (LECHETA, 2009).
Ao criar um arquivo chamado main.xml na pasta layout do projeto, a classe R irá
criar, automaticamente, uma constante chamada R.layout.main, sendo que, para utilizar
esse recurso chamado main.xml em um projeto, deve-se sempre referenciar a constante
especificada na classe R.
Então, pode-se criar uma activity e utilizar esse layout, bastando que o método
setContentView(R.layout.main) seja chamado, passando como parâmetro a constante
referente ao arquivo XML desejado. Mas para que essa activity criada seja executada
corretamente é necessário configurá-la no arquivo AndroidManifest.xml localizado na
pasta raiz do projeto.
3.3.4 XML
XML é uma linguagem de marcação de dados que provê um formato para
descrever dados estruturados. Isso facilita declarações mais precisas do conteúdo e
resultados mais significativos de busca através de múltiplas plataformas
(ALVARENGA, 2005). Representa uma maneira distinta de fazer as coisas, mais
avançada, cuja principal novidade consiste em permitir compartilhar os dados com os
quais se trabalha a todos os níveis, por todas as aplicações e suportes. Sendo assim, o
XML tem um papel importantíssimo no mundo atual, que tende à globalização e à
compatibilidade entre os sistemas, já que é a tecnologia que permitirá compartilhar a
informação de una maneira segura, confiável e fácil (ALVAREZ, 2004).
48
A plataforma Android dá flexibilidade para usar um ou ambos os métodos para
declarar e gerenciar a interface do usuário do aplicativo. É possível declarar layouts
padrão do aplicativo em XML, incluindo os elementos da tela que aparecerão nela e
suas propriedades (AMORIM, 2011).
A vantagem de declarar a interface em XML é que ela permite melhor separar a
apresentação da aplicação do código que controla o seu comportamento. As descrições
de interface do usuário são externas a aplicação, o que significa que é possível
modificá-la ou adaptá-la sem ter que modificar o código. Além disso, declarar o layout
em XML torna mais fácil visualizar a estrutura da interface do usuário, por isso é mais
fácil depurar problemas (AMORIM, 2011).
3.3.5 Barcode Scanner
Barcode Scanner é um aplicativo, desenvolvido na plataforma Android, que
aliado à câmera digital do aparelho, lê as informações do QR Code (Quick Response
Code) e de códigos de barras normais. Faz a leitura utilizando a câmera traseira do
aparelho celular e possui um recurso de pesquisa do produto, pelo seu código de barras,
em sites, a fim de comparar os preços da mercadoria e encontrar em qual loja o preço
está mais acessível.
O aplicativo foi desenvolvido pela companhia ZXing Team, sua licença é
gratuita e está disponível para download no site da Google Play (site oficial da Google
para download de aplicativos desenvolvidos na plataforma Android):
https://play.google.com/store/apps/details?id=com.google.zxing.client.android&feature.
O Barcode Scanner foi utilizado para ler o código de barra dos produtos e
devolver para o software do cliente o código de barras lido. Esta funcionalidade foi
adicionada para facilitar a consulta ao preço do produto depois de localizado pelo
cliente. A figura 6 ilustra a utilização do Barcode Scanner para a leitura de um código
de barras.
49
Figura 6 – Aplicativo Barcode Scanner (BESTANDROID, 2009).
3.4 Google Maps
Google Maps é o serviço que a Google oferece de pesquisa e visualização de
mapas e imagens de satélite gratuito na web. A ferramenta é uma das mais usadas
devido as suas funcionalidades como: carregamento rápido, zoom e navegação
simplificada (MELO, 2009). A figura 7 mostra o mapa do Brasil visto no Google Maps.
Figura 7 - Mapa do Brasil no Google Maps (GOOGLE, 2012).
O Google Maps possui recursos interessantes, tanto para programadores como
para usuários comuns, como: marcadores para demarcação de locais no mapa, balões de
informação, usado para exibir dados sobre o local apontado e a possibilidade de
incorporá-lo em uma aplicação mobile. Também é possível utilizar o recurso de GPS
50
(Global Positioning System) do celular para mostrar no mapa a posição real do
dispositivo e caso ocorra mudança de posição do aparelho, as posições são atualizadas
no mapa.
Ele disponibiliza três formas de visualização: mapa, satélite e terreno. No modo
mapa é exibido um mapa político do local, sendo que as ruas mais importantes são
mostradas na cor amarela e as demais na cor branca. No modo satélite são mostradas
fotos tiradas por satélites, ou seja, uma vista panorâmica do local. Já o modo terreno é
uma junção entre os dois modos anteriores, permitindo uma melhor visualização de
bairros, terrenos e cidades. A figura 8 mostra a cidade de Ituiutaba vista no modo mapa,
a figura 9 no modo satélite e a figura 10 no modo terreno.
Figura 8 - Cidade de Ituiutaba vista no modo mapa (GOOGLE, 2012).
Figura 9 - Cidade de Ituiutaba vista no modo satélite (GOOGLE, 2012).
51
Figura 10 - Cidade de Ituiutaba vista no modo terreno (GOOGLE, 2012).
Para o desenvolvimento do projeto serão utilizadas as visualizações no modo
mapa e no modo satélite, os recursos de marcação de pontos no mapa e a localização do
dispositivo móvel através do GPS interno do celular.
3.5 Banco de Dados
O armazenamento de dados é um dos pontos principais que deve ser considerado
no desenvolvimento de uma aplicação. Sem ele, os dados ficam disponíveis apenas em
tempo de execução, ou seja, após a execução do programa, esses dados são perdidos.
Com isso, faz-se necessário algum mecanismo para persistência dos dados.
Para que os dados sejam mantidos ao fechar uma aplicação é necessário o uso de
um banco de dados, que é um conjunto de registros dispostos em estrutura regular que
possibilita a reorganização dos mesmos e produção de informação. Um banco de dados
é usualmente mantido e acessado por meio de um software conhecido como SGBD
(Sistema Gerenciador de Banco de Dados) que normalmente adota um modelo de
dados, de forma pura, reduzida ou estendida. O modelo de dados mais adotado hoje em
dia é o modelo relacional, onde as estruturas têm a forma de tabelas, compostas por
tuplas e colunas (ORACLE, 2006).
52
A linguagem de pesquisa utilizada em banco de dados relacional é o SQL
(Structured Query Language) que foi desenvolvida para ser uma linguagem padrão para
operações com banco de dados. A linguagem SQL foi elaborada para ser independente
de hardware ou de software, ou seja, não há necessidade de saber a respeito do software
de banco de dados ou do hardware envolvido em uma operação. Basta conhecer os
comandos SQL padrão para solicitar informações, que obrigatoriamente é o mesmo em
todos os sistemas que o utilizam (OLIVEIRA e PHILERENO, 2005).
3.5.1 SQLite
No contexto de aplicações para dispositivos móveis, a escassez de recursos
computacionais, tais como memória, capacidade de armazenamento, combinado com a
falta de suporte, faz com que os desenvolvedores para estes tipos de dispositivos não
desfrutem dos benefícios de um SGBD. Muitas tecnologias para desenvolvimento
móvel, assim como no início do desenvolvimento de aplicações desktop, se baseiam em
arquivos para armazenar dados (DEVMEDIA, 2011).
A plataforma Java ME possui o RMS (Record Management System) que
consiste em uma API que dispõe de métodos para manipular registros. Entretanto, a
manipulação de dados nessa API não poupa o desenvolvedor de lidar com rotinas de
baixo nível para serialização dos dados, já que a API só trabalha com bytes
(DEVMEDIA, 2011).
Em contrapartida, a plataforma Android, dentre uma série de inovações e
facilidades, trouxe suporte nativo ao SQLite que é uma pequena biblioteca,
desenvolvida em linguagem C, onde implementa-se um amplo subconjunto do standard
SQL 92, sendo a sua reputação proveniente da combinação do motor de base de dados
com a interface dentro de uma única biblioteca (BALTAZAR, 2012).
O desenvolvedor pode criar o banco de dados e as tabelas, assim como
manipular seus dados através dos comandos DDL (Data Definition Language) e DML
(Data Manipulation Language) do SQL padrão. Isso traz um ganho considerável de
53
produtividade, pois o desenvolvedor agora pode apenas focar nas regras de negócio,
tendo em vista que os serviços para persistência de dados são fornecidos pelo SQLite
(DEVMEDIA, 2011).
O SQLite foi utilizado para o armazenamento do histórico de consultas feitos no
software do cliente.
3.6 Conclusão
Neste capítulo foram descritas as tecnologias que serão utilizadas no estudo de
caso desenvolvido no próximo capítulo.
Para o desenvolvimento dos softwares dos dispositivos móveis foi utilizado o
Eclipse por possuir o plug-in oficial do Android, desenvolvido pela Google e por ter
uma parte visual para a criação dos layouts. Já para o software do servidor foi utilizado
o NetBeans por ter a API Swing, facilitando a criação das interfaces do software e pelo
conhecimento prévio desta IDE pelo autor do projeto.
Ambos os softwares foram desenvolvidos na linguagem Java, sendo que o
servidor foi feito na plataforma Java SE e o software do cliente na plataforma Android.
Para a comunicação entre os softwares foram utilizados os sockets baseados em conexão
e as threads para mantê-los abertos. Para o armazenamento do dados no software do
cliente foi utilizado o SQLite que é o banco de dados padrão do Android.
Em momento algum é pretendido por este projeto realizar operações de
transações de estoque em softwares de gerenciadores dos mesmos. As tabelas utilizadas
até podem ser oriundas destes softwares, desde que acrescidas das informações de
localização dos produtos. Esta localização pode ser inserida pelo software servidor
desenvolvido neste trabalho.
54
O aplicativo Barcode Scanner foi adicionado para facilitar a consulta ao preço
do produto depois de localizado pelo cliente. Ele foi utilizado para ler o código de barra
dos produtos e devolver para o software do cliente o código de barras lido.
Uma das funcionalidades de localização diz respeito a como o cliente chega até
o comércio. Para tanto, a posição do mesmo é marcada no mapa, e a posição do cliente
atualizada em tempo real. Foi utilizado o Google Maps para prover esta funcionalidade.
55
4 Estudo de Casos
O objetivo do sistema desenvolvido como estudo de caso nesta monografia é
facilitar ao máximo o processo de compra realizado pelo cliente, desde antes de chegar
ao comércio até o momento de encontrar a posição dos produtos nas prateleiras. Neste
capítulo serão demonstrados os diagramas de funcionamento do projeto (diagrama de
caso de uso, diagrama de sequência e diagrama de classe), seguido do desenvolvimento
do mesmo e os testes dos softwares.
4.1 Diagrama de caso de uso
O diagrama de caso de uso do servidor possui dois atores, o administrador do
sistema, que possui todos os privilégios do software, e o usuário do sistema, que possui
algumas restrições no uso do software.
O usuário do sistema tem as funcionalidades de cadastrar, editar, visualizar e
excluir os produtos, podendo também visualizar os produtos mais buscados pelos
clientes e abrir os sockets de conexão para que os clientes possam realizar a busca pelos
produtos.
Já o administrador do sistema, além das funcionalidades do usuário, tem as
funções de visualizar, cadastrar, alterar e excluir os usuários do sistema. Outra função
específica do administrador é a opção de verificar o relatório dos usuários, tendo acesso
ao relatório de utilização do sistema.
A figura 11 representa o diagrama de caso de uso do servidor.
56
Figura 11 - Diagrama de caso de uso do servidor.
Após a ilustração do caso de uso do servidor, segue a documentação,
representada nas tabelas de 1 a 12.
57
Caso de uso Efetuar log-in.
Ator principal Usuário.
Pré-condição Usuário estar cadastrado.
Fluxo normal 1. Informar usuário.
2. Informar senha. 3. Fazer log-in.
Fluxos excepcionais 1. Usuário ou senha inválido.
1. a. Informar usuário e senha novamente.
1. b. Fazer log-in.
Fluxos alternativos
Pós-condição Acesso permitido ao sistema.
Tabela 1 - Caso de uso do cliente: efetuar log-in.
Caso de uso Cadastrar produto.
Ator principal Usuário.
Pré-condição Ter feito log-in.
Fluxo normal 1. Preencher dados do produto.
2. Cadastrar produto.
Fluxos excepcionais 2. Produto já cadastrado.
2. a. Informar novo produto
2. b. Cadastrar produto.
Fluxos alternativos
Pós-condição Produto cadastrado com sucesso.
Tabela 2 - Caso de uso do cliente: cadastrar produto.
58
Caso de uso Editar produto.
Ator principal Usuário.
Pré-condição Ter feito log-in.
Fluxo normal 1. Escolher produto a ser editado.
2. Modificar os dados do produto.
3. Alterar produto.
Fluxos excepcionais 3. Produto já cadastrado.
3. a. Informar novo produto
3. b. Alterar produto.
Fluxos alternativos
Pós-condição Produto alterado com sucesso.
Tabela 3 - Caso de uso do cliente: editar produto.
Caso de uso Visualizar produto.
Ator principal Usuário.
Pré-condição Ter feito log-in.
Fluxo normal 1. Inserir nome do produto a ser buscado.
2. Visualizar informações do produto.
Fluxos excepcionais 1. Produto não encontrado.
1. a. Inserir novamente o nome do produto.
Fluxos alternativos
Pós-condição Visualização das informações do produto.
Tabela 4 - Caso de uso do cliente: visualizar produto.
59
Caso de uso Excluir produto.
Ator principal Usuário.
Pré-condição Ter feito log-in.
Fluxo normal 1. Selecionar produto a ser excluído.
2. Excluir produto.
Fluxos excepcionais
Fluxos alternativos
Pós-condição Produto excluído com sucesso.
Tabela 5 - Caso de uso do cliente: excluir produto.
Caso de uso Visualizar produtos mais buscados.
Ator principal Usuário.
Pré-condição Ter feito log-in.
Fluxo normal 1. Visualizar a tabela com os produtos mais buscados.
Fluxos excepcionais
Fluxos alternativos
Pós-condição Visualização dos produtos mais buscados.
Tabela 6 - Caso de uso do cliente: Visualizar produtos mais buscados.
60
Caso de uso Abrir/Fechar conexão.
Ator principal Usuário.
Pré-condição Ter feito log-in.
Fluxo normal 1. Abrir porta de conexão para os clientes.
1.a. Permitir conexão dos clientes.
2. Fechar porta de conexão para os clientes.
2. a. Bloquear conexão dos clientes.
Fluxos excepcionais
Fluxos alternativos
Pós-condição Porta de conexão aberta ou fechada.
Tabela 7 - Caso de uso do cliente: Abrir/Fechar conexão.
Caso de uso Cadastrar usuário.
Ator principal Administrador.
Pré-condição Ter feito log-in.
Fluxo normal 1. Preencher dados do usuário.
2. Cadastrar usuário.
Fluxos excepcionais 2. Usuário já cadastrado.
2. a. Informar novo usuário
2. b. Cadastrar usuário.
Fluxos alternativos
Pós-condição Usuário cadastrado com sucesso.
Tabela 8 - Caso de uso do administrador: cadastrar usuário.
61
Caso de uso Editar usuário.
Ator principal Administrador.
Pré-condição Ter feito log-in.
Fluxo normal 1. Escolher usuário a ser editado.
2. Modificar os dados do usuário.
3. Alterar usuário.
Fluxos excepcionais 3. Usuário já cadastrado.
3. a. Informar novo usuário
3. b. Alterar usuário.
Fluxos alternativos
Pós-condição Usuário alterado com sucesso.
Tabela 9 - Caso de uso do administrador: editar usuário.
Caso de uso Visualizar usuário.
Ator principal Administrador.
Pré-condição Ter feito log-in.
Fluxo normal 1. Inserir nome do usuário a ser buscado.
2. Visualizar informações do usuário.
Fluxos excepcionais 1. Usuário não encontrado.
1. a. Inserir novamente o nome do usuário.
Fluxos alternativos
Pós-condição Visualização das informações do usuário.
Tabela 10 - Caso de uso do administrador: visualizar usuário.
62
Caso de uso Excluir usuário.
Ator principal Administrador.
Pré-condição Ter feito log-in.
Fluxo normal 1. Selecionar usuário a ser excluído.
2. Excluir usuário.
Fluxos excepcionais
Fluxos alternativos
Pós-condição Usuário excluído com sucesso.
Tabela 11 - Caso de uso do administrador: excluir usuário.
Caso de uso Gerar relatório de usuários.
Ator principal Administrador.
Pré-condição Ter feito log-in.
Fluxo normal 1. Visualizar o relatório de usuários.
1. a. Buscar por usuário específico.
1. b. Buscar relatório por data.
Fluxos excepcionais 1. Usuário não encontrado.
1. a. Inserir novo usuário.
2. Data não encontrada.
2. b. Inserir nova data.
Fluxos alternativos
Pós-condição Visualização do relatório.
Tabela 12 - Caso de uso do administrador: verificar relatório de usuários.
63
O diagrama de caso de uso do cliente tem como único ator o cliente. O cliente
tem as opções de buscar o produto pelo nome, pelo código de barras e também
visualizar os produtos que mais são buscados pelos clientes. Todas essas informações
são armazenadas no banco de dados do servidor (não é intenção do autor do projeto
gerenciar o banco de dados) e a troca de dados entre o software do cliente e o servidor é
feita pelo uso dos sockets.
O cliente também tem as opções de ligar para o estabelecimento e visualizar os
mapas, onde verá sua localização e a do estabelecimento. Para que o cliente veja sua
posição em tempo real no mapa, o celular manda as informações de sua localização para
um servidor de GPS (o funcionamento do servidor do GPS não é de responsabilidade do
autor do projeto), assim como a latitude e a longitude para criar um marcador em cima
da posição do estabelecimento no mapa.
A figura 12 representa o diagrama de caso de uso do cliente, seguido pela sua
documentação, representada nas tabelas de 13 a 19.
65
Caso de uso Buscar produto pelo nome.
Ator principal Cliente.
Pré-condição Estar conectado a rede sem fio do estabelecimento.
Fluxo normal 1. Inserir nome do produto a ser buscado.
2. Enviar o nome inserido para o servidor.
3. Receber os produtos encontrados.
4. Escolher o produto dentre os encontrados.
5. Visualizar as informações do produto.
Fluxos excepcionais 3. Produto não encontrado.
3. a. Inserir nome do produto novamente.
Fluxos alternativos
Pós-condição Visualização das informações do produto.
Tabela 13 - Caso de uso do cliente: buscar produto pelo nome.
Caso de uso Buscar produto pelo código de barras.
Ator principal Cliente.
Pré-condição Estar conectado a rede sem fio do estabelecimento.
Ter o aplicativo Barcode Scanner instalado no celular.
Fluxo normal 1. Iniciar o Barcode Scanner.
2. Ler o código de barras do produto.
3. Enviar o código de barras para o servidor.
4. Visualizar informações do produto.
Fluxos excepcionais 4. Código de barras não encontrado
4. a. Fazer a leitura de outro código de barras
Fluxos alternativos
Pós-condição Visualização das informações do produto.
Tabela 14 - Caso de uso do cliente: buscar produto pelo código de barras.
66
Caso de uso Visualizar produtos mais buscados.
Ator principal Cliente.
Pré-condição Estar conectado a rede sem fio do estabelecimento.
Fluxo normal 1. Receber lista dos 5 produtos mais buscados.
2. Escolher o produto que deseja visualizar.
3. Visualizar informações do produto.
Fluxos excepcionais
Fluxos alternativos
Pós-condição Visualização das informações do produto.
Tabela 15 - Caso de uso do cliente: visualizar produtos mais buscados.
Caso de uso Ligar para estabelecimento.
Ator principal Cliente.
Pré-condição Ter crédito para realizar ligações no celular.
Fluxo normal 1. Realizar a chamada.
2. Encerrar a chamada.
Fluxos excepcionais 1. Telefone ocupado.
1. a. Realizar a chamada novamente.
Fluxos alternativos
Pós-condição Conversar com o atendente do estabelecimento.
Tabela 16 - Caso de uso do cliente: ligar para o estabelecimento.
67
Caso de uso Visualizar mapa.
Ator principal Cliente.
Pré-condição Estar conectado a Internet ou ter plano de dados no celular.
Fluxo normal 1. Carregar os mapas no celular
2. Visualizar os mapas.
Fluxos excepcionais
Fluxos alternativos 1. Mudar exibição do mapa.
1. a. Visualizar mapa modo “mapa”.
2. a. Visualizar mapa no modo “satélite”.
Pós-condição Visualização dos mapas.
Tabela 17 - Caso de uso do cliente: visualizar mapa.
Caso de uso Visualizar posição comércio.
Ator principal Cliente.
Pré-condição Estar conectado a Internet ou ter plano de dados no celular.
Fluxo normal 1. Carregar os mapas no celular.
2. Visualizar a posição do comércio marcada no mapa.
Fluxos excepcionais
Fluxos alternativos
Pós-condição Visualização da posição do estabelecimento.
Tabela 18 - Caso de uso do cliente: visualizar posição comércio.
68
Caso de uso Visualizar própria posição.
Ator principal Cliente.
Pré-condição Estar conectado a Internet ou ter plano de dados no celular.
Estar com o GPS do celular ativo.
Fluxo normal 1. Carregar mapas no celular.
2. Visualizar a posição do cliente no mapa.
3. Atualizar a mudança de posição do cliente.
Fluxos excepcionais
Fluxos alternativos
Pós-condição Visualização própria posição do cliente.
Tabela 19 - Caso de uso do cliente: visualizar própria posição.
4.2 Diagrama de sequência
Nesta seção serão mostrados os diagramas de sequência dos softwares.
As figuras de 13 a 19 apresentam os diagramas de sequência do usuário.
Inicialmente o usuário precisa fazer log-in no servidor para utilizá-lo. Após ter feito log-
in, ele pode realizar as ações de cadastrar, editar, visualizar, excluir os produtos e
visualizar quais são os produtos mais buscados pelos clientes. Para essas ações são
realizadas consultas ao banco de dados do estabelecimento (não gerenciado pelo autor
do projeto). O usuário também tem a opção de abrir e fechar a porta de conexão para
acesso dos clientes. As ações do usuário são gerenciadas pelo controle de dados do
sistema e retornam para ele, na interface, o resultado da operação realizada.
69
Figura 13 – Diagrama de sequência do usuário – Efetuar log-in.
Figura 14 – Diagrama de sequência do usuário – Cadastrar produto.
Figura 15 - Diagrama de sequência do usuário - Visualizar produto.
70
Figura 16 – Diagrama de sequência do usuário - Editar produto.
Figura 17 - Diagrama de sequência do usuário - Excluir produto.
71
Figura 18 - Diagrama de sequência do usuário - Produtos mais buscados.
Figura 19 - Diagrama de sequência do usuário - Abrir/Fechar conexão.
As figuras de 20 a 24 apresentam o diagrama de sequência do administrador do
sistema. Além de todas as funções realizadas pelo usuário, que foram mostradas nos
diagramas anteriores, o administrador tem as opções de visualizar cadastrar, editar e
excluir os usuários que utilizam o sistema e também gerar o relatório dos horários em
72
que estes usuários fizeram log-in e log-out. As ações realizadas pelo administrador
passam pelo controle de dados do sistema, o qual busca as informações desejadas no
banco de dados e retorna para o administrador, na interface, o resultado de sua
operação.
Figura 20 - Diagrama de sequência do administrador – Cadastrar usuário.
Figura 21 - Diagrama de sequência do administrador - Editar usuário.
73
Figura 22 - Diagrama de sequência do administrador - Visualizar usuário.
Figura 23 - Diagrama de sequência do administrador - Excluir usuário.
Figura 24 - Diagrama de sequência do administrador - Gerar relatório usuário.
74
As figuras de 25 a 31 apresentam o diagrama de sequência do cliente. As ações
de busca do produto pelo nome e visualizar os produtos mais buscados, envia as
informações para o servidor que trata os dados e devolve os registros encontrados para o
cliente. Já a opção de busca do produto pelo código de barras, inicia o aplicativo
Barcode Scanner, o qual lê o código de barras do produto e envia para o servidor. O
servidor analisa o código de barras recebido, e se algum produto for encontrado,
devolve as informações referentes ao produto.
O cliente, além das opções de busca de produtos, pode também ligar para o
estabelecimento e pode utilizar recursos de mapa e GPS para saber a posição do
estabelecimento e a sua posição atual. Ao ligar para o estabelecimento, o controle de
dados do software envia uma solicitação à operadora telefônica que realiza a ligação. A
ligação fica ativa até que seja encerrada pelo cliente.
Já a opção de visualização de mapas quando solicitada pelo cliente, requisita os
mapas do Google Maps e os carrega na interface do software do cliente, realizando a
marcação da posição do comércio que já é pré-estabelecida. Se o cliente estiver com o
GPS do celular ativo, a interface do software solicita o recurso de GPS para realizar a
marcação da posição atual do cliente, que é atualizada a cada mudança de posição.
Figura 25 - Diagrama de sequência do cliente - Buscar produto pelo nome.
75
Figura 26 - Diagrama de sequência do cliente - Buscar produto pelo código de barras.
Figura 27 - Diagrama de sequência do cliente - Visualizar produtos mais buscados.
76
Figura 28 - Diagrama de sequência do cliente - Ligar para estabelecimento.
Figura 29 - Diagrama de sequência do cliente – Visualizar mapa.
Figura 30 - Diagrama de sequência do cliente - Visualizar posição comércio.
77
Figura 31 - Diagrama de sequência do cliente - Visualizar própria posição.
4.3 Diagrama de classe
O diagrama de classe do projeto é composto pelo diagrama de classe do servidor
e do cliente.
O diagrama de classe do servidor possui as classes “Produto”, que possui as
informações dos produtos (nome, preço, localização e tipo), e “Usuario”, que possui os
campos usuário e senha. Estas classes fazem uso da classe “Util”, que possui algumas
formatações e validações de campos, e da classe “conexaoBD”, responsável pela
conexão ao banco de dados. As classes “Thread” e “Socket” são utilizadas para realizar
a comunicação entre o software servidor e o cliente. A figura 32 representa o diagrama
de classe do servidor.
78
Figura 32 - Diagrama de classe do servidor.
O diagrama de classe do software do cliente possui a interface “Principal” que é
responsável por iniciar as interfaces: “Histórico” (histórico das buscas realizadas),
“Consulta” (interface para inserir o nome do produto que será buscado) e “Mapa”
(interface onde os mapas serão carregados), além de importar recursos da classe
“net.URI” do Android, responsável por tratar as ligações telefônicas. A interface
“Consulta” é responsável por iniciar a interface “ResultadoConsulta” (utilizada para
apresentar os produtos encontrados na busca), que por sua vez inicia a interface
“CaracteristicaProduto” (para o produto selecionado anteriormente, mostra as
características específicas).
79
A interface “Mapa” importa os recursos da classe “android.Maps” do Android,
responsável pelo carregamento dos mapas, e utiliza os recursos da classe
“MapaLocalOverlay”, que realiza a marcação de pontos no mapa. A figura 33
representa o diagrama de classe do cliente.
Figura 33 - Diagrama de classe do cliente.
80
4.4 Desenvolvimento do software servidor
O servidor descrito nos diagramas foi desenvolvido na linguagem de
programação Java. Ao iniciar o desenvolvimento do servidor, a preocupação inicial foi
em relação à comunicação entre os softwares e como manter essa comunicação aberta
esperando por conexões. Outro fator relevante é quanto à segurança, sendo que o
sistema possui um único usuário administrador, que possui privilégios administrativos,
e os usuários comuns, operadores do sistema, que possuem algumas restrições.
4.4.1 Acesso ao sistema
Ao abrir o software, é preciso inserir um nome de usuário e senha para acessá-lo,
como é mostrado na figura 34.
.
Figura 34 - Tela de acesso ao sistema.
Ao efetuar log-in como administrador, é possível utilizar todas as funções do
sistema como, por exemplo, gerenciar os usuários do sistema e gerar relatórios de log-in
81
e log-out dos usuários, como pode ser visto na figura 35, tela de administrador do
sistema.
Figura 35 - Acesso ao sistema como administrador.
Já ao usuário comum, essas opções não estão disponíveis. As opções de
“Usuários” e “Relatório” ficam ocultas, podendo utilizar apenas as outras funções que
não necessitam de privilégios administrativos, como mostrado na figura 36.
82
Figura 36 - Acesso ao sistema como usuário comum.
4.4.2 Utilização das threads
As threads foram utilizadas para manter a porta de comunicação aberta. Para sua
utilização, inicialmente são declarados seus objetos, sendo que a thread é uma classe
específica dentro da classe onde ela será usada. É declarado um objeto da classe Thread,
o “objConectarCliente”, e também a criação da própria thread, “threadCliente”, vistas
no código abaixo:
private ConexaoCliente objConectarCliente = new ConexaoCliente();
private Thread threadCliente = new Thread(objConectarCliente);
Após isso, é declarada a classe da thread, “ConexaoCliente”, onde encontra-se o
método run(), que inicializa a execução do conteúdo interno da thread. Dentro deste
método deve ser inserido todo o código que será executado. Ao final, coloca-se uma
83
recursividade no método, threadCliente.run(), para que ele seja executado novamente e
entre em loop.
public class ConexaoCliente extends Thread {
public void run() {
// Todo conteúdo a ser executado pela thread deve ser inserido aqui.
threadCliente.run();
}
}
Para ativar e desativar a thread foram inseridos dois botões na interface do
software, o botão “Permitir Conexão” e o “Bloquear Conexão”. A conexão inicia-se
como inativa (mostrada na figura 37).
Figura 37 - Permitir conexões dos clientes.
84
Ao pressionar o botão “Permitir Conexão” (figura 38), a thread é iniciada
mantendo assim a porta dos sockets aberta até que o botão “Bloquear Conexão” seja
pressionado e a interrompa.
Figura 38 - Bloquear conexões dos clientes.
Para gerenciar o funcionamento da thread, foi criado um contador do tipo inteiro
iniciado com o valor zero. Na primeira vez em que a thread for ativada, o contador
estará com o valor zero, fazendo com que ela seja iniciada, threadCliente.start(), o texto
do label passe de “Inativa” para “Ativa” e incremente o contador em um, como mostra o
código abaixo:
if (contadorThread == 0) {
threadCliente.start();
jLabelConexao.setText("Ativa");
contadorThread++;
}
85
Já na segunda vez em que for ativada, o contador não estará mais em zero,
fazendo com que a thread que estava parada retome sua execução,
threadCliente.resume(), em vez de ser iniciada novamente, conforme o código:
else{
threadCliente.resume();
jLabelConexao.setText("Ativa");
}
Para o botão “Bloquear Conexão”, utiliza-se o método suspend() para suspender
a execução da thread, até que o método resume() ative-a novamente, e o texto do label
volte para “Inativa”.
4.4.3 Transmissão dos dados via sockets
Para a transmissão de dados entre o software do cliente e o servidor foram
utilizados os sockets. Inicialmente são declaradas as variáveis necessárias para seu
funcionamento, sendo elas das classes Socket e ServerSocket, como é mostrado abaixo:
private ServerSocket serverSocketEntrada, serverSocketSaida;
private Socket socketEntrada, socketSaida;
Após a declaração das variáveis, todo o conteúdo restante do socket é inserido
dentro da thread mostrada anteriormente e circundado com as instruções try e catch. Ao
iniciar a execução da thread, a variável “serverSocketEntrada” é instanciada e define-se
a porta de comunicação por onde o socket receberá a entrada de dados. No projeto, foi
utilizada a porta 1234. Após isso, o socket fica aberto e espera até que haja a conexão de
algum cliente. Quando ocorrer a conexão, o objeto “dadosEntradaCliente”, que é
responsável por receber os dados, é instanciado e recebe os dados enviados pelo cliente.
O código abaixo mostra o recebimento de dados pelo servidor:
86
try {
serverSocketEntrada = new ServerSocket(1234);
socketEntrada = serverSocketEntrada.accept();
DataInputStream dadosEntradaCliente = new
DataInputStream(socketEntrada.getInputStream());
} catch (IOException erro) {
JOptionPane.showMessageDialog(null, "Erro : " + erro);
}
Ao final do recebimento de dados pelo servidor, os sockets e o canal de
recebimento de dados são fechados.
try {
socketEntrada.close();
serverSocketEntrada.close();
dadosEntradaCliente.close();
} catch (IOException erro) {
JOptionPane.showMessageDialog(null, "Erro : " + erro);
}
Após o fechamento do socket de entrada e do canal de recebimento de dados, são
instanciadas as variáveis necessárias para o envio dos dados do servidor para o cliente.
A variável “serverSocketSaida” é instanciada com uma nova porta de comunicação, a
porta 12345, que é diferente da porta de recebimento de dados. São instanciadas
também a variável “socketSaida” e a variável “dadosSaidaCliente”, que é a responsável
por armazenar e enviar os dados para o cliente. Para tanto, o código abaixo foi criado.
try {
serverSocketSaida = new ServerSocket(12345);
socketSaida = serverSocketSaida.accept();
DataOutputStream dadosSaidaCliente = new
DataOutputStream(socketSaida.getOutputStream());
} catch (IOException erro) {
87
JOptionPane.showMessageDialog(null, "Erro : " + erro);
}
Por último, os sockets de saída são fechados, assim como o canal de envio de
dados, como é mostrado no código abaixo:
try {
socketSaida.close();
serverSocketSaida.close();
dadosSaidaCliente.close();
} catch (IOException erro) {
JOptionPane.showMessageDialog(null, "Erro : " + erro);
}
O ciclo é reiniciado e retorna na parte onde o socket de entrada é aberto e
aguarda que haja conexão de algum cliente para um novo recebimento de dados.
Caso haja duas ou mais conexões simultâneas, o servidor será capaz de
responder a ambas, sem que aconteça perda de informações.
4.5 Desenvolvimento do software do cliente
O software do cliente, explicado nos diagramas mostrados anteriormente, foi
desenvolvido na linguagem de programação Java e na plataforma de desenvolvimento
Android. Como o objetivo deste software é facilitar o processo de compra, alguns
recursos do software devem ser usados dentro do estabelecimento, sendo eles: a
transmissão de dados via sockets, a leitura do código de barras e o armazenamento do
histórico de buscas. Existem alguns recursos usados antes do cliente chegar ao
estabelecimento, como a realização de ligações para o estabelecimento e sua localização
através dos recursos de mapas e GPS.
88
4.5.1 Interface do software
Ao abrir o software, a primeira tela mostra informações referentes ao
desenvolvedor. Para seguir para a tela de escolha de opções, basta pressionar o botão
“Ok”, como mostra a figura 39 (a).
A tela de opções apresenta as possíveis escolhas que podem ser feitas pelo
cliente, para isso ele deve selecionar a opção desejada e clicar no botão “Ok”. No final
da tela, também são apresentados os botões “Histórico”, onde são armazenadas as
buscas feitas pelo cliente, “Sobre”, que mostra algumas informações referentes ao
software, e o botão “Ajuda”, que explica como utilizar cada função do software. A
figura 39 (b) representa a tela de escolha de opções.
(a) (b)
Figura 39 - (a) Tela inicial do software do cliente. (b) Tela escolha de opções.
89
4.5.2 Transmissão dos dados via sockets
No software do cliente, a maneira de utilizar os sockets é bem parecida com a do
servidor. Primeiro são declaradas as variáveis dos sockets e da transmissão de dados,
sendo que para ambos são declaradas as variáveis de entrada e saída de dados, como é
mostrado abaixo:
Socket socketSaida, socketEntrada;
DataOutputStream dadosSaida;
DataInputStream dadosEntrada;
Depois de declaradas as variáveis, o socket de saída e a variável de envio de
dados são instanciados. Na instanciação do socket de saída é inserido o IP do
computador onde o servidor está sendo executado, IP 192.168.1.100, e a porta de
comunicação de recebimento de dados do servidor, porta 1234. Assim como ocorre no
servidor, todo o código é circundado pelas instruções try e catch, como podem ser visto
no código abaixo:
try {
socketSaida= new Socket(192.168.1.100, 1234);
dadosSaida = new DataOutputStream(socket1.getOutputStream());
} catch (Exception erro) {
Toast.makeText(this, "Erro" + erro, Toast.LENGTH_LONG).show();
}
Ao término do envio dos dados, o socket de saída e o canal de envio de dados é
fechado, como é mostrado abaixo:
try {
socketSaida.close();
dadosSaida.close();
} catch (Exception erro) {
Toast.makeText(this, "Erro" + erro, Toast.LENGTH_LONG).show();
90
}
Após enviar os dados, o software do cliente precisa receber a resposta vinda do
servidor. Para isso, o socket de entrada é instanciado, com o IP do computador onde está
o servidor e com a porta de envio de dados do servidor, e o canal de envio de dados,
como é mostrado abaixo:
try {
socketEntrada = new Socket(192.168.1.100, 12345);
dadosEntrada = new DataInputStream(socketEntrada.getInputStream());
} catch (Exception erro) {
Toast.makeText(this, "Erro" + erro, Toast.LENGTH_LONG).show();
}
Por último, o socket de saída e o canal de envio de dados são fechados, como é
mostrado no código abaixo:
try {
socketEntrada.close();
dadosEntrada.close();
} catch (Exception erro) {
Toast.makeText(this, "Erro" + erro, Toast.LENGTH_LONG).show();
}
O ciclo de comunicação é finalizado até que o cliente realize uma nova busca e
inicie novamente todo o processo de execução do socket.
4.5.3 Leitura do código de barras
Uma das opções para obter informações do produto como, por exemplo, o preço,
é ter o produto em mãos e utilizar o leitor de código de barras. Para realizar a leitura,
inicialmente é necessário ter instalado no celular o aplicativo Barcode Scanner.
91
Tendo o aplicativo instalado, a primeira coisa a ser feita é criar uma Intent para a
execução do Barcode e iniciá-lo através do método startActivityForResult, aguardando
o resultado retornado pelo aplicativo, como é mostrado abaixo:
int REQUEST_CODE = 0;
Intent ILerCodigoBarras = new Intent(
"com.google.zxing.client.android.SCAN");
startActivityForResult(ILerCodigoBarras, REQUEST_CODE);
Para recuperar o resultado, sobrescreve-se o método onActivityResult
aguardando que o parâmetro “requestCode” seja igual ao parâmetro
“REQUEST_CODE” passado no método startActivityForResult e verifica se o usuário
fez a leitura do código de barras. Para isso, compara-se a variável “resultCode” com a
constante “Activity.RESULT_OK”, se forem iguais, a leitura foi realizada com sucesso.
Já se a variável “resultCode” for igual a constante “Activity.RESULT_CANCELED”, a
leitura foi cancelada pelo o usuário.
Para obter o valor lido pelo Barcode, é necessário ler os parâmetros recebidos
pelo aplicativo. Para isso, armazena-se em uma variável o valor recebido do parâmetro
“SCAN_RESULT”, como é mostrado abaixo:
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == REQUEST_CODE) {
if (resultCode == Activity.RESULT_OK) {
codigoBarrasLido =
Intent.getStringExtra("SCAN_RESULT");
} else if (resultCode == Activity.RESULT_CANCELED) {
// Usuário não fez a leitura do código de barras
}
}
}
92
4.5.4 Armazenamento do histórico de buscas
Para controle do cliente, as buscas realizadas são armazenadas pelo aplicativo,
exceto as feitas através do leitor de código de barras. O armazenamento do histórico de
buscas é composto por três métodos: abrir o banco de dados, gravar os registros e o
fechar o banco de dados.
A primeira coisa a ser feita é declarar uma variável do tipo SQLiteDatabase que
será responsável pela manipulação das ações do banco de dados. Sua declaração é feita
conforme abaixo:
SQLiteDatabase bancoDados = null;
A próxima etapa é a criação de um método responsável pela abertura do banco
de dados. Neste método é definido o nome do banco de dados que será aberto ou criado,
se ainda não existir, através do comando openOrCreateDatabase, e a criação das tabelas
do banco, caso também não existam, pelo comando SQL CREATE TABLE IF NOT
EXISTS. O método “abrirBanco” é mostrado a seguir:
public void abrirBanco() {
try {
String nomeBanco = "bancoHistorico";
bancoDados = openOrCreateDatabase(nomeBanco,
MODE_WORLD_READABLE, null);
String sql = "CREATE TABLE IF NOT EXISTS historico "
+ "(id INTEGER PRIMARY KEY, produto TEXT, data
TEXT, horario TEXT)";
bancoDados.execSQL(sql);
} catch (Exception erro) {
mostrarAlerta("Erro", "Erro ao Abrir o Banco de dados: " +
erro.getMessage());
}
}
93
Após o banco de dados ter sido aberto ou criado, chama-se o segundo método, o
“gravarRegistros”. Nele é utilzado o comando SQL INSERT com as variáveis que serão
inseridas nas tabelas do banco, como é mostrado no código a seguir:
public void gravarRegistros() {
try {
String sql = "INSERT INTO historico (produto, data, horario)"
+ "VALUES ('" + nomeSelecionado + "','" + data + "','"
+ horario + "')";
bancoDados.execSQL(sql);
} catch (Exception erro) {
mostrarAlerta("Erro", "Erro ao Gravar Dados: " +
erro.getMessage());
}
}
Com os dados gravados no banco, chama-se o método “fecharBanco” que é o
responsável por finalizar a conexão ao banco de dados. O código fonte do método segue
abaixo:
public void fecharBanco() {
try {
bancoDados.close();
} catch (Exception erro) {
mostrarAlerta("Erro", "Erro ao Fechar o Banco de dados: " +
erro.getMessage());
}
}
A cada consulta de produto realizada pelo cliente é armazenado o nome do
produto, a data e a hora em que a busca foi realizada, sendo feito um registro para cada
produto, independente da quantidade de buscas feitas do mesmo produto.
94
4.5.5 Realização de ligações
Para realizar ligações através do aplicativo, a primeira coisa a se fazer é permitir
que o aplicativo utilize este recurso do telefone. Para isso, é necessário inserir a
permissão abaixo dentro da classe AndroidManifest.xml.
<uses-permission android:name="android.permission.CALL_PHONE"/>
Com a permissão inserida, cria-se um objeto da classe Uri e define-se como
parâmetro o telefone do local para onde será realizada a ligação. Basta trocar o valor
“xxx” pelo número do telefone desejado. Após isso, é criada uma Intent, que é
instanciada com os parâmetros Intent.ACCTION_CALL, responsável pela chamada, e o
objeto da classe Uri anteriormente instanciado. Por último, inicia-se a Intent, como é
mostrado abaixo:
Uri uriLigar = Uri.parse("tel:xxx");
Intent ILigar = new Intent(Intent.ACTION_CALL,uriLigar);
startActivity(ILigar);
4.5.6 Mapas e GPS
Ao utilizar mapas no Android, a primeira coisa a ser feita é adicionar as
permissões e a biblioteca do Google Maps na classe AndroidManifest.xml. As
permissões referem-se à conexão com a Internet e a posição atual do celular através do
GPS. O código abaixo demonstra a adição das permissões e da biblioteca dos mapas:
<uses-permission android:name = "android.permission.INTERNET"/>
<uses-permission android:name =
"android.permission.ACCESS_FINE_LOCATION"/>
<uses-library android:name = "com.google.android.maps"/>
95
Com a inserção do código acima na classe AndroidManifest.xml, cria-se um
arquivo com a extensão XML, onde o mapa será carregado. Para que o aplicativo
carregue os mapas é preciso criar uma chave gratuita do Google Maps, explicada no site
de desenvolvedores da Google: https://developers.google.com/android/maps-api-signup.
O trecho abaixo mostra o código da classe XML criada:
<com.google.android.maps.MapView
android:id="@+id/mapa"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
android:enabled="true"
android:apiKey="0H6Txui98CIQkzpvoOopUjEicionigsBjpRC4tQ"
/>
Com o que já foi feito, os mapas serão carregados na aplicação, restando apenas
marcar a posição do estabelecimento e a posição atual do cliente no mapa. Para marcar a
posição do estabelecimento é preciso declarar uma variável do tipo MapView,
responsável por controlar as ações relacionadas ao mapa, uma do tipo
MapaLocalOverlay, classe criada pelo autor do projeto para fazer marcações no mapa
com o uso do Canvas, e uma variável do tipo GeoPoint, que receberá a latitude e a
longitude do local. Depois, instancia-se a variável “estabelecimento”, passando como
parâmetro o GeoPoint e o ícone que será desenhado no mapa. E através do método
mapa.getOverlays().add(estabelecimento), o símbolo escolhido para o estabelecimento
é marcado no mapa. O código abaixo demonstra a marcação do estabelecimento no
mapa:
private MapView mapa = (MapView) findViewById(R.id.mapa);
MapaLocalOverlay estabelecimento;
GeoPoint gpEstabelecimento = new GeoPoint((int) -18.974653,(int)-49.460065);
estabelecimento = new MapaLocalOverlay(gpEstabelecimento,
R.drawable.carrinho2);
mapa.getOverlays().add(estabelecimento);
96
Já para marcar a posição atual do cliente no mapa, o processo é mais complexo,
pois o aplicativo precisa reconhecer a mudança de posição do cliente como, por
exemplo, se ele estiver andando ou dirigindo.
O processo de marcação inicial da posição no mapa é bem semelhante ao do
estabelecimento, porém é utilizado um objeto da classe MyLocationOverlay, que é uma
classe do Android para desenhos de posições. Após isso, utiliza-se a mesma variável
“mapa”, criada anteriormente, para fazer a marcação no mapa, e logo em seguida, são
inseridos os métodos requestLocationUpdates e retornaLocationManager, sendo o
segundo método criado pelo autor do projeto, que irão requerer a posição do atual do
aparelho através da sua latitude e longitude.
O código abaixo mostra a marcação da posição no mapa e a utilização dos
métodos necessários para realizar esta marcação.
private MyLocationOverlay minhaLocalizacao = new MyLocationOverlay(this,
mapa);
mapa.getOverlays().add(minhaLocalizacao);
retornaLocationManager().requestLocationUpdates(LocationManager.GPS_PR
OVIDER, 0, 0, this);
private LocationManager retornaLocationManager() {
LocationManager locationManager = (LocationManager)
getSystemService(Context.LOCATION_SERVICE);
return locationManager;
}
Com o código acima inserido, o celular marcará no mapa a posição inicial do
cliente. Porém, é preciso sobrescrever o método onLocationChanged do Android, para
que a cada mudança de posição do cliente, o GPS envie ao celular sua nova posição e
possa atualizá-la no mapa.
97
Este método é acompanhado pelo método “posicao”, que faz a conversão da
latitude e da longitude em uma variável do tipo GeoPoint. O código abaixo mostra os
dois métodos.
@Override
public void onLocationChanged(Location location) {
posicao(location.getLatitude(), location.getLongitude());
}
public static GeoPoint posicao(double latitude, double longitude) {
GeoPoint geoPoint = new GeoPoint((int) (latitude * 1E6),
(int) (longitude * 1E6));
return geoPoint;
}
4.6 Testes
Com as funcionalidades do software já implementadas, serão realizados os testes
de funcionamento para cada uma das possíveis ações feitas pelo cliente, sendo elas:
buscar produto pelo nome, buscar produto pelo código de barras, produtos mais
buscados, ligar para o estabelecimento e como chegar ao estabelecimento.
4.6.1 Buscar produto pelo nome
Para realizar a busca de produtos pelo nome, primeiro escolhe-se a opção
“Buscar pelo Nome”. Na próxima tela, preenche-se o campo com o nome ou o tipo do
produto desejado e pressiona-se o botão “Buscar”, como é mostrado na figura 40 (a) e
(b).
98
(a) (b)
Figura 40 - (a) Escolha da opção “Buscar pelo Nome”. (b) Inserção do nome do produto.
Será mostrada a quantidade de produtos encontrados e uma lista com os nomes.
Para obter informações de algum produto específico, basta selecioná-lo e pressionar o
botão “Ok”. Na tela seguinte serão mostras as informações específicas do produto
selecionado, assim como um mapa do estabelecimento com a posição do produto
marcada com uma circunferência vermelha, como é mostrado na figura 41 (a) e (b).
99
(a) (b)
Figura 41 - (a) Escolha do produto. (b) Visualização das informações do produto.
4.6.2 Buscar produto pelo código de barras
Para obter informações do produto através do seu código de barras, escolhe-se a
opção “Buscar pelo Código de Barras”. Ao escolher esta opção, o aplicativo Barcode
Scanner abrirá e ficará aguardando que seja colocado um código de barras em frente à
câmera do celular para que ele realize a leitura, como apresenta a figura 42 (a) e (b).
100
(a) (b)
Figura 42 - (a) Escolha da opção “Buscar pelo código de barras”. (b) Leitura código de barras.
Após a leitura do código de barras, serão mostradas as informações do produto
correspondente, como mostra a figura 43.
Figura 43 - Visualização das informações do produto.
101
4.6.3 Produtos mais buscados
Para visualizar quais são os produtos mais buscados pelos clientes do
estabelecimento, seleciona-se a opção “Produtos Mais Buscados” e pressiona-se o botão
“Ok”. Na tela seguinte, aparecerá uma lista com os cinco produtos mais buscados por
todos os clientes. Para obter informações de algum destes produtos, basta selecioná-lo e
pressionar o botão “Ok”, como é mostrado na figura 44 (a) e (b).
(a) (b)
Figura 44 - (a) Escolha da opção “Produtos Mais Buscados”. (b) Escolha do produto.
Em seguinte, as informações do produto serão mostradas, como apresenta a
figura 45.
102
Figura 45 - Visualização das informações do produto.
4.6.4 Ligar para estabelecimento
Para realizar uma ligação para o estabelecimento comercial, basta selecionar a
opção “Ligar para o Estabelecimento” e pressionar o botão “Ok”. Automaticamente a
ligação será iniciada, podendo ser encerrada a qualquer momento pelo cliente. A figura
46 (a) e (b) mostra a realização da chamada.
103
(a) (b)
Figura 46 - (a) Escolha da opção “Ligar para o Estabelecimento”. (b) Realização da chamada.
4.6.5 Como chegar ao estabelecimento
Para visualizar os mapas e a posição atual do cliente no mapa, seleciona-se a
opção “Como Chegar?” e pressiona o botão “Ok”, como é mostrado na figura 47.
104
Figura 47 - Escolha da opção “Como Chegar?”.
A tela seguinte apresenta os mapas, inicialmente apresentados no modo satélite,
com a posição do comércio marcada com o símbolo de um carrinho de compras amarelo
e a posição atual do cliente com uma bolinha azul, como apresenta a figura 48 (a).
É possível alterar a visualização do modo satélite para o modo mapa. Para isso é
só clicar no botão “Menu” do aparelho celular e escolher a opção “Modo Mapa”.
Quando a visualização for alterada, a cor do símbolo do carrinho mudará para roxo,
como é mostrado na figura 48 (b).
105
(a) (b)
Figura 48 - (a) Visualização modo satélite. (b) Visualização modo mapa.
Outro recurso disponível nesta parte de mapas é a centralização do mapa tanto
na posição do comércio, quanto na posição do cliente. Para centralizar o mapa sobre o
comércio, clica-se no botão “Menu” do celular e depois no botão “Posição Comércio” e
para a posição atual do cliente, clica-se no botão “Minha Posição”, como é mostrado na
figura 49 (a) e (b).
106
(a) (b)
Figura 49 - (a) Mapa centralizado no estabelecimento. (b) Mapa centralizado no cliente
4.7 Conclusão
Neste capítulo foram apresentados os diagramas de funcionamento do projeto e
o desenvolvimento e testes dos softwares.
As threads foram escolhidas em vez dos métodos, pois elas atendem a múltiplas
conexões, ou seja, se vários clientes buscarem informações simultaneamente, ambos
obterão resposta do servidor. Já o uso dos sockets para a comunicação entre os
softwares, utiliza o IP do servidor e a porta de comunicação do servidor e do software
do cliente, sendo possível adaptar o tanto IP do servidor para o IP do computador em
que o software será instalado, quanto as portas de comunicação.
Para a utilização dos recursos de mapa e GPS, foram encontradas algumas
dificuldades iniciais, como por exemplo, a criação das chaves necessárias para carregar
os mapas na aplicação, sendo que a chave do emulador, software utilizado para emular o
aplicativo no computador, é diferente da chave usada para aplicação que será instalada
107
no celular. Para resolver este problema, foi necessária a criação de ambas as chaves,
tanto a do emulador quanto a do aparelho real. As informações detalhadas quanto a
criação e utilização das chaves do Google Maps podem ser encontradas em
https://developers.google.com/android/maps-api-signup?hl=pt-BR.
Com o término do desenvolvimento do projeto, foi possível chegar ao resultado
esperado, sendo que ambos os softwares estão funcionando perfeitamente e realizando
as funções propostas no projeto.
108
5 Conclusão
Após o término do desenvolvimento deste trabalho, chegou-se a conclusão de
que é possível desenvolver um sistema que simplifique o processo de compras feito pelo
consumidor.
Com o estudo da plataforma Android, foi possível perceber que sua arquitetura é
bastante flexível possibilitando a integração de aplicações, sejam elas aplicações nativas
do sistema ou não, ou até mesmo, substituir aplicações nativas por uma criada por
terceiros. Além disso, o sistema operacional do Android é baseado em Linux, portanto o
gerenciamento de memória e de processos é feito pelo Linux, possibilitando que várias
aplicações sejam executadas simultaneamente sem que o usuário perceba.
Dentre as aplicações que podem ser integradas, foram utilizadas a API do
Google Maps e os recursos de localização de GPS. Um dos fatores que pesa
negativamente para utilização do Google Maps é a necessidade de uma conexão com a
Internet para fazer o download dos mapas, todas as vezes em que a interface dos mapas
é carregada. Porém, possuindo conexão com a Internet, o carregamento dos mapas
acontece quase que instantâneo. O processo de integração dessas API na aplicação
Android é um processo relativamente simples e que não gera muitas dificuldades.
A escolha da linguagem Java foi adequada para o desenvolvimento dos
softwares, atendendo todas as necessidades previstas no projeto. Outros recursos da
linguagem que foram utilizadas e funcionaram da maneira esperada foram as threads e
os sockets, possibilitando conexões por parte dos clientes.
As facilidades encontradas durante o projeto foram o conhecimento prévio da
linguagem Java, facilitando a construção do servidor e também do software do cliente
(por a linguagem utilizada no Android ser o Java) e da linguagem para dispositivos
móveis Java ME, já tendo uma noção razoável de programação para celulares. .
109
O funcionamento dos softwares atenderam aos objetivos esperados, sendo que
ambos estão funcionando da maneira adequada e comunicando entre si sem que haja
perca dos dados durante a troca de informações e possibilitando que vários clientes
conectem simultaneamente ao servidor. Para a comunicação é possível adaptar o
endereço de IP do servidor no software do cliente, bastando trocá-lo pelo endereço
desejado.
Para realizar a instalação do software nos celulares dos clientes, pode-se
disponibilizar sua instalação em algum site qualquer ou dentro do próprio
estabelecimento comercial, sendo que algum funcionário ficaria encarregado de instalar
o software e tirar possíveis dúvidas quanto a sua utilização.
Quanto à segurança do sistema, o cliente que irá utilizar o software não precisa
se preocupar, pois o programa faz apenas a troca de informações com o servidor, não
expondo os arquivos particulares do usuário a ninguém.
5.1 Trabalhos futuros
Após o desenvolvimento dos softwares, alguns aprimoramentos podem ser feitos
para melhorar sua funcionalidade. Dentre os quais, pode-se destacar:
a) Inserção de novos atributos para os produtos.
b) Atualização das imagens da localização dos produtos, sendo que elas
encontram-se no software do cliente, caso algum produto seja mudado de
prateleira.
c) Possibilidade de traçar a rota no mapa entre a posição do cliente e a posição
do estabelecimento comercial.
d) Possibilidade de cadastrar a lista de compras, aproveitando os recursos do
banco de dados SQLite, antes de chegar ao estabelecimento.
110
6 Referências
ALVARENGA, J. H. XML - Extensible Markup Language. AmigoNerd.net, 2005.
Disponível em: <http://amigonerd.net/trabalho/24621-xml-extensible-markup-
language>. Acesso em: 28 Março 2012.
ALVAREZ, M. A. O que é XML?. Criar Web, 2004. Disponível em:
<http://www.criarweb.com/artigos/203.php>. Acesso em: 28 Março 2012.
AMORIM, A. D. D. Android, uma visão geral. Belo Horizonte: [s.n.], 2011.
ANISZCZYK, C.; GALLARDO, D. Introdução à plataforma Eclipse. IBM, 2012.
Disponível em: <http://www.ibm.com/developerworks/br/library/os-eclipse-platform/>.
Acesso em: 27 Março 2012.
ARAÚJO, E. C. J. D. UP - Um jogo educativo para celulares destinado a crianças
com síndrome. João Pessoa: [s.n.], 2010.
ARAÚJO, F. B. D. Desenvolvimento de softwares para dispositivos móveis. Rio de
Janeiro: [s.n.], 2006.
BALSEMÃO, F. T. Gerência e monitoramento de redes através de dispositivos
móveis. Porto Alegre: [s.n.], 2008.
BALTAZAR, M. Tutorial: Utilização do Sqlite no Android. pplware, 2012.
Disponível em: <http://pplware.sapo.pt/smartphones/android/tutorial-utilizao-do-sqlite-
no-android-parte-i/>. Acesso em: 13 Abril 2012.
BAPTISTA, L.; PALANGANI, M.; DELDOTO, T. Java Virtual Machine (JVM).
2009.
BASSI, E. IDE - Ambiente integrado de desenvolvimento. Hturbo, 2011. Disponível
em:
<http://www.cezar.hturbo.com.br/cezar15/index.php?option=com_content&view=sectio
n&layout=blog&id=11&Itemid=54>. Acesso em: 10 Abril 2012.
BEDANI, E. R. Gestão de tempo, o grande desafio dos tempos modernos.
Administradores.com, 2011. Disponível em:
<http://www.administradores.com.br/informe-se/carreira-e-rh/gestao-de-tempo-o-
grande-desafio-dos-tempos-modernos/42763/>. Acesso em: 10 Agosto 2012.
BESTANDROID. Top Android app: Barcode Scanner. Best Android App Review,
2009. Disponível em: <http://www.bestandroidappsreview.com/2009/12/top-android-
app-barcode-scanner.html>. Acesso em: 26 Abril 2012.
BRAZ, C. C. M. Introdução à linguagem Java. Campo Grande: [s.n.], 2004.
111
BUENO, A. D. Apostila de programação orientada a objetos em C++. Santa
Catarina: [s.n.], 2002.
BUGARIN, G.; BORGES, L.; DATTOLI, F. Plataformas de desenvolvimento para
celulares. Wikidot, 2009. Disponível em:
<http://pesquompile.wikidot.com/plataformas-desenvolvimento-celular>. Acesso em:
22 Março 2012.
CARACIOLO, M. P. Desenvolvendo aplicações Python para Symbian OS.
DevMedia, 2009. Disponível em: <http://www.devmedia.com.br/desenvolvendo-
aplicacoes-python-para-symbian-os/11644>. Acesso em: 16 Março 2012.
CROCE FILHO, R. D.; RIBEIRO, C. E. Informática - Programação de
computadores. 4ª. Ed. São Paulo: [s.n.], 2010.
SILVA, L. A. Programando passo a passo. Rio de Janeiro: [s.n.], 2010.
DEVMEDIA. SQLite no Android. DevMedia, 2011. Disponível em:
<http://www.devmedia.com.br/sqlite-no-android-artigo-web-mobile-34/19201>. Acesso
em: 13 Abril 2012.
ECLIPSE. Eclipse platform technical overview. Eclipse.org, 2007. Disponível em:
<http://www.eclipse.org/articles/Whitepaper-Platform-3.1/eclipse-platform-
whitepaper.html>. Acesso em: 26 Abril 2012.
FARIA, A. D. O. Programe seu Android. Linux Magazine, São Paulo, n. 43, p. 73-77,
Junho 2008.
FREITAS, O. C. D. Vantagens do Java. OhanaFreitas, 2010. Disponível em:
<http://ohanafreitas.blogspot.com.br/2010/08/vantagens-do-java-por-que-estudar-
essa.html>. Acesso em: 26 Abril 2012.
GONÇALVES, E. Dominando o Eclipse. 1ª. Ed. Rio de Janeiro: Ciência Moderna,
2006.
GOOGLE. Google Maps, 2012. Disponível em: <http://maps.google.com.br/>. Acesso
em: 4 Maio 2012.
HASLINGER, M. C. Protótipo para localização de pontos de referência na cidade
de Chapecó utilizando Google Android e Google Maps. Chapecó: [s.n.], 2009.
HOPSON, K. C.; INGRAM, S. E. Desenvolvendo applets com Java. 1ª. Ed. [S.l.]:
Campus, 1997.
HUANG, J. A Java developer. Braveo, 2010. Disponível em:
<http://braveo.blogspot.com.br/2010/07/netbeans-runtime-container.html>. Acesso em:
23 Abril 2012.
112
IERUSALIMSCHY, R. Uma introdução à programação em Lua, Rio de Janeiro:
[s.n.], 2009.
JOHNSON, T. M. Java para dispositivos móveis. São Paulo: Novatec, 2007.
LECHETA, R. R. Google Android: aprenda a criar aplicações para dispositivos
móveis com o Android SDK. São Paulo: Novatec, 2009.
LUA. Lua. A linguagem de programação Lua, 2011. Disponível em:
<http://www.lua.org/portugues.html>. Acesso em: 17 Março 2012.
MELO, M. Google Maps e sua empresa. Webtask, 2009. Disponível em:
<http://www.webtask.com.br/artigo/googlemaps-e-sua-empresa>. Acesso em: 4 Maio
2012.
MICROSOFT. Por que atualizar para o SQL Server 2008?. Microsoft, 2011.
Disponível em: <http://www.microsoft.com/sqlserver/2008/pt/br/why-upgrade.aspx>.
Acesso em: 3 Abril 2012.
MORIMOTO, C. E. Smartphones: a história do Windows Mobile. Guia do
Hardware, 2010. Disponível em: <http://www.hardware.com.br/dicas/historia-windows-
mobile.htmlCarlos E. Morimoto>. Acesso em: 22 Março 2012.
NETBEANS. Um breve histórico do NetBeans. NetBeans, 2011. Disponível em:
<http://netbeans.org/about/history_pt_BR.html>. Acesso em: 27 Março 2012.
NÓBREGA, J. 2010 vai ser o ano das aplicações móveis. Computer World, 2010.
Disponível em: <http://www.computerworld.com.pt/2010/04/08/2010-vai-ser-o-ano-
das-aplicacoes-moveis/>. Acesso em: 10 Agosto 2012.
OFICINA DA NET. O que é o NetBeans?. Oficina da Net, 2008. Disponível em:
<http://www.oficinadanet.com.br/artigo/1061/o_que_e_o_netbeans>. Acesso em: 27
Março 2012.
OKADA, T. Uma introdução aos sistemas operacionais móveis. Guia do Hardware,
2011. Disponível em: <http://www.hardware.com.br/artigos/sistemas-operacionais-
mobile>. Acesso em: 22 Março 2012.
OLIVEIRA, J. D.; PHILERENO, J. A. SQL. Igrejinha: [s.n.], 2005.
OLIVEIRA, K. M. D. Instalando e atualizando o plugin ADT no Eclipse.
Klebermota, 2010. Disponível em:
<http://www.klebermota.eti.br/2010/02/08/installing-and-updating-adt/>. Acesso em: 2
Abril 2012.
OLIVEIRA, M. R. F. D. Adequação de um Framework para suportar realidade
virtual em dispositivos móveis, Uberlândia: [s.n.], 2011.
113
OLIVEIRA, R. Introdução ao Windows Mobile. Programação Android e.Net, 2010.
Disponível em: <http://romarconsultoria.blogspot.com.br/2010/03/introducao-ao-
windows-mobile.html>. Acesso em: 22 Março 2012.
ORACLE. Banco de dados – SGBD. SPK, 2006. Disponível em:
<http://www.spk.com.br/bancodados.asp>. Acesso em: 2 Abril 2012.
ORACLE. O que é a tecnologia Java e por que é necessária?. Java, 2011. Disponível
em: <http://www.java.com/pt_BR/download/faq/whatis_java.xml>. Acesso em: 15
Abril 2012.
PAULA FILHO, W. D. Introdução a programação na linguagem Java. Uberlândia:
[s.n.], 2008.
PRADO, L. M. Integração do sistema de controle de versão subversion (SVN) com
o IDE NetBeans. Florianópolis: [s.n.], 2006.
PRADO, S. Introdução ao funcionamento interno do Android. SergioPrado.org,
2011. Disponível em: <http://sergioprado.org/2011/08/15/introducao-ao-
funcionamento-interno-do-android/>. Acesso em: 26 Abril 2012.
RAMOS, G. D. O.; TEODOROWITSCH, R. Threads em Java. Gravataí: [s.n.], 2009.
RAMOS, R. B. Aplicativos de banco de dados. Alunos de TI, 2011. Disponível em:
<http://www.alunosdeti.com.br/2011/?pg=noticia&id=12461>. Acesso em: 2 Abril
2012.
RODRIGUES, D. M. Programando para Symbian OS. São Paulo: [s.n.], 2007.
ROMÃO, B. V. A história da linguagem C. Portal da programação, 2002. Disponível
em: <http://www.portaldaprogramacao.com/artigos2.asp?n=79>. Acesso em: 16 Março
2012.
ROSSUM, G. V. Tutorial de Python. São Paulo: [s.n.], 2004.
SAUVÉ, J. P.; SANTOS JÚNIOR, J. M. R. Threads em Java. Aracajú: [s.n.], 2000.
SOUSA, L. D. S. J2ME - Plataforma Java para dispositivos móveis. Barra dos
Garças: [s.n.], 2010.
TEIXEIRA, E. Introdução ao Eclipse (Java). Programero, 2008. Disponível em:
<http://programero.blogspot.com.br/2008/07/introduo-ao-eclipse-java.html>. Acesso
em: 28 Março 2012.
Top Related