You are on page 1of 15

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

php

Java: uma linguagem moderna
O foco das aplicações criadas hoje, qualquer que seja seu público alvo e seu propósito, terá certamente que lidar com máquinas ligadas por uma rede global de recursos computacionais. O aumento da importância das redes coloca novas demandas impelindo ao aparecimento de novos tipos de aplicações. Queremos software que funcionem de forma consistente, em qualquer lugar, em qualquer plataforma. Queremos aplicações dinâmicas que tirem vantagem de um mundo conectado, capaz de acessar fontes de informação distribuídas mesmo que distantes. Queremos softwares verdadeiramente distribuídos que possam ser estendidos e atualizados sem que essas modificações causem interrupções ou degradações de suas funcionalidades. Historicamente, o problema tem sido que as ferramentas para desenvolvimento de aplicações não cumprirem todas as finalidades com sucesso. Os requisitos de velocidade e portabilidade têm sido, na maioria dos casos, mutuamente exclusivos, e a segurança tem sido largamente ignorada ou mal-entendida. No passado, linguagens verdadeiramente portáveis eram limitadas, interpretadas, e lentas. Linguagens rápidas, por outro lado, usualmente forneciam velocidade através de combinações com plataformas específicas, de forma que a portabilidade saía prejudicada. Existem algumas poucas linguagens seguras, mas elas em geral não são portáveis, sofrendo do mesmo problema anterior. Java é uma linguagem moderna que foca todos os três requisitos: portabilidade, velocidade e segurança. Daí porque ela tem sido uma das linguagens dominantes no mundo da programação contemporânea.

Um pouco de história
O ancestral mais próximo da linguagem Java foi o projeto OAK, criada pela Sun Microsystems, cujo objetivo era criar uma linguagem de programação para PDAs e mais a frente para TV interativa. Com o abandono dessas duas tecnologias, na época (anos 1990), a linguagem OAK, cujas características eram: pequena, independente de arquitetura, orientada a objetos e segura; voltaram para a Internet. Além de mudar o foco, a linguagem também mudou de nome, para Java. Java teve uma aceitação muito grande. Antes mesmo da primeira versão oficial ser liberada já havia contratos de licença com a Microsoft, Intel, IBM e muitos outros fabricantes de hardware e software. Contudo, uma série 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 espaço criando versões para várias plataformas e dispositivos e facilitou em muito sua disseminação.

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

1 de 15

17/05/2012 10:45

Linux.http://www. Essa camada de software faz a interface entre o hardware do computador e o sistema operacional e o programa Java. 2 de 15 17/05/2012 10:45 . Windows 98. XP. isto é. Quando você instala uma browser com capacidade de rodar Java no seu computador. BSD ou qualquer outra variedade de Unix. NT. o qual permite que seu browser execute applets Java e que seu sistema execute programas desktop (standalones) Java. são geralmente mais lentas do que as aplicações compiladas. em celulares. O time de desenvolvimento da linguagem Java criou uma camada de software específico para cada plataforma chamado Java Virtual Machine –JVM (Máquina Virtual Java). processadores embarcados. em sistemas operacionais de mainframes IBM. A portabilidade Java As linguagens de programação tradicionais compiladas são transformadas em código binário em nível de máquina. por exemplo. etc.sirmacstronger. linguagens tradicionais interpretadas são neutras em termos de linguagem de máquina e podem ser executadas sem recompilação sobre as várias plataformas. Por outro lado. Java incorporou os melhor dos dois mundos. A desvantagem é que um programa escrito em uma linguagem tradicional deve ser recompilado para código binário para cada plataforma de hardware ou sistema operacional antes que possa ser executado na máquina. A figura 1 mostra o significado da portabilidade Java: Figura 1. uma cópia de um interpretador Java também é instalado. PDAs. A vantagem desse processo é que um código binário compilado roda mais rápido uma vez que ele está rodando na linguagem nativa da máquina.eti.br/java/introdjava. Contudo. pois devem ser interpretadas em tempo de execução para a linguagem de máquina nativa do computador.php qualquer sistema e rodar o arquivo binário executável no mesmo sistema ou em qualquer outro sistema – seja ele um Machintosh. no Solaris. código específico para a máquina ou plataforma para a qual está sendo compilada. smart cards (cartões de crédito com microprocessador e memória).

