Вы находитесь на странице: 1из 15

http://www.sirmacstronger.eti.br/java/introdjava.

php

Java: uma linguagem moderna


O foco das aplicaes criadas hoje, qualquer que seja seu pblico alvo e seu propsito, ter certamente que lidar com mquinas ligadas por uma rede global de recursos computacionais. O aumento da importncia das redes coloca novas demandas impelindo ao aparecimento de novos tipos de aplicaes. Queremos software que funcionem de forma consistente, em qualquer lugar, em qualquer plataforma. Queremos aplicaes dinmicas que tirem vantagem de um mundo conectado, capaz de acessar fontes de informao distribudas mesmo que distantes. Queremos softwares verdadeiramente distribudos que possam ser estendidos e atualizados sem que essas modificaes causem interrupes ou degradaes de suas funcionalidades. Historicamente, o problema tem sido que as ferramentas para desenvolvimento de aplicaes no cumprirem todas as finalidades com sucesso. Os requisitos de velocidade e portabilidade tm sido, na maioria dos casos, mutuamente exclusivos, e a segurana tem sido largamente ignorada ou mal-entendida. No passado, linguagens verdadeiramente portveis eram limitadas, interpretadas, e lentas. Linguagens rpidas, por outro lado, usualmente forneciam velocidade atravs de combinaes com plataformas especficas, de forma que a portabilidade saa prejudicada. Existem algumas poucas linguagens seguras, mas elas em geral no so portveis, sofrendo do mesmo problema anterior. Java uma linguagem moderna que foca todos os trs requisitos: portabilidade, velocidade e segurana. Da porque ela tem sido uma das linguagens dominantes no mundo da programao contempornea.

Um pouco de histria
O ancestral mais prximo da linguagem Java foi o projeto OAK, criada pela Sun Microsystems, cujo objetivo era criar uma linguagem de programao para PDAs e mais a frente para TV interativa. Com o abandono dessas duas tecnologias, na poca (anos 1990), a linguagem OAK, cujas caractersticas eram: pequena, independente de arquitetura, orientada a objetos e segura; voltaram para a Internet. Alm de mudar o foco, a linguagem tambm mudou de nome, para Java. Java teve uma aceitao muito grande. Antes mesmo da primeira verso oficial ser liberada j havia contratos de licena com a Microsoft, Intel, IBM e muitos outros fabricantes de hardware e software. Contudo, uma srie de contratempos legais, sobretudo entre a Sun e a Microsoft, culminaram no afastamento da Microsoft do mundo Java por um longo tempo. Ainda assim, com o tempo a linguagem Java conquistou seu espao criando verses para vrias plataformas e dispositivos e facilitou em muito sua disseminao.

A portabilidade Java
O modelo de portabilidade Java significa que voc pode compilar um programa sobre

1 de 15

17/05/2012 10:45

http://www.sirmacstronger.eti.br/java/introdjava.php

qualquer sistema e rodar o arquivo binrio executvel no mesmo sistema ou em qualquer outro sistema seja ele um Machintosh, Windows 98, NT, XP, no Solaris, Linux, BSD ou qualquer outra variedade de Unix, em sistemas operacionais de mainframes IBM, em celulares, PDAs, processadores embarcados, smart cards (cartes de crdito com microprocessador e memria), etc. A figura 1 mostra o significado da portabilidade Java:

Figura 1. A portabilidade Java As linguagens de programao tradicionais compiladas so transformadas em cdigo binrio em nvel de mquina, isto , cdigo especfico para a mquina ou plataforma para a qual est sendo compilada. A vantagem desse processo que um cdigo binrio compilado roda mais rpido uma vez que ele est rodando na linguagem nativa da mquina. A desvantagem que um programa escrito em uma linguagem tradicional deve ser recompilado para cdigo binrio para cada plataforma de hardware ou sistema operacional antes que possa ser executado na mquina. Por outro lado, linguagens tradicionais interpretadas so neutras em termos de linguagem de mquina e podem ser executadas sem recompilao sobre as vrias plataformas. Contudo, so geralmente mais lentas do que as aplicaes compiladas, pois devem ser interpretadas em tempo de execuo para a linguagem de mquina nativa do computador. Java incorporou os melhor dos dois mundos. O time de desenvolvimento da linguagem Java criou uma camada de software especfico para cada plataforma chamado Java Virtual Machine JVM (Mquina Virtual Java). Essa camada de software faz a interface entre o hardware do computador e o sistema operacional e o programa Java. Quando voc instala uma browser com capacidade de rodar Java no seu computador, por exemplo, uma cpia de um interpretador Java tambm instalado, o qual permite que seu browser execute applets Java e que seu sistema execute programas desktop (standalones) Java.

2 de 15

17/05/2012 10:45

http://www.sirmacstronger.eti.br/java/introdjava.php

A mquina virtual Java


