1. Introdução ao Java

O que faz de um novo produto um produto revolucionário? Não pode ser apenas mais rápido, mais pequeno e mais barato. Tem que mudar o modo como fazemos as coisas, tem que resolver o problema fundamental de um modo simples.

É precisamente isto que se passa com a linguagem Java, consegue com uma arquitectura neutral, ser segura, interactiva, robusta e adaptada a trabalhar com sistemas distribuídos no sentido mais lato da palavra.

Existem três elementos chave que fazem do Java uma linguagem diferente de qualquer outra. O Java é uma poderosa linguagem de programação que usa um desenho de orientação a objectos simples num ambiente robusto. O Java tem uma enorme quantidade de poderosas classes que dão ao programador abstracções transparentes para funções de entrada/saída, rede, tratamento de excepções, threads e ambiente gráfico. Tem a possibilidade de usar applets, que são pequenas aplicações multi-plataforma, seguras e dinâmicas colocadas nas páginas HTML da Internet. É este ponto o mais importante para este trabalho, já que esta é a primeira linguagem a criar verdadeira interacção na Internet, idêntica a uma aplicação de uma qualquer plataforma. É possível que dentro em breve graças aos applets, todos os tipos de aplicações hoje comuns funcionem em browsers, quer em Intranets (as mais pesadas), quer na Internet.

Mas para já vamos analisar os aspectos mais importantes da linguagem.


1.1 Aspectos fundamentais da linguagem

Desde a sua concepção que era objectivo da linguagem Java ser: multi-plataforma, segura, robusta, interactiva, num ambiente orientado a objectos.

Portabilidade - O Java tem uma arquitectura neutral, um programa em Java corre em qualquer máquina para a qual também tenha sido desenvolvido o Java. Para ter este benefício tiveram que ser tomadas algumas decisões duras e difíceis, a maior das quais é o facto da linguagem não ser compilada, ser interpretada, que é uma técnica de executar programas bastante mais lenta, já que estes não se adaptam á máquina em que estão a trabalhar. Mas o Java é primeiro passado para uma representação intermédia que é o Java bytecode que reduz drasticamente este problema. Por fim, os tipos de dados tem o mesmo tamanho em todas as plataformas, por exemplo, um inteiro tem sempre 32 bits.

Segurança - O Java não tem ponteiros, só referências, não existe aritmética de ponteiros. É através dos ponteiros que os vírus entram nas aplicações, sem estes vai ser muito mais difícil a proliferação de vírus, dado que não é possível colocar uma referência a apontar para fora da aplicação, para um potencial vírus.

Robustez - Duas das tarefas mais importantes das linguagens são a gestão de memória e o tratamento de excepções. É aqui que muitas linguagens falham. O Java tem classes que tornam o tratamento de excepções totalmente previsível e transparente. O Java tem um sistema que recolhe os endereços de memória que já não estão correntemente a ser usados chamado garbage collection. O Java é uma linguagem que dá pouca liberdade ao utilizador no que respeita ao uso de tipos e declarações de dados, e determina os erros mais comuns durante a fase de compilação.

Interactividade - O Java é uma linguagem de programação completa, mas que foi desenvolvida tendo como um dos seus principais objectivos dar vida à Internet, tornando-a interactiva, possibilitando o uso de aplicações. Ao contrário do HTML, que é um código, o Java é uma linguagem. Existem outros códigos que permitem criar interfaces muito interessantes na rede, tal como o VRML (Virtual Reality Modeling Language), mas existem apenas na Internet, enquanto que em Java é possível fazer um programa para correr em qualquer sistema operativo.

Orientação a Objectos - O Java é totalmente orientado a objectos, foi desenhado do nada, tudo no Java está dentro de uma classe. Dado que não existem restos procedimentais tal como acontece na maior parte das linguagens orientadas a objectos, que derivam de linguagens procedimentais, torna-se bastante fácil compreender os conceitos subjacentes á linguagem.


1.2 Classes de Internet

A Internet é composta por PCs, Macintoshs e estações de trabalho Unix. A Internet é hoje a ‘plataforma’ unificadora entre todas as plataformas. Nenhum destes ambientes tem embutidas classes para lidar com os protocolos da Internet de forma transparente. A livraria de classes do Java resolve este problema fornecendo um modelo unificador dos protocolos Internet, o que mostra também o nível de integração com a Internet que o sistema básico do Java assume. Isto ajuda a compreender porque é que o Java consegue carregar as suas classes de forma segura na rede.

Classes de rede TCP/IP - As implementações dos protocolos ftp, http, nntp, smtp e os sockets de baixo nível são encapsulados em diversas classes, o que torna extremamente fácil para o programador lidar com todos estes protocolos sem ter de conhecer os pormenores da sua implementação.

WWW e HTML - Dado que o sucesso do Java depende da WWW, e os applets Java são já um lugar comum nas páginas HTML, as classes Java suportam estes protocolos e formatos particularmente bem.

Programas distribuídos - As classes Java são enviadas através da Internet com muita facilidade. Dado que o sistema de ficheiros e a rede tem um interface unificado, é trivial carregar classes na rede. É deste modo que os applets são carregados.


1.3 Outras classes importantes

São algumas das classes chave descritas de forma muito resumida a seguir que permitem ao Java ter algumas das características enunciadas em 1.1.

Classes de threads - Estas classes permitem ao programador manipular directamente a criação, suspensão, gestão e eliminação das threads, aumentado e facilitando de forma muita significativa o seu rendimento e utilização.

Classes da linguagem (tratamento de excepções) - Os métodos usados por estas classes garantem uma total transparência no tratamento de excepções, não sendo mais necessário recorrer ao if e outras coisas do género, existem métodos desenhados para o efeito, o que torna o tratamento de excepções uma coisa previsível e não obscura.

Classes do interface gráfico abstracto (AWT) - Estas classes implementam todos os interfaces gráficos mais usados, o Macintosh ’84, o X/Motif ’88 e o Windows ’95. Existem abstracções de janelas, barras de navegação, botões, menus, ... tudo desenhado sob uma arquitectura neutral, quando o programa é carregado adapta-se á arquitectura em causa. Estas classes são largamente abordadas neste trabalho, já que todos os interfaces gráficos estão nelas incluídos.


1.4 Java vs. C++

O C++ é totalmente compatível com o C, esta característica permitiu-lhe ter o sucesso que se sabe, e afirmar o paradigma de orientação a objectos como referência, mas por outro lado representa a sua maior fraqueza, já que dá excesso de liberdade ao programador, acabando por propiciar código pouco robusto, inconsistente e vulnerável.

As estruturas de controlo e muitas palavras reservadas do C e do C++ foram adoptadas pelo Java por uma questão de simplicidade, e para facilitar a transição de programadores do C/C++ para o Java, evitando que a linguagem não se afirmasse por questões laterais.

O Java é melhor que o C++ mais por aquilo que lhe retirou do que por aquilo que lhe acrescentou.