Você está na página 1de 13

Faa um boa instalao do seu SDK

Este tutorial tem o objetivo padronizar uma instalao de um J2SDK. Siga os passos abaixo:

1.

Baixar uma verso do J2SDK V em http://java.sun.com/j2se/1.4/download.html, aconselho baixar a verso mais atual.

2.

Instalar a J2SDK D um duplo clique no arquivo baixado e a instalao ter incio. Sugiro instalar a SDK em um diretrio padro, por exemplo X:AplicJavaj2sdk1.4.2_02. Tambm recomendo evitar espaos nos nomes. Alguns programas podem apresentar erros, infelizmente no encontrei um padro, s sei que alguns do erro. De agora em diante, install_dir ser utilizado como referncia ao diretrio de instalao da j2sdk.

3.

Definir a JAVA_HOME JAVA_HOME uma varivel de ambiente utilizada por diversos programas para encontrar o diretrio onde a jdk foi instalada. Para instal-la, faa:

a.

No Win98: Abra e edite o arquivo autoexec.bat (normalmente em C:) e inclua: set JAVA_HOME="install_dir";

b.

No WinME: V em Executar no Menu Iniciar e execute o seguinte: msconfig V na aba Ambiente e adicione a varivel: JAVA_HOME="instal_dir"

c.

No Win2k / WinXP: Clique com o boto direito no cone Meu Computador, v em Propriedades, selecione a gua Avanado, clique em Variveis de Ambiente e adicione uma nova Varivel de Sistema denominada JAVA_HOME com o valor "install_dir"

4.

Configurar o Path: Setar o Path permitir que tu possas chamar o java a qualquer momento sem ter que especificar o diretrio onde o programa est. Ou seja, podes digitar javac Teste.java ao invs de C:AplicJavaj2skd1.4.2_02injavac Teste.java. Para configurar o Path, faa isso:

a.

Win98: No autoexec.bat, localize a varivel PATH e adicione: ";install_dirin"

b.

WinME: V em Executar no Menu Iniciar e execute o seguinte: msconfig Na Aba Ambiente, procure pela varivel Path e acrescente: ";instal_dirin"

c.

Win2k e WinXP: Clique com o boto direito no cone Meu Computador, selecione Propriedades, v na guia Avanado, clique em Variveis de Ambiente, localize a varivel PATH e adicione ";install_dirin"

No esquea de incluir o ';', pois ele utilizado como separador de valores pelo Windows. Isso vlido para todas as verses do Windows.

Detalhes importantes: Algumas APIs no esto includas no J2SE e portanto no estaro nas bibliotecas instaladas com o pacote. Se tu precisares usar algo que no pertena vai ser necessrio definir a varivel CLASSPATH, que o jdk utiliza para procurar classes que no se encontram em seu diretrio padro. No esquea de colocar um .; antes do valor do diretrio do pacote .jar, por exemplo:CLASSPATH=".;%CATALINA_HOME%libservlet.jar;", pois isso faz a diferena. Para criar a varivel CLASSPATH, siga os passos:

a.

Win98: No autoexec.bat, se j existir o CLASSPATH, adicione o diretrio onde as classes se situam, se no, inclua a linha: set CLASSPATH="diretrio do pacote .jar"

b.

WinME: V em Executar no Menu Iniciar e execute o seguinte: msconfig Na Aba Ambiente, procure pela varivel CLASSPATH (crie, se no existir) e inclua o caminho do diretrio onde esto os pacotes .jar.

c.

Win2k e WinXP: Clique com o boto direito no cone Meu Computador, selecione Propriedades, v na guia Avanado, clique em Variveis de Ambiente, localize (crie, se no existir) a varivel CLASSPATH e adicione o caminho do diretrio onde esto os pacotes .jar.

Vale lembrar que a linguagem Java Case Sensitive, ou seja, maisculas e minsculas fazem a diferena. Portanto, preste ateno nos nomes e escreva-os corretamente. No esquea de sempre incluir um ; no final das variveis. Para testar, abra um console do MS-DOS e teste os comandos "java -version" e "javac -help". Se ambos funcionarem, as variveis foram inseridas com sucesso. Conhea o Apache Tomcat

Incremente suas aplicaes Web com Servlets e Java Server Pages

O fenmeno da Internet trouxe para os desenvolvedores de sistemas pelo menos dois novos desafios: toda aplicao deve ser distribuda (ao contrrio das aplicaes tradicionais, monolticas, que rodam em um computador isolado.); e toda aplicao formada pela agregao de um conjunto de tecnologias e linguagens (tradicionalmente bastava dominar uma nica tecnologia e linguagem de programao). Surgiu ento o conceito de aplicao para web (no original, web application).

A construo de uma aplicao para web um processo diferente do usado no desenvolvimento de aplicaes tradicionais. Nestas, analistas e programadores tm sua disposio uma biblioteca de classes (no paradigma orientado a objeto) que devem ser usadas para compor uma aplicao que seja executvel. Cabe a eles tomar todas as decises sobre como estruturar a nova aplicao (sua arquitetura, componentes, etc.). J para o desenvolvimento de aplicaes para web, surge a figura do web designer que exerce uma funo especfica: projetar o web site. Analistas e programadores, por sua vez, partem de um contexto previamente definido: o sistema ser distribudo normalmente usando o modelo cliente-servidor, HTTP ser o protocolo de comunicao entre as aplicaes (programa cliente e programa servidor), TCP/IP ser o protocolo de transporte de dados pela rede, etc. Alm disso, em muitos casos, o programa cliente, estritamente falando, o prprio browser do usurio. Quanto ao programa servidor, muitas das tarefas rotineiras (carregamento inicial, configurao, definio de logs, mecanismos de autenticao de usurios, etc.) j esto previamente implementadas. Cabe aos analistas e programadores focar sua ateno quase que exclusivamente nas especificidades da aplicao a ser desenvolvida e saber interagir com o web designer. O Software Tomcat O software Tomcat, desenvolvido pela Fundao Apache, permite a execuo de aplicaes para web. Sua principal caracterstica tcnica estar centrada na linguagem de programao Java, mais especificamente nas tecnologias de Servlets e de Java Server Pages (JSP). Esta abordagem rivaliza, por exemplo, com a usada pela Microsoft com o ASP (baseada na linguagem Visual Basic). A Fundao Apache, mais conhecida pelo seu servidor web de mesmo nome, permite, como no caso do servidor Apache, que o Tomcat seja usado livremente, seja para fins comerciais ou no.

