FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse1

Programação e m Java:

linguagem, APIs, boas práticase Eclipse FEUP, Novembro2005

Ademar Aguiar ademar.aguiar @ fe.up.pt http://www.ademarguiar.org/

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse2

Objectivos

Aprender a desenvolver programas em linguagem Java:

•utilizar os principais utilitários do kit de desenvolvimento para Java (JDK) versão 1.4.2.

•desenvolver interfaces gráficas em linguagem Java recorrendo aos packages AWT e Swing.

•conhecer e utilizar as principais funcionalidades disponíveis nos packages de colecções, entrada e saída de dados, acesso a dados de bases de dados e acesso a dados remotos.

Motivar os participantes para a adopção de boas práticas de desenvolvimento de software:

•testes unitários, refactoring, padrões de desenho, revisão de código, do cumentação,

Utilizar o Eclipse como ambiente de desenvolvimento (IDE).

Consolidação dos conhecimentos transmitidos através da sua aplicação na resolução de exercícios práticos.

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse3

Conteúdos

Parte 1: Introdução ao Java e Classes fundamentais Parte 2: Collections e Entrada/saída de dados

Parte 3: Interfaces gráficas com Swing

Parte 4: Acesso a dados remotos por JDBC e HTTP

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse4

Bibliografia

“Object-oriented Design With Applications", Grady Booch,,

The Benjamin/cummings Publishing Company Inc., 2nd Edition, Redwood City, California, 1995.

“The Java Programming Language", K. Arnold, J. Gosling, Adisson-Wesley, 2nd Edition, 1998, ISBN 0-201-31006-6.

"Java in a Nutshell", Flanagan, David, O'Reilly & Associates, 2004.

"Java Examples in a Nutshell", Flanagan, David, 3rd edition, O'Reilly & Associates, 2004.

“Eclipse: Eclipse Rich Client Platform: Designing, Coding, and Packaging Java Applications”, Jeff McAffer, Jean- Michel Lemieux, Eclipse series, Addison-Wesley, 2005.

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse5 Parte 1

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse6 Introdução ao Java

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse7

Objectivos

Identificar os elementos principais do Java Descrever a Java Virtual Machine (JVM)

Comparar a utilização do Java para a construção de applets e de aplicações

Identificar os componentes principais do Java Development Kit (JDK)

Descrever as opções de instalação do Java (deployment)

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse8

O que éo Java?

Concebido pela Sun para a electrónica de consumo, mas rapidamente alcançou a W.

Uma linguagem orientada por objectos e um conjunto de bibliotecas de classes (frameworks).

Utiliza uma máquina virtual para a execução de programas.

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse9

Vantagens Principais do Java

Linguagem orientada por objectos Interpretado e independente da plataforma

Dinâmico e distribuído

“Multi-threaded”

Robusto e seguro

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse10

Independente da Plataforma

O código Java éarmazenado num ficheiro .java Um programa .javaécompilado para ficheiros .class

Bytecodes são interpretados em tempo de execução

Compile Compile movie.java movie.java executar executar programa programa movie.class movie.class

(javac)(javac) (java ) (java )

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse11

Ambiente de Segurança do Java

Interfaces específicas

Carregador de Classes

Verificador de Bytecode Linguagem e Compilador

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse12

Applets Java

A forma mais comum de utilização do Java, inicialmente Vocacionada para utilização em páginas HTML

Pode incluir conteúdos activos (forms, áudio, imagens, vídeo)

Aparece num browser e pode comunicar com o servidor

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse13

Aplicações Java

Instalação no lado do cliente

•JVM corre em aplicações autónomas •Não necessita de carregar classes pela rede

Instalação do lado do servidor

•Pode servir múltiplos clientes a partir de uma mesma origem

•Encaixa bem com modelos multi-camada para computação na Internet

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse14

JVM -Java Virtual Machine

Operating system

JVM Application

Browser

JVM Applet

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse15

Como funciona a JVM

O “JVM class loader”carrega todas as classes necessárias. O “JVM verifier”verifica os bytecodes ilegais.

O gestor de memória da JVM liberta memória de volta ao sistema operativo.

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse16

