50
UNIVERSIDADE FEDERAL DE MATO GROSSO INSTITUTO DE COMPUTAÇÃO COORDENAÇÃO DE ENSINO DE GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO DESENVOLVIMENTO DE UM APLICATIVO PARA CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO CUIABÁ - MT 2016

Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

Embed Size (px)

Citation preview

Page 1: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

UNIVERSIDADE FEDERAL DE MATO GROSSOINSTITUTO DE COMPUTAÇÃO

COORDENAÇÃO DE ENSINO DE GRADUAÇÃO EM

CIÊNCIA DA COMPUTAÇÃO

DESENVOLVIMENTO DE UM APLICATIVO PARACONTROLE DE PRAGAS UTILIZANDO

ABORDAGEM CROSS-COMPILED

SIDNEI POLO

CUIABÁ - MT

2016

Page 2: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

UNIVERSIDADE FEDERAL DE MATO GROSSOINSTITUTO DE COMPUTAÇÃO

COORDENAÇÃO DE ENSINO DE GRADUAÇÃO EM

CIÊNCIA DA COMPUTAÇÃO

DESENVOLVIMENTO DE UM APLICATIVO PARACONTROLE DE PRAGAS UTILIZANDO

ABORDAGEM CROSS-COMPILED

SIDNEI POLO

Orientador: Prof. MSc. Jivago Medeiros Ribeiro

Relatório apresentado ao Curso de Ciência da Com-putação, do Instituto de Computação da Universi-dade Federal de Mato Grosso, como requisito paraobtenção do título de Bacharel em Ciência da Com-putação

CUIABÁ - MT

2016

Page 3: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

UNIVERSIDADE FEDERAL DE MATO GROSSOINSTITUTO DE COMPUTAÇÃO

COORDENAÇÃO DE ENSINO DE GRADUAÇÃO EMCIÊNCIA DA COMPUTAÇÃO

Sidnei Polo

Relatório de Estágio Supervisionado apresentado à Coordenação do Curso de Ciência daComputação como uma das exigências para obtenção do título de Bacharel em Ciência daComputação da Universidade Federal de Mato Grosso

Aprovado por:

Prof. MSc. Jivago Medeiros RibeiroOrientador

Prof. MSc. Daniel Avila VecchiatoConvidado

Ricardo Henrique Torres GiroldoSupervisor

Page 4: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

Este trabalho é dedicado a minha família, pelo

exemplo, amizade e carinho.

Page 5: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

Agradecimentos

Aos meus pais, meu irmão e toda minha família que, com muito carinho eapoio, não mediram esforços para que eu chegasse até esta etapa de minha vida.

Aos professores do Instituto de Computação que participaram de minha forma-ção pela transmissão do conhecimento, dedicação, e acima de tudo profissionalismo.

Agradeço em especial ao professor Jivago Medeiros Ribeiro, por me auxiliar einstruir na elaboração deste trabalho.

Aos professores Cristiano Maciel, Jésus Franco Bueno e José de Paula NevesNeto pelo apoio na realização de meu intercâmbio acadêmico.

A todos os colegas e amigos de graduação por compartilharem grandes einesquecíveis momentos durante essa caminhada.

Em especial aos meus irmãos de escolha, Adrian Procopiou, Alexandre Araújo,Igor Hideki Trindade e Wagner Teixeira pela parceria criada.

A Nuvem Tecnologia e seus colaboradores pela oportunidade de aprendizadoe convivência.

Page 6: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

Os que se encantam com a prática sem a ciência são como os timoneiros que entram no

navio sem timão nem bússola, nunca tendo certeza do seu destino.

Leonardo da Vinci

Page 7: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

RESUMO

Este trabalho detalha as atividades e os resultados obtidos durante o período de estágiorealizado na Nuvem Tecnologia pelo discente Sidnei Polo, sob supervisão de RicardoHenrique Torres Giroldo e orientação do Prof. Ms. Jivago Medeiros Ribeiro. O objetivodo estágio compreende o desenvolvimento de um aplicativo multiplataforma para auxiliarno controle e monitoramento de pragas nas lavouras de soja, milho e algodão através daabordagem de desenvolvimento para dispositivos móveis cross-compiled.

O aplicativo desenvolvido visa criar uma rede de manejo integrado das principais pragaspresentes nas culturas de soja, milho e algodão através da coleta de dados de armadilhasde feromônios instaladas nas lavouras.

Os ambientes de desenvolvimento de aplicativos móveis variam de acordo com cadaplataforma dificultando a criação de aplicativos multiplataforma. No entanto existemalgumas soluções que visam resolver esse problema. No desenvolvimento desse trabalhofoi adotado a ferramenta Xamarin por permitir o desenvolvimento multiplataforma pormeio de uma única linguagem de programação, possuir elementos de interface nativos eperformance próxima de aplicações nativas.

O aplicativo desenvolvido durante o estágio demonstra a aplicação de tecnologia dainformação no monitoramento de pragas, assim como a produtividade e o reaproveitamentode código alcançado por meio do uso da metodologia de desenvolvimento cross-compiled

com a ferramenta Xamarin.

Palavras-chaves: dispositivos móveis. manejo integrado de pragas. Xamarin.

Page 8: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

Sumário

1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

2 REVISÃO DE LITERATURA . . . . . . . . . . . . . . . . . . . . . . . 3

2.1 Manejo Integrado de Pragas . . . . . . . . . . . . . . . . . . . . . . 3

2.2 Aplicativos para Dispositivos Móveis . . . . . . . . . . . . . . . . . 4

2.3 Abordagens de Desenvolvimento de Aplicativos Móveis . . . . . . 4

2.3.1 Native (Nativo) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.3.2 Web Mobile (Aplicativo Web) . . . . . . . . . . . . . . . . . . . . . . . 6

2.3.3 Hybrid (Híbrido) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2.3.4 Cross-Compiled (Compilação Cruzada) . . . . . . . . . . . . . . . . . 6

3 MATERIAIS, TÉCNICAS E MÉTODOS . . . . . . . . . . . . . . . . . 8

3.1 Xamarin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

3.1.1 Xamarin Plataform . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

3.1.2 Xamarin Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

3.1.3 Xamarin Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

3.2 Persistência dos Dados . . . . . . . . . . . . . . . . . . . . . . . . 13

3.3 Outras ferramentas e técnicas . . . . . . . . . . . . . . . . . . . . . 13

3.3.1 iOS Simulator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

3.3.2 Genymotion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

3.3.3 Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

3.3.4 Metodologia de desenvolvimento . . . . . . . . . . . . . . . . . . . . 15

4 RESULTADOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

4.1 Principais Funcionalidades . . . . . . . . . . . . . . . . . . . . . . 16

4.1.1 Cadastro de Ponto de Coleta . . . . . . . . . . . . . . . . . . . . . . 17

4.1.2 Coleta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

4.1.3 Histórico de Coletas . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

4.1.4 Monitoramento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

4.1.5 Relatórios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

5 DIFICULDADES ENCONTRADAS . . . . . . . . . . . . . . . . . . . 25

6 CONCLUSÕES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

REFERÊNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

APÊNDICE A CÓDIGO DA VIEW DE NOVO PONTO . . . . . . . . . . 29

Page 9: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

APÊNDICE B CÓDIGO DA VIEWMODEL DE NOVO PONTO . . . . . . 32

ANEXO A DIAGRAMAS . . . . . . . . . . . . . . . . . . . . . . . . . . 36

A.1 Diagrama de Classes UML . . . . . . . . . . . . . . . . . . . . . . . 36

A.2 Diagrama de Casos de Uso UML . . . . . . . . . . . . . . . . . . . 37

Page 10: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

Lista de ilustrações

Figura 1 – Taxa de vendas de smartphones (IDC, 2015). . . . . . . . . . . . . . . 4Figura 2 – Xamarin Plataform. Fonte: Petzold (2015), tradução própria. . . . . . 9Figura 3 – Xamarin Forms. Fonte: Petzold (2015), tradução própria. . . . . . . . 10Figura 4 – Componentes de interface de acordo com cada plataforma. . . . . . . 11Figura 5 – Xamarin Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12Figura 6 – Funcionamento do Git. Fonte: Chacon e Straub (2014), tradução própria. 14Figura 7 – Funcionamento do sistema. . . . . . . . . . . . . . . . . . . . . . . . 16Figura 8 – Menu principal do aplicativo. . . . . . . . . . . . . . . . . . . . . . . 17Figura 9 – Tela contendo os pontos de coleta do aplicativo. . . . . . . . . . . . . 18Figura 10 – Tela de criação de novo ponto . . . . . . . . . . . . . . . . . . . . . . 19Figura 11 – Tela de nova coleta do aplicativo. . . . . . . . . . . . . . . . . . . . . 20Figura 12 – Tela de indicação de pragas de uma coleta. . . . . . . . . . . . . . . . 21Figura 13 – Tela de histórico de coletas. . . . . . . . . . . . . . . . . . . . . . . . 22Figura 14 – Tela de monitoramento. . . . . . . . . . . . . . . . . . . . . . . . . . 23Figura 15 – Tela informações sobre o monitoramento. . . . . . . . . . . . . . . . 23Figura 16 – Tela de relatórios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24Figura 17 – Diagrama de Classes UML . . . . . . . . . . . . . . . . . . . . . . . 36Figura 18 – Diagrama de Casos de Uso UML . . . . . . . . . . . . . . . . . . . . 37