Os programas criados em Java são compilados para uma de código interpretável chamada Java bytecode. A unidade fundamental de um programa em Java é uma classe. Eles são implementados em uma linguagem compilada nativamente na plataforma hospedeira e fornecem acesso de baixo-nível a recursos como redes. classes em Java são componentes de aplicação que possuem dados e código executável.sirmacstronger. é escrita na própria linguagem Java. porque eles enxergam a Java VM e não a máquina real com o sistema operacional real instalado. Elas podem ser mantidas em arquivos únicos ou reunidas em arquivos compactados ou ainda localizadas em um servidor de rede. Java também foi projetada delicadamente para que as implementações de software do sistema de runtime possa otimizar o desempenho das aplicações transformando o bytecode para código de máquina nativo em tempo de execução e por demanda.php A máquina virtual Java Uma máquina virtual é uma implementação de software que emula o funcionamento do hardware de um computador em conjunto com determinado sistema operacional. Os bytecodes são um conjunto de instruções que são similares a código de máquina. Esse processo é chamado Just-In-Time (JIT). para os applets.eti. A Java VM apresenta a mesma interface para qualquer applet que tente executar sobre o sistema. contudo. Classes são alocadas e carregadas dinamicamente em tempo de execução quando são necessárias para uma aplicação. a linguagem Java possui um grande número de classes fundamentais contendo métodos dependentes de arquitetura. saída. Há apenas uma única penalidade intrínseca que o código Java sofre em tempo de execução pelo bem da segurança e projeto da máquina virtual. A Java VM fornece um sistema operacional com entrada. mas não específicos de nenhum processador. todas as máquinas são iguais. sistemas de janelas. Estão inclusos: ferramentas Java como o compilador Java. componentes de web browsers. mas Java não é uma linguagem interpretada como as tradicionais. o código Java pode executar tão rápido quanto código nativo e ainda mantém a portabilidade e segurança. as quais são também escritas em Java e disponibilizadas para todas as plataformas. Além de compilar o código para uma versão portável (bytecode).br/java/introdjava. Com isso.http://www. Também convém lembrar que essas otimizações pode ser feitas em 3 de 15 17/05/2012 10:45 . e controle de threads. e sistemas de arquivos. Os termos interpretador Java (Java Interpreter) e Java Runtime são nomes alternativos para Java VM. Tudo o mais pode ser otimizado para funcionar como se fosse código nativo compilado. Esses métodos nativos servem como a ligação entre a Java VM e o mundo real. Eles são interpretados pela Java VM. Além do sistema de plataforma específica (Java VM). Classes compiladas em Java são distribuídas em bytecode. entre outras capacidades. Dessa forma. e bibliotecas de GUI. Historicamente. Essa forma especial de código pode ser executada em qualquer plataforma que possua a Java VM instalada. como já foi dito. Esse é um ponto que em geral é mal-entendido entre aqueles que querem comparar desempenho entre linguagens. a linguagem Java inclui mais informações estruturais do que muitas outras linguagens. fornecendo mais possibilidades para otimizações. Indo além. Sendo uma linguagem orientada a objetos. linguagens interpretadas são consideradas lentas. Uma grande porção do Java.

mas seu comportamento determina o desempenho do programa como um todo. Uma vez que ele reconhece quais são as partes do código cruciais para o desempenho. Já deve ter ouvido falar muito da semelhança entre Java e C ou C++. levando-se em conta as características e o comportamento de cada aplicação. Quando você olha um código Java pela primeira vez. a tecnologia de compilação da Sun. mas que carrega anos de aprendizado e experiências com outras linguagens em seu conjunto de características.0 ela resolveu parcialmente o problema através do uso de classes compartilhadas. Isso não costuma afetar aplicações de servidor com longos ciclos de vida. mas com uma diferença: ele mede (perfila) o código conforme este é executado para detectar que partes estão sendo executadas repetidamente. O problema com a compilação JIT tradicional é que a otimização toma tempo. Se você observar no que um programa leva tempo de fato. vai descobrir que quase todo tempo. Esse pedaço de código que é executado continuamente pode ser apenas uma pequena fração do programa total.br/java/introdjava.sirmacstronger. Para entender o papel da linguagem Java frente às outras linguagens podemos utilizar três pilares universais de suporte de para qualquer linguagem de programação atual: portabilidade. e na versão Java 5. Para resolver isso. chamada HotSpot. usa um truque chamado compilação adaptativa. velocidade e segurança. Java não é uma descente direta de C ou ainda uma evolução sobre o C++. Isso reduz significantemente tanto o tempo de início como o tempo de espera de executar muitas aplicações Java ao mesmo tempo. Java e outras linguagens Java é uma linguagem relativamente nova. Assim um compilador JIT pode produzir resultados decentes. O mecanismo de HotSpot inicia como um interpretador de bytecode Java normalmente. Por isso. A tecnologia para realizar isso é complexa.eti. Se você comparar as características das linguagens. um código Java pode rodar mais rápido do que o equivalente em C/C++ em alguns casos.http://www.php tempo de execução. mas a idéia é simples: otimize as partes do programa que precisam ser rápidas e não se preocupe com o resto. apenas para leitura que podem ser armazenadas persistentemente em de uma forma otimizada. Mas é só até aí que vai a semelhança. mas pode sofrer uma latência significa quando a aplicação inicia. você vê a sintaxe se assemelha muito ao C ou C++. ele está executando uma parte relativamente pequena do código repetidas vezes. mas é um problema sério para um software clienteservidor e aplicações que são executadas em dispositivos com capacidades limitadas (mobiles). o HotSpot transforma essas partes em código nativo de máquina mais otimizado. A compilação adaptativa também permite ao Java runtime tirar vantagem de novos tipos de otimizações que simplesmente não podem ser feitos em uma linguagem compilada estaticamente. 4 de 15 17/05/2012 10:45 . Uma questão natural que se impõem é: porque jogar fora essa informação sobre o comportamento do programa cada vez que a aplicação é executada? A Sun se perguntou isso também. Mas para falar a verdade essa semelhança só existe em um nível superficial.

