INTRODUÇÃO À TECNOLOGIA JAVA Java? Java é uma nova linguagem de programação, introduzida no mercado em 1995 pela Sun Microsystems, que provocou e ainda provoca excitação e entusiasmo em programadores, analistas e projetistas de software. Mas por que o Java produz esta reação? Simplesmente porque é o resultado de um trabalho consistente de pesquisa e desenvolvimento de mais do que uma simples linguagem de programação, mas de todo um ambiente de desenvolvimento e execução de programas que exibe as facilidades proporcionadas pela orientação a objetos, pela extrema portabilidade do código produzido, pelas características de segurança que esta plataforma oferece e finalmente pela facilidade de sua integração ao outros ambientes, destacandose a Internet. História do Java O Java foi desenvolvido pela Sun Microsystems. A Sun foi fundada em 1982 e era uma companhia que o seu mercado principal eram workstations unix. O criador da linguagem Java (James Gosling) deu o nome a linguagem de Oak (Carvalho) devido a um carvalho que crescia na janela do seu escritório. Oak foi desenvolvido para ser elegante, uma linguagem orientada a objetos que funcionaria em diversas plataformas. Oak tinha funções que o que o tornariam ideal para controle remoto e outros hardwares onde não seria possível carregar softwares em disquetes, etc. A característica chave do Oak era a sua independência de hardware. O Oak poderia funcionar em qualquer maquina que suportasse a sua maquina virtual e uma vez que o código para a maquina virtual estivesse pronto qualquer aplicação Oak poderia rodar. Acabou que já havia outra linguagem chamada de Oak então o Oak mudou de nome, e o nome escolhido foi Java. O nome foi escolhido para fazer as pessoas pensarem em algo moderno. O mercado não reagiu como a Sun esperava, mas a Internet estava com um grande crescimento e uma vantagem da Internet é que ela é feita de inúmeras maquinas e cada uma com arquiteturas diferentes e Java funciona em múltiplas plataformas, então a Sun direcionou o Java para a Internet. Em maio de 1995 a Sun anunciou formalmente o Java, eles colocaram o JDK (Java Development Kit) disponível e de graça na Internet. O Java foi desenvolvido para que programadores o achem simples de usar. O Java é uma linguagem nova (1990) e dessa forma ela foi feita para ser uma linguagem orientada a objetos porque os seus criadores não entendiam como uma boa linguagem não fosse orientada a objetos. A sintaxe do Java foi feita o mais proximo possivel do C++ possibilitando assim um mercado já pronto de programadores Java.Cronologia do Java: * Janeiro de 1991 - Java começa como Oak para gerenciamento de equipamentos domésticos. * Março a agosto 1993 - Sun tenta usar Java num projeto da Warner TV, mas SGI ganha projeto. * Junho de 1994 - Um funcionário começa a tentar fazer um pequeno sistema operacional com o Oak e um mês depois ele é redirecionado para Internet. * 23 de maio de 1995 - Sun lança o Java. Primeira companhia a usar o Java foi a Netscape. * 29 de maio de 1996 - mais de 6.000 pessoas na Primeira conferência sobre Java.* No final de 1996 a Sun lançou uma iniciativa de Java 100% puro o qual examinava o produto dentro de um conjunto de processos de certificações. Todo produto que passava por este teste ganhava uma etiqueta de Java 100% puro. Só tem um problema, nenhuma JVM (Máquina Virtual Java) está de acordo com o requerido pela Sun, Netscape retirou o logo do Java em 1997 e a Sun e a Microsoft ainda estão em batalhas judiciais. A linguagem Java tem o potencial de revolucionar a Web transformando a forma pela qual o software é entregue pela Internet. É uma tecnologia inteiramente nova que pode ser usada de outras formas que ainda não começamos a explorar. O Java, como uma linguagem de propósito geral, terá um importante papel na próxima geração de software para a Internet. Atualmente os applets Java estão embutidos em páginas Web, mais isso pode mudar. Talvez o browser em si passe a ser um conjunto de applets que serão descarregadas para seu computador à medida que você necessite deles. Isso significa que você sempre estaria rodando a última versão do browser. Se você quer um browser para outro formato que não o HTML, basta visitar uma página Web, e o browser/editor apropriado será descarregado da Internet. Futuristas que tiveram contato com o Java especularam que essa linguagem pode até mesmo transformar o modo como usamos aplicativos. Poderiam tornar-se possível acessar um aplicativo, tal como um programa de edição de texto ou de planilha, estando on-line, através da companhia que criou, sempre que necessário. Seríamos então cobrados apenas pelo tempo em que usássemos o aplicativo, e teríamos garantia de acesso à última versão do software. Compare esta situação com o modo com que usamos aplicativos hoje: é necessários adquirir um aplicativo para cada tipo de tarefa que se deseja realizar, e pagar novamente pela atualização quando novas versões são lançadas. Se a Internet continuar a crescer à taxa atual, uma grande quantidade de pessoas que estão conectadas serão usuários novos de computador. A Internet se tornará um habitat de consumidores, não de programadores. A Java terá um papel com os quais os usuários da Internet se tornará um lugar mais interessante, graças à Java. A linguagem Java e sua plataforma de programação constituem um fascinante objeto de estudo: ao mesmo tempo em que seduzem pelas promessas de portabilidade, exibem um conjunto rico de bibliotecas que realmente facilitam o desenvolvimento de novas aplicações e utiliza como paradigma central a orientação à objetos. Embora a mídia, grandes empresas e inúmeros especialistas vejam o Java como uma ferramenta indispensável para um futuro bastante próximo, tais previsões podem, obviamente, mudar em função de novas propostas e descobertas que hoje acontecem num ritmo quase inacreditável. De qualquer forma o estudo Java é uma opção conveniente, pois mesmo que o futuro desta linguagem não seja tão brilhante como parece, torna-se um meio eficiente para o aprendizado da orientação a objetos que é incontestavelmente importante. Características Da Linguagem Parecida com C, C++: Java tem a aparência de C ou de C++, embora a filosofia da linguagem seja diferente. Por este motivo estaremos frequentemente fazendo comparações alguma destas linguagens. O leitor que programa em qualquer uma delas, ou em uma linguagem orientada a objetos, se sentirá mais à vontade e se tornará um bom programador Java em menos tempo. Java também possui características herdadas de muitas outras linguagens de programação: Objective-C, Smalltalk, Eiffel, Modula-3, etc. Muitas das características desta linguagem não são totalmente novas. Java é uma feliz união de tecnologias testadas por vários centros de pesquisa e desenvolvimento de software. Compilada: Um programa em Java é compilado para o chamado “byte-code”, que é próximo as instruções de máquina, mas não de uma máquina real. O “byte-code” é um código de uma máquina virtual idealizada pelos criadores da linguagem. Por isso Java pode ser mais rápida do que se fosse simplesmente interpretada. Portável: Java foi criada para ser portável. O “byte-code” gerado pelo compilador para a sua aplicação específica pode ser transportado entre plataformas distintas que suportam Java (Solaris 2.3, Windows-NT, Windows-95, Mac/Os etc). Não é necessário recompilar um programa para que ele rode numa máquina e sistema diferente, ao contrário do que acontece, por exemplo, com programas escritos em C e outras linguagens. Esta portabilidade é importante para a criação de aplicações para a heterogênea internet. Muitos d os programas exemplo deste tutorial foram escritos e compilados numa plataforma Windows-95 e rodaram perfeitamente quando simplesmente copiados para uma plataforma Solaris 2.3. Em Java um inteiro, por exemplo, tem sempre 32 bits, independentemente da arquitetura. O próprio compilador Java é escrito em Java, de modo que ele é portável para qualquer sistema que possua o interpretador de “bytecodes”. Um exemplo de programa escrito em Java é o browser hotjava. Orientada a Objetos: A portabilidade é uma das características que se inclui nos objetivos almejados por uma linguagem orientada a objetos. Em Java ela foi obtida de maneira inovadora com relação ao grupo atual de linguagens orientadas a objetos. Java suporta herança, mas não herança múltipla. A ausência de herança múltipla pode ser compensada pelo uso de herança e interfaces, onde uma classe herda o comportamento de sua superclasse além de oferecer uma implementação para uma ou mais interfaces. Java permite a criação de classes abstratas. Outra característica importante em linguagens orientadas a objetos é a segurança. Dada a sua importância o tópico foi escrito à parte. Independente de Plataforma: Java é uma linguagem independente de plataforma, pois os programas Java são compilados para uma forma intermediária de código denominada bytecodes que utiliza instruções e tipos primitivos de tamanho fixo, ordenação big-endian e uma biblioteca de classes padronizada. Os bytecodes são como uma linguagem de máquina destinada a uma única plataforma, a máquina virtual Java (JVM – Java Virtual Machine), um interpretador de bytecodes. Pode-se implementar uma JVM para qualquer plataforma assim temos que um mesmo programa Java pode ser executado em qualquer arquitetura que disponha de uma JVM. Sem Ponteiros: Java não possui ponteiros, isto é, Java não permite a manipulação direta de endereços de memória nem exige que o objetos criados seja destruídos livrando os programadores de uma tarefa complexa. Além disso, a JVM possui um mecanismo automático de gerenciamento de memória conhecido como garbage collector, que recupera a memória alocada para objetos não mais referenciados pelo programa. Segura: A presença de coleta automática de lixo, evita erros comuns que os programadores cometem quando são obrigados a gerenciar diretamente a memória (C, C++, Pascal). A eliminação do uso de ponteiros, em favor do uso de vetores, objetos e outras estruturas substitutivas traz benefícios em termos de segurança. O programador é proibido de obter acesso a memória que não pertence ao seu programa, além de não ter chances de cometer erros comuns tais como “reference aliasing” e uso indevido de aritmética de ponteiros. Estas medidas são particularmente úteis quando pensarmos em aplicações comerciais desenvolvidas para a internet. Ser “strongly typed” também é uma vantagem em termos de segurança, que está aliada a eliminação de conversões implícitas de tipos de C++. A presença de mecanismos de tratamento de exceções torna as aplicações mais robustas, não permitindo que elas abortem, mesmo quando rodando sob condições anormais. O tratamento de exceções será útil na segunda parte para modelar situações tais como falhas de transmissão e formatos incompatíveis de arquivos. Suporta concorrência/Multithreading: A linguagem permite a criação de maneira fácil, de vários “threads” de execução. Este tópico será útil quando você estudar animações, e é particularmente poderoso nos ambientes em que aplicações Java são suportadas, ambientes estes que geralmente podem mapear os threads da linguagem em processamento paralelo real. Performance: Java foi projetada para ser compacta, independente de plataforma e para utilização em rede o que levou a decisão de ser interpretada através dos esquemas de bytecodes. Como uma linguagem interpretada a performance é razoável, não podendo ser comparada a velocidade de execução de código nativo. Para superar esta limitação várias JVM dispõe de compiladores just in time (JIT) que compilam os bytecodes para código nativo durante a execução otimizando a execução, que nestes casos melhora significativamente a performance de programas Java. Eficiente: Como Java foi criada para ser usada em computadores pequenos, ela exige pouco espaço, pouca memória. Java é muito mais eficiente que grande parte das linguagens de “scripting” existentes, embora seja cerca de 20 vezes mais lenta que C, o que não é um marco definitivo. Com a evolução da linguagem, serão criados geradores de “byte-codes” cada vez mais otimizados que trarão as marcas de performance da linguagem mais próximas das de C++ e C. Além disso, um dia Java permitirá a possibilidade de gerar código executável de uma particular arquitetura “on the fly”, tudo a partir do “byte-code”. Suporte para programação de sistemas distribuídos: Java fornece facilidades para programação com sockets, remote method call, tcp-ip, etc. Estes tópicos não serão abordados neste texto. O Kit de Desenvolvimento O Sun Java Developer’s Kit (JDK) é composto basicamente por: · Um compilador (javac) · Uma máquina virtual Java (java) · Um visualizador de applets (appletviewer) · Bibliotecas de desenvolvimento (os packages java) · Um programa para composição de documentação (javadoc) · Um depurador básico de programas (jdb) · Versão run-time do ambiente de execução (jre) Deve ser observado que o JDK não é um ambiente visual de desenvolvimento, embora mesmo assim seja possível o desenvolvimento de aplicações gráficas complexas apenas com o uso do JDK que é, de fato, o padrão em termos da tecnologia Java. Outros fabricantes de software tais como Microsoft, Borland, Symantec e IBM oferecem comercialmente ambientes visuais de desenvolvimento Java, respectivamente, Visual J++, JBuilder, VisualCafe e VisualAge for Java. Ambiente Java O exemplo dado na seção anterior, além de ilustrar aspectos relacionados a programação de aplicações Java, serve também para caracterizar uma parte do ambiente de desenvolvimento da linguagem Java: a criação de programas, sua compilação e execução, como mostra a Figura abaixo. Ambiente de Desenvolvimento Java Como visto, devemos utilizar um editor de textos ASCII simples para produzirmos o código fonte de um programa que, obrigatoriamente deve ser alvo como arquivos de extensão “.java”. Utilizando o compilador javac o arquivo fonte é transformado em bytecodes Java que podem ser executados em qualquer plataforma computacional que disponha de uma máquina virtual Java como ilustrado na Figura seguinte. Quando solicitamos a execução do programa, tanto através do interpretador Java como de sua versão run-time jre, o arquivo “.class” é primeiramente carregado, verificado para garantir-se os requisitos de segurança do sistema e só então é propriamente interpretado. No caso específico das applets o navegador (browser) efetua o download de um arquivo “.class” interpretando-o ou acionando algum interpretador associado (plug-in). Em ambientes onde existam compiladores JIT (just in time) os bytecodes já verificados são convertidos em instruções nativas do ambiente durante a execução, aumentando a performance das aplicações ou applets Java. Ambiente Java e os Bytecodes O resultado deste ambiente é que o Java, embora interpretado inicialmente, tornasse independente de plataforma, simplificando o projeto de aplicações de rede ou distribuídas que tenham que operar em ambientes heterogêneos, além de permitir a incorporação de vários mecanismos de segurança.