Page 11: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

Lista de códigos

Código 1 – Exemplo de código de interface Xamarin.Forms. . . . . . . . . . . . 10Código 2 – Busca de pontos utlizando LINQ. . . . . . . . . . . . . . . . . . . . 18Código 3 – Código para capturar geolocalização do dispositivo. . . . . . . . . . . 19Código 4 – Componente de entrada de dados Xamarin.Forms. . . . . . . . . . . 20Código 5 – Código de interface da tela de Novo Ponto. . . . . . . . . . . . . . . 29Código 6 – Código fonte da ViewModel de Novo Ponto. . . . . . . . . . . . . . 32

Page 12: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

Lista de tabelas

Tabela 1 – Comparativo entre as abordagens de desenvolvimento móvel. Fonte:Xanthopoulos e Xinogalos (2013), adaptação própria. . . . . . . . . . 5

Page 13: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

Lista de abreviaturas e siglas

API Application Programming Interface

DLL Dynamic-Link library

GPS Global Positioning System

IDE Integrated Development Environment

IL Intermediate Language

LINQ Language Integrated Query

MVC Model-View-Controller

MVVM Model-View-ViewModel

PCL Portable Class Library

REST Representational State Transfer

SAP Shared Asset Project

TI Tecnologia da Informação

UI User Interface

URL Uniform Resource Locator

Page 14: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

1 Introdução

O Agronegócio no Brasil é uma das principais atividades produtivas, além deajudar na produção de alimentos consumidos internamente possui expressiva participaçãona economia com uma representatividade estimada em 23% do PIB do país em 2015.Além do crescimento no PIB, nos últimos 40 anos a produção de grãos e fibras teve umcrescimento de 325% com uma expansão da área plantada de apenas 53% resultado dodesenvolvimento de tecnologias sustentáveis e de ponta (RURAL, 2015).

De acordo com Celoto e Papa (2013), diversas culturas estão sujeitas a ataquesde diferentes espécies de pragas durante o ciclo de vida da planta, capazes de causarperdas significativas de produção. O controle das principais pragas deve ser feito por meiode manejo, que consiste na tomada de decisões com base no nível de ataque, númeroe tamanho das pragas entre outros fatores (EMBRAPA, 2003). Assim o emprego deaplicativos para dispositivos móveis se torna uma opção na criação de um sistema demonitoramento de pragas por conta de sua mobilidade que permite capturar dados sobreincidência em diversos locais.

Aplicativos móveis, por sua vez, são executados sobre uma diversidade deplataformas e dispositivos que utilizam seus próprios sistemas operacionais, padrões deinterface de usuário, lojas de aplicativos, recursos de hardware, tamanho de dispositivo,permissões e ferramentas de desenvolvimento. Essa diversidade faz com que usuáriossejam segmentados de acordo com os seus dispositivos, desafiando assim o crescimento dabase de usuários dos aplicativos. A primeira solução para este problema é reescrever todoo aplicativo de forma independente para cada plataforma. Isso, obviamente, eleva os custosde desenvolvimento e manutenção das aplicações. No entanto, alguns frameworks visamsimplificar o desenvolvimento de aplicativos e torná-los multiplataforma. É o caso deaplicativos Web que permitem que conteúdos sejam adaptados de uma maneira específicapara smartphones, aplicativos híbridos que são projetados para permitir a utilização deconteúdo web oferecendo suporte ao conjunto de hardware dos dispositivos e aplicativoscross-compiled que são gerados através de uma única linguagem de programação paratodos os dispositivos. (XANTHOPOULOS; XINOGALOS, 2013; DICKSON, 2013).

Face ao exposto, este relatório de estágio supervisionado apresentando comorequisito para obtenção do título de Bacharel em Ciência da Computação, apresenta odesenvolvimento de um aplicativo para auxiliar o manejo de pragas, em específico lagartasque atacam principalmente lavouras de soja, milho e algodão, por meio da utilização dearmadilhas de feromônio a ser utilizado por agricultores e profissionais do agronegócio.O aplicativo em questão, foi desenvolvido utilizando o Xamarin, uma ferramenta para

Page 15: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

Capítulo 1. Introdução 2

desenvolvimento multiplataforma de aplicativos que possui como diferencial a utilizaçãode componentes de interface nativos de cada plataforma.

Este trabalho está organizado da seguinte forma: Capítulo 2 apresenta a revisãode literatura contendo definições sobre o manejo integrado de pragas, aplicativos paradispositivos móveis e abordagens de desenvolvimento destes aplicativos; Capítulo 3 contémos materiais, técnicas e métodos utilizados para o desenvolvimento deste trabalho, comopor exemplo: Xamarin Forms, Xamarin Studio, SQLite e outras ferramentas. Capítulo 4apresenta os resultados deste trabalho e no Capítulo 5 estão as dificuldades encontradaspara execução do projeto. Por fim, o Capítulo 6 apresenta as conclusões e por último estãoas referências bibliográficas que suportam este trabalho.

Page 16: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

2 Revisão de Literatura

2.1 Manejo Integrado de Pragas

Inúmeros fatores contribuíram para o aumento do número e da ocorrênciade pragas nas últimas safras causando preocupação aos agricultores. Entre as culturasmais afetadas estão o algodão, feijão, milho e soja que sofreram ataques severos delagartas, dentre elas a lagarta falsa-medideira (Pseudoplusia includens), lagarta-da-maçã,(Heliothis virescens), lagarta da espiga (Helicoverpa zea), lagarta-militar (Spodoptera spp)e a Helicoverpa armigera (CELOTO; PAPA, 2013).

De acordo com Cruz (1997), para haver o controle eficiente de pragas, algunsprincípios devem ser seguidos:

• Identificação das pragas a serem manejadas;

• Definição da unidade a ser manejada;

• Desenvolvimento de uma estratégia de ação;

• Desenvolvimento de técnicas de monitoramento;

• Estabelecimento de nível de controle para cada praga.

Neste sentido, o monitoramento da incidência de pragas se torna um fator chavepara o manejo eficiente. Apesar de ser possível monitorar e identificar pragas por meiodo acompanhamento da sua postura na planta ou pelo dano causado na folha da cultura,essa abordagem geralmente não é feita no tempo, na frequência ou na precisão necessária.Assim, a utilização de armadilhas de feromônio tem se mostrado uma alternativa vantajosapara o monitoramento e manejo de pragas pois são capazes de alertar de forma rápidasobre incidência das mesmas. Com base na quantidade de pragas capturadas é possíveldetectar tanto a presença quanto a densidade populacional objetivando o cálculo para saberse determinada praga atingiu nível de dano econômico. Levando em conta o baixo custodas armadilhas, facilidade de uso e capacidade de capturar pragas de forma seletiva embaixas densidades populacionais, armadilhas de feromônio são excelentes ferramentaspara sistemas de monitoramento (ZARBIN; RODRIGUES; LIMA, 2009; BENTO, 2001;CRUZ et al., 2011).

Aliando tecnologia da informação às armadilhas de feromônio, realizar omonitoramento se torna muito mais rápido e abrangente pois é possível criar uma redede informações sobre pragas e alertar sobre o desenvolvimento e risco de infestação nasprincipais regiões do Brasil. Essa combinação ajuda a determinar o melhor momento para

Page 17: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

Capítulo 2. Revisão de Literatura 4

efetuar-se o controle e reduzir o uso desnecessário de inseticidas. O uso de aplicativos paradispositivos móveis surge como uma opção para facilitar a alimentação dessa rede devidoa sua mobilidade para chegar até as armadilhas e coletar os dados.

2.2 Aplicativos para Dispositivos Móveis

Com a popularidade dos smartphones, o desenvolvimento de aplicativos paraestes dispositivos se tornou importante para a indústria de software ocupando considerávelespaço no mercado de desenvolvimento. Existem milhares de aplicativos que são usadosno dia a dia para as mais diversas finalidades. Além disso, com o aumento do podercomputacional dos smartphones, muitas aplicações desktop estão ganhando versões mobile.A maior parte do mercado de smartphones é compartilhada entre Android, iOS e Windows(Figura 1).

Essas plataformas possuem sua própria infraestrutura de desenvolvimentonativa. Isso permite o acesso a recursos da plataforma e de hardware do dispositivo. Cadaplataforma conta com sua própria arquitetura e suporte ao desenvolvimento de aplicativos.O grande desafio é desenvolver soluções que contemplem todas essas plataformas (RAJ;TOLETY, 2012).

Figura 1 – Taxa de vendas de smartphones (IDC, 2015).

2.3 Abordagens de Desenvolvimento de Aplicativos Móveis

Desenvolver aplicativos móveis para a variedade de plataformas disponível nomercado pode ser uma tarefa custosa tanto em termos de tempo quanto financeiros. Cada

