Home Map Index Search News Archives Links About LF
[Top Bar]
[Bottom Bar]
[Photo of the Author]
Jose M. Fernández
Sobre o Autor: [Escreva um ou dois parágrafos sobre a biografia do Autor aqui]

Conteúdo:
Introdução
Origem
Obtenção e Instalação de Java
Ambiente de desenvolvimento
Caracteristicas
Começar a programar em JAVA
Resumo

Java. Parte I

[Ilustration]

Abstract: Este é o primeiro artigo de uma série, sobre programação com Java. A primeira parte é dedicada a descrever Java como linguagem, suas características gerais e a localização das fontes mais importantes de informação.




Introdução

Iniciamos uma série de artigos , em que descrevemos o ambiente e a linguagem de programação Java. Como primeiro propósito tentarei me afastar dos tópicos relacionados com esta linguagem, não falarei nada sobre a história da linguagem, sobre microondas, lavadora(se alguém se interessa, poderá lê-la em numerosas publicações, até em revista médicas). Tão pouco mostrarei Duke (o mascote de Java) que é um bonequinho narigudo em forma de triangulo, com o olhar sorrateiro, que ao menor descuido te saúda a rítmos frenéticos que relembra a velhos filmes americanos de ficção científica.

Existe uma coisa que é como certa, "Java está na moda", não há uma só revista que não a aprecie e que não fale dela, nem empresa de software que não mostre algum produto para desenvolver applets em Java, nem página na Web que não contenha alguma coisa em Java.

Tentarei nesta série de artigos aprofundar e na medida do possível aprender (todos juntos) esta linguagem de programação que é simples no básico, mas com uma alta complexidade e dificuldade de dominar e em constantes mudanças.

Os primeiros artigos nos proporcionam uma descrição da linguagem em geral para em seguida irmos analizando em profundidade temas particulares como os applets, trabalhos para rede, JDBC, beans, etc.

Farei pé firme que java é uma linguagem de propósito geral, não só para realizar applets para páginas web, ainda que é sómente para isto que é conhecido, não podemos nos ater neste aspecto, já que nos proporciona uma série de alternativas que podem ser interessantes, ainda que a propria realização de applets para a rede.

Este primeiro artigo é um pouco mais descritivo que prático, no qual veremos fundamentalmente as características da linguagem, ambiente de desenvolvimento e só no final, veremos algum exemplo de programa Java.

Origem

Java foi concebida por James Gosling, Patrick Naughton, Chis Warth, Ed Frank e Mike Sherindan na Sun Microsystem Inc. en 1.991, e na sua primeira versão, que durou 18 meses. Entre 1.992 e 1.995, colaboraram na maturidade do protótipo inicial Bill Joy, Arthur Van Hoff, Jonathan Payne, Frank Yellia, Tim Lindolm.

Como podemos observar pelas datas, Java é anterior ou ao menos simultânea com a WWW (até o ano de 1.991, Tim Berners Lee não desenvolveu a linguagem HTML).

Podemos considerar Java como uma linguagem de propósitos gerais, mas seu verdadeiro auge surgiu quando sua utilização em páginas da Web.

A sintaxe de Java é similar ao C e as características de orientação a objetos do C++. Java é uma linguagem de programação coerente e lógicamente consistente.

devido as similaridades com C e C++, poderíamos pensar que Java é uma versão para Internet de C++, mas tem importantes diferenças teóricas e práticas. Especialmente Java melhora e refina o paradigma de orientação a objetos de C++.

A Internet ajudou para Java se tornar uma linguagem universalmente conhecida e pelo seu lado, Java tem um profundo efeito sobre a Internet, já que amplia o universo de objetos que podem mover-se livremente pelo ciberespaço (programas dinamicos autoexecutáveis).

Obtenção e Instalação de Java

Para poder programar em Java necessitamos de várias ferramentas, sempre estamos nos referindo ao ambiente GNU/LINUX (pode ser que alguém esqueça):

a implementação atual para Linux, é baseado no ELF e requer um núcleo 1.2.13 ou posterior

Utilizaremos um ambiente chamado JDK (Java Development Kit).

Netscape versão 2.0.14 ou posterior.

Um editor de textos como Xemacs (trabalharemos sempre sobre Xwindows, ainda que não seja necessário em alguns casos, ainda que sim, para os Applets e programas com interfaces gráficos).

Para baixar o JDK, podemos obter dentre outros, a partir do modo:

http://www.blackdown.org/java-linux.html

daqui escolheremos algum Mirror, para poder realizar o download mais rapidamente. Faz alguns meses a última versão era a JDK-1.1.3(com ela realizamos os exemplos), mas durante minha última visita, ví a versão 1.1.9, mas "atenção", se quisermos baixar tudo, são aproximadamente 24Mb., mesmo que o estritamente necessário é de apenas 12Mb (paciencia).

Uma vez descomprimido com gunzip e tar não há nenhum problemas para começar a trabalhar

O normal seria instalar no diretório /usr/local no qual, criará o diretório /JDK1.1.3 e dentro dele, encontraremos vários diretórios:

/doc Documentação não oficial no formato HTML

/demo Programas de demonstração em Java

/lib Bibliotecas

/bin As proprias ferramentas do JDK.

Dentro do diretório /lib, encontraremos o arquivo "classes.zip";(não descomprima este arquivo), pois contém todas as classes compiladas que podemos utilizar no JDK.

Dentro do diretório raiz, encontramos o arquivo "src.zip", este contém todos os arquivos fontes incluidos no arquivo "classes.zip". Não podemos compilar e impossibilitado por falta de informação.

Ambiente de desenvolvimento

como falamos anteriormente, estão incluidos no diretório /bin:

javac : compilador java, compila programas fontes na linguagem java e bytecodes.

Java : interprete java. Executa bytecodes Java.

jre : similar ao interprete java(java), mas, pensado para usuários finais, que não exigem todas as opções disponíveis.

appletviewer: testa e executa applets.

jdb: depurador.

javap: desassemblador de arquivos complados em Java.

javadoc : gerador de documentação, produz um conjunto de páginas HTML, descrevendo as classes públicas e privadas, interfaces, construtores, métodos e campos. Também produz uma hierarquia de classes e um índice de todos seus membros.

javah : para acrescentar métodos nativos (em linguagem C) a programas Java.

jar : arquiva classes e fontes java em um arquivo Jar.

javakey : manutenção de assinaturas digitais.

updateAWT : atualiza os nomes que mudaram nos métodos do AWT1.02 em uma aplicação.

Para poder trabalhar sem problemas de diretóris, acrescentaremos o diretório /usr/local/JDK1.1.3/bin na variável de ambiente PATH do usuário que desejamos. Se desejamos que seje fixada para todos os usuários, incorporar o diretório a variável PATH que está no arquivo /etc/profile.

Características

Antes de continuarmos, poderiam perguntar: O que é Java?, e como resposta podemos ter (como no manual do JDK informa) que são duas coisas, por um lado, uma linguagem de programação e por outro uma plataforma.

Como linguagem de programação, Java é uma linguagem de alto nível com as seguintes características (mais adiante as veremos com mais detalhes):

  • É simples
  • Orientado a objeto
  • Distribuido
  • Interpretado
  • Robusto
  • Seguro
  • Arquitetura neutra
  • Portável
  • Multiusuário
  • Dinâmico
  • Alta resolução

O primeiro que salta a vista, é que Java é interpretado, ainda que requeira uma compilação prévia, gerando um código objeto em bytecodes, que é de muito baixo nível, este código pode ser interpretado em distintas plataformas.

Os bytecodes Java possibilita "escreve uma vez, executa sempre". Podemos compilar programas numa plataforma com um compilador Java e os bytecodes podem ser executados em qualquer arquitetura que possua implementação da máquina virtual java(JVM). Por exemplo, um programa Java pode ser compilado em uma plataforma Windows NT e ser executada sem nenhum problema (pelo menos assim nos diz a teoria) em um Sun Ultra Solaris.

Uma plataforma poderá ser o ambiente hardware ou software no qual é executado. A plataforma Java se difere de outras plataformas, por que ela é só software e se executa sobre outra plataforma hardware.

A plataforma Java tem dois componentes:

  • a máquina virtual Java(JVM)
  • Interfaces de programação de aplicação (API)

JVM é um computador abstrato no qual podemos executar programas Java compilados. Foi desenhado para ser fácil e pequeno, porque se pretendia que estivesse presente em todos os lugares que fosse possível. Esta simplicidade, foi feita tão rápidamente que se extendeu a todas as arquiteturas existentes, conseguindo uma classe de software comum a todas elas, pelo que nas redes de computadores heterogêneas(como é a Internet), a portabilidade é conseguida graças a Java. Como podemos imaginar esta é possívelmente uma das razões do auge desta irreparável desta tecnologia. a máquina virtual, devemos entender como uma classe de software sobre um processador, se não como seu nome indica pretender se um computador e pouco a pouco vão aparecendo Chips Java que darão apoio a máquinas reais Java, cartões de crédito, decodificadores de TV digital, etc.