tais como Perl. os pacotes (packages) de Java podem ser adicionados ao núcleo principal de componentes da linguagem a fim de aumentar o seu vocabulário. ela nunca foi concebida para esse fim. C sacrifica a funcionalidade pela portabilidade. com alto desempenho e um grau aceitável de portabilidade. Python. De fato. mas o faz de uma forma muito diferente. JavaScript é uma linguagem de scripting baseada em objetos. de você que você vê muitas construções de linguagens. Atualmente o padrão de convergência dos vários dialetos da linguagem JavaScript chama-se EcmaScript. mas as semelhantes terminam aí. A maioria delas (com a exceção de Python e das últimas versões de Perl) não é orientada a objetos. originalmente desenvolvida pela Netscape para o seu navegador. Não há razão por uma linguagem de scripting não seja adequada para aplicações de rede seguras.http://www. Elas também possuem um 5 de 15 17/05/2012 10:45 . Algumas linguagens de scripting como Perl também fornecem ferramentas poderosas para tarefas de processamento de texto que a maioria das linguagens de propósito geral consideram difíceis de tratar. A implementação da linguagem Java está bem distante das características nativas da linguagem C. se Java é rápida o suficiente para um jogo first-person-shooter. A guisa de esclarecimento. O problema com as linguagens de scripting é que elas são muito rigorosas com estruturas de controles e tipos de dados. Mas a maioria das linguagens de scripting não é projetada para programação de larga-escala.sirmacstronger. a engine de código aberto do jogo Quake2 foi transportada para Java. Por outro lado. velocidade e portabilidade. inicialmente sacrificava a velocidade pela portabilidade. Assim como C é extensível com bibliotecas. ainda que em nível de código fonte. as similaridades de escrita dessas linguagens são dignas de nota. JavaScript recebeu esse nome a partir da intenção de ser integrada a applets Java e também por possuir algumas similaridades na sintaxe. O atrativo das linguagens de scripting é que elas são dinâmicas. Java pegou emprestado muito da sintaxe de C e C++. Embora existam aplicações de JavaScript que rodam fora de um navegador. Java também tenta balancear funcionalidade. Linguagens de scripting também são altamente portáveis. ela certamente é rápida o suficiente para aplicações corporativas. A linguagem C é bem sucedida porque fornece um bom ambiente de programação com características embutidas.br/java/introdjava. Java também segue a linha de C no sentido de que uma linguagem deve ser compacta. ela deve ser pequena e regular o suficiente para que um programador possa dominá-la sem muito esforço. Ora.eti. Java era mais lenta do que linguagens compiladas estaticamente. ou seja. Nos primeiros tempos antes da compilação adaptativa e do JIT. em 2004. Linguagens de scripting. Ela serve como uma linguagem amalgama e “auto-contida” para prover dinamismo em aplicações baseadas em HTML interativas. e isso foi usado como um constante argumento por aqueles que eram contra o uso de Java. hoje o desempenho da linguagem Java é comparável ao das linguagens C ou C++. e por uma boa razão. Além do que. elas são ferramentas poderosas para desenvolvimento de rápido de projetos. e Ruby. enquanto que Java. incluindo uma abundância de chaves e ponto-e-vírgulas.php verá que Java tem de fato muito mais em comum com linguagens como Smalltalk e Lisp. são muito populares. Contudo. Java cuida das questões de segurança enquanto que a linguagem C não. fazendo esse argumento cair por terra.