Page 18: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

Capítulo 2. Revisão de Literatura 5

uma das três principais plataformas, Android, iOS, Windows Phone, utiliza abordagensdiferentes de desenvolvimento. Enquanto aplicativos para dispositivos iOS são escritos emObjective-C, aplicativos para dispositivos Android são escritos em Java e aplicativos paradispositivos Windows Phone são escritos em C#. Aprender essas três abordagens podeconsumir muito tempo de desenvolvedores. Como alternativa, possuir um especialista emcada uma das plataformas pode ter um custo financeiro muito elevado sem contar que novasfuncionalidades serão disponibilizadas em tempos diferentes para cada plataforma. Comisso, existem abordagens de desenvolvimento multiplataforma que veem se destacandodevido a alta produtividade. Porém, aplicativos que necessitem de alto desempenho geral-mente são desenvolvidos nativamente para garantir melhor performance (RAJ; TOLETY,2012; DICKSON, 2013).

Tabela 1 – Comparativo entre as abordagens de desenvolvimento móvel. Fonte: Xantho-poulos e Xinogalos (2013), adaptação própria.

Nativo Web Híbrido Cross-compiledPublicação nas lojas Sim Não Sim SimTecnologias amplamente difundidas Não Sim Sim NãoAcesso ao hardware e dados Total Limitado Limitado TotalInterfaces de usuários Nativa Simulado Simulado NativaPerformance Alta Baixa Média Média AltaReaproveitamento de código Baixo Alto Alto Médio a Alto

Sendo assim, o desenvolvimento de aplicativos móveis pode ser divididoem quatro abordagens: desenvolvimento nativo, desenvolvimento web, desenvolvimentohíbrido e desenvolvimento cross-compiled. As principais diferenças entre essas abordagenspodem ser vistas na Tabela 1.

2.3.1 Native (Nativo)

Aplicações móveis que demandem alto consumo de processamento são fre-quentemente implementados nativamente para assegurar o máximo de performance, comoé o caso de jogos ou aplicativos que possuam modelos de dados complexos.

Além de maior desempenho, cada plataforma fornece um guia com as melhorespráticas de design. Estes padrões de implantação ajudam a criar aplicativos que sejamconfortáveis para o usuário final. Isto passa a impressão que os aplicativos são uma extensãodo dispositivo ao invés de serem aplicativos externos. Um beneficio dos padrões de designé que ele pode ajudar a reter o usuário. Implementações nativas ajudam a aumentar ograu de retenção dos usuários por causar um sentimento de familiaridade com o aplicativodevido aos componentes utilizados. O usuário não fica confuso em como interagir com os

Page 19: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

Capítulo 2. Revisão de Literatura 6

objetos de interface. Aplicações não nativas as vezes fazem com que o usuário não saibacomo os objetos irão reagir com os toques e gestos (DICKSON, 2013).

2.3.2 Web Mobile (Aplicativo Web)

Aplicativos Web para dispositivos móveis são aplicativos projetados pararodarem em Web Browsers desenvolvidos com tecnologias amplamente difundidas comoHTML5, CSS3 e JavaScript. Essa abordagem de desenvolvimento multiplataforma possuigrande flexibilidade, mas não consegue atender as expectativas de sempre ativos (always-

on) por dependerem totalmente de conexão com Internet para exibirem conteúdo. Aprincipal desvantagem desta abordagem é a falta de acesso ao hardware e funções dosistema do dispositivo, limitando assim a gama de aplicativos que podem ser desenvolvidos.Outro ponto negativo é que como esses aplicativos são acessados via URL, não é possívelutilizar ferramentas de distribuição de aplicativos (app stores). Porém por fazer uso detecnologias amplamente utilizadas, essa abordagem pode resultar em um aplicativo comum custo de desenvolvimento mais baixo e custo zero de manutenção no dispositivo pelofato do sistema estar integralmente hospedado em um servidor (RAJ; TOLETY, 2012;XANTHOPOULOS; XINOGALOS, 2013).

2.3.3 Hybrid (Híbrido)

Abordagem híbrida tenta combinar as vantagens das metodologias de desen-volvimento Web e Nativo. Aplicativos híbridos são desenvolvidos utilizando tecnologiasWeb e são executados dentro de um container nativo no dispositivo.

Estes aplicativos utilizam navegadores Web para renderizarem suas interfacesem tela cheia no dispositivo e os recursos do dispositivo são expostos para o aplicativohíbrido através de uma camada de abstração. Esta camada de abstração expõe os recursosdo dispositivo como JavaScript APIs (Application Programming Interface). Os principaisexemplos de frameworks para a criação de aplicativos híbridos são Adobe PhoneGap eApache Cordova. Esta metodologia permite o reuso de grande parte do código, principal-mente de interfaces entre diferentes plataformas reduzindo tempo e custos de produção.Esse conceito também é conhecido como write once run anywhere, onde o código é escritoapenas uma vez e executado em diferentes plataformas (DALMASSO et al., 2013).

2.3.4 Cross-Compiled (Compilação Cruzada)

A abordagem cross-compiled consiste em gerar aplicativos através de umaúnica linguagem de programação compilada. Um compilador cruzado gera código para umaplataforma que não é a plataforma onde o aplicativo está sendo desenvolvido (FOUNDA-

Page 20: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

Capítulo 2. Revisão de Literatura 7

TION, 2010). Essa abordagem permite que o programador escreva um aplicativo em umaúnica linguagem e compile o aplicativo de forma independente para cada plataforma. Estaunificação permite reduzir o tempo de produção de um aplicativo bem como reaproveitarcódigo.

Em termos de performance, aplicativos cross-compiled geralmente são melho-res quando comparados com aplicativos híbridos, porém nem sempre são tão bons quantoimplementações nativas, devido a necessidade de carregar em memória muitas bibliotecas.O Framework Xamarin se enquadra nesta categoria de desenvolvimento. Todo código éescrito em C# e compilado para múltiplas plataformas. O Xamarin tem como base o projetoMono runtime que foi inicialmente lançado em 2004 e continua sendo desenvolvido atéhoje (DICKSON, 2013).

Page 21: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

3 Materiais, Técnicas e Métodos

3.1 Xamarin

Xamarin é uma solução para o desenvolvimento de aplicativos multiplataformaatravés de um ambiente unificado. Ao invés de escrever códigos em linguagem específicapara cada sistema, o Xamarin permite que desenvolvedores escrevam códigos em C#para todas as três plataformas suportadas: Android, iOS e Windows. Ele gera soluçõesmultiplataforma através de compilação cruzada, o que significa que o Xamarin geraaplicações nativas para as essas três plataformas.

3.1.1 Xamarin Plataform

De acordo com Petzold (2015), a grande vantagem de desenvolver soluçõespara mais de uma plataforma consiste na habilidade de compartilhar código entre essasaplicações. Para isso é necessário que a aplicação seja estruturada. A arquitetura MVVM(Model-View- ViewModel), uma versão modernizada da arquitetura MVC, separa códigosentre Model (dados), View (interfaces de usuários incluindo recursos visuais e de entrada)e ViewModel (que controla a troca de dados entre o Model e a View).

Através do uso da arquitetura MVVM é possível separar o código em có-digo específico da plataforma: View, que interage com a API da plataforma, e códigoindependente de plataforma: Model e ViewModel. O código independente de plataformaprecisa ter acesso a arquivos, rede, ou usar threads. Normalmente estas tarefas fazemparte de uma API do sistema operacional, mas também podem fazer o uso da biblioteca.NET Framework, se a mesma estiver disponível em cada plataforma, sendo ela assimefetivamente independente de plataforma. A parte independente de plataforma pode serisolada em um projeto que contém o código compartilhado entre as três plataformas. Istopode ser realizado através de um Shared Asset Project (SAP), que consiste em códigos eoutros arquivos accessíveis a outros projetos, ou um Portable Class Library (PCL), quetransforma todo código comum em uma dynamic-link library (DLL) (PETZOLD, 2015).

O diagrama da Figura 2 ilustra essa relação entre o projeto Xamarin, as biblio-tecas Xamarin e as APIs de cada plataforma. As aplicações específicas de cada plataformafazem chamadas para o projeto comum e para as bibliotecas Xamarin que implementamas APIs nativas das plataformas. Ao compilar o aplicativo para iOS, o compilador C# doXamarin gera C# Intermediate Language (IL) e faz o uso do compilador em um Mac paragerar código de máquina nativo do iOS da mesma maneira que o compilador Objective-Cfaz. As chamadas do aplicativo para API do iPhone são iguais as chamadas de aplicativosescritos em Objective-C. No caso do Android, o compilador C# do Xamarin gera o IL, que

Page 22: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

Capítulo 3. Materiais, Técnicas e Métodos 9

Figura 2 – Xamarin Plataform. Fonte: Petzold (2015), tradução própria.

é executado em uma versão do Mono para Android, mas as chamadas de API do aplicativosão muito próximas á aplicativos escritos em Java (PETZOLD, 2015).