A API é uma grande coleção de componentes software que provê a linguagem de muitas utilidades, tais como interfaces gráficas(na terminologia Java, pacotes). Graças a estes pacotes, podemos escrever com Java. muitos tipos de programas distintos, afora as conhecidas Applets para Web, podemos desenhar, por exemplo servidores Web, proxis, servidores de correios, servidores IRC, e práticamente o que possamos imaginar tanto em relação com a Internet como não.

Os agrupamentos das API, podem ser classificadas como:

  • Básicas : objetos, matrizes, números, entradas e saídas, estrutura de dados, propriedades do sistema, data, tempo, etc.
  • Applets : conjunto de funções e utilitários usados para a realização de applets Java.
  • Trabalho em Rede: URLs, TCP, UDP, sockets, direcionamento IP.
  • Internacionalização: ajuda para escrever programas que podem ser adaptados automaticamente às especificações locais e podem ser visualizados em uma linguagem própria.
  • Segurança: de baixo e alto nível, incluindo assinatura digital, chaves públicas e privadas, controle de acesso e certificados.
  • Componentes software: conhecidos como JavaBeans.
  • Banco de dados: proporciona um acesso uniforme a um grande número de banco de dados relacionais

Além deste núcleo básico da API, podemos dispor de estensões para 3D, telefonia, animação, etc.

Como vimos no início desta caixa, Java possui uma série de características que veremos em detalhes:

É simples:

