Universidade Federal de Santa Catarina Departamento de Informática e Estatística Curso de Bacharelado em Ciências da Computação Marcus Vinicius Cruz Xavier Rascunho do trabalho de conclusão de curso Título provisório: Adaptação do ambiente de execução Telis para computação móvel Orientação: Luiz Fernando Bier Melgarejo Florianópolis abril de 2006
Resumo Assim como o interesse pelo desenvolvimento de aplicações para Internet explodiu há alguns anos atrás, o interesse pelo desenvolvimento de aplicações para celular está aumentando sensivelmente, e como no caso da Internet, o desenvolvimento de software para celulares requer também um razoável domínio de conceitos e técnicas. Telis é uma linguagem de programação que surgiu anos atrás para simplificar o aprendizado e o desenvolvimento de aplicações para Internet, sem perder seu potencial, e o objetivo deste trabalho é adaptar o ambiente de execução e a linguagem Telis para que seus programas possam ser executados em dispositivos móveis, mais especificamente telefones celulares. Desta forma estudantes de computação sem conhecimento prévio de programação poderão usufruir de um ambiente de facílimo aprendizado para gerar aplicações para telefones celulares, como hoje o fazem os alunos de graduação com suas aplicações para Internet. 2
1. Introdução A rede Internet, tal como evoluiu nos últimos anos, permitiu inúmeros exemplos de trabalho cooperativo à distância. Tecnologias recentes (como Java), abriram novas perspectivas nessa direção, uma vez que possibilitam um ainda maior dinamismo e interação utilizando a rede. Infelizmente, o domínio produtivo dessas novas tecnologias exige um longo tempo de aprendizagem, pela complexidade dos pré-requisitos conceituais envolvidos, sejam aqueles intrínsecos, sejam aqueles relativos ao ambiente de execução e comunicação (Orientação a Objetos, TCP/IP, etc) [http://twiki.edugraf.ufsc.br/bin/view/telis/programandonainternet]. Com o objetivo de diminuir a curva de aprendizado de programação, em especial no ambiente da Internet, surgiu Telis. Desenvolvida pela equipe do Edugraf, laboratório de software educacional UFSC CTC INE, que é coordenada pelo professor Luiz Fernando Bier Melgarejo, esta linguagem de programação baseia-se em antecessores poderosos e simples como Forth e Logo, e mantém características de distribuição e execução semelhantes a Ágora. A idéia de portar a simplicidade e o poder de Telis para o desenvolvimento de aplicações para celular surgiu acompanhando a própria demanda. Telis é utilizada hoje nas primeiras fases do curso de Bacharelado em Ciências da Computação da UFSC, como uma introdução à programação. A idéia básica é que logo na primeira fase o aluno consiga desenvolver e publicar um programa na Internet, despertando assim o seu interesse. Assim, o intuito passa a ser que, logo na primeira fase e sem conhecimento prévio de linguagens e técnicas de programação, um aluno possa desenvolver aplicativos para celulares. Telis oferece segurança e robustez, além de recursos avançados de programação, como reflexão, por exemplo. Os operadores pós-fixos usados em Telis, que a princípio são criticados pela maioria dos programadores experientes, oferecem aos usuários leigos uma certa familiaridade ao uso de algumas calculadoras de bolso. Essas e outras características fazem de Telis uma linguagem propícia a ser usada no aprendizado de programação. As ferramentas utilizadas em Telis são totalmente desenvolvidas em Java o que propicia uma redução no custo de sua adaptação. Mas ainda há um abismo a ser vencido, que é a diferença entre a capacidade computacional dos computadores pessoais e dos dispositivos móveis. Uma aplicação executada em um navegador instalado em um PC dispõe de recursos computacionais em abundância: processadores rápidos, grandes quantidades de memória e de armazenamento, conexões de redes confiáveis, monitores de alta resolução 3
e bilhões de cores. O universo dos celulares é totalmente diferente: processadores lentos, displays pequenos, pouquíssima memória e às vezes nenhuma capacidade de armazenamento. Além destas diferenças, temos que ressaltar ainda a diferença que existe entre a versão completa de Java e a versão disponibilizada para dispositivos móveis, que será vista com mais profundidade mais adiante. 2. Java para celulares A tecnologia Java é composta por três partes distintas: a linguagem Java, a máquina virtual Java (JVM) e as bibliotecas. O conjunto formado por estes componentes é o que caracteriza a tecnologia Java para um determinado ambiente. A comunidade Java através do JCP (Java Community Process), especifica três plataformas para tecnologia Java: Java SE (Standard Edition) voltada para aplicações em computadores pessoais, Java EE (Enterprise Edition) voltada para servidores e Java ME (Micro Edition) voltada para dispositivos móveis. Esta última é a que concerne o desenvolvimento de softwares para celulares e PDAs, e é a plataforma de destino da migração de Telis. A JME, como é conhecida à versão atual da plataforma Java ME, é o conjunto de especificações das tecnologias envolvidas no processo de desenvolvimento, distribuição e execução de softwares em dispositivos móveis em Java: a máquina virtual, as alterações na linguagem Java, as bibliotecas envolvidas no núcleo da linguagem, e as bibliotecas adicionais denominadas Profiles, além de conjuntos de bibliotecas opcionais denominadas optional packages. A especificação do núcleo das tecnologias envolvidas é chamada de configuração. Uma configuração abrange a especificação da máquina virtual, da linguagem, das bibliotecas de núcleo (java.lang.* e java.util.*) e das bibliotecas de entrada e saída (java.io.*) e dos recursos que envolvem segurança, redes e internacionalização. Duas configurações são definidas pela JME: a CDC (Connected Device Configuration) que abrange os PDAs com grande capacidade computacional e a CLDC (Connected Limited Device Configuration) que abrange os dispositivos que possuem recursos escassos, entre eles os telefones celulares, foco deste trabalho. Adiante segue um breve aprofundamento dos recursos citados. 2.1 Máquina Virtual Java (JVM) A JVM (Java Virtual Machine) foi inicialmente projetada para ser executada em dispositivos móveis (PDAs) sob a sigla de KVM (K Virtual Machine). Isto faz com que o esforço atual de migração de Java para dispositivos móveis seja considerado uma volta às raízes. 4
As máquinas virtuais que as empresas disponibilizam em seus aparelhos, seguindo as especificações da CLDC, são chamadas KVM, como as primeiras máquinas desenvolvidas para Java. Para cada configuração, é escolhido um subconjunto de instruções ou todo o conjunto, dependendo da disponibilidade de recursos de cada dispositivo. Desta forma o código interpretado pela JVM não é totalmente intercambiáveis entre plataformas. A CLDC é um subconjunto da CDC que por sua vez é um subconjunto da JVM completa. Entre os recursos eliminados da JMV na CLDC estão: Carregadores de classe definidos pelo usuário (eliminação dos recursos de reflexão) Thread groups and daemon threads TRADUZIR ISSO Finalização de instâncias. Erros e exceções assíncronas. Dessas características que foram reduzidas ou eliminadas, a maior preocupação é quanto à reflexão, uma vez que o interpretador de Telis chama as primitivas e agendas através deste recurso. Duas abordagens foram discutidas: eliminar a reflexão através de uma inversão no fluxo de execução. Criando um compilador Telis que gerasse código Java a partir do código Telis, eliminar-se-ia também a necessidade de um interpretador, otimizando recursos. O outro método discutido foi do fazer do modo tradicional, criando tabelas de métodos e fazendo espalhamento dos nomes, o que tomaria muito menos tempo. 2.2 Core libraries Como citado, a CLDC especifica as bibliotecas do núcleo da plataforma Java. São os pacotes java.lang.*, java.util.* e as bibliotecas de entrada e saída java.io.* As bibliotecas oferecidas são um subconjunto das bibliotecas disponibilizadas na JSE, sendo definido que se uma classe está presente ela deve ser idêntica ou um subconjunto da classe equivalente distribuída na JSE. 5
Nenhum novo recurso pode ser adicionado e a semântica dos métodos e atributos deve permanecer a mesma, se existirem. Além dos subconjuntos da JSE a CLDC possui algumas classes exclusivas, que são referentes ao GCF (Generic Connection Framework). O GCF surgiu na necessidade de homogeneizar a comunicação de dados através dos diferentes meios e protocolos. Suas classes estão definidas no pacote java.,microedition.io.*, e oferecem um framework para desenvolvimento de bibliotecas de comunicação. 2.3 MIDP É um erro bastante comum confundir JME com MIDP. Os desenvolvedores confundem os termos, pois hoje praticamente todo desenvolvimento para celulares em Java é feito sob o MIDP. MIDP (Mobile Information Device Profile) é o primeiro conjunto de bibliotecas (daqui pra frente chamados de profiles) construído e terminado sobre o CLDC, e é praticamente um padrão. Mas como vimos JME é muito mais do que apenas o MIDP. Outros profiles desenvolvidos sobre o CLDC são: KittyHawk, PDAP (extensão do MIDP, ainda não terminado), i-appli (desenvolvido antes do MIDP). Porém, apesar de existirem outros profiles, como já foi dito, MIDP é quase um padrão para este tipo de desenvolvimento e é sobre ele que se pretende portar Telis. MIDP dispõe bibliotecas para os seguintes escopos: Apresentação em monitores de tamanho limitado Meios para leitura de dados e ações de usuários Armazenamento persistente Envio e recebimento de mensagens Comunicação de dados Telefonia sem fio 3.0 A implementação de Telis Telis é totalmente implementada em Java. As aplicações (ou apliques) feitas em Telis são Applets Java que rodam dentro de um navegador que possua uma JVM embutida. O escopo das aplicações Telis é basicamente exibir e movimentar objetos gráficos e colher entradas de usuários, para que possa haver interação. Estes são requisitos típicos de jogos e simuladores, as duas áreas mais exploradas pelos alunos quando estudando Telis. Este parece ser também a principal área de desenvolvimento em celulares, dadas as limitadas capacidades deste tipo de ambiente. 6
Para este fim, de saída gráfica em tela e entrada de dados, Telis utiliza a biblioteca AWT, que não é compatível com a CLDC. No lugar da AWT, todo o código deve ser substituído por classes das bibliotecas disponibilizadas pelo MIDP. É claro que estas são muito mais limitadas que a AWT e este é um dos primeiros desafios a serem vencidos nesta migração. O pacote disponível para interface com usuário é o lcdui em javax.microedition.lcdui. Este pacote sofreu um razoável aperfeiçoamento da versão 1.0 do MIDP para a versão 2.0, chegando mesmo a possuir um pacote especial para desenvolvimento de jogos. Além da interface, como já citado anteriormente, Telis utiliza reflexão para gerar as chamadas das primitivas. Para tratar deste problema, duas abordagens foram propostas: A primeira seria inverter o fluxo da execução do aplique, fazendo um compilador que gere código Java a partir do código do aplique Telis e este código execute as chamadas das primitivas. Este método é eficiente, pois libera todo o ambiente da necessidade de um interpretador e um executor, otimizando uso de memória e processamento. Em compensação é custoso demais, e pode demandar mais tempo que o disponível para a execução do trabalho, e, além disso, exigiria que fossem eliminadas as características de reflexão da própria linguagem Telis. A outra seria a abordagem tradicional de eliminar a reflexão criando uma tabela de espalhamento com os nomes das primitivas associados aos métodos a serem chamados. Esta abordagem tem um custo muitíssimo inferior ao da outra e não exigiria mudanças na linguagem Telis, mas não consumiria ainda mais recursos do que a abordagem atual. Esta abordagem será adotada inicialmente, podendo haver alterações. Como dito anteriormente, a estrutura de um aplique Telis é composta por um interpretador que roda em um applet Java em um navegador. O interpretador carrega o código Telis que está gravado em um arquivo XML. Não há uma biblioteca de parsing XML disponível na JME, mas existem diversas opções de bibliotecas de código aberto que rodam sobre o MIDP. Será necessário escolher uma e adaptar todo o código de leitura dos apliques. Como observamos o trabalho de análise e implementação é extenso e será também compartilhado com outros membros do Edugraf. 7