(Parte 1 de 12)

Introduçªo a Linguagem Java

Apostila desenvolvida por Alexandre de

Souza Pinto (Engenheiro de Computação – Unicamp Mestre em Engenharia Eletrica – Unicamp, Consultor da Software Design Informática-Campinas, SP) e formatada por Marco Aurélio Lopes Barbosa

Pág 1

1.1 Um Pouco de História5
1.2 Por que Java é tão Interessante?6
1.3 Como Java Pode Mudar Minha Vida?8
1.4 Mas Afinal, o Que Java Pode Fazer?9
1.5 Arquitetura Java10
1.6 Desenvolvendo os Primeiros Programas em Java12
1.7 Exercícios:16
2. CONCEITOS DE ORIENTAÇÃO A OBJETOS17
2.1 Conceitos Básicos17
2.2 Características da Tecnologia de Objetos20
2.3 Exercícios23
3. DIFERENÇAS ENTRE JAVA E C/C++24
4. CONSTRUÇÕES BÁSICAS DA LINGUAGEM JAVA28
4.1 Variáveis e Tipos de Dados28
4.2 Operadores31
4.3 Expressões35
4.4 Controle de Fluxo37
4.5 Arrays e Strings42
4.6 Exercícios45
5. CLASSES E OBJETOS EM JAVA46
5.1 Classe46
5.2 Ciclo de Vida de um Objeto48
5.3 Liberando Objetos não mais Utilizados52
5.5 Exercícios76
6. OUTRAS CARACTERÍSTICAS DA LINGUAGEM JAVA80
6.1 Herança80
6.2 Ocultando variáveis81
6.3 Redefinindo (overriding) métodos82
6.4 Métodos e Classes Abstratas83
6.5 Classes e Métodos Finais85
6.6 Interfaces86
6.7 Utilizando Interfaces como Tipos de Dados91
6.8 Pacotes (Packages)92
6.9 Gerenciando Arquivos Fonte e Arquivos de Classe95
6.10 Exercícios97
7. INTERFACE GRÁFICA100
7.1Widgets100
7.2 Inserindo Widgets em Applets106
7.3 Modelo de Eventos do Java (1.1)107
7.4 Gerenciadores de Layout (Layout Managers)112
7.5 Cores e Fontes113
7.6 Exercícios114
8. APPLETS115
8.1 Introdução115
8.2 Ciclo de Vida de um Applet116
8.3 Métodos Utilizados para Desenho e Tratamento de Eventos117
8.4 Mostrando Imagens Dentro de um Applet118
8.6 Exercícios119
9. THREADS120
9.1 O que é uma Thread120
9.2 Utilizando o Método run de uma Thread121
9.3 Ciclo de Vida de uma Thread123
9.4 Sincronização de Threads125
9.5 Exercícios126
10. ENTRADA E SAÍDA127
10.1 Introdução127
10.2 Leitura e Escrita de Arquivos127
10.3 Entrada e Saída de Dados (Padrão)129
10.4 Exercícios130

“You know you've achieved perfection in design, Not when you have nothing more to add, But when you have nothing more to take away.”

Antoine de Saint Exupery

1. Introdução

Nunca anteriormente nenhuma nova linguagem de programação recebeu tanta atenção e tornou-se tão popular em tão pouco tempo. Desde o seu surgimento, Java tornou-se uma escolha atraente para o desenvolvimento de aplicações Internet/intranet. O fenômeno Java cativou a imaginação de programadores em todo mundo e está proporcionando o desenvolvimento de uma nova geração de aplicações distribuídas.

1.1 Um Pouco de História

Em 1990, um senhor chamado James Gosling recebeu a tarefa de criar aplicações para eletrodomésticos. Gosling e sua equipe, da Sun Microsystems, começaram a desenvolver seu software utilizando C++, uma linguagem considerada atual devido às suas características de orientação a objetos. Entretanto, Gosling e sua equipe perceberam rapidamente que C++ não era a linguagem mais adequada para aquele projeto. Aspectos do C++, como herança múltipla de classes e leaks de memória, dificultavam bastante o desenvolvimento das aplicações.

Então, Gosling chegou a uma conclusão simples: era necessário criar sua própria linguagem de programação. Esta linguagem deveria ser simples o bastante para evitar todos aqueles problemas que estavam relacionados com o C++.