O Tomcat est escrito em Java e, por isso, necessita que a verso Java 2 Standard Edition (J2SE) esteja instalada no mesmo computador onde ele ser executado. No entanto, no basta ter a verso runtime de Java instalada, pois o Tomcat necessita compilar (e no apenas executar) programas escritos em Java. O projeto Jakarta da Fundao Apache, do qual o subprojeto Tomcat o representante mais ilustre, tem como objetivo o desenvolvimento de solues cdigo aberto baseadas na plataforma Java. Linguagens: Java, HTML e XML O desenvolvimento de uma tpica aplicao web a ser executada pelo Tomcat implica no domnio das seguintes linguagens: Java Todos os algoritmos da aplicao devem ser escritos em Java. HTML A interface da aplicao, isto , aquilo que o usurio v em sua tela, construda na forma de pginas escritas em HTML e visualizadas atravs do browser do usurio. Esta tarefa normalmente delegada ao web designer. XML Qualquer aspecto relacionado configurao da aplicao deve ser expresso por meio da linguagem XML em um arquivo chamado web.xml. Os dados de configurao podem ser usados tanto pelo Tomcat como pela aplicao. Servlets e Java Server Pages Um servlet uma classe escrita em Java cujos objetos tm a finalidade de gerar documentos codificados em HTML. Esta caracterstica dos servlets implica em que um web designer precisa conhecer Java para poder construir as pginas de uma aplicao. Esta limitao (quantos web designers conhecem Java?) superada pela tecnologia de JSP. Uma pgina escrita em JSP (arquivos com extenso .jsp) uma pgina escrita em HTML e que contm pequenos fragmentos de cdigo Java e/ou tags especiais (definidos na especificao JSP). Com estes tags, o web designer no necessita escrever uma nica linha de cdigo Java. Ao contrrio do que acontece com a tecnologia ASP, o analista/programador pode criar (em Java) os seus prprios tags customizados para a aplicao em desenvolvimento. O servidor Tomcat tem a habilidade de converter automaticamente qualquer pgina JSP em um servlet equivalente. Em outras palavras, o Tomcat capaz de criar cdigo fonte Java a partir de um documento HTML. Do ponto de vista tcnico, Tomcat a implementao referncia das especificaes das tecnologias de servlets e JSP criadas pela Sun. A verso 4.0.x do Tomcat implementa as especificaes Servlet 2.3 e JSP 1.2 (que so as mais recentes). Vrias empresas, como Borland, IBM, BEA, etc., tambm oferecem suas implementaes das duas especificaes da Sun. Do ponto de vista operacional, a principal finalidade das tecnologias de servlets e JSP permitir a criao dinmica de contedos. A dinmica, em um cenrio tpico, funciona do seguinte modo:

Um usurio, no seu browser, solicita algum documento (indicado por um URL) a um servidor Tomcat; O servidor, ao receber uma solicitao (URL) do usurio, executa o servlet ou JSP correspondente quele URL (a associao entre URL e servlet ou JSP especificada no arquivo web.xml). O contedo gerado pelo servlet ou JSP, normalmente um documento no formato HTML, uma combinao de tags HTML (includos explicitamente) e o resultado de algum processamento (por exemplo, algoritmo Java e/ou acesso a um banco de dados). O usurio recebe o contedo gerado pelo servidor Tomcat e o exibe atravs do seu browser.

Na Prtica Em termos prticos, o Tomcat pode ser usado isoladamente, assumindo o papel de um servidor web, ou em conjunto com outro servidor (como o Apache). Neste caso, o Apache atende a requisies de pginas estticas enquanto que o Tomcat atende a requisies de pginas dinmicas. Outra forma de usar o Tomcat como parte da verso J2EE (Enterprise Edition) de Java para a criao de servidores de aplicao. Este o caso, por exemplo, do servidor de aplicao JBoss. Para saber mais Tomcat - jakarta.apache.org/tomcat/ Apache - www.apache.org Linguagem de Programao Java - java.sun.com Servlets - java.sun.com/products/servlet/ Java Server Pages - java.sun.com/products/jsp/ Projeto Jakarta - jakarta.apache.org Servidor de aplicao JBoss - www.jboss.org

Orientao a Objetos (Parte 1) Marco Aurlio Souza Mangan, Patrcia Kayser Vargas, Denny Azzolin

Pgina(s): 1/2