permitem desenvolver aplicações agilmente e modificá-las facilmente. combinados com simplicidade da linguagem Java. Java possui capacidade de escalonamento e vantagens de engenharia de software como poucas linguagens estáticas. além de possuir benefícios de uma linguagem de mais baixo nível. Um razão para isso é que essas linguagens nunca desenvolveram um padrão para adaptação de portabilidade com os serviços de sistemas operacionais.http://www. Java também possui uma enorme gama de classes para tarefas como criação de interfaces com o usuário e comunicações em rede. a natureza de alto-nível. Essas características as fazem inadequadas para a construção de aplicações grandes e modulares.eti. no sentido de maturidade. Mas a questão fundamental é inegável: linguagens de scripting são concebidas para desenvolvimento menos rigoroso. Características da Linguagem Java Java apresenta uma série de características que a faz uma linguagem fascinante de 6 de 15 17/05/2012 10:45 . Smaltalk é uma linguagem madura. criando um verificador de bytecode que garante a corretude do código compilado. como iteração de coleções no estilo “foreach”.php sistemas de tipagem muito simplificado e geralmente não fornecem tratamento sofisticado para escopo de variáveis e funções.4 possui uma API poderosa para expressões regulares que compete com Perl para trabalho com textos e Java 5. e os projetistas de Java aprenderam muito com suas características para a criação da linguagem Java. pelo menos por enquanto. no que se refere a estruturas e tipagem. Java oferece algumas das vantagens essenciais de uma linguagem de scripting (ela é altamente dinâmica). completamente interpretada dessas linguagens faz delas linguagens lentas. Java é similar em projeto a linguagens como Smaltalk e Lisp. Smaltalk é compilada para um formato de bytecode interpretado e que pode ser dinamicamente compilado para código nativo. demonstraram que o [1] desenvolvimento em Java é mais rápido do que em C ou C++ . Isso forma uma estrutura segura na qual se pode criar frameworks de alto-nível (e mesmo outras linguagens). essas linguagens são normalmente usadas como veículos de pesquisa ao invés de desenvolvimento de sistemas em larga-escala. quando necessário. O verificador de bytecode Java também ajuda com questões de segurança.0 introduziu novas características de linguagem que facilitam as codificação. assim como Java. uma coisa que a linguagem Smaltalk nunca tratou. e geralmente não são adequadas para projetos grandes e complexos. Esse verificador dá à linguagem Java uma vantagem de desempenho sobre a linguagem Smaltalk porque o código Java necessita de poucas verificações em tempo de execução. estritamente baseados nas características das linguagens. Mas Java melhorou seu processo. Mas juntamente com essas funcionalidades. Contudo. Velocidade é outro problema com as linguagens de scripting. como alternativas a linguagens de programação de sistemas. Aqueles que advogam em favor das linguagens de scripting têm razão quando dizem que elas estão crescendo. Como foi dito anteriormente. como a standard library de C ou as classes core de Java. O desenvolvimento incremental com componentes orientados a objetos. variáveis de lista de argumentos. Java 1. encaixotamento de estruturas primitivas de dados e importação estática de métodos.br/java/introdjava.sirmacstronger. Estudos sobre desenvolvimento. contudo.

então nesse aspecto. Interfaces em Java eliminam a necessidade de herança múltipla de classes e seus problemas associados. a regra é a simplicidade. Uma interface. 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 implementação de objeto específico. Java também utiliza diferentes abordagens para algumas características estruturais que foram problemas em outras linguagens. mas as características e otimizações no tempo de execução sofisticado de Java. fornecem o fundamento para políticas de segurança de alto-nível que pode permitir ou desabilitar vários tipos de atividades em nível de aplicação. foi possível evitar características que provaram ser confusas ou controversas em outras linguagens. Java não tem preprocessador de código fonte. declarações #define. elas não são necessárias em Java. Por Java ter começado com uma proposta limpa. em uma visão geral. Java suporta apenas herança simples de hierarquia de classes (cada classe pode ter apenas um classe superior) mas permite herança múltipla de interfaces. Java não permite a sobrecarga de operadores (a qual em algumas linguagens permitem que os programadores redefinam o significado de símbolos básicos como “+” e “-“).br/java/introdjava. O compilador pode também trabalhar com classes Java compiladas diretamente porque todos os tipos de informação são preservados. Java foi projetada para ser segura o quanto possível contra os mais simples erros que nós possamos gerar assim como aqueles que nós herdamos de sistemas legados. fornecer ferramentas que demonstraram sua utilidade. Java fornece uma estrutura de pacote bem definida para organização de arquivos de classes. O objetivo com Java foi manter a linguagem simples.sirmacstronger.http://www. Por exemplo. Além disso. Essas características. Com Java. Por exemplo. como em C/C++. não há macros. como uma classe abstrata em C++.eti. Compilação condicional também é geralmente utilizada para depuração. especifica o comportamento de um objeto sem definir sua implementação. Tudo isso significa que o código Java requer menos contexto para ser lido. você pode algumas vezes achar mais rápido olhar para o código Java do que para a documentação da classe. De fato. como assertions resolvem o problema de forma mais elegante. O sistema de pacotes permite que o compilador trate algumas das funcionalidades do utilitário tradicional make (uma ferramenta para criação de executáveis a partir de códigos fontes). Mas o que exatamente significa “segura”? Segura de que ou de quem? As características de segurança que atrai a maior atenção sobre Java são aquelas que permitem a criação de novos tipos de software dinamicamente portáveis.php aprender e uma ferramenta poderosa a ser ter em mãos para criação de aplicações. e deixar o desenvolver criar funcionalidades mais complicadas no topo da linguagem quando isso for necessário. ou compilação condicional de código fonte. Vejamos algumas dessas características: Segurança de Projeto Você certamente já ouviu falar sobre Java ser projetada para ser uma linguagem segura. 7 de 15 17/05/2012 10:45 . Java fornece muitas camadas de proteção contra código perigosamente falho assim como elementos nocivos como vírus e cavalos de tróia. não há necessidade para arquivos de cabeçalhos (headers) intrusos. Essas construções existem em outras linguagens primeiramente para dar suporte a dependências a plataformas específicas. por isso.

