20 fevereiro 2007

Introdução a programação para celulares com suporte a Java ME - parte 1

Já tive oportunidades de ministrar cursos sobre a tecnologia Java ME, e desde então, venho querendo publicar dicas sobre o assunto. Pois bem! Apresentarei uma série de recursos que demonstram como desenvolver alguns programas simples e que podem ser potencialmente interessantes para seu aprendizado. No primeiro post do blog farei uma introdução sobre o assunto indicando algumas referências para leituras complementares, nada muito complicado, mas que servem de apóio para entender a tecnologia escolhida: Java ME. Os próximos posts trataremos de exemplos práticos e a sua utilização usando as APIs de Java ME, passando pela codificação dos exemplos e sua configuração nos ambientes apropriados. Depois gradativamente veremos como usar bibliotecas específicas como PIM, Bluetooth, etc., de forma que podemos entender, experimentar e testar tais recursos para usá-los de forma prática, criativa e quem sabe, lucrativa.

Este post faz parte de uma série de artigos técnicos sobre o desenvolvimento de software para celulares. O segundo artigo já foi publicado, confira!

Breve introdução sobre a tecnologia Java ME
É importante observarmos que aplicações Java ME (voltadas para celulares), são bastante limitada com relação ao seus recursos computacionais. A velocidade do processador, a memória e dispositivos de armazenamento são em média baixas. Isso nos leva muitas vezes a re-aprender os paradigmas de desenvolvimento atuais. Por outro lado, existe a tendência natural da evolução do hardware, e consequentemente os recursos computacionais poderão ser melhor aproveitados. Não se pode comparar um PC com um celular, pelo menos ainda não. Num celular tradicional, não dispomos de mouse, nem tão pouco de uma resolução de tela de 1024x768 pixel. Neste sentido, devemos repensar a forma como projetamos esses sistemas. Retomarei esse assunto no próximo post. Veremos agora o que é Java ME.

Java
Micro Edition é uma coleção de recursos da plataforma Java que possibilita desenvolver softwares que podem rodar em dispositivos específicos, tais como celulares. Autores da comunidade da Wikipédia, a Enciclopédia Livre, descreveram uma visão interessante e simplificada sobre Java ME, vejamos:

Java Plataform, Micro Edition (Java ME) ou J2ME É uma tecnologia que nos possibilita o desenvolvimento de software para sistemas e aplicações embarcadas, ou seja, toda aquela que roda em um dispositivo de propósito específico, desempenhando alguma tarefa que seja útil para o dispositivo.

É a plataforma Java para dispositivos compactos, como celulares, PDAs, controles remotos, e uma outra gama de dispositivos. Java ME é uma coleção de APIs do Java definidas através da JCP (Java Community Proccess). A comunidade JCP adotou duas abordagens para especificar as necessidades dos pequenos dispositivos - a sua arquitetura computacional.

Primeiro eles definiram o ambiente de execução Java (do inglês Java run-time environment), e um conjunto de classes básicas, chamadas de core, que operam sobre cada dispositivo. Isso foi denominado Configurações (do inglês Configurations). Uma configuração define a JVM (Java Virtual Machine) para um pequeno e específico dispositivo computacional. Há duas configurações para um dispositivo embarcado, uma para dispositivos com maior capacidade computacional (do inglês High-end consumer devices), denominado CDC (Connected Device Configuration). A outra com menor capacidade computacional (do inglês Low-end consumer devices), denominado CLDC (Connected Limited Device Configuration).

A segunda abordagem foi definida como um perfil (do inglês profile). Um perfil consiste em um conjunto de classes que possibilita os desenvolvedores de software implementarem as aplicações de acordo com as características das aplicações dos pequenos dispositivos computacionais. Foi denominado o MIDP (Mobile Information Device Profile), oferecendo recursos como rede, componentes de interface, armazenamento local, etc.

Fonte:

WIKIPÉDIA. Desenvolvido pela Wikimedia Foundation. Apresenta conteúdo enciclopédico. Disponível em: <http://pt.wikipedia.org/w/index.php?title=J2ME&oldid=4961778>. Acesso em: 20 Fev 2007


Foram criadas especificações que definiram a arquitetura da tecnologia Java ME, como divisões lógicas, assim como arquitetura de camadas. Para entender melhor essas divisões vamos olhar a figura 1, que representa o esquema citado.

Figura 1: Organização da plataforma Java ME