De acordo com Xamarin (2016b), cerca de 75% do código de um projetopode ser compartilhado entre os aplicativos usando Xamarin Plataform. Para aproximar oreaproveitamento de código próximo a 100% é necessário que os códigos das interfaces deusuários possam ser compartilhados entre as três principais plataformas. Isso é possívelatravés de uma ferramenta que incorpora o Xamarin Plataform chamado Xamarin Forms.

3.1.2 Xamarin Forms

Xamarin Forms permite escrever códigos de interface de usuários que podemser compiladas para iOS, Android e Windows Phone. De uma maneira geral, uma aplicaçãoXamarin Forms possui três projetos separados, um para cada plataforma, e um quartoprojeto que contém o código comum entre as plataformas. Porém, a diferença entre oXamarin Plataform e o Xamarin Forms é que no Forms esses três projetos são basicamentepequenos servindo apenas como códigos de inicialização. O projeto compartilhado contéma maior parte do aplicativo inclusive as interfaces de usuários (PETZOLD, 2015).

As bibliotecas Xamarin.Forms.Core e Xamarin.Forms.Xaml implementam aAPI Xamarin Forms. De acordo com cada plataforma, o Xamarin.Forms.Core faz o uso deuma das bibliotecas Xamarin.Forms.Plataform. Essas bibliotecas são coleções de classeschamadas renderers que transformam os objetos de interface de usuário do Xamarin Formsem interfaces de usuários específicas da plataforma (PETZOLD, 2015).

Page 23: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

Capítulo 3. Materiais, Técnicas e Métodos 10

Figura 3 – Xamarin Forms. Fonte: Petzold (2015), tradução própria.

Para exemplificar, considere um componente de interface de usuário para al-ternar um valor booleano. No Xamarin Forms, este componente é chamado de Switch, ea classe Switch está implementada na biblioteca Xamarin.Forms.Core. Em cada rendererespecifico da plataforma, esse Switch é mapeado para um UISwitch no iOS, um Switch noAndroid e um ToggleSwitchButton no Windows Phone. Assim basta criar o código de umaúnica interface contento um Switch no Xamarin Forms e este componente será mapeadopara o componente nativo a ele associado elevando o compartilhamento de código doprojeto.

1 <?xml version="1.0" encoding="UTF -8"?>

2 <ContentPage xmlns="http://xamarin.com/schemas /2014/forms"

3 xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"

4 x:Class="Agrosig.Mobile.ExemploPage"

5 Title="Exemplo">

67 <StackLayout Padding="10,0">

8 <Label Text="Olá Xamarin.Forms!"

9 VerticalOptions="CenterAndExpand"

Page 24: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

Capítulo 3. Materiais, Técnicas e Métodos 11

10 HorizontalOptions="Center" />

1112 <Button Text = "OK"

13 VerticalOptions="CenterAndExpand"

14 HorizontalOptions="Center" />

1516 <Switch VerticalOptions="CenterAndExpand"

17 HorizontalOptions="Center" />

1819 <Slider VerticalOptions="CenterAndExpand" />

2021 </StackLayout>

22 </ContentPage>

Código 1 – Exemplo de código de interface Xamarin.Forms.

O Código 1 cria uma interface gráfica contendo alguns componentes XamarinForms e ao compilar esse código cada componente será cross-compilado para um com-ponente nativo. A imagem 4 ilustra bem esse resultado, cada um dos componentes têmaparência diferente nos três dispositivos porque todos eles são renderizados como umobjeto específico de cada plataforma.

(a) iOS (b) Android (c) Windows Phone

Figura 4 – Componentes de interface de acordo com cada plataforma.

O Xamarin Forms foi adotado para o desenvolvimento deste trabalho princi-palmente pela a sua alta capacidade de compartilhamento de código e necessidade de umframework que reduzisse o tempo de desenvolvimento da solução sem comprometer seudesempenho e utilizasse componentes UI nativos.

Page 25: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

Capítulo 3. Materiais, Técnicas e Métodos 12

3.1.3 Xamarin Studio

Xamarin Studio é uma IDE disponibilizada pela Xamarin Inc. que visa fornecerem uma única ferramenta os recursos necessários para criar aplicativos para iOS, Mace Android. Ele possui um editor rico, depuração, integração nativa com iOS, Mac eAndroid e controle integrado do código fonte. O Xamarin Studio é organizado em sessõespara gerenciar arquivos e configurações da aplicação, criação de código e depuração(XAMARIN, 2016a). A Figura 5 mostra o Xamarin Studio com uma aplicação aberta.

Figura 5 – Xamarin Studio

Entre as principais características da IDE estão:

• Busca universal;

• Insights contextuais 1;

• Refatoração;1 Posicionando o cursor sobre qualquer membro de uma classe é possível visualizar informações referentes

ao tipo, descrição resumida, e mais detalhes.

Page 26: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

Capítulo 3. Materiais, Técnicas e Métodos 13

• Controle de versão;

• Suporte a NuGet Packages com mais 22.000 pacotes disponíveis.

3.2 Persistência dos Dados

SQLite é um pacote de softwares de domínio público que fornece um sistemade gerenciamento de bando de dados relacionais (KREIBICH, 2010). A principal diferençaentre o SQLite e outros sistemas de banco de dados é que o SQLite é um banco de dadosembarcado. Ao invés de executar independentemente em um processo autônomo, elecoexiste dentro da aplicação em que serve. Isso faz com que não exista a necessidadede configuração e administração de rede uma vez que o SQLite acessa seus arquivos dedados diretamente. Isso reduz a sobrecarga relacionada com chamadas de rede, simplificaa administração do banco de dados e facilita a implementação de aplicativos (OWENS;ALLEN, 2010).

No desenvolvimento deste trabalho, o SQLite foi adotado devido aos requisitosde funcionamento off-line. Os dados coletados através do aplicativo ficam armazenadoslocalmente até que haja conexão com internet para realizar a sincronização. Para enviar osdados para o servidor são utilizados web services REST2. Os web services são responsáveispor enviar os dados ao servidor e responder se a operação foi ou não executada com sucessoe por solicitar dados do servidor.

3.3 Outras ferramentas e técnicas

As seguintes ferramentas e técnicas foram essenciais para o desenvolvimentodeste trabalho, propiciando agilidade no desenvolvimento e testes, controle de versão ecumprimento dos objetivos.

3.3.1 iOS Simulator

O simulador de dispositivos iOS disponível através do Xcode para máquinascom sistema operacional OSX, é uma ferramenta que possibilita prototipação e desen-volvimento rápido geralmente usado antes de testar o aplicativo nos dispositivos físicos.O iOS simulator possui recursos que podem ajudar tanto em testes como na depuraçãode aplicativos iOS. A grande vantagem da utilização do simulador é sua velocidade deexecução que contribui com a agilidade do desenvolvimento, porém ele não deve ser a2 REST é um protocolo de comunicação, baseado no protocolo de hipermídia HTTP. Ele consiste em

conjunto coordenado de restrições arquiteturais aplicadas a componentes, conectores e elementos dedados dentro de um sistema distribuído sem impor restrições ao formato da mensagem.

Page 27: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

Capítulo 3. Materiais, Técnicas e Métodos 14

única maneira de testar os aplicativos por fazer o uso dos recursos do computador em queestá sendo executado que geralmente são melhores quando comparados a dispositivos iOSnão refletindo a realidade (APPLE, 2016).

3.3.2 Genymotion

Genymotion é um emulador do Android, que compreende um conjunto desensores e recursos, a fim de interagir com um ambiente Android virtual. Com Genymo-tion, é possível testar aplicativos Android em uma ampla gama de dispositivos virtuaispara fins de desenvolvimento, teste e demonstração. Ele está disponível para os sistemasoperacionais Windows, Mac OS X e Linux (GENYMOBILE, 2015). Através do emuladoré possível simular ambientes distintos para testar um aplicativo, como por exemplo limitara velocidade da conexão com a internet para saber como um aplicativo se comporta comconexões lentas.

3.3.3 Git

Git é um sistema livre e de código aberto de controle de versão distribuídoprojetado para lidar com tudo, desde pequenos a grandes projetos com rapidez e eficiência(GIT, 2016). Controle de versão por sua vez é um sistema que registra alterações em umarquivo ou conjunto de arquivos ao longo do tempo para que você possa recuperar versõesespecíficas mais tarde (CHACON; STRAUB, 2014).

Figura 6 – Funcionamento do Git. Fonte: Chacon e Straub (2014), tradução própria.

Page 28: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

Capítulo 3. Materiais, Técnicas e Métodos 15

A principal diferença entre o Git e outros sistemas de contole de versão, é amaneira como o Git lida com os dados. Conceitualmente, a maioria dos sistemas guardaminformações como uma lista de mudanças baseadas em arquivos. Estes sistemas possuemum conjunto de arquivos e as mudanças feitas para cada arquivo ao longo do tempo. OGit trabalha com um conjunto de snapshots do sistema de arquivos. Para cada commit ousalvamento de estado do projeto no Git, ele basicamente salva uma imagem de todos osarquivos naquele momento e guarda uma referência para esse snapshot. Em termos deeficiência, o Git só armazena imagens de arquivos que foram modificados, caso contrárioele apenas usa uma referência do arquivo anterior (Figura 6). Em resumo, o Git trabalhacomo uma stream de snapshots para fazer o controle de versão (CHACON; STRAUB,2014).