Em Java existe um número reduzido de formas claras para abordar uma tarefa dada. Oferece toda a funcionalidade de uma linguagem potente, mas sem as características menos usadas e mais confusas destas. Herda a sintaxe do C/C++ e muitas das características orientadas a objetos do C++. Todos os programadores que conheçam C/C++, não terão nenhum problema para aprender Java. elimina algumas características destas linguagens entre os quais se destacam:

  • Aritmética de ponteros
  • Registros(struct)
  • Definição de tipos(typedef)
  • Macros(#define)
  • Necessidade de liberar memoria(free)
  • Não há herança múltipla
  • Não há sobrecarga de operadores
  • Não há estrutura ou uniões
É orientado a objetos: Java é uma linguagem desenhada partindo do zero, como resultado disto, realiza-se uma aproximação limpa, útil e programável aos objetos. O modelo de objeto Java é simples e fácil de ampliar.
É distribuido: Java foi desenhado com enormes capacidades de conexão TCP/IP. De fato, permite aos programadores acessarem a informação através da rede com tanta facilidade como aos arquivos locais.
É robusto: Java é fortemente tipado, o que permite comprovar o código em tempo de compilação. Também comprova o código em tempo de execução. A realização de memória é realizada de forma automática, já que proporciona um coletor de lixo automático para os objetos que não estão sendo utilizados. Java, assim mesmo, proporciona uma gestão de excessões orientada a objetos. Um programa escrito corretamente, todos os erros de execução podem e devem ser gerenciados pelo programa.
É de arquitetura neutra: O principal objetivo dos desenhadores Java era "escrever uma vez, executar em qualquer lugar, em qualquer momento e para sempre". O código Java é compilado a um código de bytes de alto nível independente da máquina. Este código está desenhado para ser executado em qualquer máquina com um sistema run-time (interprete), no qual, se é dependente deste.
É seguro:

As necessidades da informática distribuida exigem os maiores níveis de segurança para os sistemas operacionais clientes. Java proporciona segurança através de várias características de seu ambiente em tempo de execução:

  • Um verificador de bytecodes
  • A disposição de memória em tempo de execução
  • Restrições de acesso aos arquivos

Ainda que o compilador só gere código correto, o interprete volta a verificar para assegurar que o código foi mudado (intencionalmente ou não). Além disso, o intérprete Java determina a disposição da memória para as classes. Podemos considerar Java como uma das aplicações mais seguras para qualquer sistema.

É portável: Além da portabilidade básica ser de arquitetura neutra, Java também implementa alguns standardes de portabilidade, os inteiros são sempre inteiros, o sistema de interface do usuário, constitue um sistema abstrato de janelas, pelo que se observa, que é independente da arquitetura de onde são implementados (UNIX, PC, Mac).
É interpretado: Para poder consseguir um dos objetivos básicos de Java, que é a independencia de plataforma, o compilador gera um código intermediário (bytecodes). este código pode ser executado em qualquer sistema que possua um interprete. Esta característica pode levar-nos a pensar nos possíveis problemas de rendimento. ainda que, por este mesmo motivo, os desenvolvedores da linguagem desenharam com muito cuidado o código intermediário, de maneira que fosse simples de traduzi-lo diretamente a um código de máquina nativo para conseguir um rendimento alto.
É multitarefa: Com Java podemos escrever programas que façam várias coisas ao mesmo tempo e de uma forma fácil e robusta.
É dinâmico : Java tenta agregar todos os módulos que compõem uma aplicação até o momento da execução. Isto permite agregar dinâmicamente o código de uma forma segura e conveniente.

Depois desta quantidade enorme de parágrafos(não é mais que o oficial do Java), farei que (outra vez) pergunte porque Java no mundo GNU/LINUX. Anteriormente falamos de um JDK para Linux, isto não é mais que uma implementação comercial da original desenvolvida pela Sun Microsystem(ainda que de livre disposição).

Existem ferramentas como o compilador GUAVAC (http://HTTP.CS.Berkeley.EDU/~engberg/guavac) sob licença GPL, com ele podemos compilar qualquer fonte Java sem nenhum tipo de problemas. Destacaremos assim mesmo uma máquina virtual chamada KAFFE (http://www.kaffe.org), sob licença Berkeley. Estes dois projetos estão bastante avançados, ainda que necessitem das bibliotecas das classes Java da Sun(de livre distribuição no momento) para ter um sistema de desenvolvimento completo.

Existem também projetos em fases iniciais para criar ambientes de desenvolvimento rápidos e visuais de aplicações Java.

Existe um grande movimento na rede, sobre a tecnologia JAVA y GNU, com o objetivo de desenvolver ferramentas completas e independentes da SUN. Com isso, podemos fazer uma ideia da importancia de Java, e quando a moda passar com certeza alguma coisa ficará (bastante, diria eu).

Começar a programar com JAVA

Uma vez vistos todas as características gerais da linguagem, veremos um programa real. Como disse na introdução deste artigo, gostaria de evitar o máximo possível a colocação de tópicos, quer dizer, não faremos o primeiro programa saudando o mundo, em lugar dele, veremos em nossa tela, um quadro nas dimenssões que quisermos (um pouco mais complicado, mas sem introduções.):

Arquivo Cuadro.Java
class Cuadro {
public static void main (String args[]) {
	int l ,a;
        if (args.length == 2) {
            l = Integer.valueOf(args[0]).intValue();
	    a = Integer.valueOf(args[1]).intValue();
	 }
	 else {
	  l= 20;
	  a= 15;
	 }
	  for (int i=l; i>0; i--){
	    System.out.print("*");
	    }
	    System.out.print("\n");
	    for (int i= a-2; i>0; i--){
	     System.out.print("*");
	       for(int j=l-2; j>0; j--) {
	          System.out.print(" ");
		  }
		  System.out.print("*\n");
		  }
		for (int i=l; i>0; i--){
		System.out.print("*");
		}
	      System.out.print("\n");
	   }
}

A primeira coisa que temos que ter em conta, é o nome que damos ao arquivo fonte que é muito importante, já que este é definido como uma "unidade de compilação". Pode ser um arquivo que contenha uma ou mais definições de classe. O compilador espera que estes arquivos tenham a extensão .Java (4 caracteres) pelo que alguns sistemas como DOS ou Windows 3.1 não suportam.

Como vemos no exemplo o nome da classe definida também coincide com o nome do arquivo fonte e não é por casualidade, em Java, todo o código tem que estar dentro de uma classe. Por conveniencia, o nome da classe tem que coincidir com o nome do arquivo que contém o programa. Além disso, Java é sensível ao contexto (diferença entre maiúsculas e min;usculas).

Para compilar o exemplo, na linha de comando, digitamos:

> javac cuadro.java

O compilador Java (se tudo foi bem) criará um arquivo cuadro.class que contém, naturalmente o código binário (bytecode) e este poderá ser executado pelo intérprete:

> java cuadro

Quando compilamos código fonte de Java, cada classe individualmente é colocada em um arquivo que tem o mesmo nome que a classe. Esta é a razão pela qual é uma boa prática chamar os arquivos fontes da mesma forma que a classe que a contém, já que assim, o nome do arquivo fonte coincidirá com o nome do arquivo.class.

Ainda que nosso exemplo quadro.java é bastante simples, nos ajudará a compreender os elementos fundamentais de um programa Java, e sobretudo a estrutura de um programa.

O que se tem de levar em conta, é que este exemplo não é um applet para incluir em uma página HTML, e sim um programa independente que é executado com o interprete à partir da linha de comandos.

A primeira linha do programa é:

class cuadro {

Nesta linha, empregamos a palavra reservada class para declarar que vamos definir uma nova classe, "cuadro" é o identificador do nome da classe. A definição da classe completa incluindo todos os seus membros, estão entre as chaves ({ }), as mais gerais. Note que em Java, toda a atividade de um programa ocorre dentro da classe.

Na linha seguinte:

public static void main (String args[]) {

De inicio, podemos destacar o método main(). Todas as aplicações Java começam sua execução chamando este método (como em C/C++). Continuando, comentaremos alguns conceitos que posteriormente (em outros artigos), detalharemos ainda que faremos uma rápida passada, sómente para comprender o exemplo.

A palavra chave public permite controlar a visibilidade das classes membros. Quando uma classe é declarada como public, esta pode ser utilizada por código definido fora de sua classe. Static permite que o método main() seja chamado sem necessidade de instanciar a classe. Void indica que não devolve nenhum valor. Para enviar informações a um método, realizamos através de variáveis especificadas entre os parenteses que seguem o nome do método, em nosso caso, declaramos um parâmetro chamado arg que é uma matriz de instancias da classe String.

Naturalmente todo o código do método, está também entre chaves. E na linha:

 int l, a ;

como todo programa que se preze, declaramos duas variáveis do tipo inteiro. Em Java, cada variável tem que ser declarada préviamente. Como podemos observar, cada instrução termina com um " ; " .

O resto das linhas, articulam um pequeno algorítimo, no qual:

  1. Comprovamos se foram enviados parâmetros ou não:
    If (args.length==2)
    
  2. Se existem parâmetros, os atribuimos as variáveis "a" e "l" :
      l = Integer.valueOf(args[0]).intValue();
      a = Integer.valueOf(args[1]).intValue();
    
  3. Caso contrário, as variáveis foram iniciadas com dois valores default :
      l = 20;
      a = 15;
    
  4. O restante do programa não é mais que instruções necessárias para mostrar no monitor o quadro. Podemos destacar:
    System.out.print()
    

    onde print() imprime a cadeia que passamos como parâmetros. System é uma classe pre-definida que permite o acesso ao sistema e out é o fluxo de saída que está conectado ao monitor. E também,

    for (int i=l; i>0; i--)
    

    Como podemos imaginar, é o comportamento que esperamos dele, tem muita similaridade com o C/C++ e outras linguagens.

Uma prática que podemos fazer com este exemplo, além de compilá-lo e executá-lo, é comprovar que é de arquitetura neutra, já que o programa compilado quadro.class, é executado sob o Windows 95, (sem que sirva de precedentes), comprovaremos seu comportamento sob o Linux.

Resumo

Relatamos os aspectos gerais da linguagem de programação Java. Não fizemos nada mais que começar e temos um grande caminho em dois artigos mais. Para realizar uma descrição completa ( e não muito ampla( desta linguagem. No próximo artigo, veremos entre outros:

a definição e tipos de variáveis, instruções básicas, classes, etc. Em fim, a maior parte das especificações da linguagem.

Darei em cada artigo as referencias, publicações e endereços, em que tenha me baseado muito ou pouco nesta série de artigos.

  • JAVA manual de referença. Patrick Naughton Herbert Schildt. Mcgraw-Hill.
  • Programando con JAVA. Tim Ritchey. Prentice Hall.
  • Tutorial de Java. Manual em espanhol no formato HTML obtido do endereço: www.fie.us.es/info/internet/JAVA. Agustín Froufe.
  • The Java Tutorial. Manual em ingles no formato HTML, obtido no endereço :www.javasoft.com. Sun.
  • Tutoriais da própria instalação do JDK.

Esta página WEB é mantida por Miguel Angel Sepulveda
© Jose M. Fernandez 1998
LinuxFocus 1998