Device/Hardware: a camada mais abaixo representa o hardware do dispositivo específico que nossa aplicação pode rodar, existem vários fabricantes espalhados pelo mundo que mantém suas próprias tecnologias ou fornecedores desses equipamentos e seus hardwares, entre eles: Motorola, Nokia, Sansumg, Sony Ericson etc. A maioria dessas tecnologias são proprietárias e suas comercializações são garantidas através de patentes.
Native Operating System: a maioria dos dispositivos possui um Sistema Operacional (SO) que habilita nossas aplicações a funcionarem no hardware do dispositivo, no entanto, a maioria não pode ser considerada como um SO completo, assim como Windows ou Linux, pois são limitados e adequados a capacidade computacional do aparelho (P2K da Motorola é um exemplo). Já o SO Symbian ou Linux são mais avançados e são habilitados para executarem várias tarefas e processos simultaneamente (não confundir com paralelamente, o que não é o caso). É nessa camada que as JVMs do Java reproduzem a sua funcionalidade se comunicando com as configurações.
Configurations: conforme podemos observar no texto citado do Wikipédia (leia novamente se não lembrar), as configurações definem o core, ou seja, a essência das implementações que rodam uma JVM que permite interpretar nossa aplicação. A maioria dos dispositivos atuais suporta CLDC 1.0 e CLDC 1.1. A versão 1.0 foi baseada na especificação da versão Java SE 1.3, e a versão CLDC 1.1 foi baseado na versão Java SE 1.4. Logo, podemos concluir que CLDC 1.1 possui melhorias e mais recursos. Por exemplo, um celular que suporta CLDC 1.1, poderia utilizar a funcionalidade de ponto flutuante (uso do tipo primitivo float). Em resumo, as configurações fazem a ponte entre o SO do dispositivo e a JVM que irá rodar nossa aplicação.
Profile: são os recursos que os programadores dispõem para utilizar as funções básicas disponíveis da linguagem Java, especificamente voltados para plataforma Java ME. São as APIs de MIDP. Por exemplo, métodos para manipular Strings, desenhar gráficos, etc. Quando uma aplicação utiliza um recurso do profile, ocorre uma comunicação com a configuração (CLDC), e que permitirá gerar um bytecode (arquivo com extensão .class), voltada para o alvo de compilação específica (por exemplo, uma aplicacao MIDP 2.0 com CLDC1.0). Essa aplicação rodará num aparelho celular que dê suporte a tal configuração. Os profiles são divididos em duas versões, MIDP 1.0 e MIDP 2.0, sendo que o MIDP 3.0 está sendo definido através da JSR-271 (Mobile Information Device Profile 3). Em outro post falarei sobre este profile e as revoluções prometidas.
Optional Packages: são as bibliotecas com recursos específicos. Na prática são aquelas implementações provindas das especificações da JCP. As bibliotecas são conhecidas como JSRs. Alguns exemplos são: JSR-82 (Java APIs for Bluetooth Wireless Technology), para utilizar bluetooth na aplicação; JSR-135 (Mobile Media API), que serve para tocar sons, músicas e videos com formatos diferentes; etc.
Classes OEM: geralmente são outras APIs que oferecem recursos mais avançados ou específicos para determinados clientes ou grupos. Imagine um determinado fabricante de celular que oferece para determinada operadora de telefonia móvel, o acesso a bibliotecas exclusivas, geralmente com mais recursos. Esses acordos são viabilizados através do chamado OEM (Original Equipment Manufacturer).
Applications: a sua parte da coisa, ou seja, onde codificamos a lógica da aplicação que pretendemos fazer. Na prática, serão todo o código que empacotaremos e que se transformará num arquivo (.jar), que tem várias arquivos (.class). Nossa aplicação é representada como um software.

Esses conceitos são importantes, pois servem de embasamento para aprender a fazer softwares para celulares usando a tecnologia Java ME. No próximo post do blog: parte 2, começaremos a fazer alguns exemplos práticos, onde discutiremos o que um programador precisa para começar a dar os primeiros passos, como ferramentas e ambientes que podem ser usados para fazer os programas.

Foi dado ênfase para as configurações de CLDC, explicado acima, no entanto, para outras informações veja esse link.

10 comentários:

Aline disse...

Valeu Douglas! Falo pela nossa equipe do projeto 3º período. Estamos iniciando em sistemas embarcados e a síntese feita em seu blog está representando uma mão na roda para nós. Valeu Mesmo.

Ricardo jose Barbosa Cordeiro disse...

no primeiro momento achei a linguagem java um pouco dificil, porem ao ler seu post esta ficando mais claro e estou entendendo;

Fenomeno disse...

Muito bom Douglas, gostaria que vc fizesse com o JAVA SE, sou novo neste ramo e tenho muito que aprender

João Luiz disse...

Parabéns...Excelente Post...

Marcel disse...

Opa Douglas,
muito bom mesmo seu tutorial e introduçao do JavaMe. Por sinal estou estudando bastante essa área onde estou começando a desenvolver uns projetos usando aparelhos móveis (inclusive meu tcc).
SOu aqui de Recife também, bem que podiamos discutir mais sobre essa área. Deixo meu blogger ai pra voce poder entrar em contato.
Abraços e boa sorte! =D

George disse...

Douglas,
Parabéns pelo post, sou de Recife e sei como o C.E.S.A.R é conhecido e respeitado, principalmente no desenvolvimento para celulares. É bom ver tutoriais de quem realmente trabalha na área! aguardamos o próximo post.
Valeu!

Teixeira ME disse...

Douglas, muito bom o artigo. Infelizmente, na GUI muitas vezes temos que fazer na mão, digo na mão mesmo, Canvas e Canvas..Terminei meu widget para umas aplicações na empresa em que trabalho, ( São Luis - MA) apesar da saudade da terrinha ( Ceará )..enfim, creio que o MIDP 3.0 melhore nossa vida não somente na GUI, mas Web Service, m3g, efeitos (flash), enfim.

Bom, fico por aqui, e parabéns pelo artigo.

BLOG : http://joserobertoteixeira.blogspot.com

Abraço ;)

Aline Doná disse...

Ola Douglas...

Li seus artigos quando pesquisava sobre J2ME,estou desenvolvendo meu Trabalho de Conclusão de Curso utilizando esta ferramente, para fazer uma aplicaçãopara celulares, porém não sei muita coisa ainda.Por isso achei de extrema importancia sua puplicação, pois aki no interior de Sp não conheço muitas pessoas nesta área.

Abraços

wln1987 disse...

Muito bom Douglas! Espero que continue com os posts, acredito que o Brasil tem muito a evoluir ainda na área. Comecei a estudar Java ME agora pois tenho interesse em games, mas já tenho experiência com SE. Continue com o excelente trabalho. Até mais!

Anônimo disse...

bom comeco