1 INTRODUO Atualmente, o desenvolvimento de aplicaes voltadas para a Internet tem se apresentado como uma das reas de maior crescimento na indstria de informtica. Rapidamente, a linguagem Java se estabeleceu como uma das melhores alternativas para implementao desse tipo de aplicao. Java uma linguagem orientada a objetos moderna que adota uma srie de mecanismos j consagrados em outras linguagens como C++, Eiffel e Smalltalk; ao mesmo tempo que capaz de manipular vrios mecanismos relacionados com a programao em rede. Entretanto, surgem as questes: Esses mecanismos esto sendo explorados pelos desenvolvedores de aplicaes? Um desenvolvedor consegue tirar proveito de todos os recursos que a linguagem oferece? Existe uma vantagem real em utilizar tais recursos? Este tutorial tenta abordar essas questes apresentando algumas alternativas de implementao de uma aplicao. Atravs de um exemplo real, so apresentados os principais conceitos envolvidos no desenvolvimento de software orientado a objetos. Tambm so apresentados os principais problemas envolvidos no desenvolvimento de aplicaes comerciais enfrentados pelo desenvolvedor. A proposta deste tutorial chamar a ateno para tpicos importantes da programao orientada a objetos de forma que possam ser encontrados maiores detalhes atravs da consulta bibliografia. As referncias apresentadas ao final deste texto e na pgina de hipertexto do tutorial (http://www.inf.ufrgs.br/~kayser/sblp99) so um bom ponto de partida. Na medida do possvel sero apresentados exemplos prticos da aplicao desses tpicos. O enfoque ser dado na organizao e estruturao da aplicao. A explicao da programao de cada mtodo no um aspecto essencial do exemplo. Este trabalho foi possvel devido a interao entre pesquisadores universitrios e profissionais da rea de informtica de Porto Alegre RS. A aplicao utilizada como exemplo foi um applet Java encomendado pela companhia Telefonica Celular. A funo principal do applet o envio de mensagens em formato texto para telefones celulares. O envio de mensagens feito em duas etapas. Primeiro, a aplicao deve entrar em contato com o servidor instalado na central telefnica. Atravs de um protocolo proprietrio desse servidor a mensagem programada para envio aos aparelhos de telefonia celular. Esta etapa ocorre atravs da Internet. Na segunda etapa, o servidor da telefnica se encarrega de enviar a mensagem atravs da rede celular. A primeira verso dessa aplicao foi desenvolvida atravs de uma ferramenta de prototipao. O resultado obtido foi uma aplicao que atendia as necessidades expostas pela Telefonica. Entretanto, a implementao era pouco legvel e de difcil manuteno. O cdigo fonte foi definido em uma nica classe com algo em torno de 500 linhas, onde eram tratadas a interface com o usurio, consistncia de dados e a comunicao com o servidor. Justamente a necessidade de manuteno e o reuso que obrigaram a reengenharia da aplicao. A segunda verso foi escrita separando cada aspecto da implementao em vrias classes. O resultado foi um cdigo mais legvel, mais fcil de ser alterado e a criao de um conjunto de componentes reusveis. Acredita-se que o principal desafio na aprendizagem de uma linguagem orientada a objetos seja compreender um novo paradigma, mais do que aprender uma nova sintaxe, de forma a poder tirar um maior proveito dos recursos oferecidos pela linguagem. Este tutorial encontra-se organizado da seguinte forma. No Captulo 2 so apresentados alguns conceitos do desenvolvimento orientado a objetos. No Captulo 3 apresentado o problema utilizado como estudo de caso no decorrer deste texto. No Captulo 4 descrita a etapa de engenharia do desenvolvimento da aplicao No Captulo 5 apresentado o particionamento da aplicao em trs nveis: apresentao, modelo e integrao de sistemas. No Captulo 6 apresentado como ficou a organizao de classes aps a reengenharia, demonstrando o potencial de reuso. Finalmente, no Captulo 7 so apresentadas as concluses.

2 DESENVOLVIMENTO ORIENTADO A OBJETOS Antes de iniciar nosso estudo de caso importante que algumas consideraes gerais sejam feitas. A primeira delas visa esclarecer qual a necessidade da utilizao da orientao a objetos no desenvolvimento de software. Em segundo lugar, preciso oferecer uma viso geral dos mecanismos e facilidades permitidos por esse paradigma. Por fim, vamos comentar um pouco sobre as caractersticas da linguagem Java e seu papel no cenrio atual do desenvolvimento de software.

2.1 ASPECTOS ECONMICOS DAS GERAES DE LINGUAGENS DE PROGRAMAO Para compreender qual a necessidade da orientao a objetos interessante entender a evoluo recente das linguagens de programao de um modo geral. Entre as diversas classificaes propostas, podemos classificar as linguagens de programao em cinco famlias de acordo com os aspectos econmicos que lhes originaram:

Primeira Gerao: Linguagem de mquina Segunda Gerao: Linguagem de montagem (assembly) Terceira Gerao: Linguagens de alto nvel Quarta Gerao: Linguagens para a gerao de aplicaes Gerao Orientada a Objetos: Linguagens voltadas para o reuso e manuteno

O maior determinante da primeira gerao de linguagens de programao era o custo do equipamento. No existiam facilidades para a operao e programao dos dispositivos. A demanda por aplicaes era muito pequena. Na segunda gerao, o custo do equipamento ainda era alto, mas j permitia transferir um pouco do trabalho do programador para a mquina. A principal caracterstica dessa gerao o aparecimento de programas capazes de interpretar instrues simblicas e de transform-las em linguagem de mquina (montadores). Na terceira gerao o maior determinante passou a ser o custo do desenvolvimento de programas. Com o relativo barateamento do equipamento, mais tarefas do desenvolvedor foram transferidas para programas como compiladores e interpretadores. A quarta gerao enfrentou o desafio de atender uma demanda crescente de aplicaes. As ferramentas de desenvolvimento e as bibliotecas de aplicao se popularizaram nesse perodo. O usurio passou ento a desfrutar de capacidades que antes eram reservadas aos desenvolvedores. Finalmente, a quinta gerao enfrenta hoje o desafio de efetuar a manuteno e o reuso das milhares de aplicaes desenvolvidas pelas geraes anteriores.

A orientao a objetos um paradigma de programao que oferece vrios mecanismos voltados para o reuso e a manuteno de sistemas de computador. O que torna a programao orientada a objetos to atraente , principalmente, a possibilidade de gerenciar de forma mais simples problemas bastante complexos e de reusar cdigo de forma mais eficiente. Como pudemos constatar, as vantagens da orientao a objetos esto relacionadas com a produo, reuso e manuteno de aplicaes, pois este o contexto econmico em que se encontram inseridas. Caractersticas como o alto desempenho da execuo, eficincia e simplicidade devem ser buscadas em outros paradigmas e/ou geraes de linguagens. A seo seguinte apresenta os mecanismos que permitem a orientao atender ao reuso e a manuteno de aplicaes de forma mais completa que os paradigmas anteriores.

2.2 CONCEITOS BSICOS Os dois conceitos chaves da programao orientada a objetos so classe e objeto. Classe uma descrio de um ou mais objetos atravs de um conjunto uniforme de atributos e servios. Alm disso, pode conter uma descrio de como criar novos objetos na classe [COA 93]. Uma classe um prottipo que define os atributos (variveis que definem estados internos de um objeto) e mtodos (tipos de servios ou procedimentos que determinam o comportamento possvel dos objetos) comuns a todos os objetos de um certo tipo [SUN 99]. Objeto uma abstrao de alguma coisa no domnio de um problema ou em sua implementao, refletindo a capacidade de um sistema para manter informaes sobre ela, interagir com ela ou ambos [COA 93]. Podemos entender um objeto como um pacote de software contendo variveis (atributos) e mtodos relacionados [SUN 99] que a instncia de uma classe. Desse modo uma classe define comportamento e forma padro para a construo de objetos. Uma vez definida uma classe A, possvel definir uma nova classe B como uma extenso de A. Nesse caso, utiliza-se o conceito de herana, onde a subclasse B herda atributos e mtodos da superclasse A. Uma subclasse pode reescrever mtodos definidos na superclasse e criar novos atributos e mtodos. Na Figura 2.1 tem-se um exemplo de herana. As subclasses Quadrado e Retngulo herdam o atributo cor e o mtodo desenha() da superclasse Polgono. Outra caracterstica importante na programao orientada a objetos o polimorfismo. O polimorfismo caracteriza-se pela possibilidade de classes distintas possurem mtodos com nomes idnticos mas com implementaes distintas. Note que no exemplo da Figura 2.1 as subclasses Quadrado e Retngulo iro reescrever o mtodo desenha() para exibir, respectivamente, um quadrado com lado lado e um retngulo com as dimenses base x altura.

Figura 2.1 - Exemplo de herana e de polimorfismo.

2.3 PADRES Quando um desenvolvedor experiente implementa um novo programa, dificilmente criar uma nova soluo totalmente distinta de outras j implementadas. Normalmente, o programador se recorda de outros problemas similares que j foram resolvidos anteriormente e reusar a essncia dessas solues para resolver o novo programa. Esse cenrio vlido para o desenvolvimento de aplicaes e para a maioria das atividades humanas. Neste contexto, a essncia dessas solues j executadas pode ser apresentada como um padro (pattern), que se repete em diversos problemas, os quais nem sempre se encontram relacionados [BUS96]. Por exemplo, de uma maneira grosseira, podemos comparar o diagnstico e tratamento de doenas na medicina com a aplicao de padres. Quando um paciente procura um mdico, ele informa a sua situao atual e o mdico tenta identificar sintomas de uma anomalia (problema). Ao identificar uma srie de sintomas, o mdico tenta encontrar os registros de outros casos semelhantes. Esses casos anteriores fazem parte da experincia do mdico ou foram apresentados durante o seu curso de medicina. Ao detectar qual a molstia do paciente o mdico tenta iniciar um tratamento (soluo) que vai apresentar muitas vezes efeitos benficos (como a cura do paciente) e alguns efeitos colaterais no desejados (como desconforto durante o tratamento, imobilizao etc.). Esses efeitos em conjunto so a conseqncia da aplicao da soluo. Para facilitar a comunicao entre si, os mdicos convencionaram nomes para as doenas. Em geral, um padro possui quatro elementos essenciais [GAM 95]:

1. 2. 3. 4.

nome: um identificador utilizado para descrever o cenrio do padro como um todo; problema: descreve quando aplicar o padro; soluo: descreve os elementos que fazem parte do projeto, seus relacionamentos, responsabilidades e colaboraes; conseqncia: so os resultados alcanados com a aplicao do padro e a relao entre as vantagens e desvantagens dessa aplicao.

No desenvolvimento de aplicaes, padres ajudam a promover bons projetos e implementaes de programas por capturarem experincias no desenvolvimento de software, descrevendo um problema recorrente e uma soluo bsica para o problema de tal forma que essa soluo possa ser usada da mesma forma em novos problemas. Existem diferentes tipos de padres. Podemos destacar: padres para projeto (design patterns [GAM 95]), padres para anlise (analysis patterns [FOW 96]) e padres para organizao de bancos de dados (data patterns [HAY]). Existem tambm padres propostos para outras reas do conhecimento como a arquitetura e urbanismo [ALE 77] e administrao [DIK 97]. As bibliotecas da linguagem Java fazem amplo uso de padres. A compreenso dos padres auxilia, portanto, a compreenso das bibliotecas e, de forma indireta, da programao orientada a objetos.

2.4 TCNICAS DE DESENVOLVIMENTO O desenvolvimento de software pode ser compreendido como composto de quatro fases: especificao, projeto, implementao e integrao e teste. Essas fases so interativas e dinmicas e, na prtica, possuem caractersticas diferentes em cada grupo de desenvolvimento. No entanto existem alguns pontos que se seguidos podem determinar o sucesso de um projeto. Na fase de projeto de um sistema orientado a objetos, normalmente so definidas as caractersticas do sistema, construdos prottipos de interface com o usurio e projetadas as classes do modelo. Um objetivo importante da prototipao servir de base para um desenvolvimento do sistema utilizando refinamentos sucessivos, isto , o sistema no deve ser planejado para ser implementado em uma nica verso. Os autores acreditam que o desenvolvimento muito mais eficaz com a adio sucessiva de funcionalidades. muito mais produtivo criar uma primeira verso em que exista um conjunto de funcionalidades mnimas e/ou com baixo desempenho e que esse prottipo seja gradativamente aprimorado a cada nova verso. Esse tipo de desenvolvimento alm de facilitar o cumprimento de prazos, esconde a complexidade do problema. A questo da prototipao fundamental no desenvolvimento comercial pela possibilidade de interao com o cliente, permitindo a determinao das suas reais necessidades e preferncias. Alm disso, em muitos casos, contratos so firmados apenas depois da demonstrao de prottipos satisfatrios por parte dos desenvolvedores. Note que o esforo de desenvolvimento de prottipos em linguagens como Java minimizado pela existncia de ferramentas visuais que permitem o rpido desenvolvimento de interfaces grficas. O projeto de sistemas orientados a objetos possui como principal ponto a necessidade de definir as classes envolvidas no sistema e de caracterizar a sua hierarquia, bem como a interao durante a execuo entre as mesmas. Sem dvida uma boa modelagem facilita a fase de implementao, mas o fundamental que durante a implementao seja possvel rever a organizao das classes. Um ponto importante a ser lembrado, a quase inexistncia de projetos no desenvolvimento de sistemas comerciais de pequeno porte, o que pode levar ao desenvolvimento de sistemas de difcil depurao e manuteno. O desenvolvimento de software uma atividade humana complexa, semelhante a tantas outras atividades que envolvem domnio da tcnica, criatividade e raciocnio e, principalmente, perseverana. Desta maneira, as tcnicas usadas na programao so tambm aplicadas e identificadas em outros ramos do empreendimento humano. Por exemplo, as seguintes tcnicas utilizadas na soluo criativa de problemas so amplamente adaptveis no desenvolvimento de software orientado a objetos: 1. busca de outras experincias e solues para problemas semelhantes

solues j existentes devem ser consultadas antes de se tentar propor uma nova soluo. Atravs do refinamento, composio e instanciao de objetos de classes j existentes, e atravs da aplicao de padres, a orientao a objetos facilita o reuso e a procura de outras solues e experincias semelhantes; 2. diviso e conquista

ao se deparar com um problema complexo, tenta-se reduzi-lo a problemas menores e mais fceis de serem tratados; 3. refinamentos sucessivos

deve-se resolver verses mais simples do problema em um seqncia contnua de dificuldade. 4. diversidade

no aconselhvel comprometer-se imediatamente com uma nica soluo. Durante a soluo do problema podem ser obtidas novas informaes que permitiro a existncia de novas alternativas. As tcnicas apresentadas foram adotadas por programadores de todo mundo, assim como por fsicos, matemticos e outros cientistas. Cada ramo do conhecimento possui sua prpria verso dessas tcnicas. No desenvolvimento de software, um boa linguagem de programao oferece mecanismos que incentivam a aplicao dessas tcnicas de desenvolvimento. Nesse contexto, as linguagens de programao so, em ltima anlise, instrumentos para auxiliar na soluo de problemas. Nosso instrumento nesse tutorial a linguagem Java.

2.5 A LINGUAGEM DE PROGRAMAO JAVA Em 1990 a Sun Microsystems desenvolveu uma linguagem orientada a objetos denominada Oak cujo propsito era o desenvolvimento de pequenos aplicativos e programas para controle de eletrodomsticos. Com essa linguagem poderamos programar novas funes para os aparelhos domsticos, tornando-os mais flexveis. Por exemplo, um forno de microondas poderia ser programado para preparar diversos tipos de alimentos. Os fabricantes de um aparelho poderiam oferecer vrios aplicativos para tarefas e usurios diferentes. Alm disso, a proposta da Sun previa o desenvolvimento de um sistema operacional que controlasse uma rede de eletrodomsticos. Com isso seria possvel utilizar um microcomputador para automatizar uma residncia e seus eletrodomsticos. Com a popularizao da rede mundial de computadores (Internet), atravs da World Wide Web, a Sun decidiu postergar a idia dessa rede domstica e direcionou a linguagem Oak para o desenvolvimento de aplicaes na Web, dando origem linguagem Java. 2.5.1 JDK 1.0 Em 1995 a linguagem Java foi disponibilizada pela primeira vez para o grande pblico atravs da primeira verso do Java Development Kit (JDK 1.0). Essa verso da linguagem utilizava vrios conceitos da linguagem C++ [MEY 97], que era a linguagem comercial orientada a objetos mais popular da poca. A linguagem C++ no possua bibliotecas padronizadas e a implementao era muito dependente de uma dada plataforma. Java corrigiu uma srie de problemas de C++ com a simplificao da linguagem e com a utilizao de uma mquina virtual independente de plataforma. A principal razo para a adoo de Java na Web foi a questo da segurana. Todo o programa Java tem um acesso limitado aos recursos disponveis. Existem dois tipos de programas Java: aplicao e applet. Uma aplicao um programa independente enquanto um applet executa em um ambiente controlado a

partir de um navegador (browser), estando sob um controle mais severo de acesso aos recursos computacionais. Tambm, a existncia do interpretador Java e a sua biblioteca padronizada foram outros pontos a favor da linguagem. Nessa primeira verso do JDK, foram introduzidas vrias bibliotecas (pacotes). Java.lang e java.applet disponibilizam as classes que formam a base da linguagem. O pacote java.awt o que define as ferramentas para desenvolvimento de interfaces grficas, com o tratamento de eventos atravs de um sistema de callbacks e implementao nativa de componentes de interface. Note que o uso de callbacks j era amplamente utilizado no sistema operacional UNIX e em ambientes como o ET++ [WEI 94].O pacote Java.net fornece facilidades para acesso aos recursos da rede bem como para programao concorrente e distribuda. Foram disponibilizados ainda os pacotes java.io e java.util. Java tambm permite a definio e controle de processos leves (threads) [OAK 99] atravs de elementos da prpria linguagem desde essa verso inicial. importante lembrar que nessa verso foram introduzidos vrios mecanismos importantes como RMI (Remote Method Invocation) e JNI (Java Native Interface). RMI usado em programas cliente-servidor e distribudos para acessar mtodos de objetos remotos. JNI permite o acesso a funes implementadas em outras linguagens, como C e C++, como se fossem mtodos Java, facilitando a integrao de sistemas legados. 2.5.2 JDK 1.1 A primeira verso serviu para consolidar a posio da linguagem no desenvolvimento da Web, mas haviam muitos pontos que podiam ser melhorados e vrios bugs a serem corrigidos. A verso JDK 1.1 lanada em 1997 trouxe uma srie de inovaes dentre as quais destaca-se uma nova forma de tratar os eventos atravs do uso de listeners substituindo o sistema de callbacks da verso 1.0. Com este novo mecanismo, os objetos se cadastram como interessados em obter informaes de determinados eventos (princpio de Hollywood: no telefone para mim, deixe que eu telefono para voc). Nessa verso a integrao com bancos de dados foi facilitada com a introduo do Java Data Base Connection (JDBC). Com o JDK 1.1 tambm foi introduzido o conceito de modelo de componentes (beans) e de uma apresentao e comportamento da interface independente de plataforma (swing). Esses conceitos j haviam sido explorados em outras linguagens. O modelo de componentes apareceu anteriormente em toolkits de desenvolvimento como o OpenWindows Motif e o Microsoft Fundation Classes. O swing foi oferecido como um pacote extra que podia ser utilizado com o JDK1.1. Essas alteraes possibilitaram o desenvolvimento de aplicaes comerciais e impulsionaram o aparecimento de ambientes de programao e novas bibliotecas desenvolvidas por empresas como Microsoft (Visual J++), IBM (VisualAge for Java), Inprise (JBuilder) e Symantec (Visual Caf). Nesse perodo, a linguagem deixou de ser apenas uma opo para desenvolvimento Web e passou a ser uma opo para o desenvolvimento de aplicaes. Bibliotecas de programao importantes foram traduzidas para Java como, por exemplo, a Java Generic Library (JGL), uma biblioteca de programao genrica que faz uso intensivo da orientao a objetos. Outros sistemas importantes foram migrados para Java como: bancos de dados (ObjectSpace da ODI), implementaes CORBA (Visibroker da Visigenic) e bibliotecas para programao de agentes distribudos (JavaAglet da IBM, Odissey, Voyager). Na medida que a linguagem crescia em importncia econmica, passou a enfrentar as suas primeiras dificuldades. Primeiro a disputa entre a Sun e a Microsoft pela propriedade e permisso para alterao da mquina virtual. A Sun era contrria a incluso das implementaes do modelo de componentes e das bibliotecas nativas da Microsoft junto a mquina Java. Essa incluso tornaria as bibliotecas de Java dependentes da plataforma MS Windows, segundo a Sun. Ainda nesse mesmo perodo, os programadores de applets reagiram a proposta da Sun de criar uma linguagem to abrangente. O tempo de compilao e de execuo de Java aumentou em muito com a nova verso do JDK. A Sun no arriscou a criao de duas linguagens separadas: uma para Web e outra para o desenvolvimento de aplicaes. Com isso parte do pblico de Java migrou para alternativas mais simples como JavaScript e VBScript. Para contornar a falta de velocidade da linguagem, foram lanados os primeiros compiladores de cdigo nativo (Symantec Just-In-Time compiler e SuperCede). Nesse tipo de compilador, o cdigo Java transmitido em byte codes at a mquina cliente e ento convertido para instrues nativas antes de iniciar a execuo. Depois de compilado, a velocidade de execuo comparvel com a de um programa nativo. Ainda nesse perodo crtico da histria de Java, surgiram compiladores para linguagens como Basic e C++ que geravam byte codes para a mquina virtual Java [TOL 99]. 2.5.3 JDK 2 A verso mais recente do JDK, inicialmente lanada como JDK 1.2 e agora chamada JDK 2, trouxe inovaes na rea de segurana, mas as principais mudanas ocorreram na programao de interface com o usurio. A verso 1.1 j havia introduzido modificaes nas classes awt (abstract window toolkit). A verso 1.2, por sua vez, incorporou o pacote swing [ECR 98], que uma alternativa mais completa que a awt. O swing possui como principal caracterstica um look and feel independente de plataforma. Ou seja, uma aplicao em Java pode ser desenvolvida para manter a mesma aparncia e comportamento na interface, independente da plataforma onde est executando.

2.6 CONCLUSO Java um sistema composto de trs elementos: uma linguagem orientada a objetos, um conjunto de bibliotecas e uma mquina virtual no qual os programas so executados. Conceitualmente, Smalltalk apresenta uma abordagem semelhante, embora o ambiente de programao Smalltalk seja muito superior ao de Java do ponto de vista de coerncia e elegncia. Entretanto, Smalltalk limitada em relao ao tratamento de novos recursos computacionais como programao em rede, utilizao de banco de dados, integrao com a Web, internacionalizao e segurana. Claramente, Java herda muitas das caractersticas de C++ e Smalltalk e as simplifica, oferecendo uma linguagem eficiente e adaptada ao ambiente da Internet. A importncia de Java no cenrio de desenvolvimento de software atual justificada por uma srie de caractersticas importantes da linguagem, entre elas: (a) simplicidade da linguagem aliada a uma srie de recursos disponveis atravs de bibliotecas; (b) independncia de plataforma, uma vez que o cdigo compilado pode ser executado em qualquer plataforma que possua uma mquina virtual Java instalada; (c) mecanismos de segurana principalmente para os programas do tipo applet. Muitos outros mecanismos foram integrados em Java tais como, threads, comunicao entre objetos e tratamento de eventos. Essas caractersticas no so conceitos novos, j existindo em outras linguagens e ambientes, sendo amplamente utilizados em linguagens conceituais como Oberon. No entanto, muitas vezes essas caractersticas, e at a programao orientao a objetos, so novidades para os profissionais do nosso mercado. Deste modo, um programador Java novato obrigado a dedicar um esforo muito maior para dominar esses novos conceitos e passar a tirar efetivo proveito dessa nova ferramenta. O objetivo desse tutorial apresentar tcnicas que auxiliem o desenvolvedor a explorar todo o potencial da linguagem Java. Entretanto, as tcnicas apresentadas so aplicveis a outras linguagens orientadas a objeto. A abordagem deste tutorial a apresentao dessas tcnicas juntamente com a sua aplicao sobre um problema real. A seo seguinte detalha o estudo de caso proposto.

3 APRESENTAO DO EXEMPLO Este captulo apresenta um exemplo prtico de uma aplicao orientada a objetos em Java: um applet para envio de mensagens para telefones celulares utilizado pela companhia Telefonica Celular. Ser apresentado, alm da descrio do exemplo, um breve relato de negociaes com o cliente, apresentando uma perspectiva prtica do assunto. Tambm so apresentados os aspectos culturais envolvidos na adoo de uma nova linguagem.

3.1 APRESENTAO DO PROBLEMA A companhia Telefonica Celular desejava oferecer um servio de mensagens curtas em formato texto para os assinantes de seu servio de telefonia mvel. Esse servio se encontra disponvel atravs da central digital de telefones mveis. A Telefonica necessitava de uma aplicao que permitisse a um usurio da Web enviar a mensagem at a central telefnica, de onde ela seria transmitida ao telefone mvel correspondente. Para escolher a empresa que desenvolveria essa aplicao foi aberta uma concorrncia, que teve como selecionada a empresa IntexNet, de Porto Alegre.

3.2 NEGOCIAO COM O CLIENTE Diversas empresas participaram da concorrncia aberta pela Telefonica Celular. No entanto, a IntexNet Network foi a nica empresa a apresentar uma soluo desenvolvida em Java. As outras empresas optaram pela utilizao de linguagens de script tais como PERL [SRI 97], JavaScript [GOO 98] e VBScript [MAN 96]. A reao inicial do cliente, e em especial do gerente de marketing da Telefonica Celular, foi negativa, demonstrando que o mercado tem reservas com relao a linguagem Java. A principal reserva em relao ao desempenho de Java em dois momentos distintos: (a) inicializao da mquina virtual; (b) desempenho de execuo. A primeira execuo de um applet Java precedida pela inicializao da mquina virtual. Esse processo leva alguns segundos dependendo da verso da linguagem e da plataforma do navegador. Durante a inicializao da mquina virtual o navegador Web deixa de responder a comandos do usurio, o que causa um certo desconforto em determinados tipos de usurios. Verses mais antigas de navegadores no permitem a utilizao de applets e em alguns casos o sistema pode se tornar instvel por alguns momentos. Logo, a primeira impresso causada por Java no mercado baseada neste tipo de experincia negativa. As dvidas em relao ao desempenho foram geradas, em parte, em uma das diversas campanhas negativas desencadeada por concorrentes da empresa Sun, criadora e fornecedora da linguagem Java. A preocupao com desempenho causada pela falta de compreenso do modelo de execuo de um applet. Na Web existem applets de todo tipo e complexidade. Mas a maioria deles foi criada para executar aplicaes de tamanho reduzido e com um modesto uso das capacidades de processamento dos computadores atuais. Existem applets de tamanho reduzido que executam milhares de instrues de ponto flutuante, comprometendo o desempenho da aplicao. Mas esse tipo de aplicao no o mais comum em sistemas de informao, onde os applets so encarregados, basicamente, da interao com o usurio. Naturalmente, essa impresso negativa causada pela linguagem preocupou o departamento de marketing, muito mais do que a equipe tcnica. A soluo encontrada pela IntexNet foi a apresentao de um prottipo para desfazer qualquer dvida sobre o desempenho efetivo da aplicao. O resultado final do applet pode ser visitado a partir do endereo eletrnico http://www.telefonicacelular.com.br.

3.3 O PORQU DA OPO JAVA A soluo apresentada possua uma srie de vantagens, tal como permitir um controle muito maior que uma soluo com o uso de script. No entanto, para que a negociao continuasse, a IntexNet teve que provar que a soluo era possvel de ser realizada e que as outras no eram to boas. Em uma semana foi apresentado um primeiro prottipo tal como ser apresentado no captulo seguinte. Assim, para garantir o fechamento do contrato, foi preciso tanto uma prova de que a empresa dominava a tecnologia Java quanto uma prova das vantagens sobre outras tecnologias. O prazo total para o desenvolvimento da aplicao foi de um ms. Note que no mercado os prazos so curtos e precisam ser obedecidos sob o risco de perda do cliente. Por exemplo, se o prottipo inicial tivesse levado mais de uma semana para ser produzido, dificilmente a concorrncia teria sido ganha. Pode-se citar como vantagens do uso da linguagem Java que garantiram que a concorrncia fosse ganha:

Java dificulta ao usurio perceber o funcionamento do programa, aumentando um pouco a segurana; possvel controlar quem, quando e de que forma enviou a mensagem, bem como o nmero de mensagens enviadas; o applet foi utilizado como uma forma de transmitir um imagem positiva da empresa, pois auxilia a Telefonica a mostrar o domnio de um tecnologia nova; o uso de Java permite enviar um retorno (feedback) ao usurio dos passos que esto sendo executados, ou de avano, no processo de envio. Com script normalmente apenas na finalizao o usurio informado do sucesso ou fracasso na operao.

Note que para o cliente no importante a forma como um sistema desenvolvido e sim que as funcionalidades desejadas sejam atendidas, e nesse caso Java permitia que essas funcionalidades fossem atendidas de forma mais eficiente.

3.4 DESCRIO DA APLICAO Atravs de uma das pginas Web da Telefonica, o usurio deve fornecer informaes para o envio da mensagem, tais como o nmero do telefone celular e a mensagem. A interface com o usurio deve testar a consistncia dos dados submetidos, como por exemplo, evitar a submisso de um nmero invlido de telefone. Uma vez que essa aplicao acessada pela Internet, tambm preciso incluir mecanismos de segurana para o acesso. Outra caracterstica importante que o applet esteja totalmente integrado pgina da Telefonica. Quanto ao envio de mensagens, ele feito em duas etapas. Primeiro, a aplicao deve entrar em contato com o servidor instalado na central telefnica. Atravs de um protocolo proprietrio desse servidor a mensagem programada para envio aos aparelhos de telefonia celular. Esta etapa ocorre atravs da Internet. Na segunda etapa, o servidor da telefnica se encarrega de enviar a mensagem atravs da rede celular. 4 ENGENHARIA Nesta etapa do desenvolvimento da aplicao o desenvolvedor est preocupado em atender exclusivamente as necessidades do cliente. Preocupaes com a engenharia de software e a elegncia da soluo so marginais. A funcionalidade aparente, revelada na interface com o usurio, o aspecto mais importante da aplicao. Neste contexto, o desenvolvedor tem seu primeiro contato com a orientao a objetos, e com a linguagem Java. Atravs de uma das diversas ferramentas de desenvolvimento rpido disponveis no mercado, gerado um prottipo que ir convencer o cliente da viabilidade da aplicao. Neste tutorial, chamaremos

esta fase do desenvolvimento de prototipao. Nesta fase, o desenvolvedor deve dominar uma determinada ferramenta de programao visual. Em um segundo momento, aps a estabilizao da interface e dos requisitos da aplicao, o desenvolvedor dever consolidar a funcionalidade aparente com a incluso de cdigo no prottipo. Nesta fase de complementao o desenvolvedor deve apresentar domnio sobre a biblioteca de programao Java. As duas prximas sees apresentam um panorama de como ocorre o desenvolvimento de software nessas duas fases.

4.1 PROTOTIPAO Nesta fase, os principais recursos do programador so a biblioteca de classes e o ambiente de programao visual. No caso do applet exemplo, o navegador (browser) que o usurio utilizar limita uma srie de possibilidades do desenvolvimento. O primeiro contato de um desenvolvedor de software tpico com a orientao a objetos ocorre durante o uso de uma ferramenta de desenvolvimento rpido ou uma biblioteca de programao. Esse primeiro contato imposto pelas alteraes includas na nova verso de sua ferramenta de desenvolvimento preferida. Um ltimo problema ainda nesta fase a integrao grfica do applet com o design do restante da pgina de hipertexto. As prximas sees, comentam sobre o papel de cada um desses recursos no ambiente de desenvolvimento. 4.1.1 Bibliotecas de Programao Orientadas a Objetos A linguagem Java possui um conjunto padronizado de classes. Entretanto, essas classes oferecem somente recursos bsicos para a programao. A maioria das ferramentas de desenvolvimento acompanhada de um conjunto extra de classes que facilitam a programao de aplicaes especficas. Por exemplo, um boto do pacote java.awt no permite a colocao de uma cone (glyph) juntamente com o texto do boto. Os desenvolvedores da plataforma Windows esto acostumados com a existncia de cones nos botes, o que faz com que a maioria das ferramentas de desenvolvimento do ambiente Windows ofeream uma extenso da classe java.awt.button com essa funcionalidade. Essa caracterstica comum nos programas da plataforma Microsoft Windows, mas no encontrada nas demais plataformas, como o Commom Desktop Environment, um dos ambientes grficos do UNIX, ou o System 7, do Machintosh. Outras extenses so mais complexas e teis, como as classes de programao para interface com bancos de dados relacionais da Inprise. Com a ferramenta certa e um pouco de sorte, o desenvolvedor deve encontrar a maior parte das necessidades da sua aplicaes j implementada e disponvel na biblioteca de classes que acompanha sua ferramenta. Dois problemas so comuns nesta fase: a) o desenvolvedor no conhece a biblioteca; b) o desenvolvedor no sabe como combinar as classes disponveis para criar sua aplicao. A soluo para o primeiro problema escrever e ler muitos programas at que seja adquirida uma certa experincia no uso da biblioteca. O segundo problema pode ser contornado, em parte, pelo uso de um ambiente de programao visual. 4.1.2 Programao Visual A programao visual utiliza a manipulao direta de elementos grficos como forma de combinar componentes. Este tipo de programao relativamente recente embora as linguagens visuais possuam amplo fundamento terico de outras reas, como a comunicao e a lingstica. A principal vantagem da programao visual o seu aspecto intuitivo e direto. Por ser intuitiva, possibilita ao desenvolvedor iniciante um primeiro contato com uma variedade de classes que ser aos poucos dominada. A programao visual muito utilizada para a instanciao de objetos. Em algumas ferramentas mais sofisticadas pode ser feita a associao entre eventos e a ativao de mtodos atravs de menus ou elementos visuais. A composio de elementos tambm amplamente utilizada pela programao grfica, e essa caracterstica que permite a criao de elementos mais complexos. A linguagem Java define uma estrutura padronizada de classes que permite que diversos ambientes visuais possam manipul-los. Este padro conhecido por Java Bean. Um bean simplesmente uma classe Java que adota uma srie de padres nos nomes de mtodos e propriedades e que possui uma cone pr-definida para sua visualizao dentro do ambiente de programao. 4.1.3 Navegadores O cdigo gerado pelo ambiente visual gravado em um arquivo que contm os byte codes do applet. Este arquivo transferido para a mquina cliente no momento da execuo. Alm de ser responsvel pela requisio, recepo e execuo do applet, o navegador prov um ambiente de execuo controlado e toda a implementao da mquina virtual Java para a plataforma onde o navegador se encontra instalado. O fato da mquina virtual encontrar-se presente no navegador diminui em muito o tamanho do applet. Entretanto essa abordagem possui um desvantagem sria: o applet dever executar em uma verso de JDK compatvel com aquela usada no ambiente de execuo. Os primeiros navegadores no incluam a mquina virtual Java. Quando os navegadores se popularizaram, j incluam a mquina virtual Java para o JDK 1.0. Mais tarde se verificou que a maior parte da plataforma instalada nas empresas no era adequada para a execuo de navegadores mais complexos. A Sun desenvolveu um adendo (plug-in) para as verses recentes dos navegadores que, uma vez instalado, permite ao navegador obter e instalar automaticamente novas verses da mquina virtual atravs da Internet. Ainda assim, grande parte dos usurios no adotou as atualizaes lanadas posteriormente, que incluam as mquinas virtuais para as verses mais recentes do JDK. Com isso, quando uma aplicao desenvolvida para a Internet, como o caso do applet da Telefonica, o desenvolvedor fica restrito as classes do JDK 1.0. 4.1.4 Utilizao de ferramentas de prototipao Na resoluo do exemplo apresentado nesse tutorial, utilizou-se o Symantec Caf para o desenho da interface. Com a ajuda desse ambiente visual e da biblioteca de classes da ferramenta, foi possvel criar uma aplicao com uma interface muito semelhante a da verso final do applet. Com a ajuda de ferramentas visuais, o desenvolvedor pode criar uma classe que herda as funcionalidades da classe applet e em um segundo momento, pode utilizar a nova classe para compor instncias de outras classes. O desenvolvimento com uso de ferramentas visuais facilita a colocao de componentes grficos. Porm, para a codificao do comportamento da interface necessrio que o programador conhea os recursos da linguagem. Isso causa problemas ao programador devido a dificuldade em dominar as biblioteca de classes e a necessidade de conhecimento das bibliotecas que no possuem forma grfica. Por esse motivo, ferramentas como VisualAge da IBM utilizam beans para representar na interface de programao elementos no visuais necessrios para o desenvolvimento de sistemas. No exemplo do applet da Telefonica, o cdigo inicial obtido atravs do Symantec Caf foi alterado de forma a garantir em primeiro lugar desempenho, que era a principal preocupao do cliente. Note que o cdigo gerado por esse tipo de ferramentas no muito otimizado. Alm disso, embora a ferramenta gerasse toda o cdigo relativo a interface grfica, vrias funcionalidades no podiam ser modeladas atravs do ambiente desenvolvimento oferecido pela ferramenta. A Figura 4.1 apresenta o relacionamento da classe Phone com as demais classes da biblioteca da ferramenta.