Neste trabalho, o Git foi utilizado como sistema de controle de versão doprojeto. Sendo assim, é possivel acompanhar cada release e manter um histórico dasmodificações feitas no mesmo.

3.3.4 Metodologia de desenvolvimento

Para execução do projeto, a equipe de desenvolvimento contou com um gerentede projetos, dois desenvolvedores mobile, um designer e um desenvolvedor backend,responsável pela construção dos serviços. Como metodologia de desenvolvimento foiutilizado o scrum através da ferramenta de gerenciamento ágil de projetos Jira.

Scrum é uma metodologia de gerenciamento de projetos ágil que emprega ummodelo de ciclo de vida iterativo e incremental. A abordagem scrum foi desenvolvidapara gerenciar o processo de desenvolvimento de sistemas. Ele é uma abordagem empíricaque aplica as ideias da teoria de controle de processos industriais para o desenvolvimentode sistemas, resultando em uma abordagem que reintroduz as ideias de flexibilidade,adaptabilidade e produtividade (SCHWABER; BEEDLE, 2001).

Dentro do scrum, o produto é construído em uma série de iterações de com-primento fixo chamados sprint. No caso deste projeto as sprints foram definidas com ocomprimento de 7 dias, ou seja cada sprint representa uma semana. As funcionalidades aserem implementadas em um projeto são mantidas em uma lista chamada Product Backlog,onde a cada sprint realiza-se um Sprint Planning Meeting, que é uma reunião de plane-jamento, e a equipe seleciona as atividades que serão desenvolvidas no sprint. O Daily

Scrum é uma breve reunião que tem o objetivo disseminar o conhecimento sobre o quefoi realizado no dia anterior e ao final de cada Sprint a equipe apresenta as funcionalida-des que foram implementadas. Ao final, é feito um Sprint Retrospective, onde é feito oplanejamento do próximo sprint.

Page 29: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

4 Resultados

O resultado obtido com a realização deste trabalho é um aplicativo para omonitoramento de pragas na cultura da soja, milho e algodão disponível para iOS eAndroid idealizado por uma das líderes mundiais em ciência e inovação nas áreas desementes, proteção de cultivos e controle de pragas. Essa empresa visa criar uma redecolaborativa para efetuar o levantamento de dados sobre pragas oferecendo todo suportenecessário, desde o aplicativo até armadilhas de feromônio. Esta rede colaborativa contacom a participação de agricultores e demais interessados para alimentarem o sistema.

Esse aplicativo permite que dados sobre a incidência de pragas coletados atra-vés das armadilhas de feromônio espalhadas em mais de 1.300 áreas em todo o Brasil sejamarmazenados no dispositivo e enviados a um servidor que efetuará o processamento dosmesmos, formando assim uma base de informações sobre pragas. As espécies de mariposasmonitoradas pelo aplicativo são: Helicoverpa, Heliothis, Chrysodeixis e Spodoptera. Aarquitetura do aplicativo pode ser melhor visualizada na Figura 7.

Figura 7 – Funcionamento do sistema.

4.1 Principais Funcionalidades

Entre as funcionalidades desenvolvidas estão: login e cadastro de usuários,cadastro de pontos de coleta, coleta, histórico e edição de coletas, monitoramento deincidência, relatórios de incidência e sincronização dos dados. Nesta seção é apresentado deforma detalhada os resultados do desenvolvimento das principais funcionalidade explicandoa utilização do framework Xamarin e demais ferramentas utilizadas para o desenvolvimento

Page 30: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

Capítulo 4. Resultados 17

do aplicativo. A Figura 18, demonstra o menu principal do aplicativo com atalhos paraalgumas destas principais funcionalidades.

(a) iOS (b) Android

Figura 8 – Menu principal do aplicativo.

Embora o layout do aplicativo em ambos os sistemas seja muito similar épossível observar a presença dos componentes nativos de cada plataforma. No iOS a barrade navegação mantém seu padrão bem como no Android a mesma barra segue os padrõesde design definido pela Google.

4.1.1 Cadastro de Ponto de Coleta

A Figura 9, representa a tela de pontos de coleta. Ela possui uma lista contendotodos os pontos que o usuário possui acesso para realização de coletas ordenados peladistância entre o usuário e o ponto. O controle do nível de acesso dos pontos é feito noservidor de aplicação, onde com base no usuário logado são enviadas as fazendas em queele possui acesso e seus respectivos pontos de coleta.

Uma funcionalidade presente nesta tela é a busca de pontos com base no nomedo ponto ou fazenda. Como o Xamarin utiliza C# como linguagem de programação épossível fazer o uso do LINQ, uma linguagem de consulta para banco de dados, objetos

Page 31: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

Capítulo 4. Resultados 18

(a) iOS (b) Android

Figura 9 – Tela contendo os pontos de coleta do aplicativo.

em memória e xml, que permite realizar consultas na própria linguagem facilitando assima criação de buscas como esta. O Código 2 demonstra o uso do LINQ para criar a busca depontos.

1 if (PontosSource.Count > 0) {

2 if (!string.IsNullOrWhiteSpace (value)) {

3 Pontos = PontosSource.Where (x =>

4 x.PontoNome.ToLower ().Contains (value.ToLower ()) ||

5 x.FazendaNome.ToLower ().Contains (value.ToLower ())

6 ).ToList ();

7 }

8 } else {

9 Pontos = PontosSource;

10 }

Código 2 – Busca de pontos utlizando LINQ.

A partir dessa tela também é possível criar um novo ponto. A Figura 10,demonstra a criação de um novo ponto, onde é necessário preencher o nome do novoponto, selecionar uma fazenda e capturar a localização geográfica do mesmo por meiodo GPS do dispositivo. O código da tela de novo ponto e sua correspondente ViewModel

Page 32: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

Capítulo 4. Resultados 19

encontram-se nos Apêndices A e B respectivamente. Ambas as telas da Figura 10 sãocriadas e controladas por esses códigos de forma unificada para ambas as plataformas.

(a) iOS (b) Android

Figura 10 – Tela de criação de novo ponto

Nesse aspecto o Xamarin se monstra muito interessante pois permite fazerchamadas do sistema possibiltando o uso do GPS dos dispositivos. Outro ponto interessanteé o uso de Nuget Packages. NuGet é um sistema de gestão de pacotes para .NET quesimplifica o uso de pacotes de terceiros. É possivel utlizar pacotes de terceiros para as maisdiversas finalidades. Neste caso foi utilizado o Geolocator Plugin para Xamarin Formsque permite o fácil acesso a geolocalização dos dispositivos através de um único trecho decódigo (Código 3).

1 var locator = CrossGeolocator.Current;

2 locator.DesiredAccuracy = 100;

3 var localizacao = await locator.GetPositionAsync ();

Código 3 – Código para capturar geolocalização do dispositivo.

Page 33: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

Capítulo 4. Resultados 20

4.1.2 Coleta

Ao selecionar um ponto da Figura 9, é possível realizar uma coleta naqueleponto. A coleta é dividida em duas etapas: preenchimento das informações sobre a coletae apontamento das pragas. O formulário com as informações de uma coleta possui umcampo com a data da coleta, informações sobre o talhão onde a armadilha está localizada edados de pluviometria (Figura 11).

(a) iOS (b) Android

Figura 11 – Tela de nova coleta do aplicativo.

O apontamento de pragas por sua vez pode ser visualizado na Figura 12. Essatela é divida em quatro abas, uma para cada espécie sendo elas Helicoverpa, Heliothis,Chrysodeixis e Spodoptera. Cada aba contém um componente para indicar a incidência dedeterminada praga naquele ponto que permite apontar a quantidade através dos botões ouentrar os dados pelo teclado do dispositivo clicando em cima dos valores.

1 <Entry Grid.Column="2"

2 Text="{Binding MothNumber , StringFormat=’{0:000}’}"

3 TextAlignment="Center"

4 VerticalOptions="Center"

5 TextSize="36"

6 TextColor="{x:Static resources:Colors.ColetasColor}"

7 Keyboard="Numeric" >

Page 34: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

Capítulo 4. Resultados 21

8 <Entry.Behaviors>

9 <behaviors:MaxLengthValidator MaxLength="3"/>

10 </Entry.Behaviors>

11 </Entry>

Código 4 – Componente de entrada de dados Xamarin.Forms.

O Código 4 demonstra a criação deste componente de entrada de dados, onde épossível definir o tipo de teclado que irá aparecer ao se clicar no componente, associar umcomportamento para que a quantidade máxima de caracteres não ultrapasse três e aplicarformatações de texto e estilos.

(a) iOS (b) Android

Figura 12 – Tela de indicação de pragas de uma coleta.

Ao concluir-se uma indicação, os dados de incidência de cada praga sãopersistidos localmente no banco SQLite e quando possível sincronizados alimentado assima base remota que processará os mesmos e disponibilizará estas informações para todosusuários cadastrados.

