• Nenhum resultado encontrado

Java Programming Language Linguagem de Programação JAVA

N/A
N/A
Protected

Academic year: 2018

Share "Java Programming Language Linguagem de Programação JAVA"

Copied!
30
0
0

Texto

(1)

Java Programming Language

Linguagem de Programação JAVA

The Java Programming Language was developed by Sun Microsystems in 1991.

Desenvolvida por engenheiros da Sun, 1991-1995, para ser usada em dispositivos eletrônicos (geladeiras, tv’s, fornos, videocassetes etc)

Java originou-se como parte de um projeto de pesquisa que visava a criação de um software avançado que atendesse a uma extensa variedade de maquinário de redes e sistemas embutidos.

O Projeto Green tinha como missão desenvolver aplicativos complexos e avançados para aplicação em pequenos dispositivos eletrônicos.

Esses dispositivos são sistemas portáveis, distribuídos, confiáveis e incorporados em tempo real, dirigidos aos consumidores em geral.

O objetivo inicial era desenvolver um ambiente operacional pequeno, confiável, portável, distribuído e que operasse em tempo real.

A primeira tentativa da Sun com esse aplicativos deveria ter sido implementada em C++.

Em consequência de uma lista cada vez maior de problemas com o C++, principalmente vazamentos de memória e vários problemas de herança, a Sun enterrou o C++ e implementou uma nova linguagem, o Java.

As decisões de arquitetura e desenho da linguagem foram inspiradas em linguagens como Eiffel, SmallTalk, Objective C, Modula-3, etc.. Muitas das características desta linguagem não são totalmente novas.

Java é uma feliz união de tecnologias testadas por vários centros de pesquisa e desenvolvimento de software.

A sintaxe tem suas raízes claramente definidas em C e C++.

Java foi projetada para atender a vários requisitos desejáveis em uma LP, como por exemplo, confiabilidade, devido ao seu gerenciamento de memória, o que resulta em um ganho de eficiência; redigibilidade, por eliminar alguns conceitos de C e C++ que dificultavam nesse sentido, reuso de código entre outros.

(2)

Trata-se de mais uma representante da nova geração de linguagens orientadas a objetos e foi projetado para resolver os problemas da área de programação cliente-servidor.

Em 1993, a Sun noticiou que a Internet estava ganhando popularidade e começou a desenvolver Java para rodar nos browsers da Web.

Hoje Java é a linguagem que mais se fortalece com a internet, pois é uma linguagem simples, orientada a objetos, distribuída, interpretada, robusta, segura, independente de arquitetura, portável, de alto desempenho multitarefa e dinâmica.

Java poderia ser descrita como uma linguagem com toda a potencialidade do C++, porém sem a complexidade dos ponteiros que nela existem, mais simples e com maior segurança.

A meta de Java é uma linguagem que seja completamente portável, rodando corretamente em cada computador que a descarregar.

A maioria das linguagens possui algumas ambigüidades em suas especificações. Por exemplo, um compilador C++ pode implementar um tipo de dado int como sendo um número binário de 16, 32 ou 64 bits, dependendo da máquina anfitriã. Esta ambigüidade causa problemas de portabilidade entre os software, uma vez que o Java define um int como sendo de 32 bits em todas as plataformas.

Assim com a especificação da linguagem completa, outras fontes de ambigüidades encontradas em tipos de dados, avaliação da expressão e sintaxe foram resolvidas.

Os primeiros objetivos alcançados com desenvolvimento desta nova linguagem foram:

Criação de uma linguagem orientada a objetos;

Velocidade no desenvolvimento - eliminando o ciclo de compilar-linkar-carregar-testar;

Portabilidade do Código - com um interpretador que especifica a forma do nível do sistema operacional, podendo rodar em qualquer tipo de sistema operacional;

Não tem acesso a ponteiros do sistema operacional; Fornece dinamismo durante a manutenção de programas;

Portabilidade de Java

Quando se utiliza a maioria das linguagens de programação, precisa-se decidir qual o processador e qual o sistema operacional que usará para processar o programa, pois sempre incluem chamadas de funções específicas para uma biblioteca associada ao sistema operacional da plataforma específica.

(3)

Neste caso o “produto final” é um arquivo executável de instruções binárias nativas.

Vejamos a seguir por que Java é então escolhida por grande parte dos programadores de redes e sistemas de comunicação.

(4)

Imagine ainda que todos estes computadores estão em uma mesma sala, conectados por uma LAN – Local Area Network, ou então localizados em diferentes cidades, ou mesmo em mais de um continente do mundo, conectados via Internet.

O ponto principal é que todos os computadores estão executando diferentes Sistemas Operacionais (AIX, Windows NT, etc.) e em diferentes plataformas de hardware (PowerPC, Pentium II, etc.)

Suponha agora que se deseja escrever um programa na estação IBM e que o mesmo programa possa ser executado em todos os computadores conectados na rede.

Para resolver este problema, a linguagem Java provê em sua implementação um compilador e um sistema de execução chamado Java Virtual Machine (JVM) ou Máquina Virtual Java para cada sistema (computador).

O compilador Java (javac) traduz o código fonte para uma linguagem intermediária chamada bytecodes ou código de bytes.

E então a JVM converte o bytecode compilado para a linguagem de máquina própria do sistema e então executa o resultado. Vejamos a seguir.

Como mostrado, como origem tem-se três arquivos na estação IBM:

(5)

Com Java é então diferente da maioria das linguagens, uma vez que o arquivo de classe contém bytecodes para a JVM, tendo assim que executar uma implementação da JVM para processar o programa.

O Software Development Kit (SDK) da Sun inclui um interpretador chamado simplesmente java que implementa a JVM.