Mas linguagens de tipagem estática são inflexíveis. e late binding. de forma que pode ser compilado para ser rápido e pequeno. A última versão de Java adicionou generics. e difíceis de depurar. são chamados late binding porque elas localizam as definições dos métodos dinamicamente em tempo de execução. Em linguagens estáticas como C ou C++. o compilador poderia não permitir que você armazenasse um valor ponto-flutuante em uma variável inteira. uma linguagem dinâmica como Smalktalk ou Lisp possui um sistema de tempo de execução que gerencia os tipos de objetos e realiza a checagem de tipo necessária enquanto uma aplicação está sendo executada. O binding feito antes é importante por razões de desempenho. Por exemplo.eti. Outra questão a ser estudada em uma linguagem é a forma como ela conecta chamada de métodos às definições desses mesmos métodos. Isso significa que o compilador Java pode realizar o mesmo tipo de checagem de tipo estática e análise de uso que C++. ela é uma linguagem de tipagem estática. Esses tipos de linguagens abrem a possibilidade para comportamentos mais complexos e são em muitos aspectos mais poderosas. as linguagens são categorizadas como static ou dynamic. Java fornece alguns dos benefícios de C++ e Smaltalk. Contudo. O compilador se beneficia disso por haver informação suficiente para capturar muitos tipos de erros antes que o código seja executado. as definições dos métodos são normalmente conectadas em tempo de compilação. seu uso comum e efeito sobre a linguagem fará o código mais fácil de dar manutenção e legível.sirmacstronger. e não permitem que uma aplicação importe de forma segura novos tipos de dados enquanto está rodando.php Apena depois de muitos anos de debate que.http://www.0. Como 8 de 15 17/05/2012 10:45 . Elas não suportam construções de alto-nível como as listas e coleções de forma natural como as linguagens com checagem de tipo dinâmica. Em contraste. na versão Java 5. Todo objeto em Java possui um tipo bem definido que é conhecido em tempo de compilação. Fornecer essa característica sem adicionar grandes complicações à linguagem foi um grande feito. uma aplicação pode rodar sem o retardo de necessário para procurar pelos métodos em tempo de execução. a menos que o programador especifique em contrário. os tipos de dados são “gravados em pedra” quando o código fonte é compilado. elas são geralmente mais lentas. Enquanto generics dificilmente são considerados simples. Geralmente. Tipagem segura e ligação de métodos Um atributo de uma linguagem é a forma como é feita a checagem de tipo que ela usa. os quais são uma abstração que permite classes Java a trabalharem com diferentes tipos em um modo seguro que o compilador possa entender. Em linguagens estritamente de tipagem estática como C ou C++. Linguagens como Smaltalk.br/java/introdjava. Ele também é necessário em uma linguagem orientada a objetos onde novos tipos pode ser carregados dinamicamente e apenas o sistemas de tempo de execução pode determinar que método executar. algumas novas características marcantes foram adicionadas a linguagem. Mas o binding atrasado é mais flexível. menos seguras. por outro lado. referindo-se à quantidade de informação sobre as variáveis que é conhecida em tempo de compilação versus o que é conhecido enquanto a aplicação está rodando. O código então não requer checagem em tempo de execução.

modificando a classe base pode requerer a recompilação de todas as classes derivadas.php resultado. Coletagem de lixo (Garbage collection). também é possível para uma subclasse sobrescrever métodos da superclasse.http://www. Gerenciamento dinâmico de memória Algumas das diferenças mais importantes entre Java e linguagens de mais baixo-nível como C e C++ referem-se a como Java gerencia memória.eti. Diferentemente de C ou C++. na maior parte dos casos. Contudo. com a confiança de que o interpretador irá limpá-los da memória logo que for possível. tem salvado da maior fonte de erros em C ou C++: alocação e desalocação de memória explícita. 9 de 15 17/05/2012 10:45 . Java elimina os uso ad hoc de ponteiros que podem referenciar áreas arbitrárias de memória e utiliza coletor de lixo e implementação alto-nível de arrays à linguagem. a implementação de uma classe base pode ser efetivamente congelada porque ela possui muitas classes derivadas. e otimização. Em linguagens como C++. Seu próprio código pode ser também compilado seguramente com classes de outras fontes que o seu compilador nunca viu. Isso significa que as classes Java podem ser desenvolvidas incrementalmente. a conversão de um tipo de objeto em outro é checada pelo sistema de tempo de execução. Java também é completamente tipada em tempo de execução. Isso significa que você pode inspecionar um objeto em tempo de execução para determinar o que ele é. o sistema de execução Java cuida de todas as referências para esses objetos. Java evita esse problema localizando dinamicamente os campos dentro das classes. eles são automaticamente removidos da memória. Contanto que as classes mantenham formas válidas de estruturas originais. O compilador Java vai ainda além e proíbe você de utilizar variáveis não inicializadas e criação de declarações inalcançáveis. simplesmente ignorar objetos que você não usará mais. e é possível utilizar o uso de novos tipos de objetos carregados dinamicamente com maior nível de segurança no tratamento de tipos. Isso é um problema especialmente difícil para desenvolvedores de bibliotecas de classes. por si só. portabilidade. E. Desenvolvimento Incremental Java carrega todas as informações de tipos de dados e assinatura de métodos a partir do código fonte para sua forma compilada em bytecode.sirmacstronger. Além de fazer manutenção dos objetos em memória. Quando um objeto não está mais em uso. O sistema de tempo de execução Java mantém controle de todos os objetos e possibilita a determinação dos tipos e relacionamentos durante a execução. você pode escrever novo código que referencia arquivos de classes binárias sem perder a segurança de tipagem que você possui a partir do código fonte. Java não sofre do problema de “classes bases frágeis”. mesmo para uma subclasse carregada em tempo de execução.br/java/introdjava. você não pode associar um objeto ao tipo errado de variável ou chamar um método inexistente de um objeto. Você pode. Em outras palavras. elas podem ser evoluídas sem impactar negativamente outras classes que são suas derivadas ou fazem uso delas. Essas características eliminam muitos problemas relacionados a segurança. uma vez que Java é uma linguagem que possui binding posterior.