Figura 4.1 Classes da aplicao (engenharia, prototipao). A Figura 4.2 mostra a declarao da classe Phone criada pela ferramenta. Note que o desenvolvedor teve o cuidado de escolher apenas as classes provenientes da biblioteca padro de Java. o mtodo button1_ActionPerformed acionado a cada vez que o boto button1 for pressionado. import java.awt.*; import java.applet.*; public class Phone extends Applet { public void init(){ } java.awt.TextField t1; java.awt.Choice c1; java.awt.TextField t2; java.awt.TextField c2; java.awt.TextField tx; java.awt.TextArea t4; java.awt.Button button1; java.awt.Label label1; java.awt.Label label2; java.awt.Label label3; java.awt.Label label4; java.awt.Label label6; java.awt.Button button2, button3, button4, button5; java.awt.List list1; void button1_ActionPerformed(java.awt.Event event) { } } Figura 4.2 Mtodos e campos da aplicao (engenharia, prototipao). As classes oferecidas pela ferramenta geralmente so mais atrativas e completas, entretanto: a) as classes podem ser familiares aos usurio de uma plataforma, mas completamente desconhecidos por usurios de outra plataforma; b) o cdigo dessas classes deve ser inserido no applet, uma vez que no fazem parte da mquina virtual oferecida pelos navegadores, aumentando o tamanho do applet e conseqentemente aumentando o tempo de carga; c) o uso dessas classes impede a utilizao do applet gerado em uma outra ferramenta de prototipao; d) a utilizao de classes jdk 1.0 resolve o problema de compatibilidade entre navegadores, j que muitos usurios usam navegadores sem suporte as novas verses do jdk. Neste ponto do desenvolvimento, o applet j possui a apresentao final de sua interface (Figura 4.4) conforme pode ser visualizado na pgina da Telefonica Celular (Figura 4.3). Observe como o applet apenas um dos elementos da pgina. Uma questo importante no desenvolvimento de applets, que esses programas necessariamente sero embutidos em uma pgina HTML. importante que o applet respeite o design grfico pr-existente da pgina do seu cliente, principalmente em relao a tamanho e cores dos elementos grficos. Nos casos em que no existem ainda as pginas onde o programa ser executado, aconselhvel que a tarefa de projeto da pgina seja deixada para um profissional especializado em design grfico. Como foi dito, o applet inserido atravs em uma pgina HTML e visualizado atravs de navegadores. Para tal utiliza-se tags de hipertexto . Mais detalhes podem ser obtidos na referncia sobre Java [ECK 98] [FLA 97] [SUN 99]. Nesta etapa da engenharia, a apresentao visual do applet j se encontra completa, possvel ento passar para a fase de complementao.