O compilador Java não gera instruções nativas. Ao invés disso, escreve bytecodes para uma máquina que na verdade não existe, a Máquina Virtual Java – Java Virtual Machine (JVM).

O compilador Java gera arquivos de bytecodes – instruções para a Java Virtual Machine.

Assim tem-se implementação da JVM para quase todo tipo de computador e sistema operacional e assim esses arquivos de bytecodes são compatíveis com quaisquer aplicações em outras plataformas.

JVM é de fácil portabilidade de uma máquina para outra, por isso você pode esperar que qualquer processador novo ou sistema operacional venham a ter brevemente uma implementação de JVM.

A arquitetura do Java não é nem radical nem especialmente nova.

Os aplicativos em Java são compilados em um código de bytes independente de arquitetura.

Esse código de bytes pode então ser executado em qualquer plataforma que suporte um interpretador Java.

(6)

Muitos Web Browsers (Netscape’s Communicator, Microsoft’s Internet Explorer, etc.) trazem embutidos uma implementação da JVM, e assim quando se carrega uma página que inclui código de instruções em Java, o browser habilita automaticamente a JVM, e após carregado o código, executa-o.

O sistema de implementação da JVM é um intrprtador, e isto significa qu a tradução e xecução das instruçõs do bytecode são realizadas ao memo tempo.

Este fato representa a possibilidade de uma execução mais lenta que um código executável nativo.

A linguagem Java também provê uma forma de compilação completa para código nativo de cada sistema independente, gerando uma execução mais rápida. Estes compiladores são chamados de “Just-In-Time” (JIT). Alguns web browsers podem trazer embutidos também estes compiladores JIT.

Os programas Java vêm na forma de applets que são carregados em um browser Web capacitado para Java.

O termo applet vem da marca <applet> que aparece em um documento HTML, que diz ao browser para descarregar o código Java apropriado.

Os arquivos fonte do Java são compilados em arquivos .CLASS que possuem código portável.

Máquinas cliente, como browsers Web, rodam o código Java usando um interpretador ou emulador de máquina virtual.

(7)

O que torna Java diferente de outras linguagens ?

Independência de plataforma

Portabilidade total (ideal para internet) Sintaxe similar a C++

Completamente Orientada a Objetos

Possui gerenciamento automático de memória

Possui arrays verdadeiros e não apresenta aritmética de ponteiros

Não possui herança múltipla mas a substitui pela nova noção de interface Possibilidade de criação de páginas Web interativas

Processa concomitantemente com outras aplicações, com as capacidades de cliente/servidor Versões: 1, 1.02, 1.1 e 1.2 (ou Java 2), 1.3

Características da linguagem Java

A documentação de Java fornecida pela Sun utiliza algumas palavras para definir a linguagem.

Java é uma linguagem definida como:

Simples

Orientada a objetos Robusta

Segura

Arquitetura neutra Portável

Interpretada Alta performance Dinâmica

Suporte a concorrência

Suporte a ambiente distribuído

O Java é então um C++ com as seguintes diferenças básicas:

Não tem ponteiros, que além de serem difíceis de usar poderiam comprometer seriamente a segurança Gerencia memória automaticamente ("garbage collection")

Só tem herança simples

Não permite sobrecarga de operadores e conversões automáticas Tem um tipo lógico

Possui um conceito de "módulo" bastante forte

Inclui rotinas para interagir com os protocolos da Internet, como TCP/IP, HTTP e FTP Suporta multihread (múltiplas "linhas" de execução em um mesmo aplicativo).

Java é case sensitive

(8)

1) Simples

Uma característica marcante de Java é a simplicidade da linguagem, que pode ser programada sem um treinamento intenso, ou larga experiência anterior.

Java se esforça por não ter recursos surpreendentes - os métodos para realizar qualquer tarefa são claros e em número reduzido.

Java foi criada tão unida quanto possível a C++ para se criar sistemas mais compreensíveis.

Um dos principais objetivos do projeto do Java foi criar uma linguagem o mais próxima possível do C++, para garantir sua rápida aceitação no mundo do desenvolvimento OO.

Java omite muitos termos pouco usados e operações confusas em C++ que trazem mais complicações que benefícios.

A versão Java é na verdade uma versão mais limpa de C++. Nela não há ponteiros aritméticos, estruturas, uniões, sobrecarga de operadores, classes básicas virtuais e etc.

Ao mesmo tempo que, é uma linguagem simples, existem aspectos sutis na construção de programas para o mundo real, dada a atual situação da biblioteca de classes e da não muito avançada programação visual.

Com o tempo os recursos tendem a aumentar mais e mais com a criação de bibliotecas e desenvolvimento de ambientes.

Outro objetivo do seu projeto foi eliminar os recursos obscuros e danosos do C++, que fugiam à compreensão e aumentavam a confusão que poderia ocorrer durante as fases de desenvolvimento, implementação e manutenção do software.

O Java é simples porque é pequeno.

O interpretador básico do Java ocupa aproximadamente 40k de RAM, excluindo-se o suporte a multitarefa e as bibliotecas padrão, que ocupam outros 175k.

(9)

2) Orientada a Objeto

A orientação a objeto é uma técnica que enfoca o modelo do dado (Objeto) e sua interface.

Durante a análise orientada a objeto, você é encorajado a identificar o domínio da aplicação como um conjunto de classes.

O Java é um membro do paradigma orientado a objetos (OO) das linguagens de programação.

Tudo são objetos (exceção tipos primitivos)

As linguagens que aceitam este paradigma, como Java e C++, seguem a mesma filosofia básica, mas diferem em sintaxe e estilo.

