quinta-feira, 15 de abril de 2010

Entendendo a plataforma Java, para leigos

Quando falamos em programação Java, muitas pessoas pensam estamos nos referindo a uma linguagem de programação. Mas Java além de uma linguagem de programação, é também uma máquina virtual, APIs e especificações. Nesse tutorial iremos organizar o pensamento para entender o que é cada parte da plataforma Java e também o que são todas aquelas siglas.

1. Um pouco de história

Voltando um pouco no tempo, no início da programação, nós tinhamos a linguagem Assemby. A linguagem assembly nada mais é do que instruções diretas para o processador. Cada comando nessa linguagem equivale a um comando para o processador executar. Dizemos que esses comandos são instruções de máquina.

Com a evolução da computação começamos a ter linguagens mais robustas de mais alto nível como a linguagem C. Numa linguagem de programação dessas, um comando no código fonte equivale a várias instruções de máquina. A relação não é um para um, como era no assembly. Então um novo componente da programação entrou em questão: o compilador. O compilador é o responsável em traduzir o programa em linguagem C para um programa em linguagem de máquina. Essa linguagem de máquina, serve para um processador específico, ou seja, um programa compilado para um processador não serve para um processador diferente.

Os sistemas operacionais também possuem seu conjunto de instruções e a forma como deve ser montado o executável é diferente. Então, além da compilação ser feita especificamente para determinado processador, ela deve ser feita para determinado sistema operacional também. Por isso um programa compilado para Windows não roda no Linux, e vice versa. Vamos chamar essas instruções para o sistema operacional de código nativo.

2. .java .class e bytecodes

Em Java, as coisas mudam novamente. Um programa Java não é compilado para um código nativo como é feito em um programa C. Quando compilamos um arquivo .java (que é a extensão de um programa Java, assim como .c é a extensão de um programa C) geramos um código intermediário, chamado bytecode que fica em um aquivo .class.

Um arquivo .java contém o código fonte, que depois de compilado vira um arquivo .class. Esse arquivo .classcontém instruções chamadas de bytecodes. Esses bytecodes são um código intermediário e não servem para ser executados por nenhum sistema operacional, não é um código nativo.

3. A máquina virtual

Os bytecodes não servem para ser executados por nenhum sistema operacional. Ao invés de executar os bytecodes diretamente, precisaremos de um programa, que leia cada bytecode e traduza para um código nativo. Assim podemos executar nosso programa Java. Esse programa que faz a tradução dos bytecodes e envia código nativo para o sistema executar é a máquina virtual, conhecida também como JVM (Java Virtual Machine). A máquina virtual é um programa, e vimos que um programa é especifico para determinado sistema operacional. Logo, existe uma máquina virtual para o windows que traduzirá os bytecodes para códigos nativos de windows, outra máquina virtual para linux que traduzirá os bytecodes para código nativo de linux, e assim por diante. No windows o programa da máquina virtual é o java.exe, e ele recebe como parâmetro quais arquivos .class devem ser executados. Lembrando que dentro dos arquivos .class existem os bytecodes.

4. Linguagem Orientada a Objetos

A linguagem Java é orientada a objetos. Cada classe Java está em um arquivo .java (geralmente) e cada arquivo.java é compilado e vira um .class. Para cada classe temos um .class então. Numa aplicação teremos centenas de arquivos .java e .class. Podemos agrupar um conjunto de arquivos .class em um arquivo .jar, um arquivo JAR (Java Archive) nada mais é um arquivo no formato zip com vários arquivos .class dentro (pode ser incluido opcionalmente os arquivos .java se desejar levar o código fonte junto). Os arquivos JAR as vezes podem ser referênciados como bibliotecas.

Um grupo de classes que servem para resolver determinado problema, como leitura e escrita em arquivos, nós chamamos de API (Application Program Interface). Inclusive, a API utilizada para manipulação de arquivos chama-se Java IO. As APIs são distribuidas em arquivos JAR, mas um arquivo JAR pode ter mais de uma API. O conceito de API é apenas para nós humanos, para a máquina virtual isso não faz diferença, o que importa são as classes.

A plataforma Java além da máquina virtual e da linguagem de programação é constituida também de uma série de APIs. Todo programa Java necessita de um conjunto básico de classes para funcionar, esse conjunto básico você consegue quando baixa a plataforma.

5. Ambiente de execução

Vimos que para executar um programa Java, precisamos de uma máquina virtual e as APIs do Java no mínimo. Onde conseguimos isso? A máquina virtual e as APIs são distribuidas num pacote chamado JRE (Java Runtime Environment). Esse pacote pode ser baixado no site da SUN http://java.sun.com/javase/downloads/index.jsp, a SUN é a mantenedora da plataforma Java. Voce já deve ter acessado algum site de banco que necessitou que você tivesse o Java instalado, esse Java a que o site se refere é o JRE. É no JRE que está o java.exe, que é a máquina virtual.

6. Java para desenvolvedores

Se você é um programador, necessitará algo mais do que o JRE. Precisará também do compilador da linguagem e seria interessante ter os códigos fonte das APIs (isso facilita muito o desenvolvimento). Esse conjunto destinado ao programador é o JDK (Java Development Kit). Dentro do JDK está também o JRE, então, não será necessário baixar os dois. O JDK também está disponível no site da Sun. No JDK vem o programa compilador da linguagem Java, no windows seria o javac.exe.

7. As diversas plataformas Java

Existem três conjuntos básicos de APIs em Java, que se diferem pela API utilizada principalmente, são eles:

Java ME (Micro Edition): Java para celulares e palm, tem uma máquina virtual que já vem com os equipamentos e possui uma API mais restrita já que os recursos computacionais desses equipamentos são mais limitados.

Java SE (Standard Edition): Java para desktop, contém a máquina virtual e APIs para programação em Java. Se for aprender Java começe por essa plataforma.

Java EE (Enterprise Edition): Java para web, contém tudo da plataforma SE e mais um pouco. Utiliza a mesma máquina virtual do SE.

Quando você for fazer download, com exceção do Java ME, não existirá distinção entre qual plataforma você precisará. Independente se é SE ou EE, você precisará do JRE ou JDK (que são o Java SE).

As APIs do Java EE geralmente vem em plugins para o ambiente de desenvolvimento ou no servidor de aplicações que for utilizar. Há sim, em JEE você precisará de um servidor de aplicações que roda na JVM.

8. Ambiente de desenvolvimento

Ao invés de ficar programando em bloco de notas e utilizando o javac em linha de comando, é mais interessante utilizar um ambiente de desenvolviemnto, chamdo IDE (Integrated Development Environment). Os ambientes mais comuns em Java são o Eclipse e o NetBeans.

9. Considerações finais

Apesar de muitos conceitos e siglas, a plataforma Java é muito poderosa e está presente em grande parte dos parques de programação do mundo. Agora que você já sabe quem é quem, está apto a começar seus estudos, é recomendável começar com o SE (Java para desktop) e quando tiver mais maturidade, entre no mundo web com o EE. Espero que tenha sido útil a explicação, até mais.


Autor: Rógel Garcia

Fonte: Java Framework (Entendendo a plataforma Java, para leigos)

Nenhum comentário: