UNIVERSIDADE FEDERAL DE SANTA CATARINA – UFSC CENTRO TECNOLÓGICO – CTC DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA – INE CURSO DE BACHARELADO EM SISTEMAS DE INFORMAÇÃO DISCIPLINA: PROJETOS I GRADUANDO: LUCAS DE SOUZA REIS GOMES 0023823-6 - RESUMO DE PROJETOS I (TRABALHO DE CONCLUSÃO DE CURSO) “DESENVOLVIMENTO DE APLICAÇÕES PARA DISPOSITIVOS MÓVEIS UTILIZANDO A PLATAFORMA J2ME” – Introdução Conectividade, personalização e inteligência nos instrumentos de informação, como apresentado nos dispositivos móveis, estão trazendo importantes benefícios em nossos negócios e vida privada. Estes dispositivos tais como, telefones celulares, pagers, screen phones1 , PDAs2 (Personal Digital Assistant) e sistemas de navegação de carros possuem muitas características em comum, porém diferem em diversas formas e funções. Estes dispositivos tendem a ser construídos para um propósito específico diferentemente das máquinas de computação convencionais de propósito geral. Diferentemente do que ocorria no passado, quando os dispositivos como telefones celulares eram fabricados com um conjunto de funções prédeterminadas, por exemplo: jogos, agenda, etc, que permaneciam imutáveis por toda a vida útil do aparelho. Podem hoje, com avanço tecnológico desses dispositivos aliado a tecnologia J2ME, permitir aos usuários customizar seus dispositivos, carregando novos serviços e aplicações da Internet de acordo com suas necessidades. – Histórico das Comunicações Móveis Um sistema de comunicação móvel tem como característica a possibilidade de movimento relativo entre as partes como, por exemplo, a comunicação entre o telefone celular e a estação base na telefonia celular. Sistemas móveis usam a tecnologia sem fio para possibilitar uma comunicação transparente enquanto o usuário se desloca. A seguir, é apresentado um breve histórico das comunicações móveis. A era da telefonia celular teve seu início efetivo no início dos anos 90, quando o usuário podia portar o aparelho embora suas dimensões iniciais fossem grandes. O espectro de freqüências, que constitui o meio de transmissão das redes móveis sem fio, precisa ser compartilhado entre os vários usuários do sistema. É sob este espectro que as técnicas de acesso múltiplo ao meio operam, garantindo um acesso compartilhado e com equidade para todos os terminais móveis [4]. As principais técnicas responsáveis pela divisão dos recursos de freqüência em vários canais não interferentes possibilitando o acesso múltiplo dos usuários são FDMA1 (Frequency Division Multiple Access), TDMA2 (Time Division Multiple Access) e CDMA3 (Code Division Multiple Access). Vários padrões para a telefonia celular foram adotados em diferentes países e ficaram conhecidos como sistemas de 1ª Geração (1G), entre eles podem-se citar: o AMPS (Advanced Mobile Telephone System) nos Estados Unidos, o TACS (Total Access Communications Systems) no Reino Unido, o JTACS (Japan Total Access Communications Systems) no Japão e o NMT (Nordic Mobile Telephones system) nos países do norte europeu (Dinamarca, Finlândia, Suécia e Noruega). Os sistemas de 1G utilizam a transmissão de dados no modo analógico e a técnica de acesso ao meio utilizada é a FDMA. Os principais problemas com esses sistemas eram a baixa qualidade e capacidade dos canais de comunicação e a incompatibilidade entre os diversos sistemas existentes. Depois da primeira geração de sistemas móveis veio a 2a Geração (2G) numa tentativa de ampliar a capacidade dos sistemas existentes. O sistema AMPS(Advanced/American Mobile Phone System) evoluiu para o DAMPS( Digital Advanced Mobile Phone System) que utilizava TDMA, também conhecido por IS-54 (Interim Standard 54). Como uma alternativa ao IS-54 surgiu nos Estados Unidos o IS-95 (Interim Standard 95), ainda na primeira metade da década de 90 e utilizava o CDMA, aumentando a capacidade em relação aos sistemas existentes. O IS-54 foi sucedido pelo IS136 (Interim Standard 136). Portanto, em meados da década de 90 dois sistemas móveis digitais competiam nas Américas na faixa de 800 Mhz. Na Europa surgiu o GSM (Global System for Mobile Communications), no início da década de 90, alcançando um maior número de assinantes, devido abranger uma maior área de cobertura dentre os padrões de segunda geração. Utiliza acesso FDMA/TDMA. Uma grande inovação do sistema GSM é o módulo de identificação do usuário, o SIM (Subscriber Identification Module) que contém a identificação completa do usuário, chaves de código de privacidade e outras informações específicas sobre o usuário. O SIM se apresenta sob a forma de um cartão de crédito ou de um plug-in1 que é conectado ao terminal GSM. Estes cartões podem ser removidos de um telefone GSM e usados em um outro, permitindo que o usuário utilize qualquer telefone GSM. Sem o SIM, o terminal torna-se inoperante. Esse sistema padronizou as comunicações celulares na Europa, permitindo ao usuário utilizar seu telefone em qualquer país europeu. Ainda pode-se destacar como sistema 2G o PDC (Personal Digital Cellular) desenvolvido no Japão. Com a 2ª geração de celulares foram introduzidos novos serviços de comunicação de voz, com maior qualidade e capacidade de transmissão, possibilitando atender um maior número de usuários e, também, foram criados serviços de transmissão de dados como o Serviço de Mensagens Curtas (Short Messages Service SMS) para transmissão de pequenos pacotes de dados. O SMS permite que o usuário envie e receba mensagens de texto de até 160 bytes. Ainda no início da década de 90 surgiu a idéia da 3a Geração (3G) dos sistemas celulares, como uma proposta para a padronização global das comunicações móveis, com a disponibilização de altas taxas de transmissão de dados possibilitando o suporte a aplicações multimídia e acesso à Internet. O IMT-2000 (International Mobile Telecommunications 2000) é a especificação para os sistemas 3G que está sendo desenvolvida pela ITU1 (International Telecommunication Union). Esses sistemas, que já se encontram em uso no Japão, disponibilizam serviços de voz, dados, e aplicações multimídia sobre as redes sem fio. A idéia é que o IMT-2000 especifique uma família de padrões que disponibilize pelo menos taxas de 2 Mbps (Mega bits por segundo) em ambientes indoor2, 384 Kbps em ambientes de baixa mobilidade, 144 kbps (Kilo bits por segundo) em ambientes veiculares (outdoor3 ). A possibilidade de acesso à informação e serviços a qualquer hora e em qualquer lugar poderá moldar uma nova sociedade de informação com os usuários acessando a informação na Internet através de diversos dispositivos móveis, tais como telefones celulares, PDAs (Assistentes Pessoais Digitais) e Laptops. – Aplicações móveis Aplicações móveis apresentam várias características que agregam funcionalidade aos seus usuários. A primeira delas é a mobilidade, a capacidade de manter voz constante e comunicação de dados enquanto em movimento. Em segundo lugar está o imediatismo, que permite aos usuários obter conectividade quando necessário, sem considerar a localização e sem uma longa sessão de login1. Finalmente, localização permite aos usuários obterem informações relevantes para suas localizações atuais. A combinação dessas características fornece uma grande faixa de possíveis aplicações que podem ser oferecidas aos usuários móveis. Essas aplicações podem ficar disponíveis em uma rede do provedor de serviço ou na Internet pública. As aplicações móveis são de várias categorias e incluem: · Comunicações - e-mail, fax, mensagem unificada e acesso à intranet/Internet; · Serviço de valor agregado(VAS Value added services) - serviços de informação e jogos; · M-commerce - venda a varejo, compra de bilhetes, serviços bancários e comércio financeiro; ·Aplicação baseada em localização - Navegação, condições de tráfego de veículos, localização de pessoas e hospitais, etc; · Aplicações verticais - gerenciamento de frota, alocação de recursos, etc; · Publicidade. - O que é J2ME? Java 2 Micro Edition (J2ME) é a edição da linguagem Java para ser usada em dispositivos de computação portáteis e móveis, que possuem as seguintes características: mobilidade, baixa capacidade de processamento e pouca memória disponível, alimentação elétrica por baterias, pequenas áreas de display, e limitados e variados métodos de entrada e saída. Alguns exemplos destes dispositivos seriam os telefones celulares, pagers, PDAs(Assistentes Digitais Pessoais), Palms, entre outros. J2ME não define um novo tipo de Java, mas adapta sua plataforma para que seja possível executar programas em dispositivos, como os citados anteriormente. Sendo assim, todo programa desenvolvido para J2ME poderá ser executado sem nenhum problema nas edições Standard (J2SE) e Enterprise (J2EE), assumindo que as APIs usadas estejam presentes para estas plataformas. - O que J2ME oferece? Essencialmente, a plataforma J2ME busca criar um conjunto de conceitos para homogeneizar o desenvolvimento em pequenos dispositivos, transparecendo ao desenvolvedor todos os detalhes proprietários do fabricante como arquitetura de hardware e sistema operacional do dispositivo sobre o qual esteja trabalhando. Através de J2ME, torna-se possível desenvolver, atualizar e instalar novas aplicações segundo as necessidades particulares de cada usuário. Além disso, é possível depois de feito o download da aplicação para o dispositivo, trabalhar conectado à rede (on-line) ou desconectado da rede (off-line), no caso de se estar desconectado da rede, quando a rede estiver disponível pode-se fazer a sincronização1 dos dados e das informações utilizadas anteriormente. As aplicações para a plataforma J2ME vão desde jogos, aplicações que acessam banco de dados, etc. - Os Conceitos de Configurações e Perfis Existe uma diversidade de dispositivos, no qual estes apresentam muitos pontos em comum, mas diferenciam-se em suas formas, funcionalidade e características. Existem também dispositivos com uma grande variedade de capacidade de processamento, memória e interação com o mundo exterior (interface com o usuário, métodos de entrada e saída de informações e dados). Afirmar que uma tecnologia serve para todos os dispositivos da mesma família , tal como nas outras edições de Java, não funciona nos dispositivos de recursos limitados devido a todas essas diferenças. Para suportar esse tipo de diversificação dos dispositivos, dois conceitos essenciais foram definidos pela edição J2ME que são: Configurações e Perfis. - Configurações: Uma configuração define uma plataforma mínima para um grupo de dispositivos com características similares, tanto na memória quanto no poder de processamento. Sendo assim, uma configuração define as características suportadas tanto pela própria linguagem de programação Java, pela máquina virtual e suas bibliotecas de classes e APIs, as quais um determinado fabricante pode esperar que estarão disponíveis em todos os dispositivos de uma mesma categoria. Atualmente existem duas configurações definidas e validadas pela Sun: · Configuração para dispositivos conectados (CDC). A CDC é designada para dispositivos fixos um pouco maiores, com pelo menos dois megabytes de memória disponível, conectividade com redes, possibilitando estabilidade e grande largura de banda. Usa a máquina virtual Compact Virtual Machine (CVM) que é uma máquina virtual completa e projetada para os dispositivos que necessitam de toda a funcionalidade presente na edição J2SE (JVM), apresentando porém bem menos requisitos de memória, tendo assim suporte para implementação completa de sua especificação. Alguns exemplos desses dispositivos são: televisão com Internet, sistema de navegação de carros, entre outros. · Configuração para dispositivos com limites de conexão (CLDC). A CLDC é designada para dispositivos móveis, pequenos e com grande restrição de recursos, conectividade a algum tipo de rede, em geral sem-fio. Conexão intermitente e banda limitada. Usa uma máquina virtual reduzida em relação à máquina virtual clássica, que é a KVM (Kilo Virtual Machine). A KVM será apresentada mais adiante. telefones celulares, pagers e PDAs são alguns dos dispositivos pertencentes a CLDC. - Perfil: Um perfil define uma plataforma Java para um segmento vertical específico do mercado, ou seja, para uma categoria de dispositivos. O perfil é a camada mais visível para usuários e desenvolvedores de aplicações. Define o conjunto mínimo de interfaces de programa da aplicação (APIs) disponível em uma classe particular dos dispositivos representando um segmento de mercado vertical particular. Os perfis são implementados para uma configuração particular (CLDC ou CDC). As aplicações são escritas para um perfil específico sendo, deste modo, portáteis para qualquer dispositivo que suporte aquele perfil. Um dispositivo pode sustentar múltiplos perfis. Existem vários perfis como, por exemplo, o Perfil Fundamental (Foundation Profile), complementa a configuração CDC e o Perfil do Dispositivo de Informação Móvel (MIDP), para dispositivos de informação móveis que complementa a configuração CLDC. - As Máquinas Virtuais J2ME: Uma Máquina Virtual Java é o fundamento para a Tecnologia Java, permitindo que aplicações escritas na linguagem de programação Java sejam portáveis através de ambientes de hardware e sistemas operacionais diferentes. A máquina virtual faz a ponte entre a aplicação e a plataforma utilizada, convertendo o bytecode da aplicação em código de máquina apropriado para o hardware e sistema operacional utilizados. Além de gerenciar a execução dos bytecodes da aplicação, a máquina virtual lida com tarefas relacionadas à administração da memória do sistema, provendo segurança contra código malicioso e administrando as threads dos programas. A máquina virtual Java usada na versão standard (padrão) e na versão enterprise (corporativa) foi desenvolvida para ser utilizada em sistemas desktop e servidores respectivamente. Em J2ME deve-se utilizar uma máquina virtual Java que seja apropriada para os dispositivos como telefones celulares, pagers e PDAs que possuem tamanho de memória reduzido e outra para dispositivos com um poder um pouco maior de memória tais como: set-top boxes, sistemas de navegação de carros, pcs handhelds e outros. Em virtude disso, duas máquinas virtuais foram projetadas. Uma para ser utilizada na configuração CLDC, Kilo Virtual Machine (KVM), e outra para a configuração CDC, a Compact Virtual Machine (CVM). - A máquina virtual K (KVM) A KVM ou Kilo Virtual Machine é a mais nova e otimizada máquina virtual Java para dispositivos com limites de restrições. Possuindo cerca de 40 a 80K de memória, tornou-se bastante apropriada para dispositivos como pagers, telefones celulares e PDAs. A KVM pode executar em qualquer sistema que possua um processador de 16 ou 32 bits e um total de memória de 160 a 512K. Além disso, não suporta tipos de dados longos e de ponto flutuante. Seu projeto foi baseado em algumas importantes considerações, incluindo o tamanho reduzido para conservar um melhor espaço em memória quanto possível (tanto em termos de armazenamento quanto execução) e a capacidade de rodar em processadores de pequeno poder computacional. A KVM é implementada na linguagem C, por isso pode ser portável para outras plataformas que contenham um compilador C. - A máquina virtual C (CVM) A máquina virtual C foi desenvolvida para adicionar maior funcionalidade aos dispositivos da segunda categoria dos quais a KVM não suporta. Praticamente esta máquina virtual engloba quase todas as características de uma máquina virtual Java convencional, só que de forma mais otimizada. Os conceitos de Perfil, Configurações e Máquinas Virtuais formam as camadas da Arquitetura J2ME. - O Modelo MIDP O Perfil do Dispositivo de Informações Móveis (MIDP) é o primeiro perfil disponível para a plataforma J2ME. A combinação do CLDC e do MIDP fornece um ambiente completo de desenvolvimento para a criação de aplicações em celulares e pagers. Aplicações que executam em dispositivos que suportam MIDP são denominados MIDlets. O MIDP foi feito para executar em cima da camada de configuração CLDC. - Técnicas para otimizar a performance em aplicações J2ME Aplicações utilizadas em dispositivos móveis devem ser de rápida execução, pois quanto menor o tempo de execução, menos tempo de uso da bateria, acarretando uma maior satisfação para o usuário. Nesta seção são apresentadas algumas técnicas de programação para aumentar a performance de aplicações J2ME. · Sempre que possível utilizar variáveis locais ao invés de variáveis de classes, assim o acesso aos atributos de objeto é mais rápido com o uso das variáveis locais; · Tentar diminuir as chamadas de métodos, pois quando um método é chamado, a máquina virtual java aloca um novo nodo da pilha de execução, isso faz com que a memória seja sobrecarregada; · Minimizar a criação de objetos, pois quando um objeto é criado, na maioria das vezes ele será destruído, isso leva à uma diminuição da performance da aplicação. Para evitar a criação de muitos objetos devese utilizar objetos que possam ser reciclados ou mantidos na memória o máximo de tempo possível; · Tentar não concatenar strings, a concatenação com o operador + leva a criação de um novo objeto e por conseqüência utiliza mais a memória e o processamento; · Evitar a sincronização, se um método demora algumas frações de segundos para executar, deve-se colocar a sua chamada em uma thread em separado.