sirmacstronger. você não pode manipular o valor de uma referência exceto associando-a a um objeto. não se pode deixar de mencionar que os arrays em Java são na verdade objetos.eti. e outras. Arrays devem ter seus tamanhos e tipos definidos. O que a linguagem Java fornece é uma forma segura de referenciar ponteiros. como listas encadeadas. Finalmente. Para essas aplicações. Não há ponteiros para métodos. Java possui um mecanismo de tratamento de exceção poderoso. é importante possuir um gerenciamento de erros robusto e inteligente. Falando estritamente. ou pressionamentos no teclado. Sistemas avançados de execução. mas ela também é enganosa.php Java utiliza um o coletor de lixo sofisticado que roda intermitentemente em segundo plano. eles possuem um relacionamento de herança bem definido baseado em seu tipo base.http://www. Uma referência é uma estrutura atômica.br/java/introdjava. As referências em Java só podem apontar para um único tipo de classe. Eles podem ser alocados dinamicamente e associados como qualquer outro objeto. O fato de possuir arrays como objetos. e embora você não possa define uma subclasse baseada na classe de arrays. Isso significa que o código Java deve seguir as regras para funcionar. A proteção das referências é um dos aspectos mais fundamentais da segurança oferecida pela linguagem Java. Exceções fornecem uma forma mais natural e elegante de tratar erros. Outra diferença importante entre a referência e o ponteiro é que você não pode fazer aritmética de ponteiros com referências para modificar seus valores. possuem coletores de lixo mais avançados que podem diferenciar no funcionamento para determinados objetos (como por exemplo objetos de uso rápido e objetos de uso longo) otimizando assim a coleta. Dissemos que Java não possui ponteiros. essa assertiva é verdadeira. entre pausas de entrada e saída. A única diferença é que com referências você faz tudo de forma segura. cliques do mouse. Todos os objetos em Java. Tratamento de erros As raízes da linguagem Java estão em dispositivos de rede e sistemas embutidos. Você pode usar referências para criar todos os tipos de estruturas de dados que um programador de linguagem C está acostumado a criar com ponteiros. parecido com o das implementações mais modernas de C++. com exceção de tipos primitivos numéricos. mais uma vez. Não se pode também deixar de mencionar que Java possui uma API sofisticada de Reflection que permite que você referencie e invoque métodos individuais. como os HotSpots. são acessados através de referências. e você não referenciar um objeto através de mais de um único nível de indireção. o que significa que a maioria da coleta de lixo será feita em momentos de repouso. evitar a perigosa aritmética de ponteiros. Contudo essa não é a forma natural de se realizar as tarefas. o que faz os códigos 10 de 15 17/05/2012 10:45 . possibilita. Exceções permitem que você separe o código de tratamento de exceção do código normal. elas só podem apontar para objetos específicos ou elementos de um array. Algumas pessoas reclamam dessa falta de funcionalidade. Referências são passadas por valor. mas você descobrirá que tarefas que precisam de ponteiros para métodos podem ser realizadas de forma mais limpa usando interfaces e classes adaptadoras. A referência é um ponteiro fortemente tipado para o objeto. O runtime Java pode atualmente fazer um ajuste fino de si mesmo automaticamente para a distribuição ótima de memória para diferentes tipos de recursos. árvores.

