Java: Linguagem e Plataforma

Propaganda
Java: Linguagem e Plataforma
Java: Linguagem e Plataforma
Introdução
Quando Java foi introduzida no fim de 1995, foi uma avalanche na Internet. Java 1.1 foi liberada no início de
1997, praticamente duplicando a velocidade do interpretador Java e incluindo novas funcionalidades
importantes como suporte a acesso a banco de dados, objetos remotos, um modelo componente para
objetos, internacionalização, impressão, encriptação, assinaturas digitais e muitas outras tecnologias.
Estava pronto para tomar o resto do mundo de assalto.
A pesar de todo este "barulho" provocado pelo Java e das novas funcionalidades do Java 1.1, na sua
essência Java é somente uma linguagem de programação, como muitas outras e suas APIs são apenas
bibliotecas de classes como em outras linguagens.
Java é interessante?
Em um dos primeiros papers sobre a linguagem, a Sun descreveu assim: Java é uma linguagem simples,
orientada a objeto, distribuída, interpretada, robusta, segura, neutra de arquitetura, portável, de alta
performance, multitarefa e dinâmica.
O que está por trás destas palavras?
Orientada a objeto
Java é uma linguagem de programação orientada a objetos. Como programador, isto significa que deve
manter o foco nos dados da sua aplicação e nos métodos que manipulam estes dados.
Em um sistema orientado a objeto, uma classe é uma coleção de dados e métodos que operam sobre estes
dados. Juntos, dados e métodos descrevem o estado e o comportamento de um objeto. Classes são
posicionadas hierarquicamente, assim, as classes inferiores herdam comportamento das superiores.
Java traz um conjunto enorme de classes distribuídas em pacotes: componentes de interface (java.awt,
javax.swing), entrada e saída de dados (java.io), redes (java.net).
Quase tudo em Java são classes, os tipos primitivos de dados: números, caracteres e lógicos são as
exceções. A classe é a unidade básica de compilação e execução em Java. Todos os programas em Java
são classes.
Interpretada
Java é uma linguagem interpretada: o compilador Java gera byte-codes para a máquina virtual Java (JVM),
código nativo de máquina. Para executar um programa basta usar o interpretador Java para executar os
byte-codes compilados, como estes são independentes de plataforma, podem ser executados em qualquer
JVM de qualquer plataforma.
Em um ambiente interpretado, a fase de "link" praticamente não existe. Se Java tivesse uma fase de link,
seria somente o processo de carregamento de novas classes no ambiente, que é um processo incremental
e leve que ocorre em tempo de execução. Ao contrário de ciclos lentos e enfadonhos de compilar-linkarexecutar de linguagens como C e C++.
Java: Linguagem e Plataforma
Neutra de arquitetura e Portável
Como os programas Java são compilados em um formato de byte-code de arquitetura neutra, uma
aplicação Java pode ser executada em qualquer sistema que possua uma JVM. Isto é particularmente
importante para aplicações distribuídas pela Internet ou outras redes heterogêneas. Mas essa capacidade é
extremamente interessante quando pensamos em desenvolver uma aplicação que funciona em PCs, Macs,
e estações UNIX, com diversos sistemas UNIX, Windows 9x, Windows NT, PowerPC, etc.
Não bastando somente isto, Java assegura que não há aspectos de dependência na especificação da
linguagem. Por exemplo, Java especifica o tamanho de cada tipo primitivo de dados, assim como seu
comportamento aritmético para qualquer plataforma, diferentemente de C onde um int pode ter 16, 32, ou
64 bits dependendo da plataforma.
Mesmo sendo tecnicamente possível escrever programas não portáveis, é relativamente fácil evitar isto. O
programa "100% Java puro" ajuda a verificar e certificar a portabilidade do seu código.
"Write Once, Run Anywhere."
Dinâmica e Distribuída
Java é uma linguagem dinâmica. Qualquer classe pode ser carregada em um interpretador Java a qualquer
momento, estas classes carregadas dinamicamente podem ser dinamicamente instanciadas. Bibliotecas
podem ser dinamicamente acessadas. Pode-se obter informações sobre uma classe em tempo de
execução.
Java também é distribuída, ou seja, provê um suporte de alto nível para programar em rede.
A API de RMI, invocação de métodos remotos, auxilia um programa Java a invocar métodos de objetos
remotos como se fossem locais.
Simples
Java é uma linguagem simples, de modo que um programador possa aprender rapidamente: o número de
instruções básicas se manteve relativamente pequeno.
Robusta
Foi projetava para escrever programas de alta confiabilidade e robustez. É uma linguagem fortemente
tipada, que permite checagens extensivas em tempo de compilação. Não possui ponteiros buguentos, as
atribuições ocorrem por referência. Todos os acessos a arrays e strings são checados em tempo de
execução para verificar seus limites, garantindo que não haverá possibilidade de sobrescrever algo na
memória e corromper dados. Conversão de tipos são checadas em tempo de execução. O garbage
colletion prevê desperdício de memória, etc.
Tratamento de exceções é outra funcionalidade prevê para programas mais robustos. Uma exceção é um
sinal que pode ser detectado, disparado e tratado no código.
Segura
Um dos aspectos mais considerados de Java é a segurança. Isto é extremamente importante, pois sem
essa garantia você não baixaria um programa Java na Internet e executaria em seu computador, é
exatamente isso que faz um Applet. Java foi projetada pensando em segurança e possui várias camas de
controle que protegem com códigos malignos e permitem que os usuários executem confortavelmente
programas não confiáveis como Applets.
A segunda linha de defesa é o processo de verificação dos byte-codes no interpretador, para separa código
confiável do não confiável.
Java: Linguagem e Plataforma
Outra camada é chamada de sandbox. O código não confiável é colocado dentro de uma "sandbox" onde
ele pode executar à vontade sem comprometer qualquer recurso do sistema.
Estas restrições são asseguradas pela classe SecurityManager. O modelo funciona porque todas as
operações sensíveis como acesso a arquivos, precisam obter permissão antes de executar.
Existe a possibilidade de acoplar assinaturas digitais e utilizar encriptação para certificar a segurança.
Alta Performance
Java é uma linguagem interpretada, logo nunca será tão rapida como uma linguagem compilada como C.
Java 1.0 era 20 vezes mais devagar que C, Java 1.1 era 10 vezes mais devagar que C. Mas esta
velocidade é adequada a aplicações interativas, com muita interface ou baseadas em rede, onde a
aplicação frequentemente está esperando uma ação do usuário ou esperando dados da rede. Além disso
seções de tempo crítico são implementadas com código nativo eficiente.
Como um "turbo" na performance, muitos interpretados Java possuem compiladores "just in time" que
traduzem os byte-codes para código de máquina para uma CPU particular em tempo de execução. O
formato dos byte-codes foi projetado pensando neste compiladores. E se está pensando em sacrificar a
portabilidade por performance é possível mesclar partes do seu programa com C ou C++.
Considerando-se performance devemos avaliar o espectro das linguagens disponíveis. Numa ponta do
espectro temos linguagens script de altíssimo nível totalmente interpretadas como TCL e UNIX shell. Estas
linguagens são ótimas para prototipação, são altamente portáveis, mas muito lentas. Na outra ponta do
espectro, temos linguagens de baixo nívels como C e C++, que têm alta performance, mas têm pouco a
oferecer em termos de confiabilidade e portabilidade. Java está no meio do espectro. A performance dos
byte-codes Java é muito melhor que de linguagens script de alto nível, mas oferece a simplicidade e a
portabilidade destas linguagens.
Multitarefa (Multithreaded)
Em uma aplicação de redes como um navegador Web, é fácil imaginar várias coisas acontecendo
concorrentemente. Java é uma linguagem multitarefa, o principal benefício é o aumento da interatividade de
aplicações gráficas para o usuário.
Um programa simples
//Primeiro.java
//Meu primeiro programa em Java
public class Primeiro {
public static void main( String[] args ) {
System.out.println("Meu primeiro programa em Java");
}
}
Download