33
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

Embed Size (px)

Citation preview

Page 1: Relatório de estágio

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL

CENTRO UNIVERSITÁRIO DE DOURADOSDEPARTAMENTO 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.

Page 2: Relatório de estágio

Dourados/MS., 20 de agosto de 2004

2

Page 3: Relatório de estágio

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

Page 4: Relatório de estágio

Índice de texto

Lista de Figuras............................................................................................................................... 4

Lista de abreviações......................................................................................................................... 5

Introdução....................................................................................................................................... 6

Tecnologia utilizada........................................................................................................................ 7

O Java......................................................................................................................................... 7

O SuperWaba............................................................................................................................. 7

Principais características do SuperWaba.................................................................................7

O SDK do SuperWaba inclui:................................................................................................... 9

Como desenvolver aplicações em SuperWaba?........................................................................9

Solução Proposta........................................................................................................................... 11

Modelagem da aplicação............................................................................................................... 12

Especificação de Casos de Uso................................................................................................. 13

Diagrama de Classes................................................................................................................. 14

Diagrama de Componentes e Implantação.............................................................................15

Modelagem dos Dados.............................................................................................................. 17Modelo Lógico....................................................................................................................... 17Modelo Físico......................................................................................................................... 17

Interface da aplicação................................................................................................................... 19

Módulo de coleta de dados para o PDA..................................................................................19

Módulo servidor de recepção de dados...................................................................................23

Considerações finais...................................................................................................................... 26

Referências.................................................................................................................................... 27

Anexos........................................................................................................................................... 28

4

Page 5: Relatório de estágio

Lista de Figuras

Figura 1: Ambiente da IDE Eclipse................................................................................................ 10Figura 2: Diagrama de casos de uso................................................................................................ 13Figura 3: Diagrama de classes inicial (ver ANEXO IV).................................................................14Figura 4: Diagrama de classes final (ver ANEXO IV)....................................................................15Figura 5: Diagrama de componentes..............................................................................................16Figura 6: Diagrama de implantação................................................................................................ 16Figura 7: Diagrama de entidade-relacionamento.............................................................................17Figura 8: Modelo de entidade-relacionamento................................................................................18Figura 9: Tela inicial do aplicativo................................................................................................. 19Figura 10: Tela de detalhes do questionário.................................................................................... 20Figura 11: Tela de detalhes do domicílio........................................................................................ 20Figura 12: Tela de detalhes do domicílio particular permanente.....................................................21Figura 13: Tela de listagem de moradores do domicílio.................................................................21Figura 14: Tela de detalhes do morador do domicílio.....................................................................22Figura 15: Tela de listagem e manipulação de questionários armazenados.....................................22Figura 16: Mensagem de início da transmissão de dados................................................................23Figura 17: Aplicação servidora aguardando dados..........................................................................24Figura 18: Dados recebidos pela aplicação servidora......................................................................24Figura 19: Dados armazenados em XML........................................................................................ 25

5

Page 6: Relatório de estágio

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

Page 7: Relatório de estágio

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

Page 8: Relatório de estágio

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;

8

Page 9: Relatório de estágio

Permite a criação de bibliotecas nativas em C para todas as plataformas;

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

Page 10: Relatório de estágio

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

Page 11: Relatório de estágio

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

Page 12: Relatório de estágio

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

Page 13: Relatório de estágio

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.

13

Page 14: Relatório de estágio

Especificação de Casos de Uso

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

Page 15: Relatório de estágio

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++

EspecieDescricao

: java.lang.Long: java.lang.String

Tipo++

TipoDescricao

: java.lang.Long: java.lang.String

Situacao++

SituacaoDescricao

: java.lang.Long: java.lang.String

Situacao_terreno++

Situacao_terrenoDescricao

: java.lang.Long: java.lang.String

Forma_abastecimento_agua++

Forma_abastecimento_aguaDescricao

: java.lang.Long: java.lang.String

Forma_canalizacao_agua++

Forma_canalizacao_aguaDescricao

: java.lang.Long: java.lang.String

Destino_dejetos++