Uma mquina virtual uma implementao de software que emula o funcionamento do hardware de um computador em conjunto com determinado sistema operacional. A Java VM fornece um sistema operacional com entrada, sada, e controle de threads, entre outras capacidades. Os termos interpretador Java (Java Interpreter) e Java Runtime so nomes alternativos para Java VM. A Java VM apresenta a mesma interface para qualquer applet que tente executar sobre o sistema. Dessa forma, para os applets, todas as mquinas so iguais, porque eles enxergam a Java VM e no a mquina real com o sistema operacional real instalado. Os programas criados em Java so compilados para uma de cdigo interpretvel chamada Java bytecode. Essa forma especial de cdigo pode ser executada em qualquer plataforma que possua a Java VM instalada. Os bytecodes so um conjunto de instrues que so similares a cdigo de mquina, mas no especficos de nenhum processador. Eles so interpretados pela Java VM. A unidade fundamental de um programa em Java uma classe. Sendo uma linguagem orientada a objetos, classes em Java so componentes de aplicao que possuem dados e cdigo executvel. Classes compiladas em Java so distribudas em bytecode. Elas podem ser mantidas em arquivos nicos ou reunidas em arquivos compactados ou ainda localizadas em um servidor de rede. Classes so alocadas e carregadas dinamicamente em tempo de execuo quando so necessrias para uma aplicao. Alm do sistema de plataforma especfica (Java VM), a linguagem Java possui um grande nmero de classes fundamentais contendo mtodos dependentes de arquitetura. Esses mtodos nativos servem como a ligao entre a Java VM e o mundo real. Eles so implementados em uma linguagem compilada nativamente na plataforma hospedeira e fornecem acesso de baixo-nvel a recursos como redes, sistemas de janelas, e sistemas de arquivos. Uma grande poro do Java, contudo, escrita na prpria linguagem Java. Esto inclusos: ferramentas Java como o compilador Java, componentes de web browsers, e bibliotecas de GUI, as quais so tambm escritas em Java e disponibilizadas para todas as plataformas. Historicamente, como j foi dito, linguagens interpretadas so consideradas lentas, mas Java no uma linguagem interpretada como as tradicionais. Alm de compilar o cdigo para uma verso portvel (bytecode), Java tambm foi projetada delicadamente para que as implementaes de software do sistema de runtime possa otimizar o desempenho das aplicaes transformando o bytecode para cdigo de mquina nativo em tempo de execuo e por demanda. Esse processo chamado Just-In-Time (JIT). Com isso, o cdigo Java pode executar to rpido quanto cdigo nativo e ainda mantm a portabilidade e segurana. Esse um ponto que em geral mal-entendido entre aqueles que querem comparar desempenho entre linguagens. H apenas uma nica penalidade intrnseca que o cdigo Java sofre em tempo de execuo pelo bem da segurana e projeto da mquina virtual. Tudo o mais pode ser otimizado para funcionar como se fosse cdigo nativo compilado. Indo alm, a linguagem Java inclui mais informaes estruturais do que muitas outras linguagens, fornecendo mais possibilidades para otimizaes. Tambm convm lembrar que essas otimizaes pode ser feitas em
3 de 15

17/05/2012 10:45

http://www.sirmacstronger.eti.br/java/introdjava.php

tempo de execuo, levando-se em conta as caractersticas e o comportamento de cada aplicao. O problema com a compilao JIT tradicional que a otimizao toma tempo. Assim um compilador JIT pode produzir resultados decentes, mas pode sofrer uma latncia significa quando a aplicao inicia. Isso no costuma afetar aplicaes de servidor com longos ciclos de vida, mas um problema srio para um software clienteservidor e aplicaes que so executadas em dispositivos com capacidades limitadas (mobiles). Para resolver isso, a tecnologia de compilao da Sun, chamada HotSpot, usa um truque chamado compilao adaptativa. Se voc observar no que um programa leva tempo de fato, vai descobrir que quase todo tempo, ele est executando uma parte relativamente pequena do cdigo repetidas vezes. Esse pedao de cdigo que executado continuamente pode ser apenas uma pequena frao do programa total, mas seu comportamento determina o desempenho do programa como um todo. A compilao adaptativa tambm permite ao Java runtime tirar vantagem de novos tipos de otimizaes que simplesmente no podem ser feitos em uma linguagem compilada estaticamente. Por isso, um cdigo Java pode rodar mais rpido do que o equivalente em C/C++ em alguns casos. O mecanismo de HotSpot inicia como um interpretador de bytecode Java normalmente, mas com uma diferena: ele mede (perfila) o cdigo conforme este executado para detectar que partes esto sendo executadas repetidamente. Uma vez que ele reconhece quais so as partes do cdigo cruciais para o desempenho, o HotSpot transforma essas partes em cdigo nativo de mquina mais otimizado. Uma questo natural que se impem : porque jogar fora essa informao sobre o comportamento do programa cada vez que a aplicao executada? A Sun se perguntou isso tambm, e na verso Java 5.0 ela resolveu parcialmente o problema atravs do uso de classes compartilhadas, apenas para leitura que podem ser armazenadas persistentemente em de uma forma otimizada. Isso reduz significantemente tanto o tempo de incio como o tempo de espera de executar muitas aplicaes Java ao mesmo tempo. A tecnologia para realizar isso complexa, mas a idia simples: otimize as partes do programa que precisam ser rpidas e no se preocupe com o resto.

Java e outras linguagens