4.1.3 Histórico de Coletas

Uma coleta após criada pode ser editada ou excluída através da tela de históricode coletas (Figura 12). Nesta tela encontra-se uma lista agrupada por data com as últimas

Page 35: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

Capítulo 4. Resultados 22

coletas que o usuário possui acesso. O usuário tem a opção de realizar busca de uma coletapela data, nome da fazenda ou nome do ponto. Ao selecionar uma coleta para edição, oaplicativo é redirecionado para tela da Figura 12, onde é possível editar os indicadores deuma coleta.

(a) iOS (b) Android

Figura 13 – Tela de histórico de coletas.

4.1.4 Monitoramento

Após os dados de coletas serem processados, é possível monitorar a incidênciade acordo com cada região. A Figura 14 representa a tela de monitoramento onde os pontossão distribuídos em um mapa conforme suas localizações facilitando a visualização. Maisuma vez, é possível observar a presença dos componentes nativos. A API de mapa utilizadacorresponde a API padrão de cada sistema, no caso do iOS o Maps e do Android o GoogleMaps. Ao selecionar um ponto no mapa é exibido uma tela contendo as informaçõesdaquele ponto (Figura 15). As informações sobre incidência são dispostas em um gráficopara facilitar seu entendimento e acompanhamento.

Page 36: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

Capítulo 4. Resultados 23

(a) iOS (b) Android

Figura 14 – Tela de monitoramento.

(a) iOS (b) Android

Figura 15 – Tela informações sobre o monitoramento.

Page 37: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

Capítulo 4. Resultados 24

4.1.5 Relatórios

Além do monitoramento, outra forma de consultar os dados processados éatravés dos relatórios. O aplicativo permite a aplicação de filtros com o objetivo de gerarconsultas específicas de acordo com cada usuário. Após a aplicação dos devidos filtros,um gráfico de barras é exibido com as informações sobre incidência de cada praga (Figura16). Entre as opções de relatórios estão disponíveis relatórios de média mensal, média pornoite e média por ponto onde é possível selecionar os pontos desejados.

(a) iOS (b) Android

Figura 16 – Tela de relatórios.

Page 38: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

5 Dificuldades encontradas

A principio uma das dificuldades encontradas foi o entendimento e conheci-mento da arquitetura fornecida pelo Xamarim em um nível que permitisse o andamento dotrabalho. Esse entendimento mostrou-se mais custoso do que o esperado. A utilização doframework Xamarin não exclui completamente a necessidade de conhecer característicasdas SDKs de desenvolvimento do Android e iOS. Em alguns momentos foi necessárioanalisar e sobrescrever de forma pontual alguns códigos em cada plataforma.

Outra grande dificuldade foi com relação aos mecanismos de sincronização dedados. Devido a limitação de conexão com a internet no campo, a quantidade de dadossobre coletas pode possuir um volume muito grande que deve ser armazenado no aplicativodificultando assim a sincronização. Foi necessário estudar uma maneira de reduzir o tempode sincronização adotando duas maneiras de sincronizar os dados, uma para a primeirasincronização em que um arquivo compactado com os dados é baixado e para as demaissincronizações somente os dados novos ou alterados são sincronizados. A sincronização econsumo de dados poderia ser facilmente implementado se a conexão com a internet nãofosse uma limitação, pois para cada situação poderia existir um web service que retornassesomente os dados necessário naquele momento.

Houve também algumas dificuldades associadas a falta de experiência comalgumas tecnologias como Xamarin Forms e C#. O uso de alguns recursos do C# causaramperda de desempenho do aplicativo e foi necessário reimplementar para atingir um nívelsatisfatório. Houveram dificuldades para seguir os protótipos das interfaces através doXamarin Forms. As dificuldades para se desenvolver as interfaces estavam relacionadasa falta de entendimento de algumas propriedades dos componentes visuais e falta deexperiência em customização dos mesmos.

Page 39: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

6 Conclusões

O estágio supervisionado relatado neste trabalho proporcionou contato realcom a gestão, análise e desenvolvimento de um projeto, desde o levantamento e validaçãode requisitos até entregas e correção de problemas. Teve-se a oportunidade de estudar ecolocar em prática o uso de tecnologias voltadas para o desenvolvimento de aplicativosmóveis bem como conhecimentos adquiridos durante a graduação. Além disso, foi possíveldesenvolver um aplicativo com potencial para contribuir com a agricultura de nosso país.

Durante a execução do estágio supervisionando, tanto no que tange a revisãobibliográfica a cerca do manejo de pragas, como também, dada a natureza da aplicação,observa-se a importância do monitoramento de pragas nas lavouras. Nesse sentido, o usode computação aplicada, precisamente aplicativos para dispositivos móveis, se mostrouapropriada principalmente pelo fato de possibilitar a coleta de dados de forma remota e emdiferentes locais.

Outro ponto a se ressaltar é quanto ao uso da metodologia de desenvolvimentode aplicativos móveis cross-compiled através do Xamarin que se mostrou muito eficienteem sua proposta de reaproveitamento de código. Através do Xamarin Forms foi possí-vel atingir um reaproveitamento próximo a 100%. A ferramenta em questão mostrou-sebastante útil para o desenvolvimento do aplicativo, alinhou-se com o processo de desenvol-vimento e permitiu que o aplicativo fosse finalizado e entregue no prazo. Pode-se tambémperceber algumas limitações, como o Xamarin Forms é uma biblioteca de classes quetransforma objetos de interface em interfaces de usuário específicas de cada plataforma,é natural que algumas propriedades fiquem inacessíveis, transformado por exemplo umasimples troca de fonte de um componente visual do aplicativo em uma tarefa trabalhosauma vez que essa propriedade nem sempre está exposta.

Como sugestão para trabalhos futuros, considera-se explorar outras ferramen-tas e mecanismos de sincronização para deixá-la mais rápida. Tornar alguns recursosque necessitem de muitos dados, como relatórios, em web services reduzindo assim aquantidade de dados que necessitam ser enviados para o aplicativo em cada sincronização.

Page 40: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

27

Referências

APPLE. Simulator User Guide. 2016. <https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/iOS_Simulator_Guide/Introduction/Introduction.html>.Accessed: 2016-04-05. 14

BENTO, J. Fundamentos do monitoramento, da coleta massal e do confundimento deinsetos-praga. Biologia química e emprego no manejo de pragas, Ribeirão Preto, p.135–144, 2001. 3

CELOTO, F. J.; PAPA, G. Manejo de lagartas em soja e milho com ênfase em helicoverpaspp. Nucleus, v. 10, n. 3, 2013. 1, 3

CHACON, S.; STRAUB, B. Pro git. [S.l.]: Apress, 2014. vii, 14, 15

CRUZ, I. Manejo de pragas na cultura de milho. FANCELLI, AL; DOURADO NETO,D.(Coords.). Tecnologia da produção de milho. Piracicaba: USP-ESALQ, p. 18–39, 1997.3

CRUZ, J. C. et al. Milho: o produtor pergunta, a embrapa responde. Brasília, DF:Embrapa Informação Tecnológica, 2011. 3

DALMASSO, I. et al. Survey, comparison and evaluation of cross platform mobileapplication development tools. In: Wireless Communications and Mobile ComputingConference (IWCMC), 2013 9th International. [S.l.: s.n.], 2013. p. 323–328. 6

DICKSON, J. Xamarin mobile development. Technical Library, n. 167, 2013. 1, 5, 6, 7

EMBRAPA. Tecnologias de produção de soja região central do brasil 2003. Londrina:Embrapa Soja, 2003. 1

FOUNDATION, F. S. GNU. 2010. <https://www.gnu.org/savannah-checkouts/gnu/automake/manual/html_node/Cross_002dCompilation.html>. Accessed: 2016-03-28. 7

GENYMOBILE. User Guide. 2015. <https://docs.genymotion.com/pdf/PDF_User_Guide/Genymotion-2.6.0-User-Guide.pdf>. Accessed: 2016-04-06. 14

GIT. Git. 2016. <https://git-scm.com>. Accessed: 2016-03-26. 14

IDC. Smartphone OS Market Share, 2015 Q2. 2015. <http://www.idc.com/prodserv/smartphone-os-market-share.jsp>. Accessed: 2016-03-18. vii, 4

KREIBICH, J. Using SQLite. [S.l.]: "O’Reilly Media, Inc.", 2010. 13

OWENS, M.; ALLEN, G. SQLite. [S.l.]: Springer, 2010. 13

PETZOLD, C. Creating Mobile Apps with Xamarin. Forms. [S.l.]: Microsoft Press, 2015.vii, 8, 9, 10

RAJ, C. P. R.; TOLETY, S. B. A study on approaches to build cross-platform mobileapplications and criteria to select appropriate approach. In: India Conference (INDICON),2012 Annual IEEE. [S.l.: s.n.], 2012. p. 625–629. 4, 5, 6

Page 41: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

Referências 28