As linguagens orientadas a objetos oferecem muitas vantagens sobre as linguagens procedurais tradicionais.

Como os objetos encapsulam dados e funções relacionados em unidades coesas, é fácil localizar dependências de dados, isolar efeitos de alterações e realizar outras atividades de manutenção, e talvez o mais importante, as linguagens OO facilitam a reutilização.

As facilidades de orientação objeto de Java são essencialmente as de C++. As operações de OO de Java são comparáveis com as de C++.

A maior diferença entre Java e C++ está em múltipla herança, pois Java parece ter encontrado uma solução melhor.

Os programadores podem reutilizar código, utilizar bibliotecas de terceiros com proteção e encapsulamento, e adicionar funcionalidade às já existentes.

Os projetistas de Java, na Sun Microsystems, eram programadores de C++. Eles entenderam as características de C++ e o que havia de melhor na linguagem.

Eles também entenderam as limitações dessa linguagem. Ao projetar Java, eles copiaram a sintaxe de C++ e reutilizaram os melhores elementos do design de C++, inclusive tornando mais fácil a codificação dos design dos códigos de orientação a objetos.

A portabilidade é uma das características que se inclui nos objetivos almejados por uma linguagem orientada a objetos.

(10)

Java suporta herança, mas não herança múltipla. A ausência de herança múltipla pode ser compensada pelo uso de herança e interfaces, onde uma classe herda o comportamento de sua superclasse além de oferecer uma implementação para uma ou mais interfaces.

Java permite a criação de classes abstratas. Outra característica importante em linguagens orientadas a objetos é a segurança.

3) Robusta

Quanto mais robusto um aplicativo, mais confiável ele será. Isso é desejável tanto para os desenvolvedores de software quanto aos consumidores.

O projeto de Java visou a construção de uma linguagem para escrita de programas confiáveis.

Java enfatiza em muito a checagem em tempo de compilação de possíveis problemas, e em tempo de execução realiza a checagem dinâmica, e eliminação de situações que podem gerar erros.

A maior diferença entre C/C++ e Java é que Java por definição da própria linguagem elimina uma gama de erros que geralmente surgem em C/C++ quando utilizamos ponteiros.

Java não usa ponteiros, usa referências

Java fornece a funcionalidade de ponteiros sem que seja necessário criar estruturas para tal.

Estas estruturas eliminam a possibilidade de sobreposição de dados na memória corrompendo dados.

Java é designada para operar em ambientes onde segurança é extremamente importante, como o ambiente de rede.

A maioria das linguagens OO, como o C ++ e Java, possuem tipos bastante fortes. Isso significa que a maior parte da verificação de tipos de dados é realizada em tempo de compilação, e não em tempo de execução.

Java é fortemente tipada

Bom gerenciamento de memória - garbagge collection

Tratamento de exceções integrado e orientado à objeto

(11)

4) Segura

Como o Java foi criado para ambientes de rede, os recursos de segurança receberam muita atenção.

A presença de coleta automática de lixo, evita erros comuns que os programadores cometem quando são obrigados a gerenciar diretamente a memória (C , C++, Pascal ).

A eliminação do uso de ponteiros, em favor do uso de vetores, objetos e outras estruturas substitutivas traz benefícios em termos de segurança.

O programador é proibido de obter acesso a memória que não pertence ao seu programa, além de não ter chances de cometer erros comuns tais como “reference aliasing” e uso indevido de aritmética de ponteiros. Estas medidas são particularmente úteis quando pensarmos em aplicações comerciais desenvolvidas para a internet.

Ser “strongly typed” também é uma vantagem em termos de segurança, que está aliada a eliminação de conversões implícitas de tipos de C++.

A presença de mecanismos de tratamento de exceções torna as aplicações mais robustas, não permitindo que elas abortem, mesmo quando rodando sob condições anormais. O tratamento de exceções será útil na segunda parte para modelar situações tais como falhas de transmissão e formatos incompatíveis de arquivos.

Java permite a construção de sistemas livres de vírus

A maioria das maneiras óbvias de “invadir” um sistema não podem ser escritas em Java.

Java não pode ter acesso a rotinas globais nem a recursos arbitrários do sistema.

Se você executar um binário transferido por download da rede, o mesmo poderá estar infectado por vírus. Os aplicativos Java apresentam garantia de resistência contra vírus e de que não são infectados por vírus, pois não são capazes de acessar heaps, stacks ou memória do sistema.

No Java, a autenticação do usuário é implementada com um método de chave pública de criptografia. Isso impede de maneira eficaz que hackers e crakers examinem informações protegidas como nomes e senhas de contas.

Há duas linhas de defesa para evitar que programas como cavalos de Tróia e vírus infectem outras máquinas.

(12)

Segundo, você pode projetar a linguagem proibindo certas operações, como ler ou escrever no disco rígido local. Embora estas operações possam ser úteis a alguns programas, elas também são exploradas por programadores maliciosos.

Se você tem um programa que pode fazer qualquer coisa na máquina do usuário final, você tem uma vulnerabilidade séria.

Assim, o máximo que uma assinatura eletrônica pode garantir é que, se algo der errado e você puder determinar a origem do problema, isto é, qual o programa causador do problema, você poderá ter alguém a quem culpar.

Para garantir a segurança, os designers da Java implementaram um mecanismo chamado sandbox. O sandbox assegura que aquele não desejado (e possivelmente malicioso) applet tenha um limitado grupo de operações na máquina do usuário final.

Os arquivos do Java são compilados e são convertidos de arquivos texto para um formato que contém blocos independentes de bytecodes (Código Intermediário).