Java uma linguagem relativamente nova, mas que carrega anos de aprendizado e experincias com outras linguagens em seu conjunto de caractersticas. Para entender o papel da linguagem Java frente s outras linguagens podemos utilizar trs pilares universais de suporte de para qualquer linguagem de programao atual: portabilidade, velocidade e segurana. J deve ter ouvido falar muito da semelhana entre Java e C ou C++. Mas para falar a verdade essa semelhana s existe em um nvel superficial. Quando voc olha um cdigo Java pela primeira vez, voc v a sintaxe se assemelha muito ao C ou C++. Mas s at a que vai a semelhana. Java no uma descente direta de C ou ainda uma evoluo sobre o C++. Se voc comparar as caractersticas das linguagens,

4 de 15

17/05/2012 10:45

http://www.sirmacstronger.eti.br/java/introdjava.php

ver que Java tem de fato muito mais em comum com linguagens como Smalltalk e Lisp. A implementao da linguagem Java est bem distante das caractersticas nativas da linguagem C. Por outro lado, as similaridades de escrita dessas linguagens so dignas de nota. Java pegou emprestado muito da sintaxe de C e C++, de voc que voc v muitas construes de linguagens, incluindo uma abundncia de chaves e ponto-e-vrgulas. Java tambm segue a linha de C no sentido de que uma linguagem deve ser compacta; ou seja, ela deve ser pequena e regular o suficiente para que um programador possa domin-la sem muito esforo. Assim como C extensvel com bibliotecas, os pacotes (packages) de Java podem ser adicionados ao ncleo principal de componentes da linguagem a fim de aumentar o seu vocabulrio. A linguagem C bem sucedida porque fornece um bom ambiente de programao com caractersticas embutidas, com alto desempenho e um grau aceitvel de portabilidade. Java tambm tenta balancear funcionalidade, velocidade e portabilidade, mas o faz de uma forma muito diferente. C sacrifica a funcionalidade pela portabilidade; enquanto que Java, inicialmente sacrificava a velocidade pela portabilidade. Alm do que, Java cuida das questes de segurana enquanto que a linguagem C no. Nos primeiros tempos antes da compilao adaptativa e do JIT, Java era mais lenta do que linguagens compiladas estaticamente, e isso foi usado como um constante argumento por aqueles que eram contra o uso de Java. Contudo, hoje o desempenho da linguagem Java comparvel ao das linguagens C ou C++, fazendo esse argumento cair por terra. De fato, em 2004, a engine de cdigo aberto do jogo Quake2 foi transportada para Java. Ora, se Java rpida o suficiente para um jogo first-person-shooter, ela certamente rpida o suficiente para aplicaes corporativas. Linguagens de scripting, tais como Perl, Python, e Ruby, so muito populares, e por uma boa razo. No h razo por uma linguagem de scripting no seja adequada para aplicaes de rede seguras. Mas a maioria das linguagens de scripting no projetada para programao de larga-escala. O atrativo das linguagens de scripting que elas so dinmicas; elas so ferramentas poderosas para desenvolvimento de rpido de projetos. Algumas linguagens de scripting como Perl tambm fornecem ferramentas poderosas para tarefas de processamento de texto que a maioria das linguagens de propsito geral consideram difceis de tratar. Linguagens de scripting tambm so altamente portveis, ainda que em nvel de cdigo fonte. A guisa de esclarecimento, JavaScript uma linguagem de scripting baseada em objetos, originalmente desenvolvida pela Netscape para o seu navegador. Ela serve como uma linguagem amalgama e auto-contida para prover dinamismo em aplicaes baseadas em HTML interativas. JavaScript recebeu esse nome a partir da inteno de ser integrada a applets Java e tambm por possuir algumas similaridades na sintaxe, mas as semelhantes terminam a. Embora existam aplicaes de JavaScript que rodam fora de um navegador, ela nunca foi concebida para esse fim. Atualmente o padro de convergncia dos vrios dialetos da linguagem JavaScript chama-se EcmaScript. O problema com as linguagens de scripting que elas so muito rigorosas com estruturas de controles e tipos de dados. A maioria delas (com a exceo de Python e das ltimas verses de Perl) no orientada a objetos. Elas tambm possuem um
5 de 15

17/05/2012 10:45

http://www.sirmacstronger.eti.br/java/introdjava.php