você sabe precisamente com que condições excepcionais você tem que lidar. Escalabilidade No mais baixo nível. coordenação de tarefas.eti. armazenados em um formato enxuto (até comprimido). Sobre classes. Esse pacote fornece utilitários poderosos que lidam com padrões comuns de programação multithread. Threads Aplicações atuais requerem um alto grau de paralelismo. uma classe não possui escopo público ou protegido. O compilador Java requer que um método declare as exceções que ele pode gerar ou capture e trate as exceções ele mesmo. Embora alguns desenvolvedores possam nunca ter que escrever código multithread. e você tem a ajuda do compilador para escrever um código que não as deixa sem tratamento. Mesmo uma aplicação muito orientada a um fluxo serializado pode possuir uma complexa interface com usuários a qual requer atividades concorrentes.sirmacstronger. Classes são projetadas para serem componentes modulares e pequenos. e travamento sofisticado. Pacotes fornecem uma convenção de nomes para a organização de classes e uma segunda camada de controle organizacional sobre a visibilidade de variáveis e métodos em aplicações Java. uma camada de estrutura que agrupa classes dentro de unidades funcionais. os programas Java consistem de classes.br/java/introdjava.http://www. Quando uma exceção ocorre. Com um pacote.0 introduziu um novo pacote com um alto-nível de concorrência.php das aplicações mais limpas e legíveis. Isso promove as informações de erro ao mesmo nível de importância dos argumentos e tipos de retorno dos métodos. aprender a programar com threads é uma parte importante do domínio da linguagem Java e algo que todos os desenvolvedores deveriam conhecer. Threads são uma solução eficiente para o multiprocessamento e distribuição de tarefas para tarefas tanto de aplicações clientes como de aplicações servidoras. usuários tornam-se mais sensíveis ao tempo de espera para tarefas não relacionadas que apreendem o controle do tempo da aplicação. As máquinas tornam-se mais rápidas. Eles podem ser separados fisicamente em diferentes sistemas. A palavra chave synchronized designa métodos e blocos de código com acesso seguro e serializado a um objeto. tais como thread pools. ela faz com que o fluxo de execução do programa seja transferido para um bloco de código “capturador” predefinido. Java fornece os pacotes. de acesso externo. Há também métodos simples e primitivos para tarefas de espera e sinalização explícita entre threads de interesse em um mesmo objeto. 11 de 15 17/05/2012 10:45 . Java 5. Java agora provê algumas das funcionalidades mais avançadas relacionadas a threads do que qualquer outra linguagem. e ainda serem armazenados temporariamente em vários esquemas de distribuição. Com a adição do pacote de concorrência. Os pacotes formam outro escopo que é mais próximo do nível da aplicação. obtidos dinamicamente. A exceção carrega consigo um objeto que contém as informações sobre a situação que causou a exceção. Como um programador Java. Java suporta sincronização baseadas no modelo monitor e condição de ordenação de trava e chaveamento de sistemas para acesso a recursos.

ele é embutido dentro de uma página HTML com uma tag especial. por exemplo.eti. com segurança reforçada pelo sistema de runtime Java. um applet é apenas mais um tipo de objeto a ser mostrado. pausa. Para um navegador web. Além dos applets. Um navegador web que utiliza a o sistema de runtime Java pode incorporar Java applets como conteúdo executável dentro de seus documentos. um modelo mais recente de conteúdo de aplicações o qual pode ser baixado pela Internet é o Java Web Start.sirmacstronger.br/java/introdjava. Nesse sentido. Applets O termo “applet” é usado para significar uma aplicação pequena. no contexto de um documento específico. ele fornece recursos padrões. que roda Java assim como outros plugins mostram outros tipos de conteúdo. Um sistema operacional gerencia suas aplicações nativas de várias formas: ele inicializa. Isso significa que páginas web podem conter não apenas informações textuais estáticas. Esse sistema pode também atualizar automaticamente o software quando ele é usado. pára. subordinada. ou embutida. entenda-se: para ser rodada e usada dentro de um contexto de um sistema maior. Por “embutida”. A API Web Start permite que seu navegador instale aplicações localmente. Ao invés de conter apenas alguns dados para uma planilha. Java e a Web As características de segurança no nível de aplicação de Java permitem desenvolver novos tipos de aplicações que não eram possíveis antes. Pacotes também ajudam no projeto de aplicações escalonáveis que podem crescer sem tornarem-se instáveis devido a código fortemente acoplado. 12 de 15 17/05/2012 10:45 . mas também aplicações interativas completas. como mostra a figura 2. Navegadores também podem fazer uso dessa característica usando um plugin Java da Sun. a maioria dos programas é embutida dentro do sistema operacional do computador.http://www. Navegadores habilitados com Java podem executar applets diretamente.php Isso resulta na construção de componentes reutilizáveis que trabalham juntos em um sistema. e ele as protege umas das outras particionando seus ambientes. um documento web pode conter uma aplicação de planilha completamente funcional embutida dentro dela que permita ao usuário visualizar e manipular informações. e sincroniza aplicações.