Em tempo de execução estes bytecodes são carregados, são verificados através do Byte Code Verifier (uma espécie de segurança), passam asseguir para o interpretador e são executados.

Caso este código seja acionado diversas vezes, existe um passo chamado JIT Code Generator, que elimina o utilização por demasia do tráfego da rede.

Runtime

Byte Code Verifier

Class

T1.class

Javac T1.java

(13)

5) Arquitetura Neutra

O Java é independente de arquitetura.

A neutralidade do Java em relação à arquitetura é fascinante, mas não se trata de um conceito novo.

Derivado da natureza distribuída de cliente/servidor, um importante recurso de projeto do Java é o suporte a cliente e servidores em configurações heterogêneas de rede.

O método escolhido para atingir esse objetivo foi uma representação binária de arquitetura neutra para os programas em Java.

Java é projetada para suportar aplicações que serão distribuídas para os diversos ambientes de trabalho em rede.

Nas várias plataformas de hardware, aplicações devem executar sobre um universo de sistemas operacionais e operar interagindo com outras linguagens de programação.

Isto é possível graças à arquitetura idealizada, onde o compilador Java gera um código binário para uma JVM (Máquina Virtual Java), uma arquitetura neutra e portável.

A natureza "interpretada" de Java resolve ambos os problemas de distribuição binária e de versão.

6) Portável

A característica de neutralidade da arquitetura Java é o grande motivo pelo qual os programas em Java são portáveis.

Outro aspecto da portabilidade envolve a estrutura ou os tipos de dados inerentes da linguagem, como inteiro, string e ponto flutuante.

Diferente de C/C++, não há aspectos de implementação dependentes da especificação.

O tamanho dos tipos primitivos são especificados, bem como os seus comportamentos aritméticos. Um inteiro tem sempre 32 bits, em C/C++ tem o tamanho da palavra da máquina.

O “bytecode” gerado pelo compilador para a sua aplicação específica pode ser transportado entre plataformas distintas que suportam Java (Solaris 2.3, Windows-NT, Windows-95, Mac/Os etc)

Não é necessário recompilar um programa para que ele rode numa máquina e sistema diferente, ao contrário do que acontece por exemplo com programas escritos em C e outras linguagens.

(14)

O próprio compilador Java é escrito em Java, de modo que ele é portável para qualquer sistema que possua o interpretador de “bytecodes”. Um exemplo de programa escrito em Java é o browser Hotjava.

Não existe aspectos dependentes da implementação (como tipos e interfaces)

7) Implementação Híbrida – Compilada e Interpretada

Os programas do Java são compilados em formato binário de código de bytes (bytecodes).

E então são interpretados por um ambiente de execução do Java específico da plataforma desejada.

Portanto é ao mesmo tempo compilado e interpretado.

O interpretador Java pode executar o código binário Java diretamente em alguma máquina para o qual ele tenha sido portado.

(15)

Esta é uma vantagem enquanto desenvolvemos uma aplicação, mas ela é claramente mais lenta que um código compilado.

Um programa em Java é compilado para o chamado “bytecode”, que é próximo às instruções de máquina, mas não de uma máquina real.

O “bytecode” é um código de uma máquina virtual idealizada pelos criadores da linguagem. Por isso Java pode ser mais rápida do que se fosse simplesmente interpretada.

Ambiente (windows, Unix, Solaris, Macintosh)

Máquina Java

Aplicação Java (bytecodes)

8) Alta Performance

Enquanto a performance do código binário interpretado é geralmente adequado, há situações onde maior performance é requerida. O código binário pode ser traduzido em tempo de execução para outro código de máquina para ser executado em uma aplicação de uma CPU particular.

Como Java foi criada para ser usada em computadores pequenos, ela exige pouco espaço, pouca memória.

Java é muito mais eficiente que grande parte das linguagens de “scripting” existentes, embora seja cerca de 20 vezes mais lenta que C, o que não é um marco definitivo.

Com a evolução da linguagem, serão criados geradores de “bytecodes” cada vez mais otimizados que trarão as marcas de performance da linguagem mais próximas das de C++ e C.

(16)

9) Dinâmica

Java é mais dinâmica que C/C++.

O projeto dinâmico permite que os programas Java se adaptem aos ambientes computacionais mutantes.

Em Java descobrir o tipo de uma instância em tempo de execução é algo extremamente simples.

Por exemplo, a maior parte dos desenvolvimentos típicos em C++ se baseia muito em bibliotecas de classe que podem ser de propriedade e desenvolvida por terceiros. Muitas bibliotecas de terceiros, como as distribuídas com sistemas operacionais ou sistemas de janelas, são linkeditadas dinamicamente e vendidas ou distribuídas separadamente dos aplicativos que delas dependam. Quando essas bibliotecas são atualizadas, os aplicativos que dependerem dela poderão apresentar problemas, até que sejam recompilados e redistribuídos. Isso adiciona mais um custo à manutenção do software.

O Java evita esse problema atrasando a união dos módulos. Isso permite que os programadores tirem total proveito da orientação a objetos.

É possível adicionar novos métodos e variáveis de instâncias em classes de bibliotecas, sem causar problemas aos programas, aplicativos ou clientes já existentes.

10) Suporte a concorrência (Threads)

Concorrência é a habilidade para um programa fazer mais de uma coisa por vez.

Os benefícios de multiprocessamento são melhor sensibilidade interativa e comportamento em tempo real.

Java suporta multiprocessamento no nível de linguagem com a adição de sofisticada sincronização.

A linguagem permite a criação de maneira fácil, de vários “threads” de execução.

Este tópico será útil quando você estudar animações, e é particularmente poderoso nos ambientes em que aplicações Java são suportadas, ambientes estes que geralmente podem mapear os threads da linguagem em processamento paralelo real.