Para desenvolver esta nova linguagem, Gosling usou o próprio C++ como modelo, aproveitando a sintaxe básica da linguagem e a sua natureza orientada a objetos e retirando aquelas características que tornavam a linguagem mais complexa. Ao terminar de projetar sua nova linguagem, Gosling a chamou de Oak (pinheiro, em inglês. Este nome surgiu pois, da janela do escritório de Gosling, pode-se observar um belo pinheiro).

Oak foi usado pela primeira vez em um projeto chamado Green, onde tentou-se projetar um sistema de controle remoto para uso doméstico. Este sistema permitiria ao usuário controlar vários dispositivos (TV, video-cassete, luzes, telefones, etc.) a partir de um computador portátil chamado *7 (Star Seven). Oak também foi utilizado em um projeto de vídeo sob demanda (Video on Demand, VOD) como base para um software de controle de uma TV interativa. Apesar dos projetos Green e VOD não tenham gerado produtos comerciais, eles proporcionaram a linguagem Oak uma chance de desenvolver-se a amadurecer.

Depois de algum tempo, a Sun descobriu que o nome Oak já estava registrado por outra companhia e decidiu trocar o nome da linguagem para Java (segundo a lenda, em

Pág 5 homenagem ao gosto da equipe por café. Java é uma ilha da Indonésia famosa por produzir tal bebida).

Em 1993, depois da World Wide Web ter transformado a Internet em um ambiente rico em gráficos, a equipe Java percebeu que a linguagem que desenvolveram era perfeita para programação Web. Surgiu então o conceito de applets, pequenos programas que podiam ser incluídos em páginas Web. Além disto, desenvolveram um browser Web completo (chamado HotJava) para demonstrar o poder da linguagem Java.

No segundo trimestre de 1995, a Sun anunciou oficialmente o Java. A “nova” linguagem foi rapidamente considerada como uma poderosa ferramenta para desenvolver aplicações Internet. A Netscape Communications, que desenvolve o browser Netscape, adicionou suporte a Java na versão 2.0 do seu navegador. Outros fornecedores de browsers, como a Microsoft (Internet Explorer 3.0), também seguiram o exemplo.

1.2 Por que Java é tão Interessante?

A linguagem Java foi projetada para atender às necessidades do desenvolvimento de aplicações em um ambiente distribuído (rede) e heterogêneo. Um dos desafios fundamentais está relacionado com a instalação segura de aplicações que consumam o mínimo de recursos do sistema, possam executar em qualquer plataforma de hardware e software e possam ser estendidas dinamicamente.

A seguir, são apresentadas algumas características da linguagem Java que a tornam tão interessante e adequada para o desenvolvimento de uma nova geração de aplicações.

1.2.1 Simples, Orientada a Objetos e Familiar

Uma das características principais de Java é a simplicidade da linguagem, não sendo necessário um extensivo treinamento por parte dos programadores. Os conceitos fundamentais de Java são absorvidos rapidamente e, portanto, os programadores conseguem ser produtivos em pouco tempo. Por ser parecida, o máximo possível, com C++, Java acaba se tornando uma linguagem familiar pois possui o “look and feel” do C++.

Java, ao contrário de C++, foi projetada desde o início para ser orientada a objetos. O paradigma de orientação a objetos, criado a cerca de 30 anos, provou-se adequado para o desenvolvimento dos sistemas atuais, cada vez mais complexos.

A linguagem é acompanhada de um grande número de bibliotecas de classes já testadas e que proporcionam várias funcionalidades (E/S, networking, interface gráfica, multimídia, etc.). Estas bibliotecas podem ser facilmente estendidas, de acordo com as necessidades da aplicação em particular, via herança.

Pág 6

1.2.2 Robusta e Segura

Java foi projetada para criar software altamente confiável. Além de prover verificações durante a compilação, Java possui um segundo nível de verificações (em tempo de execução). As próprias características do Java ajudam o programador a seguir bons hábitos de programação.

O modelo de gerência de memória é extremamente simples: objetos são criados por meio

elimina-se um importante tipo de erro que atormentava os programadores C++

de um operador new. Não existem tipos como apontadores, nem aritmética de apontadores. A liberação da memória dos objetos que não são mais referenciados é feita por meio de um mecanismo chamado garbage collection (coleta de lixo). Desta forma,

Como Java foi desenvolvida para operar em ambientes distribuídos, aspectos de segurança são de fundamental importância. A linguagem possui características de segurança e a própria plataforma realiza verificações em tempo de execução. Assim, aplicações escritas em Java estão “seguras” contra códigos não autorizados que tentam criar vírus ou invadir sistemas de arquivos.

1.2.3 Arquitetura Neutra e Portável