RURAL, C. PIB do agronegócio ganha participação na economia brasi-leira em 2015. 2015. <http://www.canalrural.com.br/noticias/agricultura/pib-agronegocio-ganha-participacao-economia-brasileira-2015-60015>. Acces-sed: 2016-04-15. 1

SCHWABER, K.; BEEDLE, M. Agile Software Development with Scrum. 1st. ed. UpperSaddle River, NJ, USA: Prentice Hall PTR, 2001. ISBN 0130676349. 15

XAMARIN. Advanced IDE for iOS & Android - Xamarin Studio. 2016. <https://www.xamarin.com/studio>. Accessed: 2016-03-26. 12

XAMARIN. Mobile Application Development to Build Apps in C# - Xamarin. 2016.<https://www.xamarin.com/platform>. Accessed: 2016-03-26. 9

XANTHOPOULOS, S.; XINOGALOS, S. A comparative analysis of cross-platformdevelopment approaches for mobile applications. In: Proceedings of the 6th BalkanConference in Informatics. New York, NY, USA: ACM, 2013. (BCI ’13), p. 213–220. ISBN978-1-4503-1851-8. Disponível em: <http://doi.acm.org/10.1145/2490257.2490292>. ix,1, 5, 6

ZARBIN, P.; RODRIGUES, M.; LIMA, E. Feromônios de insetos: tecnologia e desafiospara uma agricultura competitiva no brasil. Química Nova, v. 32, n. 3, p. 722–731, 2009. 3

Page 42: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

29

A Código da View de Novo Ponto

1 <?xml version="1.0" encoding="UTF -8"?>

2 <ContentPage

3 xmlns="http://xamarin.com/schemas /2014/forms"

4 xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"

5 x:Class="Lagartas.Mobile.Pages.NewPointPage"

6 xmlns:resources="clr-namespace:Lagartas.Mobile.Resources;assembly=Lagartas.Mobile"

7 xmlns:behaviors="clr-namespace:Lagartas.Mobile.Behaviors;assembly=Lagartas.Mobile"

8 xmlns:Components="clr-namespace:Lagartas.Mobile.CustomComponents;assembly=Lagartas.

Mobile"

9 Title="Novo Ponto" >

1011 <StackLayout Spacing="0"

12 BackgroundColor="{x:Static resources:Colors.BackgroundColor}">

13 <Components:NoEmptyCellTableView HasUnevenRows="true">

14 <TableSection Title="Informações do ponto">

15 <ViewCell Height="{x:Static resources:Dimens.TableRowHeight}">

16 <Grid Padding="15, 0" BackgroundColor="White">

17 <Grid.ColumnDefinitions>

18 <ColumnDefinition Width="Auto" />

19 <ColumnDefinition Width="*" />

20 </Grid.ColumnDefinitions>

21 <Label Grid.Column="0"

22 Text="Nome"

23 Style="{StaticResource CellLabelStyle}" />

24 <Components:NoBordsEntry Grid.Column="1"

25 Text="{Binding Nome}"

26 Placeholder="Nome do ponto"

27 TextSize="{x:Static resources:Dimens.CellLabelFontSize}"

28 BackgroundColor="Transparent"

29 TextAlignment="End"

30 VerticalOptions="Center"

31 HorizontalOptions="FillAndExpand" />

32 </Grid>

33 </ViewCell>

34 <ViewCell Height="{x:Static resources:Dimens.TableRowHeight}">

35 <Grid Padding="15, 0" BackgroundColor="White">

36 <Grid.ColumnDefinitions>

37 <ColumnDefinition Width="Auto" />

38 <ColumnDefinition Width="*" />

39 <ColumnDefinition Width="Auto" />

40 </Grid.ColumnDefinitions>

41 <Label Grid.Column="0"

42 Text="Propriedade"

43 Style="{StaticResource CellLabelStyle}" />

44 <Label Grid.Column="1"

45 Text="{Binding Fazenda.Nome}"

46 Style="{StaticResource DataLabelStyle}"

47 TextColor="{Binding FazendaTextColor}" />

48 <Image Grid.Column="2"

49 VerticalOptions="CenterAndExpand"

50 HeightRequest="20"

51 Source="{x:Static resources:Images.GrayFlecha}" />

52 <Grid.GestureRecognizers>

53 <TapGestureRecognizer Command="{Binding SelectFazendaCommand}" />

54 </Grid.GestureRecognizers>

Page 43: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

APÊNDICE A. Código da View de Novo Ponto 30

55 </Grid>

56 </ViewCell>

57 </TableSection>

58 <TableSection Title="Posição">

59 <ViewCell Height="{x:Static resources:Dimens.TableRowHeight}">

60 <Grid Padding="15, 0" BackgroundColor="White">

61 <Grid.ColumnDefinitions>

62 <ColumnDefinition Width="*" />

63 <ColumnDefinition Width="Auto" />

64 </Grid.ColumnDefinitions>

65 <Label Grid.Column="0"

66 Text="Coordenadas GPS"

67 Style="{StaticResource CellLabelStyle}" />

68 <ActivityIndicator Grid.Column="1"

69 VerticalOptions="Center"

70 HorizontalOptions="End"

71 HeightRequest="{x:Static resources:Dimens.GPSIconSize}"

72 WidthRequest="{x:Static resources:Dimens.CircleSize}"

73 IsRunning="true"

74 IsVisible="{Binding IsIndicatorVisible}"/>

75 <Image Grid.Column="1"

76 HeightRequest="{x:Static resources:Dimens.GPSIconSize}"

77 WidthRequest="{x:Static resources:Dimens.CircleSize}"

78 VerticalOptions="Center"

79 HorizontalOptions="End"

80 IsVisible="{Binding IsButtonVisible}"

81 Source="{x:Static resources:Images.GPSBlack}" />

82 <Grid.GestureRecognizers>

83 <TapGestureRecognizer Command="{Binding LocalizaionCommand}" />

84 </Grid.GestureRecognizers>

85 </Grid>

86 </ViewCell>

87 <ViewCell Height="{x:Static resources:Dimens.TableRowHeight}">

88 <Grid Padding="15, 0" BackgroundColor="White">

89 <Grid.ColumnDefinitions>

90 <ColumnDefinition Width="Auto" />

91 <ColumnDefinition Width="*" />

92 </Grid.ColumnDefinitions>

93 <Label Grid.Column="0"

94 Text="Latitude"

95 Style="{StaticResource CellLabelStyle}" />

96 <Components:NoBordsEntry Grid.Column="1"

97 Text="{Binding Position.Latitude}"

98 TextSize="{x:Static resources:Dimens.CellLabelFontSize}"

99 TextColor="{x:Static resources:Colors.SecondaryColor}"

100 TextAlignment="End"

101 VerticalOptions="Center"

102 HorizontalOptions="FillAndExpand" >

103 <Entry.Behaviors>

104 <behaviors:NumericLimiter/>

105 </Entry.Behaviors>

106 </Components:NoBordsEntry>

107 </Grid>

108 </ViewCell>

109 <ViewCell Height="{x:Static resources:Dimens.TableRowHeight}">

110 <Grid Padding="15, 0" BackgroundColor="White">

111 <Grid.ColumnDefinitions>

112 <ColumnDefinition Width="Auto" />

Page 44: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

APÊNDICE A. Código da View de Novo Ponto 31

113 <ColumnDefinition Width="*" />

114 </Grid.ColumnDefinitions>

115 <Label Grid.Column="0"

116 Text="Longitude"

117 Style="{StaticResource CellLabelStyle}" />

118 <Components:NoBordsEntry Grid.Column="1"

119 Text="{Binding Position.Longitude}"

120 TextSize="{x:Static resources:Dimens.CellLabelFontSize}"

121 TextColor="{x:Static resources:Colors.SecondaryColor}"

122 TextAlignment="End"

123 VerticalOptions="Center"

124 HorizontalOptions="FillAndExpand">

125 <Entry.Behaviors>

126 <behaviors:NumericLimiter/>

127 </Entry.Behaviors>

128 </Components:NoBordsEntry>

129 </Grid>

130 </ViewCell>

131 </TableSection>

132 </Components:NoEmptyCellTableView>

133 <StackLayout Style="{StaticResource ButtonStackStyle}"

134 BackgroundColor="Transparent">

135 <Button Text="SALVAR PONTO"

136 Command="{Binding DoneCommand}"

137 Style="{StaticResource ButtonStyle}"

138 BackgroundColor="{x:Static resources:Colors.MeusPontosColor}" />

139 </StackLayout>

140 </StackLayout>

141 </ContentPage>

Código 5 – Código de interface da tela de Novo Ponto.

Page 45: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

32

B Código da ViewModel de Novo Ponto

1 using System.Threading.Tasks;

2 using Acr.UserDialogs;

3 using Geolocator.Plugin.Abstractions;

4 using Lagartas.Mobile.Helpers;

5 using Lagartas.Mobile.Messages;

6 using Lagartas.Mobile.Models;

7 using Lagartas.Mobile.Pages;

8 using Lagartas.Mobile.Repositories;

9 using Lagartas.Mobile.Resources;

10 using Xamarin.Forms;

11 namespace Lagartas.Mobile.ViewModels