(17)

O Java é multitarefa.

Os objetos binários de códigos de bytes do Java são formados por sequências de execução múltiplas e simultâneas. Essas sequências são conhecidas como contextos de execução ou processos leves. As liguagens C/C++ são membros de um paradigma de execução em sequência única, por não oferecerem suporte a sequências no nível de linguagem.

O Java, no entanto, oferece suporte no nível de linguagem para multitarefa, resultando em uma abordagem de programação mais poderosa e de múltiplas facetas.

11) Suporte a ambiente distribuído

Java fornece facilidades para programação com sockets, remote method call, tcp-ip, etc.

Distribuição de informações para compartilhamento e trabalho conjunto, com a distribuição de carga de trabalho do procesamento, é uma característica essencial dos aplicativos cliente/servidor.

Java possui uma biblioteca extensa de procedimentos TCP/IP incluída nos códigos-fonte e de distribuição binária do Java. Isso facilita aos programadores o acesso remoto às informações, usando protocolos como HTTP e FTP.

Aplicações Java podem abrir e acessar objetos através da rede via URL’s com a mesma facilidade com que acessa o sistema de arquivos local.

Garbage Collection (Coleta Automática de Lixo)

O Java não segura áreas de memória que não estão sendo utilizadas, isto porque ele tem uma alocação dinâmica de memória em tempo de execução.

No C e C++ (e em outras linguagens) o programa desenvolvido é responsável pela alocação e desalocação da memória.

Durante o ciclo de execução do programa o Java verifica se as variáveis de memória estão sendo utilizadas, caso não estejam o Java libera automaticamente esta área que não esta sendo utilizada.

A desalocação do objeto é feita pela linguagem, (“automatic garbage collection”), você não precisa se preocupar com ela.

(18)

Ambiente de Desenvolvimento com JAVA

Para escrever em Java você precisa do editor, do compilador Java e do Java Runtime Environment.

O modo mais fácil para adquirir um compilador Java e um ambiente de processamento é carregar o Sun Software Development Kit (SDK).

O SDK também inclui uma variedade de ferramentas para qualquer desenvolvedor de Java (você vai ter que providenciar seu editor de texto).

O primeiro passo para escrever um programa em Java é adquirir uma cópia do Software Development Kit (SDK) da Sun.

Embora seja possível escrever Java sem o SDK, não há nenhuma boa razão para fazer isso.

O SDK é grátis e executa na maioria das plataformas mais comuns. Outras companhias, como a IBM, suprem Java para ambientes de desenvolvimento para uma variedade de computadores.

Bibliotecas básicas

JDK - Java Development Kit

http://java.sun.com http://www.sun.com

Ambientes de desenvolvimento Java Workshop - Sun

Jbuilder - Borland Visual Café - Symantec Visual Age - IBM

Power J - Powersoft Visual J++ - Microsoft

A Sun desenvolveu Java para executar em qualquer máquina.

Uma cópia típica do instalador do SDK, requer aproximadamente, 20MB.

Você também vai precisar de outros 30MB de espaço em disco para a documentação.

(19)

Examine o diretório no qual você instalou o JDK. Você encontrará as seguintes seis pastas:

bin – as próprias ferramentas executáveis do JDK;

demo – uma variedade de applets, como também código de amostra para Java Foundation Classes (JFC);

docs – documentação extensa em Java;

include – em C e C++, arquivos cabeçalho, utilizados para construir o ambiente de Java; lib – bibliotecas e arquivos (em formatos .lib, .zip e .jar) usados pelo JDK;

src – a fonte das bibliotecas Java da Sun. Use esta fonte para aprender como as classes da Sun trabalham.

A ferramenta mais importante no JDK é o javac, o compilador Java. O javac traduz o código-fonte com as ilustrações para Java Virtual Machine (JVM).

Para a maior parte do seu trabalho com o JDK, você irá querer executar aplicações usando o iniciador de aplicações Java, chamado java (em versões anteriores do JDK, chamado interpretador Java, porém, o nome mais preciso é iniciador de aplicação).

Quando você digitar java MyClass, o iniciador examina a classe chamada MyClass para um método especial chamado main ( ).

Programas de Java são conhecidos como aplicações, considerando que os programas que trabalham com a ajuda de outro programa (tipicamente um browser da Web) são conhecidos como applets.

O que é uma APPLET ?

Applet é um programa especial escrito em Java adaptado para instalação e execução dentro de páginas HTML. Estas páginas podem então ser visualizadas num browser.

O que é uma APLICAÇÃO ?

Aplicação é um programa mais geral escrito na linguagem Java. Não requer um browser para sua execução. De fato, Java pode ser usada para criar todo tipo de aplicações que usualmente você implementa com outras linguagens mais convencionais.

O que é o APPLETVIEWER?

(20)

O que é APPLET no WWW

As applets são disparadas quando se carrega uma página HTML. A seguir há um exemplo de código HTML que dispara uma applet.

<HTML> <HEAD>

<TITLE> Java </TITLE> </HEAD>

<BODY>

<APPLET CODE=”nome.class” WIDTH=300 HEIGHT=100> </APPLET>

</BODY> </HTML>

Criando uma APLICAÇÃO

Para começar, criaremos uma simples aplicação em Java: a clássica “Hello World!”, o exemplo que todos os livros de linguagens usam.

Como todas as linguagens de programação, o código fonte será criado em um editor de texto ASCII puro. No Unix alguns exemplos são emacs, pico, vi e outros. No Windows, notepad ou dosedit também servem.

A seguir, o código da aplicação “Hello World!” (arquivo: HelloWorld.java):