sistemas de tipagem muito simplificado e geralmente no fornecem tratamento sofisticado para escopo de variveis e funes. Essas caractersticas as fazem inadequadas para a construo de aplicaes grandes e modulares. Velocidade outro problema com as linguagens de scripting; a natureza de alto-nvel, completamente interpretada dessas linguagens faz delas linguagens lentas. Aqueles que advogam em favor das linguagens de scripting tm razo quando dizem que elas esto crescendo, no sentido de maturidade. Mas a questo fundamental inegvel: linguagens de scripting so concebidas para desenvolvimento menos rigoroso, no que se refere a estruturas e tipagem, como alternativas a linguagens de programao de sistemas; e geralmente no so adequadas para projetos grandes e complexos, pelo menos por enquanto. Java oferece algumas das vantagens essenciais de uma linguagem de scripting (ela altamente dinmica), alm de possuir benefcios de uma linguagem de mais baixo nvel. Java 1.4 possui uma API poderosa para expresses regulares que compete com Perl para trabalho com textos e Java 5.0 introduziu novas caractersticas de linguagem que facilitam as codificao, como iterao de colees no estilo foreach, variveis de lista de argumentos, encaixotamento de estruturas primitivas de dados e importao esttica de mtodos. O desenvolvimento incremental com componentes orientados a objetos, combinados com simplicidade da linguagem Java, permitem desenvolver aplicaes agilmente e modific-las facilmente, quando necessrio. Estudos sobre desenvolvimento, estritamente baseados nas caractersticas das linguagens, demonstraram que o [1] desenvolvimento em Java mais rpido do que em C ou C++ . Java tambm possui uma enorme gama de classes para tarefas como criao de interfaces com o usurio e comunicaes em rede. Mas juntamente com essas funcionalidades, Java possui capacidade de escalonamento e vantagens de engenharia de software como poucas linguagens estticas. Isso forma uma estrutura segura na qual se pode criar frameworks de alto-nvel (e mesmo outras linguagens). Como foi dito anteriormente, Java similar em projeto a linguagens como Smaltalk e Lisp. Contudo, essas linguagens so normalmente usadas como veculos de pesquisa ao invs de desenvolvimento de sistemas em larga-escala. Um razo para isso que essas linguagens nunca desenvolveram um padro para adaptao de portabilidade com os servios de sistemas operacionais, como a standard library de C ou as classes core de Java. Smaltalk compilada para um formato de bytecode interpretado e que pode ser dinamicamente compilado para cdigo nativo, assim como Java. Mas Java melhorou seu processo, criando um verificador de bytecode que garante a corretude do cdigo compilado. Esse verificador d linguagem Java uma vantagem de desempenho sobre a linguagem Smaltalk porque o cdigo Java necessita de poucas verificaes em tempo de execuo. O verificador de bytecode Java tambm ajuda com questes de segurana, uma coisa que a linguagem Smaltalk nunca tratou. Smaltalk uma linguagem madura, contudo, e os projetistas de Java aprenderam muito com suas caractersticas para a criao da linguagem Java.

Caractersticas da Linguagem Java


Java apresenta uma srie de caractersticas que a faz uma linguagem fascinante de

6 de 15

17/05/2012 10:45

http://www.sirmacstronger.eti.br/java/introdjava.php

aprender e uma ferramenta poderosa a ser ter em mos para criao de aplicaes. Vejamos algumas dessas caractersticas:

Segurana de Projeto
Voc certamente j ouviu falar sobre Java ser projetada para ser uma linguagem segura. Mas o que exatamente significa segura? Segura de que ou de quem? As caractersticas de segurana que atrai a maior ateno sobre Java so aquelas que permitem a criao de novos tipos de software dinamicamente portveis. Java fornece muitas camadas de proteo contra cdigo perigosamente falho assim como elementos nocivos como vrus e cavalos de tria. Essas caractersticas, em uma viso geral, fornecem o fundamento para polticas de segurana de alto-nvel que pode permitir ou desabilitar vrios tipos de atividades em nvel de aplicao. Alm disso, Java foi projetada para ser segura o quanto possvel contra os mais simples erros que ns possamos gerar assim como aqueles que ns herdamos de sistemas legados. O objetivo com Java foi manter a linguagem simples, fornecer ferramentas que demonstraram sua utilidade, e deixar o desenvolver criar funcionalidades mais complicadas no topo da linguagem quando isso for necessrio. Com Java, a regra a simplicidade. Por Java ter comeado com uma proposta limpa, foi possvel evitar caractersticas que provaram ser confusas ou controversas em outras linguagens. Por exemplo, Java no permite a sobrecarga de operadores (a qual em algumas linguagens permitem que os programadores redefinam o significado de smbolos bsicos como + e -). Java no tem preprocessador de cdigo fonte, por isso, no h macros, declaraes #define, ou compilao condicional de cdigo fonte. Essas construes existem em outras linguagens primeiramente para dar suporte a dependncias a plataformas especficas, ento nesse aspecto, elas no so necessrias em Java. Compilao condicional tambm geralmente utilizada para depurao, mas as caractersticas e otimizaes no tempo de execuo sofisticado de Java, como assertions resolvem o problema de forma mais elegante. Java fornece uma estrutura de pacote bem definida para organizao de arquivos de classes. O sistema de pacotes permite que o compilador trate algumas das funcionalidades do utilitrio tradicional make (uma ferramenta para criao de executveis a partir de cdigos fontes). O compilador pode tambm trabalhar com classes Java compiladas diretamente porque todos os tipos de informao so preservados; no h necessidade para arquivos de cabealhos (headers) intrusos, como em C/C++. Tudo isso significa que o cdigo Java requer menos contexto para ser lido. De fato, voc pode algumas vezes achar mais rpido olhar para o cdigo Java do que para a documentao da classe. Java tambm utiliza diferentes abordagens para algumas caractersticas estruturais que foram problemas em outras linguagens. Por exemplo, Java suporta apenas herana simples de hierarquia de classes (cada classe pode ter apenas um classe superior) mas permite herana mltipla de interfaces. Uma interface, como uma classe abstrata em C++, especifica o comportamento de um objeto sem definir sua implementao. Esse um mecanismo muito poderoso que permite ao desenvolvedor definir um contrato para o comportamento do objeto que pode ser usado para se referir a uma implementao de objeto especfico. Interfaces em Java eliminam a necessidade de herana mltipla de classes e seus problemas associados.