Destino_dejetosDescricao

: java.lang.Long: java.lang.String

Destino_lixo++

Destino_lixoDescricao

: java.lang.Long: java.lang.String

Tipo_relacao++

Tipo_relacaoDescricao

: java.lang.Long: java.lang.String

Grau_instrucao++

Grau_instrucaoDescricao

: java.lang.Long: java.lang.String

Estado_civil++

Estado_civilDescricao

: java.lang.Long: java.lang.String

Etinia++

EtiniaDescricao

: java.lang.Long: java.lang.String

Municipio++

MunicipioNome

: java.lang.Long: java.lang.String

Estado++

EstadoNome

: java.lang.String: java.lang.String

Distrito++

DistritoNome

: java.lang.Long: java.lang.String

Ocupacao++

OcupacaoDescricao

: 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++++

QuestionarioHomensMulheresLogradouro

: java.lang.Long: java.lang.Integer: java.lang.Integer: java.lang.String

+#+

<<Constructor>><<Destructor>>

Questionario ()finalize ()Validar ()

: void: java.lang.Boolean

Domicilio : 1++

DomicilioTem_sanitario

: java.lang.Long: java.lang.Boolean

+#

<<Constructor>><<Destructor>>

Domicilio ()finalize () : void

Morador++++++++

MoradorNomeSexoResp_domicilioData_nascIdade_presumidaAlfabetizadoRenda_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++

idtabela

: 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++

DomicilioTem_sanitario

: java.lang.Long: java.lang.Boolean

+#

<<Constructor>><<Destructor>>

Domicilio ()finalize () : void

ItemBD : 2++

idtabela

: 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

Page 16: Relatório de estágio

questionario

domicilio

domici lio_part

morador

lista

dados

tabela

Coleta-----++---******---

tbPrincipalbtIniciarbtTransmitirbtListabtFinalizarserver_transporta_transult_erro_socketult_resultadoTransquestionariodomiciliodomicilio_partmoradorlistanm_cat_questionariocat_questionariors_questionariods_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+++++------------------

NEXTPREVSAMEFIRSTLASTlinesPerPagecolscaptionstdColorslineSelectedwidthsxbybwbhbx0gscrcelineHfirstDrawstartLineendLineminLines

: 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+++++++++++

btGravarbtCancelarbtAvancarcbSanitariolbEspecielbDestLixolbDestDejetoscmbEspeciecmbDestLixocmbDestDejetoscontainerAtual

: 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++++++++++++++++

btGravarbtCancelarbtVoltaredtNumBanheiroslbNumBanheiroslbFAbastAgualbFCanAgualbTipolbSituacaolbSitTerrenocmbFAbastAguacmbFCanAguacmbTipocmbSituacaocmbSitTerrenocontainerAtual

: 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+++++++*---

btAtualizarbtCarregarbtApagarlbNumRegdadostabelacontainerAtualnm_cat_questionariocat_questionariors_questionariods_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++++++++++++++++++++++++++++++++++*++++

btGravarbtCancelarbtAdicionarbtRemoverbtExibirbtVoltaredtNomeedtDataNascimentoedtIdadePresumedtRendaMensallbMoradoreslbNomelbSexolbDataNascimentolbIdadePresumlbRendaMensallbGrauInstrlbEstCivillbOcupacaolbEtinialbTipoRelacaoRespDomlbLocalNasccmbMoradorescmbSexocmbGrauInstrcmbEstCivilcmbOcupacaocmbEtiniacmbTipoRelacaoRespDomcmbEstadoNasccmbMunicipioNasccbAlfabetizadocbRespDomiciliocontainerAtualnm_cat_moradorcat_moradorrs_moradords_moradorquestionario

: 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+++++++++++++++++++++++

btGravarbtCancelarbtDomiciliobtMoradorbtDetectaGPSedtQuestionarioedtHomensedtMulheresedtLogradouroedtCoordGPSlbQuestionariolbHomenslbMulhereslbLogradourolbEstadolbCidadelbDistritolbCoordGPScmbEstadocmbCidadecmbDistritoquestionariocontainerAtual