class HelloWorld {

public static void main (String args[]) {

System.out.println(“Hello World!”); }

}

Criando uma APPLET

Criar uma applet é diferente de criar uma simples aplicação porque uma applet é executada e visualizada dentro de uma página HTML. Como exemplo, novamente será implementada a clássica “Hello World!”.

A seguir, o código da aplicação “Hello World!” (arquivo: HelloWorldApplet.java): import java.awt.Graphics;

(21)

Quem precisa de applets?

Por que alguém precisaria trocar o browser por applets? Muitos Web designers querem ir além da simples exibição de conteúdos estéticos. Eles querem páginas dinâmicas que possam interagir com o usuário. Freqüentemente, o melhor modo para adicionar conteúdo dinâmico é escrever um programa em Hipertext Markup Language (HTML), que é usado para escrever páginas da Web.

Os browsers da Netscape e da Microsoft suportam scripts de linguagens como JavaScript. Essas linguagens permitem adicionar funções a elementos de HTML, como botões, porém você não terá controle completo sobre o desenho na interface do usuário. Você não pode usar essas linguagens de script para conectar a máquina do cliente através de uma rede, assim você não pode escrever verdadeiros programas de cliente-servidor. Às vezes você precisa de uma solução mais poderosa do que essas linguagens de scripts; você precisa de uma solução que não dependa de um browser em particular. Nesses momentos, um applet Java é o ideal.

Você adiciona um applet Java na sua página Web, usando o tag HTML, <APPLET>. Como Java roda em qualquer plataforma, o applet trabalhará como esperado, contanto que o usuário local utilize um browser que suporte Java.

Applets têm mais restrições de segurança do que as aplicações

Os comentários aqui apresentados sobre segurança são voltados aos applets, não para as aplicações. Um usuário final pode inicializar um applet simplesmente carregando uma página Web; assim applets precisam de uma segurança mais rígida. Os usuários finais precisam instalar as aplicações; assim, somente para as aplicações é permitido executar as capacidades que são negadas aos applets.

Verificação de JVM

Suponha que você tenha escrito um applet Java e o tenha compilado em um arquivo de classe. Você usa este applet na sua página Web. Quando um usuário final usa um browser Java para fazer donwload da página, ele também carrega o applet. Para garantir que o applet não acesse os recursos de sistema contidos no disco rígido, Java Virtual machine (JVM), anexado ao browser, executa várias verificações.

(22)

Esses três mecanismos trabalham juntos para garantir que: • só as classes próprias sejam carregadas;

• cada classe esteja no formato adequado;

• classes não desejadas executem instruções perigosas;

• classes não desejadas tenham acesso aos recursos do sistema.

O Security Manager tem que coordenar as tentativas do applet para acessar a qualquer momento:

• comunicações de rede;

• informações protegidas 9inclusive o disco rígido ou dados pessoais); • programas e processos que trabalham ao nível do sistema operacional; • iniciador de classes;

• bibliotecas de classe Java (conhecidas como pacotes).

Níveis de proteção de linguagem

Muitas linguagens, como as Smalltalk, permitem ao programador converter facilmente objetos de um tipo em objetos de um outro tipo. Esta sintaxe livre permite aos programadores escreverem códigos mais rapidamente, mas também dá oportunidades ao programador malicioso (para não mencionar as “deixas’ para defeitos de software).

Linguagens digitadas com mais restrições, como Ada, são pouco mais difíceis de usar, mas geralmente resultam em programas com menos defeitos e códigos mais cutos. Por isso, linguagens mais livres de restrições de digitação são populares e freqüentemente usadas na elaboração de códigos.

Em geral, muito da força de C e de C++ vem da capacidade de essas linguagens usarem ponteiros – variáveis que armazenam endereços de memória de outros dados. Às vezes você pode ver descrições de Java que reclamam que a linguagem não tem ponteiro. O fato é que tudo em Java está em ponteiros – só que eles não são nem um pouco acessíveis ao usuário.A razão pela qual os ponteiros são “invisíveis” é que os designers de Java removeram a propriedade que permite apontar um ponteiro para um local arbitrário.

Como gerar a documentação

(23)

O que é javadoc?

Para criar a documentação para o pacote Java, você usa o javadoc. Mesmo que você não tenha pensado em incluir comentários em seu código-fonte, você obterá algum uso do javadoc. Entre suas qualidades, está a geração de uma página HTML para todo arquivo .java e para o pacote como um todo. Também produz uma hierarquia de classes (tree.html), e um índice (AllNames.html). Para cada arquivo .Java, o javadoc registra o nome da classe e a assinatura completa de cada método.

As Bibliotecas de Classes do Java

Fornecem um conjunto de classes previamente implementadas pelo desenvolvedor da linguagem.

São as únicas com suporte garantido em todos os ambientes comerciais Java.

Os detalhes de uso e sua implementação são descritos na documentação da API.

Outras bibliotecas podem eventualmente existir em certos ambientes de desenvolvimento comerciais, mas não há garantia de essas classes extra funcionarem em todos os ambientes comerciais Java.

(24)

Descrição Sucinta das Bibliotecas de Classes Java

Um dos benefícios dos programas orientados a objeto é achar outra pessoa que já escreveu parte do nosso programa e simplesmente chamar o seu código.

Biblioteca

Descrição

java.lang

Classes que contém a linguagem propriamente dita. Inclui as

classes

Object, String e

System

, além das especiais para tipos