7 de 15

17/05/2012 10:45

http://www.sirmacstronger.eti.br/java/introdjava.php

Apena depois de muitos anos de debate que, na verso Java 5.0, algumas novas caractersticas marcantes foram adicionadas a linguagem. A ltima verso de Java adicionou generics, os quais so uma abstrao que permite classes Java a trabalharem com diferentes tipos em um modo seguro que o compilador possa entender. Enquanto generics dificilmente so considerados simples, seu uso comum e efeito sobre a linguagem far o cdigo mais fcil de dar manuteno e legvel. Fornecer essa caracterstica sem adicionar grandes complicaes linguagem foi um grande feito.

Tipagem segura e ligao de mtodos


Um atributo de uma linguagem a forma como feita a checagem de tipo que ela usa. Geralmente, as linguagens so categorizadas como static ou dynamic, referindo-se quantidade de informao sobre as variveis que conhecida em tempo de compilao versus o que conhecido enquanto a aplicao est rodando. Em linguagens estritamente de tipagem esttica como C ou C++, os tipos de dados so gravados em pedra quando o cdigo fonte compilado. O compilador se beneficia disso por haver informao suficiente para capturar muitos tipos de erros antes que o cdigo seja executado. Por exemplo, o compilador poderia no permitir que voc armazenasse um valor ponto-flutuante em uma varivel inteira. O cdigo ento no requer checagem em tempo de execuo, de forma que pode ser compilado para ser rpido e pequeno. Mas linguagens de tipagem esttica so inflexveis. Elas no suportam construes de alto-nvel como as listas e colees de forma natural como as linguagens com checagem de tipo dinmica, e no permitem que uma aplicao importe de forma segura novos tipos de dados enquanto est rodando. Em contraste, uma linguagem dinmica como Smalktalk ou Lisp possui um sistema de tempo de execuo que gerencia os tipos de objetos e realiza a checagem de tipo necessria enquanto uma aplicao est sendo executada. Esses tipos de linguagens abrem a possibilidade para comportamentos mais complexos e so em muitos aspectos mais poderosas. Contudo, elas so geralmente mais lentas, menos seguras, e difceis de depurar. Outra questo a ser estudada em uma linguagem a forma como ela conecta chamada de mtodos s definies desses mesmos mtodos. Em linguagens estticas como C ou C++, as definies dos mtodos so normalmente conectadas em tempo de compilao, a menos que o programador especifique em contrrio. Linguagens como Smaltalk, por outro lado, so chamados late binding porque elas localizam as definies dos mtodos dinamicamente em tempo de execuo. O binding feito antes importante por razes de desempenho; uma aplicao pode rodar sem o retardo de necessrio para procurar pelos mtodos em tempo de execuo. Mas o binding atrasado mais flexvel. Ele tambm necessrio em uma linguagem orientada a objetos onde novos tipos pode ser carregados dinamicamente e apenas o sistemas de tempo de execuo pode determinar que mtodo executar. Java fornece alguns dos benefcios de C++ e Smaltalk; ela uma linguagem de tipagem esttica, e late binding. Todo objeto em Java possui um tipo bem definido que conhecido em tempo de compilao. Isso significa que o compilador Java pode realizar o mesmo tipo de checagem de tipo esttica e anlise de uso que C++. Como

8 de 15

17/05/2012 10:45

http://www.sirmacstronger.eti.br/java/introdjava.php

resultado, voc no pode associar um objeto ao tipo errado de varivel ou chamar um mtodo inexistente de um objeto. O compilador Java vai ainda alm e probe voc de utilizar variveis no inicializadas e criao de declaraes inalcanveis. Contudo, Java tambm completamente tipada em tempo de execuo. O sistema de tempo de execuo Java mantm controle de todos os objetos e possibilita a determinao dos tipos e relacionamentos durante a execuo. Isso significa que voc pode inspecionar um objeto em tempo de execuo para determinar o que ele . Diferentemente de C ou C++, a converso de um tipo de objeto em outro checada pelo sistema de tempo de execuo, e possvel utilizar o uso de novos tipos de objetos carregados dinamicamente com maior nvel de segurana no tratamento de tipos. E, uma vez que Java uma linguagem que possui binding posterior, tambm possvel para uma subclasse sobrescrever mtodos da superclasse, mesmo para uma subclasse carregada em tempo de execuo.