Figura 4.3 Interface grfica do applet j inserida na pgina Web.

4.2 COMPLEMENTAO Nesta fase, o desenvolvedor deve fazer uso das classes disponibilizadas pela biblioteca de programao Java a fim de criar o comportamento desejado ao applet. A Figura 4.4 apresenta quais so as funcionalidades requeridas da aplicao.

Figura 4.4 Funcionalidades do applet. Dois grupos de funcionalidades devem ser implementadas: a) teste da consistncia dos dados digitados na interface; b) envio da mensagem ao servidor instalado na Telefonica.

O primeiro grupo foi implementado atravs da interceptao de eventos. O segundo exigiu o uso de trs classes da biblioteca padro de Java: DataOutputStream, DataInputStream e Socket. As classes envolvidas na aplicao so apresentadas na Figura 4.5.

Figura 4.5 Classes da aplicao (engenharia, complementao). 4.2.1 Consistncia dos dados As funcionalidades se refletem na criao de novos atributos e mtodos nessa fase da engenharia. A Figura 4.6 apresenta o esqueleto do cdigo onde as classes criadas pelo desenvolvedor esto destacadas em negrito. Dos atributos quase todos foram criados para controlar a conexo com o servidor. A exceo a varivel max utilizada para controlar o tamanho da mensagem a ser enviada. Com relao aos mtodos, IsInsideList() impede a insero de um telefone repetido na lista de telefones. O mtodo ClearData() remove os valores de todos os componentes da interface. ListenServer() e CloseCom() foram criados para realizao da comunicao via sockets. LastIoError() retorna o valor verdadeiro se houve um erro na ltima comunicao com o servidor. Por fim, Validate(), uma funo que determina se a mensagem no excedeu o tamanho mximo permitido pelo sistema de mensagens curtas. Note-se que a maioria dos navegadores no permitem o uso de listeners. Por esse motivo o mtodo handleEvent() da classe applet teve de ser sobreescrito, usando o modelo de callbacks do jdk 1.0. Nesse modelo de programao de evento, o handleEvent() acionado toda vez que um evento ocorrer na interface. O parmetro event do mtodo informa que tipo de evento ocorreu. Na Tabela 4.1 so apresentados os atributos de Event utilizados e a Figura 4.7 apresenta trechos do mtodo sobreescrito. Tabela 4.1 Alguns atributos da classe Event. Atributo target id key import java.awt.*; import java.applet.*; import java.net.*; import java.io.*; public class Phone extends Applet { static public Socket soquete; static public DataInputStream in; static public DataOutputStream out; int portnumber; String host; String linex; int max=0; public boolean isInsideList() {} public boolean LastIoError() {} public void ClearData(){} public int Validate(){} public boolean ListenServer() {} public void CloseCom(){} public void init(){} java.awt.TextField t1; java.awt.Choice c1; java.awt.TextField t2; java.awt.TextField c2; java.awt.TextField tx; java.awt.TextArea t4; java.awt.Button button1; java.awt.Label label1; java.awt.Label label2; java.awt.Label label3; java.awt.Label label4; java.awt.Label label6; java.awt.Button button2, button3, button4, button5; java.awt.List list1; public boolean handleEvent(Event event) {} void button1_ActionPerformed(java.awt.Event event) {} void button2_ActionPerformed(java.awt.Event event) {} void button3_ActionPerformed(java.awt.Event event) {} void button4_ActionPerformed(java.awt.Event event) {} void button5_ActionPerformed(java.awt.Event event) {} } Figura 4.6 Mtodos e campos da aplicao (engenharia, complementao). Significado objeto que sofreu o evento tipo de evento (ACTION_EVENT ou KEY_PRESS, no nosso exemplo) tecla associada ao evento KEY_PRESS

O mtodo handleEvent() acionado a cada vez que um evento ocorre. O parmetro event fornece dados sobre esses eventos. Este mtodo deve retornar o valor lgico verdadeiro se o evento foi consumido (processado) ou o valor lgico falso se o evento no foi consumido. A classe java.applet.Applet apresenta uma implementao bsica deste mtodo que processa as aes normais de um interface, como o pressionar de botes e a digitao de caracteres. public boolean handleEvent(Event event) { // se o boto button4 foi pressionado... if (event.target == button4 && event.id == Event.ACTION_EVENT) { button4_ActionPerformed(event); return true; } ... // limita o comprimento mximo do textfield t1 em 14 caracteres if (event.target == t1 && event.id == Event.KEY_PRESS) { if ( (t1.getText().length() > 14) || (Validate() >= 150) ) return (event.key != ''); else if (event.key==' ') t2.requestFocus();