12 {

13 public class NewPointViewModel : BaseViewModel

14 {

15 public NewPointViewModel (INavigation navigation ,

16 Ponto ponto = default(Ponto)) : base (navigation)

17 {

18 MessagingCenter.Subscribe <SetFarmMessage > (

19 this , SetFarmMessage.SetFarm , (sender) => {

20 Fazenda = sender.Fazenda;

21 });

2223 if (ponto != default(Ponto))

24 {

25 CarregaPonto(ponto);

26 } else {

27 Position = new Position ();

28 }

29 }

3031 void CarregaPonto(Ponto ponto)

32 {

33 Nome = ponto.Nome;

34 var UnitOfWork = new MainUnitOfWork();

35 Fazenda = UnitOfWork.FazendaRepository.GetById(ponto.FazendaId);

36 UnitOfWork.Dispose();

37 Position = new Position()

38 {

39 Latitude = ponto.PosicaoLatitude ,

40 Longitude = ponto.PosicaoLongitude

41 };

4243 Ponto = ponto;

44 }

4546 private Ponto ponto = default(Ponto);

47 public Ponto Ponto

48 {

49 get { return ponto; }

50 set {

51 if (ponto != value)

52 ponto = value;

53 }

54 }

55

Page 46: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

APÊNDICE B. Código da ViewModel de Novo Ponto 33

56 public const string PositionPropertyName = "Position";

57 private Position position;

5859 public Position Position {

60 get { return position; }

61 set {

62 if (Position != value) {

63 position = value;

64 OnPropertyChanged (PositionPropertyName);

65 }

66 }

67 }

6869 public const string FazendaPropertyName = "Fazenda";

70 private Fazenda fazenda;

7172 public Fazenda Fazenda {

73 get { return fazenda; }

74 set {

75 if (Fazenda != value) {

76 fazenda = value;

77 FazendaTextColor = Colors.DataLabelFilledTextColor;

78 OnPropertyChanged (FazendaPropertyName);

79 }

80 }

81 }

8283 public const string NomePropertyName = "Nome";

84 private string nome;

8586 public string Nome {

87 get { return nome; }

88 set {

89 if (Nome != value) {

90 nome = value;

91 OnPropertyChanged (NomePropertyName);

92 }

93 }

94 }

9596 public const string FazendaTextColorPropertyName = "FazendaTextColor";

97 private Color fazendaTextColor = Colors.PlaceHolderColor;

9899 public Color FazendaTextColor {

100 get { return fazendaTextColor; }

101 set {

102 if (FazendaTextColor != value) {

103 fazendaTextColor = value;

104 OnPropertyChanged (FazendaTextColorPropertyName);

105 }

106 }

107 }

108109 public const string IsIndicatorVisiblePropertyName = "IsIndicatorVisible";

110 private bool isIndicatorVisible = false;

111112 public bool IsIndicatorVisible {

113 get { return isIndicatorVisible; }

Page 47: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

APÊNDICE B. Código da ViewModel de Novo Ponto 34

114 set {

115 if (IsIndicatorVisible != value) {

116 isIndicatorVisible = value;

117 OnPropertyChanged (IsIndicatorVisiblePropertyName);

118 }

119 }

120 }

121122 public const string IsButtonVisiblePropertyName = "IsButtonVisible";

123 private bool isButtonVisible = true;

124125 public bool IsButtonVisible {

126 get { return isButtonVisible; }

127 set {

128 if (IsButtonVisible != value) {

129 isButtonVisible = value;

130 OnPropertyChanged (IsButtonVisiblePropertyName);

131 }

132 }

133 }

134135 private Command selectFazendaCommand;

136 public const string SelectFazendaCommandPropertyName = "SelectFazendaCommand";

137138 public Command SelectFazendaCommand {

139 get {

140 return selectFazendaCommand ?? (selectFazendaCommand = new Command (async () =>

await ExecuteSelectFazendaCommand ()));

141 }

142 }

143144 protected async Task ExecuteSelectFazendaCommand ()

145 {

146 if (!IsBusy) {

147 IsBusy = true;

148 await Navigation.PushAsync (new FarmSelectionPage (Position));

149 IsBusy = false;

150 }

151 }

152153 private Command localizaionCommand;

154 public const string LocalizaionCommandPropertyName = "LocalizaionCommand";

155156 public Command LocalizaionCommand {

157 get {

158 return localizaionCommand ?? (localizaionCommand = new Command (async () =>

await ExecuteLocalizaionCommand ()));

159 }

160 }

161162 protected async Task ExecuteLocalizaionCommand ()

163 {

164 IsButtonVisible = false;

165 IsIndicatorVisible = true;

166 Position = await Sync.ComputeUserPosition ();

167 IsButtonVisible = true;

168 IsIndicatorVisible = false;

169 }

Page 48: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

APÊNDICE B. Código da ViewModel de Novo Ponto 35

170171 private Command doneCommand;

172 public const string DoneCommandPropertyName = "DoneCommand";

173174 public Command DoneCommand {

175 get {

176 return doneCommand ?? (doneCommand = new Command (async () => await

ExecuteDoneCommand ()));

177 }

178 }

179180 protected async Task ExecuteDoneCommand ()

181 {

182 if (!IsBusy) {

183 IsBusy = true;

184 if (Fazenda != default(Fazenda) && Nome != default(string)

185 && Position.Latitude != 0 && Position.Longitude != 0 ) {

186 if (Ponto == default(Ponto))

187 {

188 Ponto = new Ponto();

189 }else{

190 Ponto.IsDirty = true;

191 }

192 Ponto.Nome = Nome;

193 Ponto.FazendaId = Fazenda.Id;

194 Ponto.PosicaoLatitude = Position.Latitude;

195 Ponto.PosicaoLongitude = Position.Longitude;

196 var unitOfWork = new MainUnitOfWork ();

197 unitOfWork.PontoRepository.AddOrUpdate (Ponto);

198 unitOfWork.Commit ();

199 unitOfWork.Dispose ();

200 if (Ponto.IsDirty)

201 {

202 await Navigation.PushAsync(new ConfirmationPage(

203 Colors.MeusPontosColor , "Ponto atualizado com sucesso", Images.

RedConfirmation)

204 );

205 }

206 else

207 {

208 await Navigation.PushAsync(new ConfirmationPage(

209 Colors.MeusPontosColor , "Ponto adicionado com sucesso", Images.

RedConfirmation)

210 );

211 }

212 } else {

213 await UserDialogs.Instance.AlertAsync (

214 "Por favor preencha nome , fazenda e posição antes de prosseguir", "Campos

obrigatórios não preenchidos", "OK"

215 );

216 }

217 IsBusy = false;

218 }

219 }

220 }

221 }

Código 6 – Código fonte da ViewModel de Novo Ponto.

Page 49: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

36

A Diagramas

A.1 Diagrama de Classes UML

Usu

ario

id :

long

emai

l : S

trin

gno

me

: Str

ing

senh

a : S

trin

g

Reg

iona

lid

: lo

ngno

me

: Str

ing

Reg

iao

id :

long

nom

e : S

trin

g

Faze

nda

id :

long

nom

e : S

trin

gpr

opri

etar

io :

Stri

ngla

titud

e : d

oubl

elo

ngitu

de :

doub

le

Est

ado

id :

long

nom

e : S

trin

gsi

gla

: Str

ing

Mun

icip

ioid

: lo

ngno

me

: Str

ing

Pont

oid

: lo

ngla

titud

e : d

oubl

elo

ngitu

de :

doub

le

Col

eta

id :

long

pluv

iom

etri

a : d

oubl

ela

titud

e : d

oubl

elo

ngitu

de :

doub

leda

ta :

Dat

e

Cul

tura

id :

long

nom

e : S

trin

g

Cul

tura

Gru

poid

: lo

ngno

me

: Str

ing

Est

adio

Feno

logi

coid

: lo

ngno

me

: Str

ing

nom

eAbr

evia

do :

Stri

ng

Prag

aid

: lo

ngno

me

: Str

ing

Indi

cado

rid

: lo

ngno

me

: Str

ing

Col

etaI

ndic

ador

id :

long

valo

r : in

t

0..*

10.

.*1

0..*1 1

1..*

1 1..*

1..*

1

0..*

10.

.*1

0..*

1

0..* 1

1 1..*

**

*

*

*

*

11.

.*

11.

.*

11..*

Figura 17 – Diagrama de Classes UML

Page 50: Desenvolvimento de um aplicativo para controle de pragas ... · CONTROLE DE PRAGAS UTILIZANDO ABORDAGEM CROSS-COMPILED SIDNEI POLO ... mais afetadas estão o algodão, feijão, milho

ANEXO A. Diagramas 37

A.2 Diagrama de Casos de Uso UML

Usuário

Editar Coleta

Realizar Coleta

Cadastrar Ponto de Coleta

Cadastrar no Sistema

Efetuar Login

Consultar Histórico de Coletas

Monitorar Incidência de Pragas

Visualizar Relatórios

Sincronizar Dados

Visualizar Info. Sobre o Sistema

Figura 18 – Diagrama de Casos de Uso UML