Desenvolvimento Incremental
Java carrega todas as informaes de tipos de dados e assinatura de mtodos a partir do cdigo fonte para sua forma compilada em bytecode. Isso significa que as classes Java podem ser desenvolvidas incrementalmente. Seu prprio cdigo pode ser tambm compilado seguramente com classes de outras fontes que o seu compilador nunca viu. Em outras palavras, voc pode escrever novo cdigo que referencia arquivos de classes binrias sem perder a segurana de tipagem que voc possui a partir do cdigo fonte. Java no sofre do problema de classes bases frgeis. Em linguagens como C++, a implementao de uma classe base pode ser efetivamente congelada porque ela possui muitas classes derivadas; modificando a classe base pode requerer a recompilao de todas as classes derivadas. Isso um problema especialmente difcil para desenvolvedores de bibliotecas de classes. Java evita esse problema localizando dinamicamente os campos dentro das classes. Contanto que as classes mantenham formas vlidas de estruturas originais, elas podem ser evoludas sem impactar negativamente outras classes que so suas derivadas ou fazem uso delas.

Gerenciamento dinmico de memria


Algumas das diferenas mais importantes entre Java e linguagens de mais baixo-nvel como C e C++ referem-se a como Java gerencia memria. Java elimina os uso ad hoc de ponteiros que podem referenciar reas arbitrrias de memria e utiliza coletor de lixo e implementao alto-nvel de arrays linguagem. Essas caractersticas eliminam muitos problemas relacionados a segurana, portabilidade, e otimizao. Coletagem de lixo (Garbage collection), por si s, tem salvado da maior fonte de erros em C ou C++: alocao e desalocao de memria explcita. Alm de fazer manuteno dos objetos em memria, o sistema de execuo Java cuida de todas as referncias para esses objetos. Quando um objeto no est mais em uso, eles so automaticamente removidos da memria. Voc pode, na maior parte dos casos, simplesmente ignorar objetos que voc no usar mais, com a confiana de que o interpretador ir limp-los da memria logo que for possvel.

9 de 15

17/05/2012 10:45

http://www.sirmacstronger.eti.br/java/introdjava.php

Java utiliza um o coletor de lixo sofisticado que roda intermitentemente em segundo plano, o que significa que a maioria da coleta de lixo ser feita em momentos de repouso, entre pausas de entrada e sada, cliques do mouse, ou pressionamentos no teclado. Sistemas avanados de execuo, como os HotSpots, possuem coletores de lixo mais avanados que podem diferenciar no funcionamento para determinados objetos (como por exemplo objetos de uso rpido e objetos de uso longo) otimizando assim a coleta. O runtime Java pode atualmente fazer um ajuste fino de si mesmo automaticamente para a distribuio tima de memria para diferentes tipos de recursos. Dissemos que Java no possui ponteiros. Falando estritamente, essa assertiva verdadeira, mas ela tambm enganosa. O que a linguagem Java fornece uma forma segura de referenciar ponteiros. A referncia um ponteiro fortemente tipado para o objeto. Todos os objetos em Java, com exceo de tipos primitivos numricos, so acessados atravs de referncias. Voc pode usar referncias para criar todos os tipos de estruturas de dados que um programador de linguagem C est acostumado a criar com ponteiros, como listas encadeadas, rvores, e outras. A nica diferena que com referncias voc faz tudo de forma segura. Outra diferena importante entre a referncia e o ponteiro que voc no pode fazer aritmtica de ponteiros com referncias para modificar seus valores; elas s podem apontar para objetos especficos ou elementos de um array. Uma referncia uma estrutura atmica; voc no pode manipular o valor de uma referncia exceto associando-a a um objeto. Referncias so passadas por valor, e voc no referenciar um objeto atravs de mais de um nico nvel de indireo. A proteo das referncias um dos aspectos mais fundamentais da segurana oferecida pela linguagem Java. Isso significa que o cdigo Java deve seguir as regras para funcionar. As referncias em Java s podem apontar para um nico tipo de classe. No h ponteiros para mtodos. Algumas pessoas reclamam dessa falta de funcionalidade, mas voc descobrir que tarefas que precisam de ponteiros para mtodos podem ser realizadas de forma mais limpa usando interfaces e classes adaptadoras. No se pode tambm deixar de mencionar que Java possui uma API sofisticada de Reflection que permite que voc referencie e invoque mtodos individuais. Contudo essa no a forma natural de se realizar as tarefas. Finalmente, no se pode deixar de mencionar que os arrays em Java so na verdade objetos. Eles podem ser alocados dinamicamente e associados como qualquer outro objeto. Arrays devem ter seus tamanhos e tipos definidos, e embora voc no possa define uma subclasse baseada na classe de arrays, eles possuem um relacionamento de herana bem definido baseado em seu tipo base. O fato de possuir arrays como objetos, possibilita, mais uma vez, evitar a perigosa aritmtica de ponteiros.

Tratamento de erros
As razes da linguagem Java esto em dispositivos de rede e sistemas embutidos. Para essas aplicaes, importante possuir um gerenciamento de erros robusto e inteligente. Java possui um mecanismo de tratamento de exceo poderoso, parecido com o das implementaes mais modernas de C++. Excees fornecem uma forma mais natural e elegante de tratar erros. Excees permitem que voc separe o cdigo de tratamento de exceo do cdigo normal, o que faz os cdigos

10 de 15

17/05/2012 10:45

http://www.sirmacstronger.eti.br/java/introdjava.php

