O uso de programação reflexiva para o desenvolvimento de aplicações comerciai...
Relatório de estágio
1. UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL
CENTRO UNIVERSITÁRIO DE DOURADOS
DEPARTAMENTO DE CIÊNCIAS EXATAS
BACHARELADO EM ANÁLISE DE SISTEMAS
Desenvolvimento de um aplicativo para coleta de dados sócio-econômicos
compatível com dispositivos portáteis com sistema operacional PalmOS,
WindowsCE ou PocketPC, utilizando a linguagem Java.
por
Marcos Bispo de Oliveira
Orientação:
Leopoldo Francesco Vettor
Supervisão:
Prof. André Luis Gonsales
Relatório de Estágio Supervisionado apresentado à
Universidade Federal do Mato Grosso do Sul –
UFMS, Centro Universitário de Dourados, como
parte dos requisitos para obtenção do grau de
Bacharel em Análise de Sistemas.
3. Resumo
O objetivo deste relatório é apresentar a descrição e a documentação de uma ferramenta para
viabilizar a coleta de dados sócio-econômicos utilizando dispositivos digitais portáteis (handhelds,
PDA´s ou computadores de mão), que utilizam os sistemas operacionais PalmOS (desenvolvido pela
Palm Computing), WindowsCE ou PocketPC (ambos desenvolvidos pela Microsoft).
Serão apresentados neste relatório: uma breve descrição da tecnologia (linguagem de programação e
ferramentas) utilizadas no desenvolvimento do aplicativo, os objetivos e os requisitos, os diagramas
UML, os diagramas de entidade-relacionamento e algumas telas capturadas da aplicação em
execução.
3
4. Índice de texto
Lista de Figuras...................................................................................................................................5
Lista de abreviações............................................................................................................................6
Introdução...........................................................................................................................................7
Tecnologia utilizada............................................................................................................................8
O Java..............................................................................................................................................8
O SuperWaba..................................................................................................................................8
Principais características do SuperWaba.....................................................................................8
O SDK do SuperWaba inclui:.....................................................................................................10
Como desenvolver aplicações em SuperWaba?.........................................................................10
Solução Proposta...............................................................................................................................12
Modelagem da aplicação...................................................................................................................13
Especificação de Casos de Uso.....................................................................................................13
Diagrama de Classes.....................................................................................................................15
Diagrama de Componentes e Implantação.................................................................................16
Modelagem dos Dados..................................................................................................................18
Modelo Lógico...........................................................................................................................18
Modelo Físico.............................................................................................................................18
Interface da aplicação.......................................................................................................................20
Módulo de coleta de dados para o PDA......................................................................................20
Módulo servidor de recepção de dados.......................................................................................24
Considerações finais..........................................................................................................................27
Referências........................................................................................................................................28
Anexos................................................................................................................................................29
4
5. Lista de Figuras
Figura 1: Ambiente da IDE Eclipse.................................................................................................11
Figura 2: Diagrama de casos de uso................................................................................................14
Figura 3: Diagrama de classes inicial (ver ANEXO IV).................................................................15
Figura 4: Diagrama de classes final (ver ANEXO IV)...................................................................16
Figura 5: Diagrama de componentes...............................................................................................17
Figura 6: Diagrama de implantação................................................................................................17
Figura 7: Diagrama de entidade-relacionamento...........................................................................18
Figura 8: Modelo de entidade-relacionamento...............................................................................19
Figura 9: Tela inicial do aplicativo..................................................................................................20
Figura 10: Tela de detalhes do questionário...................................................................................21
Figura 11: Tela de detalhes do domicílio.........................................................................................21
Figura 12: Tela de detalhes do domicílio particular permanente..................................................22
Figura 13: Tela de listagem de moradores do domicílio.................................................................22
Figura 14: Tela de detalhes do morador do domicílio....................................................................23
Figura 15: Tela de listagem e manipulação de questionários armazenados.................................23
Figura 16: Mensagem de início da transmissão de dados..............................................................24
Figura 17: Aplicação servidora aguardando dados.........................................................................25
Figura 18: Dados recebidos pela aplicação servidora.....................................................................25
Figura 19: Dados armazenados em XML........................................................................................26
5
6. Lista de abreviações
DER = Diagrama de entidade-relacionamento
GPS = Global positionning system (Sistema de posicionamento global)
HTML = Hipertext markup language (Linguage de marcação de hipertexto)
IDE = Integrated development environment (Ambiente integrado de desenvolvimento)
JDK = Java development kit (Kit de desenvolvimento da linguagem Java)
MER = Modelo de entidade=-relacionamento
PDA = Personal digital assistant (Assistente pessoal digital)
PDB = Palm database (Formato de dados usado no PalmOS)
RAD = Rapid application development (Desenvolvimento rápido de aplicações)
ROM = Read only memory (Memória de acesso somente para leitura)
SDK = Software development kit (Kit de desenvolvimento de software)
SGBD = Sistema de gerenciamento de banco de dados
TCP/IP = Transfer control protocol / Internet prototol (Protocolo de controle e transmissão de
dados na internet)
UML = Unified modeling language (Linguagem unificada de modelagem)
USB = Universal serial bus (Barramento serial universal)
XML = Extensible markup language (Linguagem de marcação extensível)
6
7. Introdução
A aplicação desenvolvida durante o estágio recebeu o nome “Coleta”, sendo esta composta por dois
módulos: O aplicativo de coleta de dados para ser executado no PDA, utilizando a máquina virtual
SuperWaba1
, e a aplicação servidora, responsável pelo recebimento dos dados dos questionários
armazenados no PDA através de uma conexão TCP/IP.
O aplicativo de coleta para o PDA foi desenvolvido utilizando a linguagem Java, o SuperWaba SDK
e a IDE Eclipse. Já a aplicação servidora foi desenvolvida utilizando a ferramenta RAD Borland C++
Builder.
1
Disponível em http://www.superwaba.com.br
7
8. Tecnologia utilizada
Abaixo, temos uma breve descrição das tecnologias utilizadas na implementação do aplicativo de
coleta de dados sócio-econômicos.
O Java
Java é uma linguagem de programação com sintaxe equivalente a sintaxe do C++, porém, totalmente
orientada a objetos, criada pela Sun Microsystems, cujo objetivo inicial era ser utilizada em qualquer
dispositivo dotado de um processador e uma máquina virtual, como por exemplo: receptores de
televisão a cabo [HORSTMANN & CORNELL, 2000].
Com o passar do tempo, o Java tornou-se popular e hoje é uma das linguagens mais utilizadas para o
desenvolvimento de aplicações. Sua utilização abrange desde a criação de jogos para celular até o
desenvolvimento de aplicações corporativas de alto desempenho.
Um dos grandes diferenciais da linguagem Java em relação às outras linguagens do mercado reside
em sua portabilidade. A portabilidade decorre do fato de as aplicações desenvolvidas em Java
necessitarem de uma máquina virtual para serem executadas. Portanto, uma mesma aplicação pode
ser utilizada em plataformas Microsoft Windows, Linux, Unix ou Apple Macintosh sem que seja
necessário fazer uma única alteração, desde que haja uma máquina virtual Java disponível.
O SuperWaba
O SuperWaba é uma plataforma de código-fonte aberto para desenvolvimento de aplicações para
dispositivos portáteis (PDA’s), criada em 2000, derivada da máquina virtual Waba. SuperWaba é
distribuído na forma de um kit de desenvolvimento de software (SDK) contendo uma máquina
virtual, uma biblioteca de classes e programas utilitários para compilação e geração das aplicações.
Devido à maneira como o SuperWaba foi desenvolvido, pode-se usar ferramentas de
desenvolvimento Java para desenvolver programas em SuperWaba. No entanto, SuperWaba não é
derivado do Java e não tem conexão com a Sun Microsystems, a proprietária da marca Java e marcas
relacionadas.
Principais características do SuperWaba
Máquina virtual:
• É suportada por uma ampla gama de plataformas: PalmOS (2.0 e acima), WindowsCE (2.11
e acima), Windows 98/ME/NT/2000/XP, Linux (utilizando Wine), Mac OS-X, JDK 1.1 ou
superior;
• Permite a criação de bibliotecas nativas em C para todas as plataformas;
8
9. • Tem suporte total a Unicode;
• Tem suporte para telas em escala de cinza (PalmOS 2.0 e acima), coloridas e com alta
resolução em todos os PDA’s suportados;
• Suporte para exceções, tipos double e long (64 bits de precisão);
• Utilização total da memória dos PDA’s: a máquina virtual do SuperWaba utiliza a memória
disponível para aplicações (PalmOS 2.0 e acima).
Bibliotecas de extensão:
• Container para exibição de HTML;
• Manipulador de XML;
• Classes para exibição de informações de dispositivos GPS, baseadas no protocolo GPS da
Garmin (fabricante de equipamentos GPS);
• Suporte para Symbol® Scanners no Windows CE e PalmOS;
• Suporte para leitura de arquivos no formato PalmDoc e PalmZip;
• Suporte para algoritmos de criptografia: Blowfish, MD5, SHA1, TEA;
• Personal Information Management Abstract Layer (PIMal): acesso a informações PIM em
plataformas Windows CE e PalmOS de forma independente de plataforma;
• API para desenvolvimento de jogos;
Entrada/saída:
• Suporte para TCP/IP, porta serial, USB, infravermelho, bluetooth;
• Suporte para Secure Digital e Memory Stick card;
• O formato PDB, utilizado no PalmOS, foi portado para Windows CE, fazendo com que os
arquivos de dados possam ser utilizados em ambas as plataformas sem qualquer modificação;
• Camada de acesso a dados, com uma implementação para o banco de dados IBM DB2e e
uma para manipulação de arquivos PDB (PDBDriver);
• Recursos de impressão.
Interface do usuário:
• Dois estilos diferentes: PalmOS e Windows CE;
• Em ambos os estilos, todos os controle tem um estado visível quando desabilitados;
• Janelas popup podem ser movidas;
• Controle de posicionamento dos componentes permite o ajuste da aplicação em qualquer
resolução.
9
10. O SDK do SuperWaba inclui:
A máquina virtual, compilada para 15 plataformas;
A biblioteca de classes, que contem os seguintes pacotes:
• waba.fx: som (wave e tons), fontes customizadas, bitmaps, e uma poderosa classe para o
desenho de círculos, linhas, polígonos, imagens, etc;
• waba.io: classes para as operações de entrada/saída;
• waba.sys: acesso a várias configurações dos PDA’s, como versão da ROM, nome do usuário,
formatos, plataforma em execução, etc;
• waba.ui: interface básica com usuário;
• waba.util: classes de estruturas de dados;
• Pacotes de extensão.
Utilitários para o desenvolvedor:
• warp: usado para empacotar as classes em arquivos PDB, que podem ser sincronizados nos
PDA’s (Windows CE e PalmOS);
• exegen: cria atalhos para as aplicações com ícones customizados e arquivos para instalação
em WindowsCE;
• TTF2PDBs: converte fontes truetype em arquivos PDB para serem usadas nos PDA’s;
• scripts para automatizar a geração das aplicações.
Documentação, exemplos e o código-fonte da máquina virtual.
Como desenvolver aplicações em SuperWaba?
Para desenvolver aplicações em SuperWaba é necessário ter apenas o SDK e um editor de textos.
Porém, o trabalho será mais agradável se for utilizado um ambiente integrado de desenvolvimento
(IDE), como o Eclipse ou Borland JBuilder.
Neste trabalho, a IDE utilizada foi o Eclipse2
(versão 2.1), devido à facilidade encontrada para
configurá-la para compilar e gerar aplicações utilizando o SDK do SuperWaba.
A seguir, na figura 1, é mostrado o ambiente principal do Eclipse:
2
Disponível em http://www.eclipse.org
10
11. Figura 1: Ambiente da IDE Eclipse
O Eclipse é uma IDE desenvolvida inicialmente pela IBM, disponibilizada na forma de software
livre, e atualmente é o produto do desenvolvimento colaborativo de uma grande comunidade de
programadores ao redor do mundo. O Eclipse foi a ferramenta usada para o desenvolvimento do
aplicativo Coleta.
Os passos para se desenvolver uma aplicação em SuperWaba utilizando a IDE Eclipse consistem
basicamente em:
• Configuração do Eclipse para compilar e gerar aplicações em SuperWaba;
• Criação do ambiente de desenvolvimento da aplicação, incluindo a definição do diretório
onde é armazenado o projeto, o código-fonte, os arquivos de configuração e o script
build.xml utilizado para a geração da aplicação;
• Desenvolvimento e testes;
• Geração dos executáveis para a plataforma de destino;
• Transferência da aplicação e dos arquivos de dados para o PDA;
11
12. Solução Proposta
O aplicativo de coleta de dados sócio-econômicos é baseado em um questionário sócio-econômico
utilizado pelo IBGE (Instituto Brasileiro de Geografia e Estatística), em anexo.
O questionário contém informações sobre o domicílio do entrevistado e sobre cada morador deste
domicílio. Portanto, a aplicação de coleta de dados deve permitir:
• Coletar e armazenar informações sobre o domicílio do entrevistado;
• Coletar e armazenar informações sobre os moradores de cada domicílio pesquisado;
• Gerenciar os dados armazenados, permitindo a inclusão, a alteração, a exclusão e a consulta;
• Transmitir os dados armazenados para um servidor central.
A aplicação é composta dos seguintes módulos:
• Módulo de Coleta de dados a ser executado no PDA;
• Módulo servidor de recepção de dados;
O módulo de coleta de dados será utilizado pelo usuário que fará as entrevistas utilizando um PDA
para armazenar os dados do questionário. O módulo servidor será executado em um
microcomputador responsável por receber os dados armazenados nos PDA utilizados pelos
entrevistadores, através de uma conexão TCP/IP.
12
13. Modelagem da aplicação
A modelagem da aplicação foi feita com base na notação UML (Unified Modeling Language)
[FURLAN, 1998]. A UML é uma linguagem gráfica para visualização, especificação, construção e
documentação de sistemas de software, utilizando as técnicas de orientação a objeto. Essa linguagem
proporciona uma forma padrão para a preparação de planos para a arquitetura de projetos de
sistemas, incluindo aspectos conceituais, tais como processos de negócios e funções do sistema,
além de itens concretos, como as classes escritas em uma determinada linguagem de programação, e
esquemas de bancos de dados e componentes de software reutilizáveis [FURLAN, 1998].
A modelagem do sistema será apresentada basicamente através de quatro dos diagramas disponíveis
na UML:
• O diagrama de casos de uso, que descreve a funcionalidade do sistema percebida por atores
externos. Um ator interage com o sistema podendo ser um usuário, dispositivo ou outro sistema.
• O diagrama de classes, que denota a estrutura estática do sistema onde cada classe representa
coisas ou entidades que serão manipulados pelo sistema, mostrando também o relacionamento
existente entre elas;
• O diagrama de componentes fornecerá uma visão geral dos módulos do sistema;
• O diagrama de implantação fornecerá uma idéia de como o sistema estará organizado após sua
implantação
Na modelagem da solução também foram utilizados alguns conceitos da análise estruturada moderna
de Yourdon [YOURDON, 1990] para a representação dos modelos de dados, e as ferramentas de
diagramação que utilizaremos são o diagrama de entidade-relacionamento e o modelo de entidade-
relacionamento.
Utilizaremos o diagrama de entidade-relacionamento para detalhar a estrutura e a organização dos
dados que o sistema irá tratar. Usaremos também o Modelo de Entidade-Relacionamento (MER),
onde temos a representação das entidades e a descrição de nome e tipo dos campos que as compõem
e ainda temos o nome lógico dos relacionamentos entre as entidades, representando assim a estrutura
física dos dados.
Todos os diagramas foram desenhados utilizando uma versão de demonstração da ferramenta de
modelagem PowerDesigner, versão 9.5.2, desenvolvida pela Sybase, Inc.
Nas próximas seções serão apresentados os diagramas e respectivas descrições.
Especificação de Casos de Uso
13
14. Na especificação de casos de uso apresentamos uma visão geral da aplicação e das entidades
externas (atores) que estarão interagindo com ela.
Na figura 2, mostramos as interações que deverão ocorrer entre os usuários e os módulos da
aplicação:
Administrador
Validar dados
Usuário
Entrevista pessoa
Fornece entrada de dados
Transmite dados armazenados
Fornece dados
Pessoa
Aplicativo Servidor Coleta
Gerenciar permissões de acesso
Aplicativo Palm Coleta
Tratar & armazenar dados recebidos
Banco de dados (SGBD)
Remover permissão de acesso ao usuário
Dar permissão de acesso ao usuário
Figura 2: Diagrama de casos de uso
14
15. Diagrama de Classes
No diagrama de classes, conforme representado pela figura 3 e figura 4, definimos as entidades
envolvidas com a aplicação de acordo com o paradigma da orientação a objeto, onde se representa a
classe com seus atributos e operações.
O modelo de classes é obtido a partir da análise das especificações de requisitos do sistema e da
análise dos casos de uso. Serão apresentados dois diagramas de classes, o primeiro foi desenhado
antes do início da implementação do aplicativo de coleta, e o segundo obtido após a versão final da
aplicação, através de engenharia reversa do código-fonte do aplicativo de coleta.
1..1
0..*
1..1
0..1
1..1
0..*
1..1
0..*
1..1
0..*
0..1
0..*
1..1
0..*
1..1
0..*
1..1
0..*
1..1
0..*
1..1
0..*
1..1
0..*
1..1
0..*
1..1
0..*
1..1
0..*
1..1
0..*
1..1
0..*
1..1
0..*
1..1
0..*
1..1
0..*
1..1
0..*
1..1
0..*
1..1
0..*
Especie
+
+
Especie
Descricao
: java.lang.Long
: java.lang.String
Tipo
+
+
Tipo
Descricao
: java.lang.Long
: java.lang.String
Situacao
+
+
Situacao
Descricao
: java.lang.Long
: java.lang.String
Situacao_terreno
+
+
Situacao_terreno
Descricao
: java.lang.Long
: java.lang.String
Forma_abastecimento_agua
+
+
Forma_abastecimento_agua
Descricao
: java.lang.Long
: java.lang.String
Forma_canalizacao_agua
+
+
Forma_canalizacao_agua
Descricao
: java.lang.Long
: java.lang.String
Destino_dejetos
+
+
Destino_dejetos
Descricao
: java.lang.Long
: java.lang.String
Destino_lixo
+
+
Destino_lixo
Descricao
: java.lang.Long
: java.lang.String
Tipo_relacao
+
+
Tipo_relacao
Descricao
: java.lang.Long
: java.lang.String
Grau_instrucao
+
+
Grau_instrucao
Descricao
: java.lang.Long
: java.lang.String
Estado_civil
+
+
Estado_civil
Descricao
: java.lang.Long
: java.lang.String
Etinia
+
+
Etinia
Descricao
: java.lang.Long
: java.lang.String
Municipio
+
+
Municipio
Nome
: java.lang.Long
: java.lang.String
Estado
+
+
Estado
Nome
: java.lang.String
: java.lang.String
Distrito
+
+
Distrito
Nome
: java.lang.Long
: java.lang.String
Ocupacao
+
+
Ocupacao
Descricao
: java.lang.Long
: java.lang.String
Coleta
+
#
+
<<Constructor>>
<<Destructor>>
Coleta ()
finalize ()
Transmitir_dados (java.lang.String Servidor, java.lang.Integer Porta, java.lang.Integer Metodo)
: void
: java.lang.Boolean
Questionario
+
+
+
+
Questionario
Homens
Mulheres
Logradouro
: java.lang.Long
: java.lang.Integer
: java.lang.Integer
: java.lang.String
+
#
+
<<Constructor>>
<<Destructor>>
Questionario ()
finalize ()
Validar ()
: void
: java.lang.Boolean
Domicilio : 1
+
+
Domicilio
Tem_sanitario
: java.lang.Long
: java.lang.Boolean
+
#
<<Constructor>>
<<Destructor>>
Domicilio ()
finalize () : void
Morador
+
+
+
+
+
+
+
+
Morador
Nome
Sexo
Resp_domicilio
Data_nasc
Idade_presumida
Alfabetizado
Renda_mensal
: java.lang.Long
: java.lang.String
: java.lang.String
: java.lang.Boolean
: java.util.Date
: java.lang.Integer
: java.lang.Boolean
: java.lang.Double
+
#
<<Constructor>>
<<Destructor>>
Morador ()
finalize () : void
Domicilio_particular_permanente
+ Num_banheiros : java.lang.Integer
+
#
<<Constructor>>
<<Destructor>>
Domicilio_particular_permanente ()
finalize ()
ItemBD : 1
+
+
id
tabela
: java.lang.Long
: java.lang.String
+
#
+
+
+
+
+
+
+
+
<<Constructor>>
<<Destructor>>
<<Getter>>
<<Setter>>
<<Getter>>
<<Setter>>
ItemBD ()
finalize ()
Obter_dados ()
Gravar_dados ()
Excluir_dados ()
Novo_id ()
getId ()
setId (java.lang.Long newId)
getTabela ()
setTabela (java.lang.String newTabela)
: void
: java.lang.Boolean
: java.lang.Boolean
: java.lang.Boolean
: java.lang.Long
: java.lang.Long
: void
: java.lang.String
: void
Domicilio : 2
+
+
Domicilio
Tem_sanitario
: java.lang.Long
: java.lang.Boolean
+
#
<<Constructor>>
<<Destructor>>
Domicilio ()
finalize () : void
ItemBD : 2
+
+
id
tabela
: java.lang.Long
: java.lang.String
+
#
+
+
+
+
+
+
+
+
<<Constructor>>
<<Destructor>>
<<Getter>>
<<Setter>>
<<Getter>>
<<Setter>>
ItemBD ()
finalize ()
Obter_dados ()
Gravar_dados ()
Excluir_dados ()
Novo_id ()
getId ()
setId (java.lang.Long newId)
getTabela ()
setTabela (java.lang.String newTabela)
: void
: java.lang.Boolean
: java.lang.Boolean
: java.lang.Boolean
: java.lang.Long
: java.lang.Long
: void
: java.lang.String
: void
Figura 3: Diagrama de classes inicial (ver ANEXO IV)
15
16. questionario
domicilio
domicilio_part
morador
lista
dados
tabela
Coleta
-
-
-
-
-
+
+
-
-
-
*
*
*
*
*
*
-
-
-
tbPrincipal
btIniciar
btTransmitir
btLista
btFinalizar
server_trans
porta_trans
ult_erro_socket
ult_resultado
Trans
questionario
domicilio
domicilio_part
morador
lista
nm_cat_questionario
cat_questionario
rs_questionario
ds_questionario
: TabPanel
: Button
: Button
: Button
: Button
: String
: int
: int
: String
: String
: UIQuestionario
: UIDomicilio
: UIDomicilio_particular_permanente
: UIMorador
: UILista
: String
: Catalog
: ResizeStream
: DataStream
= "127.0.0.1"
= 6000
= ""
= "QUES.COLE.QUES"
+
+
+
+
+
+
+
+
+
+
+
+
+
<<Constructor>> Coleta ()
onStart ()
Transmitir_dados (String Servidor, int Porta)
limpaControles ()
novoIdQuestionario ()
abreCatalogo (boolean limpar)
fechaCatalogo ()
gravarDados ()
apagaQuestionario (long id_quest)
apagaMoradores (long id_quest)
atualizaNumHM (long id_quest)
carregaQuestionario (long id_quest)
onEvent (Event event)
: void
: boolean
: void
: long
: boolean
: void
: boolean
: boolean
: boolean
: void
: boolean
: void
<<SuperWaba>>
MainWindow
DataGrid
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
NEXT
PREV
SAME
FIRST
LAST
linesPerPage
cols
captions
tdColors
lineSelected
widths
xb
yb
wb
hb
x0
gscr
ce
lineH
firstDraw
startLine
endLine
minLines
: int
: int
: int
: int
: int
: int
: int
: String[]
: Color[]
: int
: int[]
: int
: int
: int
: int
: int
: Graphics
: ControlEvent
: int
: boolean
: int
: int
: int
= 0
= 1
= 2
= 3
= 4
= null
= {Color.BLACK,Color.BLACK,Color.BLACK,Color.BLACK}
= -1
= null
= 12
= 4
= 12
= new ControlEvent(ControlEvent.PRESSED,this)
= true
= 1
= 1
= 3
+
+
+
+
#
+
+
+
+
+
-
-
-
-
-
<<Constructor>> DataGrid (GridModel ds)
getPreferredHeight ()
getPreferredWidth ()
setGridModel (GridModel ds)
onBoundsChanged ()
onPaint (Graphics screen)
selectedLine ()
resetSelection ()
scroll (int direction)
onEvent (Event event)
getRow (int rowIdx)
getMaxWidth (int colIdx)
drawCols (Graphics screen, int ky)
drawRow (Graphics screen, String data[], int ky, boolean isTitle)
drawWaitCursor (boolean draw)
: int
: int
: void
: void
: void
: int
: void
: boolean
: void
: String[]
: int
: void
: void
: void
<<SuperWaba>>
Control
DataSet
- dataSet : String[]
+
+
+
+
+
+
+
+
+
+
+
+
<<Constructor>> DataSet (int ySize, int xSize)
getColumnCount ()
getItemCount ()
getPreferredColumnWidth (int columnIndex)
getPreferredRowHeight (int columnIndex)
getRowCount ()
getSelected (int rowIdx, int colIdx)
getValidChars (int rowIdx, int colIdx)
getValueAt (int rowIdx, int colIdx)
isCellEditable (int rowIdx, int colIdx)
isHeader (int rowIdx)
setValueAt (Object val, int rowIdx, int colIdx)
: int
: int
: int
: int
: int
: Object
: String
: Object
: boolean
: boolean
: void
UIDomicilio
+
+
+
+
+
+
+
+
+
+
+
btGravar
btCancelar
btAvancar
cbSanitario
lbEspecie
lbDestLixo
lbDestDejetos
cmbEspecie
cmbDestLixo
cmbDestDejetos
containerAtual
: Button
: Button
: Button
: Check
: Label
: Label
: Label
: ComboBox
: ComboBox
: ComboBox
: Container
= new Button("Gravar")
= new Button("Cancelar")
= new Button("Avançar >")
= new Check("Possui sanitário?")
= new Label("Espécie:")
= new Label("Destino do lixo:")
= new Label("Destino dos dejetos:")
= new ComboBox()
= new ComboBox()
= new ComboBox()
+
+
+
+
+
+
+
+
<<Constructor>> UIDomicilio ()
alinharControles ()
adicionarEm (Container container)
setarEdits ()
setarCombos ()
removerDe (Container container)
gravarDados ()
manipulaEvento (Event evento)
: void
: void
: void
: void
: void
: boolean
: void
UIDomicilio_particular_permanente
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
btGravar
btCancelar
btVoltar
edtNumBanheiros
lbNumBanheiros
lbFAbastAgua
lbFCanAgua
lbTipo
lbSituacao
lbSitTerreno
cmbFAbastAgua
cmbFCanAgua
cmbTipo
cmbSituacao
cmbSitTerreno
containerAtual
: Button
: Button
: Button
: Edit
: Label
: Label
: Label
: Label
: Label
: Label
: ComboBox
: ComboBox
: ComboBox
: ComboBox
: ComboBox
: Container
= new Button("Gravar")
= new Button("Cancelar")
= new Button("< Voltar")
= new Edit()
= new Label("Nº banheiros:")
= new Label("Abast. água:")
= new Label("Canal. água:")
= new Label("Tipo:")
= new Label("Situação:")
= new Label("Sit. terreno:")
= new ComboBox()
= new ComboBox()
= new ComboBox()
= new ComboBox()
= new ComboBox()
+
+
+
+
+
+
+
+
<<Constructor>> UIDomicilio_particular_permanente ()
alinharControles ()
adicionarEm (Container container)
setarEdits ()
setarCombos ()
removerDe (Container container)
gravarDados ()
manipulaEvento (Event evento)
: void
: void
: void
: void
: void
: boolean
: void
UILista
+
+
+
+
+
+
+
*
-
-
-
btAtualizar
btCarregar
btApagar
lbNumReg
dados
tabela
containerAtual
nm_cat_questionario
cat_questionario
rs_questionario
ds_questionario
: Button
: Button
: Button
: Label
: DataSet
: DataGrid
: Container
: String
: Catalog
: ResizeStream
: DataStream
= new Button("Atualizar")
= new Button("Abrir")
= new Button("Apagar")
= new Label("Número de registros:")
= "QUES.COLE.QUES"
+
+
+
+
+
+
+
+
<<Constructor>> UILista ()
alinharControles ()
adicionarEm (Container container)
abreCatalogo (boolean limpar)
fechaCatalogo ()
atualizarTabela ()
removerDe (Container container)
manipulaEvento (Event evento)
: void
: void
: boolean
: void
: void
: void
: void
UIMorador
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
*
+
+
+
+
btGravar
btCancelar
btAdicionar
btRemover
btExibir
btVoltar
edtNome
edtDataNascimento
edtIdadePresum
edtRendaMensal
lbMoradores
lbNome
lbSexo
lbDataNascimento
lbIdadePresum
lbRendaMensal
lbGrauInstr
lbEstCivil
lbOcupacao
lbEtinia
lbTipoRelacaoRespDom
lbLocalNasc
cmbMoradores
cmbSexo
cmbGrauInstr
cmbEstCivil
cmbOcupacao
cmbEtinia
cmbTipoRelacaoRespDom
cmbEstadoNasc
cmbMunicipioNasc
cbAlfabetizado
cbRespDomicilio
containerAtual
nm_cat_morador
cat_morador
rs_morador
ds_morador
questionario
: Button
: Button
: Button
: Button
: Button
: Button
: Edit
: Edit
: Edit
: Edit
: Label
: Label
: Label
: Label
: Label
: Label
: Label
: Label
: Label
: Label
: Label
: Label
: ComboBox
: ComboBox
: ComboBox
: ComboBox
: ComboBox
: ComboBox
: ComboBox
: ComboBox
: ComboBox
: Check
: Check
: Container
: String
: Catalog
: ResizeStream
: DataStream
: long
= new Button("Gravar")
= new Button("Cancelar")
= new Button("Adicionar Morador")
= new Button("Excluir Morador")
= new Button("Exibir Morador")
= new Button("Ok")
= new Edit()
= new Edit()
= new Edit()
= new Edit()
= new Label("Moradores do domicílio:")
= new Label("Nome:")
= new Label("Sexo:")
= new Label("Data nasc.:")
= new Label("Idade:")
= new Label("Renda:")
= new Label("Grau instr.:")
= new Label("Estado civil:")
= new Label("Ocup.:")
= new Label("Etn.:")
= new Label("Rel. c/ resp. domic.:")
= new Label("Local nasc.:")
= new ComboBox()
= new ComboBox()
= new ComboBox()
= new ComboBox()
= new ComboBox()
= new ComboBox()
= new ComboBox()
= new ComboBox()
= new ComboBox()
= new Check("Alfabetizado")
= new Check("Resp. domicílio")
= "MORA.COLE.MORA"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
<<Constructor>> UIMorador ()
alinharControles ()
limpaControles ()
alinharControlesMorador ()
adicionarEm (Container container)
setarEdits ()
setarCombos ()
removerDe (Container container)
preparaMorador (Container container)
despreparaMorador (Container container)
exibirMorador ()
adicionarMorador ()
removerMorador ()
gravarDados ()
abreCatalogo (boolean limpar)
fechaCatalogo ()
manipulaEvento (Event evento)
: void
: void
: void
: void
: void
: void
: void
: void
: void
: boolean
: void
: boolean
: boolean
: boolean
: void
: void
UIQuestionario
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
btGravar
btCancelar
btDomicilio
btMorador
btDetectaGPS
edtQuestionario
edtHomens
edtMulheres
edtLogradouro
edtCoordGPS
lbQuestionario
lbHomens
lbMulheres
lbLogradouro
lbEstado
lbCidade
lbDistrito
lbCoordGPS
cmbEstado
cmbCidade
cmbDistrito
questionario
containerAtual
: Button
: Button
: Button
: Button
: Button
: Edit
: Edit
: Edit
: Edit
: Edit
: Label
: Label
: Label
: Label
: Label
: Label
: Label
: Label
: ComboBox
: ComboBox
: ComboBox
: long
: Container
= new Button("Gravar")
= new Button("Cancelar")
= new Button("Domicilio")
= new Button("Moradores")
= new Button("GPS")
= new Edit()
= new Edit()
= new Edit()
= new Edit()
= new Edit()
= new Label("Nº do Questionario:")
= new Label("Homens:")
= new Label("Mulheres:")
= new Label("Logr.:")
= new Label("UF:")
= new Label("Cidade:")
= new Label("Distrito/localidade:")
= new Label("Coord. GPS:")
= new ComboBox()
= new ComboBox()
= new ComboBox()
+
+
+
+
+
+
+
+
<<Constructor>> UIQuestionario ()
alinharControles ()
adicionarEm (Container container)
setarEdits ()
setarCombos ()
removerDe (Container container)
gravarDados ()
manipulaEvento (Event evento)
: void
: void
: void
: void
: void
: boolean
: void
Figura 4: Diagrama de classes final (ver ANEXO IV)
Diagrama de Componentes e Implantação
O diagrama de componentes, conforme mostrado na figura 5, nos dá uma visão das partes que
formam a aplicação. O diagrama de implementação nos dá uma idéia de como a aplicação estará
disposta em seu ambiente após sua implantação, como mostra a figura 6.
16
17. Classes de Interface
Tabelas de dados pdb (Palm Database)
Classes auxiliares
Figura 5: Diagrama de componentes
Coleta
Banco de dados
Servidor Coleta
Conexão TCP/IP
via socket
(rede local,
intranet ou
internet)
Dados
coletados
Funções
exportadas
Comandos SQL
Dados e
Aplicativo
desktop
(PC & MS-Windows
compatível)
Aplicação
java em
dispositivo Palm,
WindowsCE ou
PocketPC
Interbase ou Firebird
(Linux & MS-Windows)
Figura 6: Diagrama de implantação
17
18. Modelagem dos Dados
Devemos ressaltar que a modelagem dos dados apresenta a estrutura de armazenamento de dados
que deverá ser manipulada pela aplicação servidora, que receberá os dados armazenados nos PDA´s
e fará o seu armazenamento em um SGBD relacional. Já o aplicativo de coleta de dados, executado
no PDA, utiliza um esquema simples de tabelas de dados, sem qualquer inter-relacionamento ou
integridade referencial.
Modelo Lógico
No DER (Diagrama de entidade-relacionamento), representado pela figura 7, apresentamos a
estrutura lógica de armazenamento dos dados que a aplicação deverá tratar. Nota-se que no DER
mostramos apenas a estrutura de entidades (que futuramente se tornarão tabelas de banco de dados)
e os seus relacionamentos, e não nos preocupamos em mostrar os atributos ou campos de cada
entidade.
Questionario
Morador
Domicilio
Especie
Tipo
Situacao
Situacao_terreno
Forma_abastecimento_agua
Forma_canalizacao_agua
Destino_dejetos
Destino_lixo
Tipo_relacao
Grau_instrucao
Estado_civil
Etinia
Municipio
Estado
Distrito
Ocupacao
Figura 7: Diagrama de entidade-relacionamento
Modelo Físico
No MER (Modelo de entidade-relacionamento), enfatizamos a estrutura física das entidades e seus
inter-relacionamentos, mostrando para cada entidade, todos os seus campos e tipos de dados e para
cada relacionamento, o nome físico do mesmo, e ainda todas as chaves primárias e estrangeiras de
cada entidade, conforme apresentado na figura 8.
18
19. A estrutura física dos dados foi formatada e especificada para ser compatível com o gerenciador de
banco de dados Firebird (compatível com o Interbase, da Borland).
FK_DISTRITO_MUNICIPIO
FK_MUNICIPIO_ESTADO
FK_QUESTIONARIO_DISTRITO
FK_QUESTIONARIO_MUNICIPIO
FK_QUESTIONARIO_ESTADO
FK_DOMICILIO_SIT
FK_DOMICILIO_DESTLIXO
FK_DOMICILIO_FAGUA
FK_DOMICILIO_ESPECIE FK_DOMICILIO_FORCANAGUA
FK_DOMICILIO_DESTDEJ
FK_DOMICILIO_TIPO
FK_DOMICILIO_SITUACAO
FK_DOMICILIO_QUEST
FK_MORADOR_OCUPACAO
FK_MORADOR_ETINIA
FK_MORADOR_GINST
FK_MORADOR_TRELFK_MORADOR_ESTCIVIL
FK_MORA_MUN_NASCIMENTO
FK_MORA_EST_NASCIMENTO
FK_MORADOR_DOMICILIO
Questionario
Questionario
Distrito
Municipio
Estado
Homens
Mulheres
Logradouro
long integer
long integer
long integer
character(2)
integer
integer
variable character(200)
<pk>
<fk1>
<fk2>
<fk3>
Morador
Morador
Tipo_relacao
Etinia
Estado_civil
Ocupacao
Municipio
Grau_instrucao
Estado
Domicilio
Nome
Sexo
Resp_domicilio
Data_nasc
Idade_presumida
Alfabetizado
Renda_mensal
long integer
long integer
long integer
long integer
long integer
long integer
long integer
character(2)
long integer
variable character(100)
character(1)
boolean
date
integer
boolean
decimal(9,2)
<pk>
<fk4>
<fk2>
<fk5>
<fk1>
<fk6>
<fk3>
<fk7>
<fk8>
Domicilio
Domicilio
Especie
Destino_dejetos
Forma_abastecimento_agua
Tipo
Forma_canalizacao_agua
Situacao
Destino_lixo
Situacao_terreno
Questionario
Tem_sanitario
Num_banheiros
long integer
long integer
long integer
long integer
long integer
long integer
long integer
long integer
long integer
long integer
boolean
integer
<pk>
<fk4>
<fk6>
<fk3>
<fk7>
<fk5>
<fk8>
<fk2>
<fk1>
<fk9>
Especie
Especie
Descricao
long integer
variable character(60)
<pk>
Tipo
Tipo
Descricao
long integer
variable character(60)
<pk>
Situacao
Situacao
Descricao
long integer
variable character(60)
<pk>
Situacao_terreno
Situacao_terreno
Descricao
long integer
variable character(60)
<pk>
Forma_abastecimento_agua
Forma_abastecimento_agua
Descricao
long integer
variable character(60)
<pk>
Forma_canalizacao_agua
Forma_canalizacao_agua
Descricao
long integer
variable character(60)
<pk>
Destino_dejetos
Destino_dejetos
Descricao
long integer
variable character(60)
<pk>
Destino_lixo
Destino_lixo
Descricao
long integer
variable character(60)
<pk>
Tipo_relacao
Tipo_relacao
Descricao
long integer
variable character(60)
<pk>
Grau_instrucao
Grau_instrucao
Descricao
long integer
variable character(60)
<pk>
Estado_civil
Estado_civil
Descricao
long integer
variable character(60)
<pk>
Etinia
Etinia
Descricao
long integer
variable character(60)
<pk>
Municipio
Municipio
Estado
Nome
long integer
character(2)
variable character(100)
<pk>
<fk>
Estado
Estado
Nome
character(2)
variable character(100)
<pk>
Distrito
Distrito
Municipio
Nome
long integer
long integer
variable character(100)
<pk>
<fk>
Ocupacao
Ocupacao
Descricao
long integer
variable character(60)
<pk>
Figura 8: Modelo de entidade-relacionamento
19
20. Interface da aplicação
Módulo de coleta de dados para o PDA
As telas do aplicativo de coleta foram capturadas a partir de um emulador do sistema operacional
PalmOS, desenvolvido e distribuído pela Palm Computing.
Figura 9: Tela inicial do aplicativo
20
21. Figura 10: Tela de detalhes do questionário
Figura 11: Tela de detalhes do domicílio
21
22. Figura 12: Tela de detalhes do domicílio particular permanente
Figura 13: Tela de listagem de moradores do domicílio
22
23. Figura 14: Tela de detalhes do morador do domicílio
Figura 15: Tela de listagem e manipulação de questionários armazenados
23
24. Figura 16: Mensagem de início da transmissão de dados
Módulo servidor de recepção de dados
As telas da aplicação servidora foram capturadas a partir da aplicação em execução, as quais
demonstram a aplicação aguardando uma conexão (figura 17), a aplicação exibindo os dados
recebidos (figura 18) de um PDA emulado e o resultado dos dados transmitidos armazenados em
um arquivo XML para processamento posterior (figura 19).
24
25. Figura 17: Aplicação servidora aguardando dados
Figura 18: Dados recebidos pela aplicação servidora
25
27. Considerações finais
Espera-se que este relatório tenha dado uma visão geral do aplicativo de coleta de dados sócio-
econômicos desenvolvido durante o estágio supervisionado. Além do aplicativo de coleta, foi
desenvolvido um protótipo de servidor para recepção de dados através de conexão TCP/IP. Para
trabalhos futuros temos a implementação de novas funcionalidades e recursos para armazenamento e
gerenciamento dos dados armazenados em SGBD pela aplicação servidora.
27
28. Referências
[FURLAN, 1998] Furlan, José Davi. Modelagem de Objetos através da UML – the Unified
Modeling Language. São Paulo: Makron Books, 1998.
[HORSTMANN & CORNELL, 2000] Horstmann, Cay S. & Cornell, Gary. Core Java™ 2 Volume
I - Fundamentals - 5th
Edition. USA: Prentice Hall PTR, 2000.
[YOURDON, 1990] Yourdon, Edward. Análise estruturada moderna. Tradução de Dalton Conde
de Alencar – Rio de Janeiro: Campus, 1990.
28