13 de 15 17/05/2012 10:45 . não há nenhuma diferença entre um applet Java e uma aplicação Java standalone (desktop). a maioria dos applets maiores consiste de muitas classes. Quando um applet é inicialmente carregado pelo navegador web. são tipicamente proibidas pelo gerenciador de segurançaque é parte do navegador web ou visualizador applet. Por exemplo. o applet é avisado quando ele não é mais necessário. Java fornecia funcionalidades para realizar animações simples e reproduzir áudio (o que era muito comparada com conteúdo estático de páginas web). Java define um padrão de formato de arquivo container chamado JAR o qual é um arquivo container ZIP comum. Enquanto um simples applet consiste de apenas uma única classe. ele é inicializado. O applet é então informado toda vez que ele está sendo mostrado e toda vez que ele não está visível ao usuário.sirmacstronger. sincronização de áudio e vídeo. Tirando essas restrições. Finalmente. Durante esse ciclo de vida. de forma que ele pode se retirar da memória. Java atualmente possui som com qualidade de CD. Applets são programas autônomos. permitindo que elas sejam obtidas conforme necessário.eti. realizar algum trabalho. e interagir com o navegador web.php Figura 2. ela rapidamente alcançou uma boa reputação com relação a potencial de multimídia. um applet só pode interagir com o usuário e comunicar-se pela rede apenas com o hospedeiro que o originou.br/java/introdjava. mas eles estão confinados dentro dos muros do navegador web ou visualizador de applets e tem que jogar dentro das regras impostas. Classes podem ser armazenadas em arquivos separados no servidor. Naquela época. animações 3D. mas geralmente elas ficam acondicionadas em arquivos containers. composto de classes como qualquer outro programa Java. As capacidades de multimídia de Java ficaram maiores e melhores.http://www. Um applet possui um ciclo de vida dividido em 4 partes. Outros tipos de atividades. um applet pode ativar-se ou desativar-se. ou interagir diretamente com aplicações externas. comunicar-se com outra aplicação. Navegador web mostrando um documento web com applet Um applet Java é um programa Java compilado. Novos tipos de mídia Quando a primeira versão de Java foi liberada. tais como acessar arquivos.

É isso que a arquitetura de JavaBeans faz: ela define uma forma de empacotar software como peças reutilizáveis. Os componentes JavaBeans. você necessita da capacidade de criar componentes de software reutilizáveis. você pode ter um bean que faz acesso a banco de dados. e conectá-los a outros componentes para criar aplicações. criação de aplicações para dispositivos com recursos limitados como mobiles. de propósito geral que também é segura e independente de arquitetura. a API Java Sound (parte das classes core) pode reproduzir sons de um microfone de computador e tocar gravações MIDI de instrumentos musicais.http://www. Bibliografia van der Linden. Java é mais do que uma ferramenta para criações multimídia para web. não são limitados a componentes gráficos de interface com o usuário: você pode ter beans que são inteiramente invisíveis e cujo trabalho é puramente computacional. USA. Pratick. Java: uma linguagem de criação de aplicações genérica Java foi apresentada ao mundo através dos navegadores web e da API Java applet.eti. O’Reilly. California.php sintetização e reconhecimento de voz. tais como: criação de aplicações desktop. Addison Wesley. como costumam ser utilizados na programação para web no lado do servidor. Just Java 2. Alguns desses ambientes permitiam que gerasse aplicações movendo os componentes pela tela. também chamados simplesmente de beans. 2005 14 de 15 17/05/2012 10:45 . Jonathan. e por aí vai.sirmacstronger. Terceira Edição. Em teoria. Contudo. O Java Media Framework atualmente suporta formatos de áudio e vídeo. USA. e outros. Por exemplo. beans para transporte de dados entre camadas de uma aplicação. CA. Sexta Edição. Knudsen. Novos modelos de desenvolvimento de software Por muitos anos. Uma ferramenta de desenvolvimento gráfico pode oferecer componentes. Para abreviar. Atualmente a linguagem Java pode ser encontrada em vários campos da criação de software. Learning Java. Para desenvolvimento de ambientes funcionar bem. aplicações web do lado do servidor. Peter. os JavaBeans estendem a idéia do desenvolvimento gráfico. 2004 Niemeyer. conectando componentes uns com os outros. as pessoas usaram ambientes de desenvolvimento integrados (Integrated Development Environments. ou simplesmente IDEs) para criar interfaces com usuários. adaptar componentes.br/java/introdjava. aplicações corporativas que podem ou não reunir duas ou mais das áreas anteriores. Java é uma linguagem de programação poderosa. projetar uma parte de uma aplicação tornou-se uma tarefa mais de desenhar do que escrever código (embora essas ferramentas também ajudem a criar códigos de forma mais convencional).

G. Donald. Phipps. Michelle.php Manning. “Comparing Observed Bug and Productivity for Java and C++”.pdf). [1] Veja. Sams. 1998. & Experience.au/papersAndTalks SoftwarePractice /javaVsC++. Sams Teach Yourself JBuilder 2 and Java 2 in 21 Days. Indiana. 1999 (http://www. Volume 29. 15 de 15 17/05/2012 10:45 .sirmacstronger.spirus.com. USA.br/java/introdjava.http://www. por exemplo.eti. Doherty.