das aplicaes mais limpas e legveis. Quando uma exceo ocorre, ela faz com que o fluxo de execuo do programa seja transferido para um bloco de cdigo capturador predefinido. A exceo carrega consigo um objeto que contm as informaes sobre a situao que causou a exceo. O compilador Java requer que um mtodo declare as excees que ele pode gerar ou capture e trate as excees ele mesmo. Isso promove as informaes de erro ao mesmo nvel de importncia dos argumentos e tipos de retorno dos mtodos. Como um programador Java, voc sabe precisamente com que condies excepcionais voc tem que lidar, e voc tem a ajuda do compilador para escrever um cdigo que no as deixa sem tratamento.

Threads
Aplicaes atuais requerem um alto grau de paralelismo. Mesmo uma aplicao muito orientada a um fluxo serializado pode possuir uma complexa interface com usurios a qual requer atividades concorrentes. As mquinas tornam-se mais rpidas, usurios tornam-se mais sensveis ao tempo de espera para tarefas no relacionadas que apreendem o controle do tempo da aplicao. Threads so uma soluo eficiente para o multiprocessamento e distribuio de tarefas para tarefas tanto de aplicaes clientes como de aplicaes servidoras. Java suporta sincronizao baseadas no modelo monitor e condio de ordenao de trava e chaveamento de sistemas para acesso a recursos. A palavra chave synchronized designa mtodos e blocos de cdigo com acesso seguro e serializado a um objeto. H tambm mtodos simples e primitivos para tarefas de espera e sinalizao explcita entre threads de interesse em um mesmo objeto. Java 5.0 introduziu um novo pacote com um alto-nvel de concorrncia. Esse pacote fornece utilitrios poderosos que lidam com padres comuns de programao multithread, tais como thread pools, coordenao de tarefas, e travamento sofisticado. Com a adio do pacote de concorrncia, Java agora prov algumas das funcionalidades mais avanadas relacionadas a threads do que qualquer outra linguagem. Embora alguns desenvolvedores possam nunca ter que escrever cdigo multithread, aprender a programar com threads uma parte importante do domnio da linguagem Java e algo que todos os desenvolvedores deveriam conhecer.

Escalabilidade
No mais baixo nvel, os programas Java consistem de classes. Classes so projetadas para serem componentes modulares e pequenos. Eles podem ser separados fisicamente em diferentes sistemas, obtidos dinamicamente, armazenados em um formato enxuto (at comprimido), e ainda serem armazenados temporariamente em vrios esquemas de distribuio. Sobre classes, Java fornece os pacotes, uma camada de estrutura que agrupa classes dentro de unidades funcionais. Pacotes fornecem uma conveno de nomes para a organizao de classes e uma segunda camada de controle organizacional sobre a visibilidade de variveis e mtodos em aplicaes Java. Com um pacote, uma classe no possui escopo pblico ou protegido, de acesso externo. Os pacotes formam outro escopo que mais prximo do nvel da aplicao.
11 de 15

17/05/2012 10:45

http://www.sirmacstronger.eti.br/java/introdjava.php

Isso resulta na construo de componentes reutilizveis que trabalham juntos em um sistema. Pacotes tambm ajudam no projeto de aplicaes escalonveis que podem crescer sem tornarem-se instveis devido a cdigo fortemente acoplado.

Java e a Web
As caractersticas de segurana no nvel de aplicao de Java permitem desenvolver novos tipos de aplicaes que no eram possveis antes. Um navegador web que utiliza a o sistema de runtime Java pode incorporar Java applets como contedo executvel dentro de seus documentos. Isso significa que pginas web podem conter no apenas informaes textuais estticas, mas tambm aplicaes interativas completas. Ao invs de conter apenas alguns dados para uma planilha, por exemplo, um documento web pode conter uma aplicao de planilha completamente funcional embutida dentro dela que permita ao usurio visualizar e manipular informaes. Alm dos applets, um modelo mais recente de contedo de aplicaes o qual pode ser baixado pela Internet o Java Web Start. A API Web Start permite que seu navegador instale aplicaes localmente, com segurana reforada pelo sistema de runtime Java. Esse sistema pode tambm atualizar automaticamente o software quando ele usado.

Applets
O termo applet usado para significar uma aplicao pequena, subordinada, ou embutida. Por embutida, entenda-se: para ser rodada e usada dentro de um contexto de um sistema maior. Nesse sentido, a maioria dos programas embutida dentro do sistema operacional do computador. Um sistema operacional gerencia suas aplicaes nativas de vrias formas: ele inicializa, pra, pausa, e sincroniza aplicaes; ele fornece recursos padres; e ele as protege umas das outras particionando seus ambientes. Para um navegador web, um applet apenas mais um tipo de objeto a ser mostrado; ele embutido dentro de uma pgina HTML com uma tag especial. Navegadores habilitados com Java podem executar applets diretamente, no contexto de um documento especfico, como mostra a figura 2. Navegadores tambm podem fazer uso dessa caracterstica usando um plugin Java da Sun, que roda Java assim como outros plugins mostram outros tipos de contedo.

12 de 15

17/05/2012 10:45

http://www.sirmacstronger.eti.br/java/introdjava.php