: 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

Page 17: Relatório de estágio

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)

Dadoscoletados

Funções exportadas

Comandos SQLDados e

Aplicativodesktop

(PC & MS-Windows compatível)

Aplicaçãojava em

dispositivo Palm, WindowsCE ou

PocketPC

Interbase ou Firebird(Linux & MS-Windows)

Figura 6: Diagrama de implantação

17

Page 18: Relatório de estágio

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

Page 19: Relatório de estágio

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

QuestionarioQuestionarioDistri toMunicipioEstadoHomensMulheresLogradouro

long integerlong integerlong integercharacter(2)integerintegervariable character(200)

<pk><fk1><fk2><fk3>

MoradorMoradorTipo_relacaoEtiniaEstado_civilOcupacaoMunicipioGrau_instrucaoEstadoDomicil ioNomeSexoResp_domicil ioData_nascIdade_presumidaAlfabetizadoRenda_mensal

long integerlong integerlong integerlong integerlong integerlong integerlong integercharacter(2)long integervariable character(100)character(1)booleandateintegerbooleandecimal(9,2)

<pk><fk4><fk2><fk5><fk1><fk6><fk3><fk7><fk8>

DomicilioDomicil ioEspecieDestino_dejetosForma_abastecimento_aguaTipoForma_canalizacao_aguaSituacaoDestino_lixoSituacao_terrenoQuestionarioTem_sanitarioNum_banheiros

long integerlong integerlong integerlong integerlong integerlong integerlong integerlong integerlong integerlong integerbooleaninteger

<pk><fk4><fk6><fk3><fk7><fk5><fk8><fk2><fk1><fk9>

EspecieEspecieDescricao

long integervariable character(60)

<pk>

TipoTipoDescricao

long integervariable character(60)

<pk>

SituacaoSituacaoDescricao

long integervariable character(60)

<pk>

Situacao_terrenoSituacao_terrenoDescricao

long integervariable character(60)

<pk>

Forma_abastecimento_aguaForma_abastecimento_aguaDescricao

long integervariable character(60)

<pk>

Forma_canalizacao_aguaForma_canalizacao_aguaDescricao

long integervariable character(60)

<pk>

Destino_dejetosDestino_dejetosDescricao

long integervariable character(60)

<pk>

Destino_lixoDestino_lixoDescricao

long integervariable character(60)

<pk>

Tipo_relacaoTipo_relacaoDescricao

long integervariable character(60)

<pk>

Grau_instrucaoGrau_instrucaoDescricao

long integervariable character(60)

<pk>

Estado_civilEstado_civilDescricao

long integervariable character(60)

<pk>

EtiniaEtiniaDescricao

long integervariable character(60)

<pk>

MunicipioMunicipioEstadoNome

long integercharacter(2)variable character(100)

<pk><fk>

EstadoEstadoNome

character(2)variable character(100)

<pk>

DistritoDistri toMunicipioNome

long integerlong integervariable character(100)

<pk><fk>

OcupacaoOcupacaoDescricao

long integervariable character(60)

<pk>

Figura 8: Modelo de entidade-relacionamento

19

Page 20: Relatório de estágio

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

Page 21: Relatório de estágio

Figura 10: Tela de detalhes do questionário

Figura 11: Tela de detalhes do domicílio

21

Page 22: Relatório de estágio

Figura 12: Tela de detalhes do domicílio particular permanente

Figura 13: Tela de listagem de moradores do domicílio

22

Page 23: Relatório de estágio

Figura 14: Tela de detalhes do morador do domicílio

Figura 15: Tela de listagem e manipulação de questionários armazenados

23

Page 24: Relatório de estágio

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

Page 25: Relatório de estágio

Figura 17: Aplicação servidora aguardando dados

Figura 18: Dados recebidos pela aplicação servidora

25

Page 26: Relatório de estágio

Figura 19: Dados armazenados em XML

26

Page 27: Relatório de estágio

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

Page 28: Relatório de estágio

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

Page 29: Relatório de estágio

Anexos

29