Compiladores Just-in-Time (JIT)

Melhoram a performance

São úteis se os mesmos bytecodes forem executados repetidas vezes

Traduz bytecodes para instruções nativas

Optimizam código repetitivo, tais como ciclos

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse17

Java e Computação na Internet A computação na Internet opera-se em três camadas:

Java pode ser usada em todas estas camadas.

Data serverData serverApplication Application server server

Client Client

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse18

Resumo

O código Java écompilado para bytecodes independentes da plataforma.

Os bytecodes são interpretados por uma JVM.

As applets correm num browser no cliente.

As aplicações Java são executadas de forma autónoma tanto no cliente como no servidor.

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse19 Conceitos Básicos do Java

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse20

Objectivos

Conhecer os elementos principais do Java

Conhecer a síntaxe básica do Java Descrever ficheiros .javae .class

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse21

Tópicos

Classes, objectos e métodos

Utilização de Javadoc

Compilar e executar programas Java

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse22

JDK -Java Development Kit

O JDK da Sun fornece: Compilador (javac)

Visualizador de applets (appletviewer)

Interpretador de bytecode (java)

Gerador de documentação (javadoc)

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse23

JDK -Java Development Kit

O JDK da Sun fornece pacotes standard para: linguagem

sistema de janelas

controlo de applets

comunicação em rede

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse24

JDK -Java Development Kit

O JDK da Sun fornece suporte de documentação para:

•I mplementação •D ocu mentação

Gerador de Documentação (javadoc)

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse25

Convenções de Nomes

As convenções incluem:

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse26

Convenções de Nomes...

Utilização de caracteres maiúsculos e minúsculos

Números e caracteres especiais

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse27

Definição de Classes

A definição de classes normalmente inclui:

•Modificador de acesso: public, private •A palavra-chave class

•C onstrutores

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse28

Definição de Classes...