primitivos (

Integer, Character, Double

, etc.

java.util

Utilitários em geral, como

Date, Vector, Hashtable

, etc.

java.io

Classes para controle de entrada e saída de dados e manuseio de

arquivos.

java.net

Apoio a redes, incluindo

Socket e URL

java.awt

Abstract Window Toolkit

Contém classes para implementar interfaces gráficas com o

usuário. Inclui classes para janelas, botões, etc. Também possui

classes para o processamento de imagens (

java.awt.Image

)

java.applet

Fornece classes para o apoio à construção de applets, como

Applet, Audio

, etc.

Os engenheiros da Sun têm escrito muitos códigos que podemos usar – eles estão empacotados em bibliotecas que começam com nomes como Java, sun e javax.

A biblioteca padrão de classes do Java começou pequena mas está crescendo a cada dia que passa. Ela implementa as funções matemáticas de I/O da biblioteca padrão C, um conjunto de tipos de dados tais como o Integer, String e Tabela Hash com seus métodos servidores, linha ("threads"), sockets e um sistema GUI chamado AWT.

Programas em JAVA

As fontes dos programas em Java são aquivos-texto normais, como os de qualquer outra linguagem de alto nível, com extensão ".java".

Depois de escritos, os programas são compilados em um "compilador Java" e gravados em um formato especial, com extensão ".class".

(25)

Este esquema, embora complexo, tem várias vantagens.

A performance é melhor e ele não é amarrado a qualquer equipamento ou sistema operacional em especial.

Para construir uma aplicação, você precisa ter o JDK instalado. Depois disso, você seguirá um processo de três passos:

Entre no código, em um arquivo de texto.

Compile todas as classes usando o Compilador - javac. Execute a aplicação usando a JVM - java.

A Sun (empresa responsável pelo projeto Java) sugere várias convenções de nomes quando se escreve em Java.

O compilador não se preocupa como você chama suas classes e métodos, mas se você seguir os nomes convencionados, o seu código pode ser um pouco mais flexível na sua manutenção.

Os nomes convencionados são:

Nomes de classe usarão nomes misturados. No início, com uma letra maiúscula. Por exemplo: NativeHello e HeeloWorld, não nativeHello ou Helloworld;

Métodos usarão casos misturados, com o seu começo com uma letra minúscula. Assim, escreva sayHello ( ) não SayHello ( ) ou sayhello ( );

Nomes de membros de dados seguirão a mesma convenção, como os métodos. Assim você poderá querer um membro nomeado como thePoint, ou ThePoint ou thepoint;

Constantes, no geral, são escritas com maiúsculas. Assim, escreva PI e não pi;

Para acesso aos métodos, você utilizará nomes em conjunto como get ou set. Desse modo, para saber a capacidade de um caminhão, você precisará seguir o método chamado getCapacity ( ). Para saber o destino, você utilizará setDestination ( );

Se o membro de dados for boleano, é melhor usar is ou has em lugar de get, como um prefixo. Dessa forma, para ver se um caminhão tem um destino, a chamada será hasDestination ( ). Para saber se o caminhão está disponível, a chamada será isAvailable ( ).

Convenções adicionais para aumentar a eficácia das leituras

(26)

finais. Esta convenção nos ajuda a distinguir classes que nós construímos daquelas obtidas no Sun API.

Vamos começar os membros protected e private (métodos e dados) com um sublinhado (_) inicial.

Vamos denotar as constantes com um k minúsculo inicial, assim a taxa de imposto do caminhoneiro será kTaxRate. (Esta convenção é o contrário da convenção você achará no JDK, no qual as constantes são todas escritas em maiúsculas).

Vamos dar às variáveis locais e parâmetros nomes que começarão com a ou the.

Vamos evitar as abreviações, se não você teria que adivinhar o método de capacidade dos caminhões: getCap ( ), getCpcty ( ) ou getCapacity ( ).

Aqui, uma convenção para suas designações: evite usar membros de dados públicos. Force o acesso a membros de dados para passar por funções de acesso.

Em Java, você define uma classe como o ponto de partida de sua aplicação.

O usuário final chamará o método main ( ), daquela classe, e o seu trabalho se iniciará.

Contanto que você trabalhe em Java, aceite o fato de que todo pedaço de dados e todo método, inclusive main ( ), pertencerá ao interior de alguma classe.

O Java carrega todo o código dinamicamente em runtime e carrega o código classe por classe. Quando o compilador Java compila um arquivo fonte, cada classe aparece em um arquivo .class separado.

Todas as funções devem ser métodos de alguma classe. Por exemplo, funções matemáticas, tais como seno, estão implementadas como métodos da classe Math.

Tudo em um programa Java tem que estar dentro de uma classe

As únicas estruturas que não são classes em Java são os oito tipos primitivos de dados

Um arquivo fonte Java deve ter o mesmo nome de sua classe principal e a extensão .java

Um programa Java deve ter seu código traduzido para bytecodes antes da execução

(27)

Primeiro Programa em JAVA

public class Oi {

public static void main(String args[]) {

System.out.println(“Oi! Eu sou o Java.”); }

}

javac java

Oi.java

Î

Oi.class

Î

(Execução)

(texto) (compilador) (bytecode) (JVM)

Ponto e vírgula, Blocos e o espaço em branco

No java, os comandos são terminados com o sinal de ponto e vírgula (;)

Um bloco tem início e tem o seu fim representados pelo uso das chaves {};

O uso do espaço em branco permite uma melhor visualização dos comandos e em conseqüência facilita a sua manutenção.

Princípios que você usará para escrever qualquer aplicação Java:

A classe é declarada para ser pública.

A classe contém um membro nomeado: main ( ).

O método main ( ) é declarado para ser público estático e retorno como void.

public class Oi {

class é a palavra reservada que marca o inicio da declaração de uma classe. Public é um especificador, por enquanto guarde public class como o início da declaração de uma classe. Toda classes serão declaradas assim até avançarmos em outros conceitos.

(28)

public static void main (String args[]) { System.out.println("Oi! Eu sou o Java."); }

public

É um qualificador do método que indica que este é acessível externamente a esta classe (para outras classes que eventualmente seriam criadas), não se preocupe com ele agora, apenas declare todos os métodos como public.

static

É um outro qualificador ou “specifier”, que indica que o método deve ser compartilhado por todos os objetos que são criados a partir desta classe. Os métodos static podem ser invocados, mesmo quando não foi criado nenhum objeto para a classe, para tal deve-se seguir a sintaxe: <NomeClasse>.<NomemetodoStatic>(argumentos);. Retornaremos a esta explicação mais tarde, por hora você precisa saber que particularmente o método main precisa ter essa qualificação porque ele é chamado sem que se crie nenhum objeto de sua classe.

void

Semelhante ao void C++ ou C, é o valor de retorno da função, quando a função não retorna nenhum valor ela retorna void, uma espécie de valor vazio que tem que ser especificado.

main

Este é um nome particular de método que indica para o compilador e a máquina virtual (JVM) o início do programa, é dentro deste método e através das iterações entre os atributos, variáveis e argumentos visíveis nele que o programa se desenvolve.

(String args[])

É o argumento de main e por consequência do programa todo, ele é um vetor de Strings que é formado quando são passados ou não argumentos através da invocação do nome do programa na linha de comando do sistema operacional, exemplo:

java Oi argumentotexto1 argumentotexto2

{ ... }

“Abre chaves” e “fecha chaves”. Para quem não conhece C ou C++, eles podem ser entendidos como algo semelhante ao BEGIN e END de Pascal ou Modula-3, ou seja: delimitam um bloco de código. Os programadores Pascal notarão que variáveis locais dos métodos podem ser declaradas em qualquer local entre as chaves. Mas por motivos de clareza do código declararemos todas no início do abre chaves.

System.out.println("Oi! Eu Sou o Java.");

(29)

}

Finalmente o fecha chaves termina com a declaração da classe Oi.

Conclusão:

Normalmente o volume de conceitos presentes num primeiro programa de uma linguagem orientada a objetos como Java ou Eiffel é grande se comparado com o de um primeiro programa em C ou Pascal. Esses conceitos ainda serão aprofundados e são citados aqui apenas por curiosidade, é normal que você não tenha entendido tudo.

(*) De agora em diante não explicaremos mais como compilar os programas.

Exercício:

Experimente fazer modificações no programa Oi. Imprima outras mensagens na tela, adicione comentários, conforme explicação a seguir.

Comentários

Computer programs are read by two kinds of entities: compilers and humans. The compiler requires the source code text to conform exactly to its syntax rule. For example, the semicolon must follow the right parenthesis on the third line of the HelloWorld program. Humans are not so particular about how instructions are given, but they often do need more explanation about what the instructions mean. Programming languages allow such explanations to be included with source code. They are called comments, and are ignored by the compiler.

There are two ways to write comments in Java. A C style comment begins with the symbol pair /* and ends with the symbol pair */. A C++ style comment begins with the symbol pair // and ends with the end of the text line. The C style comments can be used between compilable code on the same line, like this:

public /* access */ class /* declaration */ HelloWorld

but this is not recommended. More often, Java programmers use the C style for a multi-line comment, like this:

/* This program prints the single line of output: Hello, World!

(30)

C++ style comments are often used to annotate declarations and statements, like this:

public class TestFrame // tests the Frame class

{ public static void main (String [] args) { Frame frame =new Frame (“Example 9.1”);

frame.setSize(250, 100); // 250 pixels wide and 100 pixels high

frame.setVisible (true); // displays the frame on the screen

} }

The text shown here in boldface is ignored by the compiler. Multi-line comments can also be done in the C++ style:

// This program prints the single line of output: // Hello, World!

Adding comments to your programs is called documenting your code. This should be done whenever the purpose or meaning of the code might not be clear to human readers. It is also good to include a header comment at the beginning of every program that identifies the programmer and the program.

Estes são os três tipos permitidos de comentários nos programas feitos em Java:

// comentário de uma linha

/* comentário de uma ou mais linhas */

Referências

Documentos relacionados

Da análise dos resultados foi possível concluir que a composição com pó de vidro tem como pontos fortes a sua porosidade, sendo a composição sem fibras que apresentou o

Centro para Organização da Atenção à Saúde, Secretaria Municipal de Saúde, Prefeitura da Cidade de São Paulo-SP.. Norma

A análise das competências e tendências relacionadas ao perfil de Gestão da Inovação possibilita observar a relevância dada pelos setores produtivos a este

“Ora, a multiplicidade não pode haurir sua realidade senão das unidades verdadeiras, que têm outra origem e são bem distintas dos pontos matemáticos, que não são nada além

Em relação aos objetivos, a pesquisa é do tipo exploratória (pretende discutir um problema relativamente pouco investigado) e descritiva (devida à caracterização

Posteriormente, o mesmo autor, Viveiros de Castro, pro- pôs o termo perspectiva, para estabelecer que, muito resumidamente, tudo depende da posição singular de onde o

Objetivo específico foi avaliar duas ligas metálicas básicas (Ni-Cr e Co-Cr) comparadas a uma liga áurica quanto à resistência à ruptura e limite de resistência.. H2) A liga de

Termelétrica a Carvão – obtenção de vapor para girar turbina, geralmente através de combustão pulverizada (carvão bem moído 0,5 a 1,5mm), obtém-se até 43% de eficiência total