Figura 2. Navegador web mostrando um documento web com applet Um applet Java um programa Java compilado, composto de classes como qualquer outro programa Java. Enquanto um simples applet consiste de apenas uma nica classe, a maioria dos applets maiores consiste de muitas classes. Classes podem ser armazenadas em arquivos separados no servidor, permitindo que elas sejam obtidas conforme necessrio, mas geralmente elas ficam acondicionadas em arquivos containers. Java define um padro de formato de arquivo container chamado JAR o qual um arquivo container ZIP comum. Um applet possui um ciclo de vida dividido em 4 partes. Quando um applet inicialmente carregado pelo navegador web, ele inicializado. O applet ento informado toda vez que ele est sendo mostrado e toda vez que ele no est visvel ao usurio. Finalmente, o applet avisado quando ele no mais necessrio, de forma que ele pode se retirar da memria. Durante esse ciclo de vida, um applet pode ativar-se ou desativar-se, realizar algum trabalho, comunicar-se com outra aplicao, e interagir com o navegador web. Applets so programas autnomos, mas eles esto confinados dentro dos muros do navegador web ou visualizador de applets e tem que jogar dentro das regras impostas. Por exemplo, um applet s pode interagir com o usurio e comunicar-se pela rede apenas com o hospedeiro que o originou. Outros tipos de atividades, tais como acessar arquivos, ou interagir diretamente com aplicaes externas, so tipicamente proibidas pelo gerenciador de seguranaque parte do navegador web ou visualizador applet. Tirando essas restries, no h nenhuma diferena entre um applet Java e uma aplicao Java standalone (desktop).

Novos tipos de mdia


Quando a primeira verso de Java foi liberada, ela rapidamente alcanou uma boa reputao com relao a potencial de multimdia. Naquela poca, Java fornecia funcionalidades para realizar animaes simples e reproduzir udio (o que era muito comparada com contedo esttico de pginas web). As capacidades de multimdia de Java ficaram maiores e melhores. Java atualmente possui som com qualidade de CD, animaes 3D, sincronizao de udio e vdeo,

13 de 15

17/05/2012 10:45

http://www.sirmacstronger.eti.br/java/introdjava.php

sintetizao e reconhecimento de voz, e outros. O Java Media Framework atualmente suporta formatos de udio e vdeo; a API Java Sound (parte das classes core) pode reproduzir sons de um microfone de computador e tocar gravaes MIDI de instrumentos musicais.

Novos modelos de desenvolvimento de software


Por muitos anos, as pessoas usaram ambientes de desenvolvimento integrados (Integrated Development Environments, ou simplesmente IDEs) para criar interfaces com usurios. Alguns desses ambientes permitiam que gerasse aplicaes movendo os componentes pela tela, conectando componentes uns com os outros, e por a vai. Para abreviar, projetar uma parte de uma aplicao tornou-se uma tarefa mais de desenhar do que escrever cdigo (embora essas ferramentas tambm ajudem a criar cdigos de forma mais convencional). Para desenvolvimento de ambientes funcionar bem, voc necessita da capacidade de criar componentes de software reutilizveis. isso que a arquitetura de JavaBeans faz: ela define uma forma de empacotar software como peas reutilizveis. Uma ferramenta de desenvolvimento grfico pode oferecer componentes, adaptar componentes, e conect-los a outros componentes para criar aplicaes. Em teoria, os JavaBeans estendem a idia do desenvolvimento grfico. Os componentes JavaBeans, tambm chamados simplesmente de beans, no so limitados a componentes grficos de interface com o usurio: voc pode ter beans que so inteiramente invisveis e cujo trabalho puramente computacional. Por exemplo, voc pode ter um bean que faz acesso a banco de dados; beans para transporte de dados entre camadas de uma aplicao, como costumam ser utilizados na programao para web no lado do servidor.

Java: uma linguagem de criao de aplicaes genrica


Java foi apresentada ao mundo atravs dos navegadores web e da API Java applet. Contudo, Java mais do que uma ferramenta para criaes multimdia para web. Java uma linguagem de programao poderosa, de propsito geral que tambm segura e independente de arquitetura. Atualmente a linguagem Java pode ser encontrada em vrios campos da criao de software, tais como: criao de aplicaes desktop, criao de aplicaes para dispositivos com recursos limitados como mobiles, aplicaes web do lado do servidor, aplicaes corporativas que podem ou no reunir duas ou mais das reas anteriores.

Bibliografia
van der Linden, Peter. Just Java 2. Sexta Edio. Addison Wesley. California. USA. 2004 Niemeyer, Pratick; Knudsen, Jonathan. Learning Java. Terceira Edio. OReilly. CA. USA. 2005

14 de 15

17/05/2012 10:45

http://www.sirmacstronger.eti.br/java/introdjava.php

Manning, Michelle; Doherty, Donald. Sams Teach Yourself JBuilder 2 and Java 2 in 21 Days. Sams. Indiana. USA. 1998.
[1]

Veja, por exemplo, G. Phipps. Comparing Observed Bug and Productivity for Java and C++. & Experience, Volume 29, 1999 (http://www.spirus.com.au/papersAndTalks

SoftwarePractice /javaVsC++.pdf).

15 de 15

17/05/2012 10:45