public class Customer {

// Instance variáveis String customerName; String customerPostalCode; float customerAmountDue; … // Instance métodos float getAmountDue (String cust) { … } … }

DeclaraDeclara çção ão

VariVariáável vel de de

Instância Instância

MMéétodo todo da da

Instância Instância

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse29

Definição de Métodos

Sempre dentro de uma classe

•Modificador de acesso • Palavra-chave static

•A rgu mentos

[access-modifiers] [static] <return-type> <method-name> ([arguments]) <java code block>

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse30

Definição de Métodos float getAmountDue (String cust) { // método variáveis int numberOfDays; float due; float lateCharge = 1.50; String customerName; // método body numberOfDays = this.getOverDueDays(); due = numberOfDays * lateCharge; customerName = getCustomerName(cust); return due; }

DeclaraDeclara çção ão

VariVariááveis veis de mde méétodo todo

InstruInstru çções ões de mde méétodo todo

Retorno Retorno

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse31

Variáveis e Constantes

Devem ser declaradas antes de ser utilizadas Uma declaração por linha

No início de um bloco de código

O bloco de código define o âmbito

A inicialização imediata éopcional

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse32

Variáveis e Constantes

}// end code block

float getAmountDue (String cust) { float due = 0; int numberOfDays = 0; float lateFee = 1.50; {int tempCount = 1; // new code block due = numberOfDays * lateFee; tempCount++; … return due; }

VariVariááveis veis de mde méétodo todo

VariVariááveis veis temportempor áárias rias

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse33

Criação de blocos de código

Agrupar todas as declarações de classe. Agrupar todas as declarações de métodos.

Agrupar outros segmentos de código relacionado entre si.

public class SayHello { public static void main(String[] args) {

System.out.println(" Hello world"); }

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse34

Criação de instruções

As instruções terminam sempre com um ponto-e-vírgula (;) Instruções compostas são definidas dentro de chavetas { }.

Utilizar chavetas para instruções de controlo.

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse35

Compilar e Executar Aplicações Para compilar um ficheiro .java:

Para executar um ficheiro .class:

Atenção às maiúsculas e minúsculas!

$aaguiar> javac SayHello.java …compiler output …

$aaguiar> java SayHello

Hello world Prompt>

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse36

Resumo

O JDK fornece as ferramentas Java essenciais.

O JDK fornece um conjunto valioso de classes e métodos pré-definidos.

Os programas Java são constituídos por classes, objectos, e métodos.

A adopção de normas de programação facilita a leitura e reutilização de código.

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse37

Exercícios

Ex1. Instalar JDK 1.4.2_05 Ex2. HelloWorld

Ex3. Instalar Eclipse 3.1.1

Ex6. Reverse Echo

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse38 Tipos de Dados e Operadores

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse39

Objectivos

Descrever os tipos de dados primitivos Declarar e inicializar variáveis primitivas

Utilizar operadores para manipular o valor de uma variável primitiva

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse40

Tópicos

O Java oferece primitivas para os tipos de dados básicos.

As primitivas são a fundação para armazenar e utilizar informação.

Declarar e inicializar primitivas éa base da construção de tipos definidos pelo utilizador.

Os operadores manipulam dados e objectos.

Aceitam um ou mais argumentos e produzem um valor.

Java oferece 4 operadores diferentes.

Alguns operadores alteram o valor do operando.

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse41

Variáveis

A variável éa unidade básica de armazenamento. As variáveis devem ser declaradas explicitamente.

Cada variável tem um tipo, um identificador, e um âmbito.

As variáveis podem ser inicializadas.

int myAge; boolean isAMovie; float maxItemCost = 17.98;

Tipo Tipo

Identificador Identificador

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse42

Nomes de Variáveis

Os nomes das variáveis devem começar por uma letra do alfabeto, um underscore, ou um $.

Os outros caracteres podem incluir digitos.

Deve-se utilizar nomes elucidativos para as variáveis; por exemplo, customerFirstName, ageNextBirthday.

a item_Cost itemCost _itemCost item$Cost itemCost2

9 item#Cost item-Cost item*Cost abstract 2itemCost

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse43

Palavras Reservadas abstract final native private protected public static synchronized transient volatile break case catch continue default do else finally for if return switch throw try while boolean byte char double float int long short void false null true class extends implements interface throws instanceof new super this import package

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse44

Tipos de Variáveis

Oito tipos de dados primitivos:

•Seis tipos numéricos •Tipo char, para caracteres

Tipos definidos pelo utilizador

• Classe s •I nterfaces

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse45

Tipos de Dados Primitivos

Integer Floating Point Character True False byte float char boolean

int
long

short double

1,2,3,42 07 0xff

3.0 .3337 4.022E23

'a' '\141'

'\u0061'

'\n' true false

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse46

Declaração de Variáveis A forma básica de declaração de uma variável:

As variáveis podem ser inicializadas quando declaradas.

public static void main(String[] args) { int itemsRented; float itemCost; int i, j, k; double interestRate; } tipo tipo identifieridentifier[ = valor] [ = valor]

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse47

Declaração de Variáveis

As variáveis locais estão contidas apenas num método ou bloco de código.

As variáveis locais devem ser inicializadas antes de ser usadas.

private int instVar;// instance variável
int numOfDays = 3;// local variável

class Rental { public void addItem() { float itemCost = 3.50; // local variável }

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse48

Literais Númericos

0 1 42 -23795(decimal) 02 077 0123(octal) 0x0 0x2a 0X1FF(hex) 365L 077L 0x1000L (long)

1.0 4.2 .47 1.22e19 4.61E-9

6.2f 6.21F

Literais Inteiros Literais Inteiros

Literais Literais

FloatingFloating --point point

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse49

Literais não-Númericos true false

'a' '\n' '\t' '\077' '\u006F'

"Hello, world\n"

Literais Booleanos Literais Booleanos

Literais String Literais String

Literais Caracter Literais Caracter

FEUP ●AdemarAguiar●Java: linguagem, APIs, boas práticas e Eclipse50

Exercício: Declaração de variáveis Encontrar os erros no código abaixo e corrigi-los.

long bigger = big + big + big// ouch

byte sizeof = 200; short mom = 43; short hello mom; int big = sizeof * sizeof * sizeof; double old = 78.0; double new = 0.1; boolean consequence = true; boolean max = big > bigger; char maine = "New England state"; char ming = 'd';

Comentários