Para suportar a distribuição em ambientes heterogêneos, as aplicações devem ser capazes de executar em uma variedade de sistemas operacionais e de arquiteturas de hardware. Para acomodar esta diversidade de plataformas, o compilador Java gera bytecodes, um formato intermediário neutro projetado para o transporte eficiente em múltiplos ambientes de software/hardware. Assim, a natureza interpretada de Java resolve o problema de distribuição de código binário.

A neutralidade da arquitetura é apenas uma parte de um sistema verdadeiramente portável. Java também define os tamanhos de seus tipos básicos e o comportamento de seus operadores aritméticos. Desta forma, não existem incompatibilidades de tipos de dados entre arquiteturas de software/hardware diferentes.

Esta arquitetura neutra e portável é chamada de Máquina Virtual Java (Java Virtual Machine, JVM, seção ).

1.2.4 Alto Desempenho

Desempenho é um fator que sempre deve ser levado em consideração. O interpretador da linguagem possui algumas otimizações que permitem a execução mais eficiente de código Java. Além disto, aplicações que necessitam de grande poder computacional podem ter suas seções mais críticas reescritas em código nativo (compilado a partir da linguagem C, por exemplo).

Obviamente, pela característica interpretada da linguagem, seu desempenho, em geral, é inferior ao de linguagens compiladas para linguagem de máquina (C++, por exemplo).

Pág 7

Existem soluções como compiladores Just-in-Time (JIT), que compilam os byte-codes Java para a linguagem nativa da máquina em particular, que podem melhorar consideravelmente o desempenho das aplicações. Atualmente, pode-se dizer que, para aplicações fundamentalmente interativas, os usuários não notam diferenças significativas entre aplicações desenvolvidas em Java e outras linguagens compiladas.

1.2.5 Interpretada, Multithreaded e Dinâmica

O interpretador da linguagem Java pode executar os bytecodes em qualquer máquina onde exista o ambiente de execução (run-time environment) instalado. Pela característica interpretada da linguagem, a fase de ligação (linking) de um programa é simples, incremental e leve. Assim, o ciclo de desenvolvimento, prototipação e testes tende a ser mais rápido do que o método tradicional (compilar, ligar e testar).

Aplicações de rede, como browsers, tipicamente precisam realizar várias tarefas “simultaneamente”. Por exemplo, um usuário utilizando um browser pode rodar várias animações enquanto busca uma imagem e faz um “scroll” da página Web. A capacidade da linguagem Java de executar várias threads dentro de um programa (processo) permite que uma aplicação seja construída de tal forma que para cada atividade seja reservada uma thread exclusiva de execução. Assim, obtem-se um alto grau de interatividade com o usuário da aplicação.

Java suporta multithreading no nível da linguagem (suporte nativo e não por meio de bibiotecas externas). Além disto, a linguagem oferece uma série de primitivas sofisticadas de sincronização (semáforos, por exemplo). Um fato importante é que todas as bibliotecas de sistema da linguagem Java foram desenvolvidas para serem “thread safe”, ou seja, não existe a possibilidade de ocorrência de conflitos caso threads concorrentes executem funções destas bibliotecas.

A linguagem Java é dinâmica pois as classes (código) somente são ligadas (linked) a aplicação quando necessário. Novos módulos podem ser ligados sob demanda a partir de diversas fontes (inclusive, através da própria rede). Esta característica proporciona a possibilidade de se atualizar transparentemente as aplicações.

1.3 Como Java Pode Mudar Minha Vida?

Consideradas individualmente, as características discutidas nos itens anteriores podem ser encontradas em uma variedade de ferramentas de desenvolvimento de software. A grande novidade é a maneira como Java (e seu ambiente de execução) combinaram estas qualidades e produziram uma linguagem flexível e, ao mesmo tempo, poderosa.

Desenvolver aplicações em Java resulta em um software que é portável em múltiplas plataformas de hardware e software (sistemas operacionais, interfaces gráficas), seguro e de alto desempenho. Provavelmente, Java deve tornar seus programas melhores e exigir menos esforço de desenvolvimento do que outras linguagens. Resumindo, Java pode ajudálo a:

Pág 8

• Iniciar rapidamente o desenvolvimento: embora Java seja uma linguagem orientada a objetos, é fácil de aprender, especialmente para aqueles programadores familiarizados com C ou C++.

• Escrever menos código: comparações de métricas de programas (número de classes, métodos, etc.) sugerem que um programa escrito em Java pode ser até quatro vezes menor do que um mesmo programa desenvolvido em C++.

(Parte 1 de 12)

Comentários