Você está na página 1de 104

Introduo

linguagem Java
Jomi Fred Hbner
jomi@inf.furb.br

Universidade Regional de Blumenau


Departamento de Sistemas e Computao

Objetivo

Apresentar a linguagem Java, seu contexto, aplicaes,


vantagens e desvantagens.

Exercitar o uso dos princpios bsicos da linguagem na


resoluo de problemas.

Roteiro

Origem, caractersticas,
funcionamento
Vantagens e desvantagens
Componentes da linguagem
(variveis, operadores,
expresses, comandos, controle
de fluxo...)

Orientao a Objetos
Colees de objetos
Tratamento de excees
I/O
Programao concorrente
Ambiente de desenvolvimento

Introduo
Origem
Funcionamento
Vantagens
Desvantagens

Linguagem de Programao Java

Origem

linguagem originalmente desenvolvida para eletrodomsticos,


portanto, simples e portvel
foi projetada para ser uma linguagem com caractersticas
modernas de programao
nasceu considerando a Internet como ambiente operacional.

Principais caractersticas

Propsito geral
Orientada a objetos e fortemente tipada

Robusta

sem ponteiros e alocao direta de memria


tratamento de excees

Concorrente

Funcionamento

Compilao do Fonte (.java) para bytecode da Java Virtual


Machine (JVM)
Interpretao e execuo do bytecode (.class)
Escreva uma vez, execute em qualquer lugar

Java e a Internet

A Internet uma grande aplicao da arquitetura cliente/servidor

Servidores: softwares que provem informao


Clientes: softwares que buscam informao e, preferencialmente,
realizam localmente alguma tarefa do sistema.

A Web, particularmente, facilita a conexo com servidores


permitindo a navegao atravs de URLs, contudo, limita as
funes do cliente (meramente mostrando pginas escritas em
HTML)

Java e a Internet

A linguagem Java possibilita a construo de mini-programas applets - que podem executar no browser do cliente.

Este Applets so automaticamente carregados da rede,


dispensando a instalao de softwares no cliente.

Os Applets permitem a construo de home pages com

animaes, sons,
entrada/consistncia de dados,
acesso a bancos de dados,
segurana, etc.

Outras vantagens da linguagem


Java

Facilidades para desenvolvimento de aplicaes em redes com


protocolo TCP/IP (sockets, datagrama)
Gerncia automtica de memria (garbage collection)
Vrios fornecedores de ambientes de desenvolvimento
Portabilidade

independncia de plataforma de hardware e software

Escalabilidade

se for necessrio colocar o sistema construdo numa mquina


mais robusta, provavelmente ter java naquela mquina

Programao em
Java
Tipos de dados
Operadores
Expresses
Variveis
Fluxo de execuo

10

Hello World
class HelloWorldApp {
public static void main(String[] ags) {
System.out.println("Hello World");
}
}

11

Comentrios

De nica linha //

De uma ou mais linhas /* */

// Exibe na tela

/* comentrio que vai se estendendo


at fechar com */

De documentao /** */

/** Indicam que o comentrio deve ser inserido em qualquer


documentao gerada automaticamente, por exemplo pelo
javadoc . */

12

Tipos primitivos e seus valores

Inteiros

Reais

float: 32 bits (1f - literal 1 float; 1e+9f)


double: 64 bits (1d - literal 1 double; 47e-341d)

Caracter

byte: 8 bits, -128 a 127


short: 16 bits, -32768 a 32767
int: 32 bits, -2147483648 a 2147483647
long: 64 bits, ... (200L - literal 200 long)

char (Unicode caracter): 16 bits (a - literal)

Lgicos

boolean (1 bit). Valores literais: { true, false }

13

Operadores

Operadores para nmeros e char

relacionais

+ - * / %
(resultado numrico)
++ -(incremento/decremento)
& (and) ^ (xor) | (or)
(para bits)

Operadores lgicos

booleanos

(resultado booleano)

aritmticos

< > <= >= == !=

==
!=
&& (and)

|| (or)

(resultado lgico)
(resultado lgico)

Atribuio

+=

-=

14

Expresses

Expresses avaliam (computam) o valor se uma sequncia de


variveis, valores, operadores e chamada de mtodos
Exemplos

2
2*4
a=3
5+2*3-a

2 * Math.sqrt(9)

15

Variveis

Declarao

tipo nome [ = expresso]

exemplos: int a; char c = a;


pode ser feita em qualquer lugar do programa

Escopo

Classe

Mtodo

Tempo de vida

mesmo que escopo

Visibilidade

mtodo, classe, super-classe (nesta ordem)


16

Controle de fluxo - Alternativa


if (expresso) comando

Exemplos

[else comando]
switch (expresso) {
case valor1: comando; [break];
case valor2: comando; [break];
....
[default: comando;]
}

if (resposta == OK) {
// comandos
} else {
// comandos
}
int mes;
switch (mes) {
case 1: System.out.println(Jan);
break;
case 2: System.out.println(Fev);
break;
....
}
17

Controle de fluxo - Repetio


while (expresso)
comando

Exemplos

for (ini; cond; fim)


comando

int i = 3;

do {
comandos
} while (expresso);

while (i <= 10) {


i++;
System.out.println(i);
}

break - sai do loop corrente for (int i=1; i < 10; i++)
System.out.println(i);

continue - volta para o


teste do loop
18

Execuo de um programa Java

Um programa Java pode ser carregado e executado de duas


formas:

Como uma aplicao tradicional

A classe deve implementar o mtodo main, que chamado assim


que o objeto criado a partir do sistema operacional.

Como um programa para rodar no browser

A classe deve estender a classe Applet e sobrescrever os principais


mtodos que implementam o comportamento do Applet.

19

Exemplo: nmeros pares


class ExemploBas1 {
public static void main(String[] args) {
for (int i=0; i<100; i++) {
if (((i % 2) == 0) && (i > 50)) {
System.out.println(i);
}
}
}
}
20

Exemplo: I/O simples


import java.io.*;
class ExemploIO {
public static void main(String[] args)
throws java.io.IOException
{
BufferedReader teclado = new BufferedReader(
new InputStreamReader(System.in));
String s = teclado.readLine();
String tudo = s;
for (int cont = 0; cont < 5; cont ++) {
s = teclado.readLine();
tudo = tudo + s;
}
System.out.println("Digitado " + tudo);
} }
21

Ferramentas de
desenvolvimento
J2SDK

22

Java 2 Standard Development Kit

um ambiente bsico de desenvolvimento disponibilizado pela


Sun para desenvolvimento de programas em Java.

Outras empresas tambm disponibilizam ferramentas de


desenvolvimento com o mesmo conjunto de programas (IBM,
TowerJ, ...)

Programas

javac: compila programas fonte e gera arquivos de classe no


formato de bytecode.
java: interpreta aplicaes escritas em Java.
jdb: faz depurao da execuo de aplicaes e applets Java.
javap: desassemblador de bytecodes.
javadoc: gerador de documentao HTML a partir de programas
fonte Java.
appletviewer : carregador de applets sem usar web browsers.

23

J2-SDK - Utilizao

Instalao (download do produto)


http://java.sun.com/products/jdk/

Configurao (no windows)


set PATH=%PATH%; c:\jdk1.2 \bin;

Compilao
javac <nomedofonte.java>

javac HelloWorld.java

em geral, criado um arquivo para cada classe

Execuo
java <nomedaclasse>

java HelloWorld

24

IDE

Existem vrios ambientes integrados de desenvolvimento para


Java

NetBeans
Eclipse
BlueJ
SunOne
JBuilder
JEdit

25

Exerccios

Digitar, compilar e executar os programas exemplo.

Fazer um programa que imprime a seguinte seqncia: 1, 1, 2, 3,


5, 8, 13, .... (serie de Fibonacci)

26

Resumo

Java uma boa opo para a Internet, mas no s para a


Internet.
.java .class execuo
float f = 3 + 2
while (x != 4) x++
E as desvantagens?

27

Orientao a Objetos
Objetos e Mensagens
Classes e Herana
Objetos em Java
Principais classes
Colees
Criao de classes
Sobre-escrita de mtodos
UpCast
Poliforfismo
28

Orientao a Objetos

Propsito

Fcil modelagem do problema do mundo real no programa.

Objetos no mundo real tem

Comportamentos
Estados
Ex.: cachorro: estados (cor, nome, com fome, ...) e
comportamentos (correr, latir, sujar a casa, ...)

29

Orientao a Objetos

Objetos de software tem


seus estados
encapsulados em
atributos
seus comportamentos
esto descritos em
mtodos que podem
acessar os valores dos
atributos

Mtodo
Mtodo

dados
Mtodo

30

Mensagens entre Objetos

Os objetos comunicam-se pela passagem de mensagens, que


so chamadas a mtodos do objeto.

Ex.: A um objeto que tem o mtodo latir


B pode pedir para A latir chamando este mtodo.

B
Mtodo X {
A.latir()
...
}

mtodo latir {
....
}

31

Classes

Classes so frmas de objetos

Os objetos so instncias de classes

Uma classe pode ter vrias instncias


Ex.: Classe cachorro (abstrato)
Objetos: Lulu, Toto, ... (real)
Numa analogia com programao tradicional, classe tipo, objeto
varivel; classe o tipo da tabela, objetos so os registros.

Objetos so criados a partir de uma classe

Ex.: lulu = new Cachorro();


toto = new Cachorro();
lulu.latir(); // envio de uma mensagem

32

Herana

Novas classes podem ser criadas a partir de classes existentes


herdando os estados e comportamentos.

Ex.: Classe: Bicicleta


SubClasses: Mountain Bike, Racing Bike, ....
Se Bicicleta tem o mtodo trocar roda, as subclasses herdam este
mtodo, sem necessidade de implementao.

No exemplo, Bicicleta super classe de Mountain Bike, Racing


Bike, ... e Mountain Bike, Racing Bike so subclasses, ou
especializaes, de Bicicleta.
Entretanto, um subclasse pode

acrescentar novos atributos e mtodos


sobre-escrever mtodos, especificando um comportamento mais
especfico
33

Pessoa
-nome : String

Exemplo

-dataNascimento : Date
+ Pessoa( ) : Pessoa
+ Pessoa( nome:String) : Pessoa
+ getIdade( ) : int
+ getNome( ) : String
+ getNome( cxAlta:boolean) : String
+ getNome( prefix:String) : String

Aluno

Funcionrio

-curso : String

-salario : double

+ matricula( curso:String)

+ aumento( percentual:double)

34

Vantagens de OO

Modularidade

Encapsulao

cada objeto pode ser desenvolvido independente dos outros, os


outros objetos apenas precisam conhecer a interface do objeto
(que mensagens o objeto aceita)
certos detalhes podem ser omitidos dos outros objetos. Existem
estados e comportamentos internos que podem ser alterados
sem interferir na interao com outros objetos.

Heranas

novas classes podem ser criadas a partir de outras

35

Caractersticas dos Objetos

Os objetos no so acessados diretamente

so acessados por meio de um manipulador (handle), atravs do


qual lhe so enviadas mensagens.

Ex.: lulu = new Cachorro();


// lulu o handle do novo objeto

Os objetos existem parte do fluxo do programa

esto todos na heap (alocados dinamicamente)

no tem tempo de vida determinado pelo programador

no tem escopo, na verdade, so todos visveis a partir de um


manipulador que tem escopo e tempo de vida

quando no existem mais referncias para um objeto ele


automaticamente retirado da memria (garbage collection)

36

Utilizao de Objetos em Java

Declarao do handle

Ex.:

tipo nomeHandle;
Date hoje;

Instanciao

Associao do handle a um novo objeto

nomeHandle = new ConstructorDaClasse();

Associao do handle a um objeto que j existe

nomeHandle = outroHandle;

37

Exemplo de uso de objetos


...
Date hoje;
hoje = new Date();

// cria uma instncia da classe Data


// a data de hoje,
// sendo hoje o handle deste objeto

Date aniv = new Date(1997, 5, 30);


Date aniv2;
aniv2 = aniv;
// aniv e aniv2 so handles para o
// mesmo objeto
if (hoje.after(aniv) {
// envio da mensagem after,
// j passou do aniv
// com parmetro, para o objeto
// hoje
}
38

Classes Bsicas x Tipos Primitivos

Variveis (par: posio memria + valor)


int a = 10;

// a um tipo primitivo,
// no pode receber mensagens, ex.: a.inc()

Objetos
Integer b = new Integer(10); // b um handle de objeto
int c = b.intValue();

Tipos primitivos ficam na stack (mundo do programa)


Objetos ficam na heap (mundo dos objetos)

39

Converso de tipos

Tipos primitivos (cast)

Objetos (upcast)

char a;
int i = (int)a;
int x = (int)10L;

MontainBike mb = ....
Bicicleta b1 = mb

String em nmero

String piStr = "3.14159";


Float Pi = Float.valueOf(piStr);
float pi = Float.parseInt(piStr);

40

A classe String

Representa qualquer seqncia de caracteres


Valores: exemplo de valor literal string
String nome = Joo da Silva;
nome.toUpperCase(); // mensagem para objeto nome.

Operador:
+ (concatenao)
nome = nome + sauro;

Observaes

Strings so objetos, no so tipos primitivos


Strings so objetos que no mudam de valor

41

Principais mtodos da classe String

boolean equals(String s)

boolean equalsIgnoreCase(String s)

retorna o tamanho da string

int indexOf(String s)

retorna true se a string igual a s independente de


maisculo/minsculo

int length()

retorna true se a string igual a s

procura a s na string e retorna a posio, retorna -1 se no achou

char charAt(int i)

retorna o caracter na posio i da string (comea de 0)


42

Literais

Literais de string

Cria um objeto para


cada literal de string
Texto arbitrrio entre
aspas ( )
Hello World
duas\nlinhas

Seqncia de escape Descrio


\ddd
Caracter octal
\uxxxx
Caracter UNICODE
hexadecimal (xxxx)
\
\
\\
\r
\n
\f
\t
\b

Apstrofo
Aspas
Barra Invertida
Retorno de carro
Nova linha (linefeed)
Nova pgina (formfeed)
Tab
Backspace
43

A classe StringBuffer

Ao contrrio da classe String, o tamanho e o contedo de


StringBuffer podem ser alterados dinamicamente.

Exemplo:
StringBuffer linha = new StringBuffer(in);
linha.append( out);
linha.insert(3, meio );
linha.deleteCharAt(5);
String parte = linha.substring(2);

44

Colees de Objetos
Matrizes
ArrayList
HashMap

45

Matrizes

Declarao
tipo[] nome;

// cria a varivel, mas no aloca memria

nome = new tipo[tamanho]; // aloca memria


Obs.: A alocao de memria feita em tempo de execuo, logo, o
tamanho das matrizes pode ser calculado durante a execuo do
programa.

Exemplo
char[] m = new char[200];

Inicializao
int[]
a = { 1, 2, 3, 4, 5};
int[][] b = { {1,2,3} {4,5,6} };
String[] s = new String[] { a, casa, caiu }
46

Exemplo: matrizes
// declarao de duas matrizes
int[] vetInt1 = { 1, 3, 5, 7, 9, 11 };
int[] vetInt2 = new int[vetInt1.length * 2];
// loop de inicializao
for( int i=0; i < vetInt1.length; i++) {
vetInt2[i*2] = vetInt1[i];
vetInt2[i*2+1] = vetInt1[i] + 1;
}
// loop de impresso
for( int i=0; i < vetInt2.length; i++)
System.out.println(vetInt2[i]);

47

A classe ArrayList

ArrayList, um array que pode


mudar de tamanho depois de
sua criao (+- lista
dinamicamente encadeada)
Assim como no array, os
objetos so recuperados pela
sua posio
Principais mtodos
add(Objeto)
get(posio)
remove(Objeto)
int size()
int indexOf(Objeto)

import java.util.*;
...
ArrayList valores =
new ArrayList();
valores.add (est limpa);
valores.add (hoje);
valores.add (A casa);
Collections.sort(valores);
for (int i=0; i <
valores.size(); i++) {
System.out.println(
valores.get(i));
}

48

A classe HashMap

um container que armazena os objetos na forma de tabelas


Hash.

Rpido acesso para consulta (no uma estrutura seqencial)


Os objetos so recuperados por meio de uma chave de acesso
Para cada objeto h uma chave de entrada na tabela (mtodo
hashValue determina o ponto de entrada - a classe Object implementa
este mtodo, que pode ser sobre-escrito)

Os objetos no tem uma ordem

Principais mtodos

Object put(ObjetoChave, Objeto)


Object get(ObjetoChave)
boolean containsValue(Objeto)
Object remove(ObjectoChave)
int size()

49

ExemploHash
HashMap dados = new HashMap();
...
do {
cod = teclado.readLine();
if (! cod.equalsIgnoreCase("fim")) {
nome = teclado.readLine();
dados.put(cod,nome);
}
} while (! cod.equalsIgnoreCase("fim"));
do {
cod = teclado.readLine();
nome = (String)dados. get(cod);
if (nome != null)
System.out.println(nome);
} while (! cod.equalsIgnoreCase("fim"));

50

Iteradores

Iteradores so formas de acessar os elementos de um container


independente do tipo do container.
Exemplo

sendo valores um ArrayList e dados um HashMap, a rotina de


impresso pode ser a mesma!

imprime(valores.iterator());
imprime(dados.values().iterator());
imprime(dados.keySet().iterator());
...
void imprime(Iterator ip) {
while (ip.hasNext())
System.out.println(ip.next());
51

Exerccios

Ler dois arrays de 10 nmeros reais (A e B) e

calcular S = (A[1] * B[10]) + (A[2] * B[9]) + ...


calcular C, sendo C[i] = A[i] / B[i], e imprimi-lo invertido
imprimir os nmeros pares de A (considerando a parte inteira dos
nmeros)

Fazer um programa que l vrias linhas (at ser digitado fim) e


as imprime na ordem inversa da digitao
Fazer um programa que l o nmero da conta corrente de
clientes e seus nomes. Depois, para cada nmero digitado,
imprime o nome do correntista.

52

Resumo

Integer a = new Integer(10)


int b = a.intValue() + 2;

String x StringBuffer

String[] vs = new String[10]


vs[3] = teste
ArrayList al = new ArrayList
()
Float f = (Float)al.get(2)
Iterator i = al.iterator()
i.next(); i.next()
Float f = (Float) i.next();

Quanto usar matriz, ArrayList ou


HashMap?
Existem outros containers no
pacote java?
Pode-se definir novos containers
baseados nos existentes?

53

Construo de novas
Classes em Java
Classes
Atributos
Mtodos
Herana
...

54

Classes

Pessoa

Atributos
Mtodos
Restries de acesso

-nome : String

-dataNascimento : Date

+ getIdade( ) : int

pblico
protegido (pacote, subclasses, classe)
pacote (pacote, classe)
privado (classe)

55

Sobre-carga de mtodos (overloading)


Pessoa
-nome : String
-dataNascimento : Date
+ getIdade( ) : int
+ getNome() : String

Pessoa p = new Pessoa();


String n;
n = p.getNome();
n = p.getNome(true);
n = p.getNome(Sr.);

+ getNome(cxAlta:boolean) : String
+ getNome(prefix:String) : String

56

Construtores
Pessoa p;
Pessoa
-nome : String
-dataNascimento : Date

p = new Pessoa();
p = new Pessoa(Marcos);

+ Pessoa() : Pessoa
+ Pessoa(nome:String) : Pessoa
+ getIdade() : int
+ getNome() : String
+ getNome(cxAlta:boolean) : String
+ getNome(prefix:String) : String
57

Herana
Pessoa
-nome : St ring

Funcionrio f;
f = new Funcionrio();
f.getNome();
f.getNome(false);
f.getIdade();

-dataNascimento : Date
+ Pessoa( ) : Pessoa
+ Pessoa( nome:String) : Pessoa
+ getIdade( ) : int
+ getNome( ) : String
+ getNome( cxAlta:boolean) : String
+ getNome( prefix:String) : String

Aluno

Funcionrio

-curso : String

-salario : double

+ matricula( curso:String)

+ aumento( percentual: double)

58

Construtores em sub-classes
class Funcionrio extends Pessoa {
public Funcionrio(String nome) {
super(nome);

...
Funcionrio f1 = new Funcionrio(marcos);
Funcionrio f2 = new Funcionrio(); // bip, bip, bip...
59

Finalizao de objetos

Se a classe possuir um mtodo como o nome finalize, este ser


chamado antes do objeto ser destrudo.
protected void finalize() throws Throwable {
...
}

Um objeto destrudo quando o quando o coletor de lixo detectar


que o objeto no mais necessrio.

60

Tipos, classes e upcast


Funcionario f;
// define o tipo de f
f = new Funcionario(); // atribui um valor a f, upcast
f = new Diretor();
// atribui outro valor a f
Pessoa p;
// define o tipo de p
p = f;
// atribui um valor a p
p = new Diretor();
// atribui outro valor a f
f = p;
// bip, bip, bip, ....
Diretor d = (Diretor)p; // necessrio um cast
Variveis do tipo Pessoa podem receber valores do
Pessoa, Funcionrio, Diretor e Presidente.
61

Sobre-escrita (overriding)
Funcionario
-salario : double
+ Funcionario( nome:String) : Funcionario
+ aumento( percentual:double)

Funcionario f;
f = new Presidente();
f.getSalario();
f = new Diretor();
f.getSalario();

+ getSalario( ) : double

Diretor

Presidente

+ getSalario( ) : double

+ getSalario( ) : double

f = new Funcionario();
f.getSalario();

62

Sobre-escrita e super
class Presidente extends Funcionario {
public double getSalario() {
return super.getSalario() * 1.2;
}
}

63

Polimorfismo
class Util {
public static double total(Funcionario[] fs) {
double soma = 0;
for (int i = 0; i < fs.length; i++) {
soma += fs[i].getSalario(); // qual mtodo ser executado?
}
return soma;
} }
...
Util.total(new Funcionario[]
{ new Funcionario(), new Diretor(), new Presidente()});
64

Impedindo a sobre-escrita
class Funcionrio extends Pessoa {
....
final public aumento(double percentual) {
...;

Nenhuma sub-classe de Funcionrio pode sobre-escrever o


mtodo aumento.

65

Alguns mtodos de Object que


podem ser sobre-escritos

public String toString()


protected Object clone()
public boolean equals(Object o)
public int hashCode()
protected void finalize() throws Throwable

66

Declarao de Classes

Declarao
[modificadores] class NomeClasse
[extends SuperClasse]
[implements Interface]
{
atributos
mtodos
}

Modificadores

Classe pblica (public): a classe pode ser utilizada por objetos de


fora do pacote. Por default, a classe s pode ser acessada no
prprio pacote
Classe Abstrata (abstract): no pode ter objetos instanciados

Classe final (final): a classe no pode ter subclasses

67

Atributos da Classe

Declarao de Atributos
[modificadores] tipo nomeAtributo [= expresso];

Modificadores

public: os objetos da classe e seus mtodos podem acessar o


atributo
protected: somente os mtodos da classe e suas subclasses
podem acessar o atributo
private: somente os mtodos da classe podem acessar o
atributo
static: o atributo da classe, no do objeto, logo, todos os
objetos da classe compartilham esse atributo
final: o valor do atributo no pode ser alterado
transient: o atributo no serializado

68

Mtodos da classe

Declarao de Mtodos
[modificadores] tipoRetorno nomeMtodo ( [parmetros formais] )
[throws exceptions]
{ corpo }

modificadores:

static: mtodo da classe e no das instncias

abstract: utilizando somente em classes abstratas, o mtodo no


tem corpo
final: o mtodo no pode ser sobre-escrito

synchronized: declara o mtodo como zona de excluso mtua no


caso de programas concorrentes

a passagem de parmetros em Java sempre por valor.


Um mtodo identificado pelo seu nome e pelos parmetros
void x(int a) void x(float a)

69

Exemplo de sobre-escrita, sobrecarga, upcast e polimorfismo


Pessoa
l(String)
l()

Cliente a = new Cliente();


a.l();
// qual mtodo chamado?
a.l(Digite:);
Pessoa p;
p = a;

Funcionario

// upcast

p.l();
// qual mtodo chamado?
p.l(Digite:);

l()
depsito(int)
saque(int)

70

Exemplo criao de classe (1)


class Cachorro extends Mamfero {
// Estados dos
private String
private String
private int
private float

objetos da classe
nome;
cor;
peso;
energia;

// Construtores (formas da classe)


Cachorro(String s) { nome = s; }
Cachorro() { nome = "Sem nome"; }
// Mtodos (comportamentos dos objetos da classe)
void setPeso(int v) { peso = v; }
int getPeso() { return peso; }

Mamfero
Raa
Come( )

Cachorro
Nome: String
Cor : String
Peso : integer
Energia: float
Cachorro (s : String)
Cachorro ()
getPeso() : integer
setPeso (v : integer)
Corre ()
Late()

void corre() { ... }


void late() { ... }
}

71

Exemplo criao de classe (2)


class Agent {
private String nome;
private int
valor;
// Constructors
Agent(String s) { nome = s; valor = 10; }
Agent() { nome="Sem nome"; valor = 10; }
// Servicos
void setValor(int v) { valor = v; }

void run(int inicial) {


System.out.println("Agente " + nome + " rodando....");
for (int i=inicial; i <= valor; i++)
System.out.println(i);
}
void run() {
run(1);
}

class teste {
public static void main(String[] args) {
Agent t1 = new Agent("Exemplo Construo de classe");
t1.setValor(3);
t1.run();
Agent t2 = new Agent();
t2.run(5);
}

}
72

Interfaces

So classes com algumas


restries
so publicas e abstratas (no
contm implementao dos
mtodos)
no tem atributos
so utilizadas para
implementar herana mltipla.
podem ser utilizadas na
definio de referncias para
objetos, ou seja, uma
referncia para um objeto que
implementa tal interface.

Exemplo
ArrayList e Vector
implementam a interface List
que tem mtodos add, get, ...
Valem as atribuies:

ArrayList al = new ...


Vector
vt = new ...
...
List l;
l = al;
l.add(X)
...
l = vt;
l.add(Y)

73

Exemplo de Interface
public interface AnimalVoa {
void voa(int vel);
int envergadura();
}
class Mamifero extends SerVivo {
String corPelo;
...
int nroFilhotes() {
...
}
}
class Morcego extends Mamifero
implements AnimalVoa {
void voa(int vel) {
....
}
int envergadura() {
....
}
...
}

74

Exerccios

Considerando um mtodo que imprime os nomes dos clientes


Qual dos mtodos abaixo tem o melhor design?

public
...
}
public
...
}
public
...
}
public
...
}

void imprime(ArrayList clientes) {

void imprime(Iterator iClientes) {

void imprime(List clientes) {

void imprime(Collection clientes) {


75

Exerccios

Fazer um programa que l nomes, endereos e idades e depois


fica em um loop pedindo nomes e mostrando endereos. Quanto
o usurio digitar fim, mostrar todos os nomes, endereos e
idades e a mdia de idade do grupo e sair do programa.

Obs.: implemente com ArrayList e com HashMap

Implemente o mtodo que mostra todos os nomes de modo que


funcione tanto para implementaes com ArrayList quanto
HashMap.

Faa o mesmo programa considerando um tipo particular de


pessoa: Cliente, que tem nmero de conta, saldo e histrico
(data, descrio, valor).

76

Pacotes

As classes java podem ser organizadas em uma hierarquia de


pacotes
Exemplo

Pacote java

Sub-pacote util
Classe ArrayList
Classe HashMap

Sub-pacote io
Classe InputStream

77

Referncia a classes que esto em


pacotes

As classes podem ser referenciadas pelo nome completo

...
java.util.ArraList listaDeClientes = new java.util.ArrayList();

O import torna opcional colocar o nome do pacote para


referenciar uma classe

import java.util.*;
......
ArrayList listaDeClientes = new ArrayList()

78

Criao de pacotes

package banco;
class Cliente { .... } // a classe cliente esta no pacote banco

As classes de um pacote devem estar em um diretrio com o


nome do pacote
Exemplo: classe Cliente no pacote banco

Outras classes podem usar a classe cliente utilizando

No diretrio chamado banco, devem estar os arquivos


Cliente.java e sua compilao Cliente.class
O nome completo banco.Cliente
Importanto o pacote import banco.*;

O diretrio pai do diretrio banco deve estas no CLASSPATH.

79

Exerccio

Crie um pacote chamado pa com as classes Ca e Cb


Crie outor pacote chamado pb com uma classe chamada Cd
Faa com que a classes Cd crie um objeto da classe Ca e
chame um mtodo de Ca.

80

Resumo

Classes = atributos + mtodos


estados + comportamentos

class X extends Y {
static int x = 0;
String nome;
public X(String n) {
x++;
nome = n;
}
final boolean imp() {}
final boolean imp(String x){
}

Qual o modificador do atributo


String nome
Por que Java no tem herana
mltipla?
Quando usar uma super-classe
abstrata e quando usar uma
interface?
Pense no caso de uma
pessoa, qual seria sua super
classe e que interfaces
implementaria
Cite um exemplo de utilizao de
atributos e mtodos estticos

}
81

Problema

Fazer um mtodo para encontrar o maior valor de um ArrayList

82

Soluo 1
Integer maior(ArrayList lista) {
Iterator i = lista.iterator();
Integer maior = (Integer)i.next();
while (i.hasNext()) {
Integer nint = (Integer) i.next();
if (nint.intValue() > maior.intValue()) {
maior = nint;
}
}
return maior;
}

E para Double, Float?

83

Soluo 2
Object maior(ArrayList lista) {
Iterator i = lista.iterator();
Object o = i.next();
if (o instanceof Integer) {
Integer maior = (Integer)o;
} else if (o instanceof Double) {
...
}
while (i.hasNext()) {
o = i.next();
if (o instanceof Integer) {
nint = (Integer)o; ...
} else if (o instanceof Double) {
...
}
}

EparaFuncionrios?

84

Tratamento de
Excees

85

Excees

Excees ocorrem quando


tentada uma ao invlida

ex.: diviso por zero, acessar


uma posio que no existe
num array, abrir um arquivo
que no existe, tentar conectar
um site no habilitado, ....

int i =0;
try {
i = i/i;
} catch (Exception e) {
System.out.println(
"Erro + e)
}

Manipulao de excees

Pode-se definir que o mtodo


no ir tratar as excees
(throws), ou

pode-se trat-las
individualmente (try).

86

Exemplo: tratando a exceo


class Type {
public static void main(String[] args) {
try {
FileReader arqin = new FileReader(args[0]);
int lido;
while ((lido = arqin.read()) != -1) {
System.out.print((char)lido);
}
arqin.close();
} catch (ArrayIndexOutOfBoundsException e){
System.out.println("Deve ser informado o arquivo como
parmetro");
} catch (FileNotFoundException e) {
System.out.println("Erro na abertura do arquivo " + args[0]);
} catch (IOException e) {
System.out.println("Erro de leitura");
87

Exemplo: propagando a exceo


class Type {
public static void main(String[] args)
throws Exception {
try {
FileReader arqin = new FileReader(args[0]);
int lido;
while ((lido = arqin.read()) != -1) {
System.out.print((char)lido);
}
arqin.close();
} catch (ArrayIndexOutOfBoundsException e){
System.out.println("Deve ser informado o arquivo como
parmetro");
}
}

88

I/O em Java
Streams e Readers
Stream Tipados
Streams de Objetos

89

Sistemas de I/O

Dispositivos de I/O

Formas de acesso

discos (arquivos)
console
conexo de rede
seqencial
randmico
binrio
por linhas
por palavras

O sistema de I/O associa uma forma de acesso a um


dispositivos

90

I/O em Java

Para o acesso seqencial de leitura/escrita, h dois grupos de


classes:

associados s fontes de dados (memria, disco, rede,...)

de bytes (Streams)

de caracteres Unicode (Readers)

de processamento

buferizao
filtro
objetos
impresso

Acesso randmico
91

Streams e Reader

O pacote java.io define as


seguintes classes bsicas
para Streams:

InputStream: implementa a
entrada seqencial de dados

so implementadas
subclasses de InputStream
para cada tipo de fonte de
dados:
arquivo: FileInputStream
pipe: PipedInputStream
outros recursos, como uma
conexo Internet

Assim como para os Streams,


as seguintes classes so
definidas:

Reader

FileReader
PipedReader

...

Writer

as mesmas que Reader


(trocando por Writer)

OuputStream: implementa a
sada seqencial de dados

as mesmas subclasses de
InputStream

92

Processamento de streams

Para Streams

BufferedInputStream
LineNumberInputStream
PushbackInputStream

Para Readers

Facilita a impresso de dados


(nmeros, datas, ...)

DataInputStream

permite ler e gravar tipos


primitivos Java

BufferedReader

melhora o desempenho no
acesso ao dispositivo

LineNumberReader

PrintStream

permite cancelar a leitura de


um byte (voltar o ponteiro de
acesso ao dispositivo)

permite conhecer os nmeros


das linhas do arquivo de
entrada

PushbackReader
PrintWriter

InputStreamReader

cria um Reader a partir de um


Stream, permitindo a
integrao dos dois.
93

Exemplo: procurar uma palavra num


arquivo
public String procura(String pal, String NomeArq) {
String linha;
try {
BufferedReader in = new BufferedReader(new FileReader(NomeArq));
while ((linha = in.readLine()) != null) {
if (linha.lastIndexOf(pal) >= 0) {
return linha;
}
}
} catch (Exception e) {
System.err.println("Erro na abertura do arquivo " + NomeArq);
return "Erro";
}
return "No achou";

94

Exemplo: criao de um arquivo de


valores primitivos inteiros
class CriaArq {
public static void main(String[] args) {
try {
DataOutputStream arqInt =
new DataOutputStream(
new FileOutputStream("arqint.dat"));
for (int i=0; i<10; i++) {
arqInt.writeInt(i*10);
}
arqInt.close();
} catch (IOException e) {
System.err.println("Erro de gravao");
}}}
95

Exemplo (cont.): leitura do arquivo


de inteiros
try {
DataInputStream arqInt;
arqInt = new DataInputStream(
new BufferedInputStream(
new FileInputStream("arqint.dat")));
int i;
while (true) { // sai por exceo
i = arqInt.readInt();
System.out.println(i);
}
} catch (FileNotFoundException e) {
System.out.println("Erro na abertura do arquivo");
} catch (EOFException e) {
System.out.println("Fim normal do arquivo");
} catch (IOException e) {
System.out.println("Erro de leitura");

96

Exemplo: fonte de uma pgina da


Internet
InputStream fonte =
(new URL("http://www.inf.furb.br/")).openStream();
// cria um dispositivo de entrada
DataInputStream in = new DataInputStream(fonte);
// imprime o a pagina na tela
String lin = in.readLine();
while (lin != null) {
System.out.println(lin);
lin = in.readLine();
}
97

Serializao de objetos

Permite gravar e ler objetos num


stream
a classe deve implementar a
interface Serializable

Caso o objeto serializado aponte


para outros, estes tambm sero
serializados
Deve-se ter cuidado com as
verses das classes (que no so
gravadas)

FileOutputStream out = new


FileOutputStream(t.obj");
ObjectOutputStream s = new
ObjectOutputStream(out);
s.writeObject(Hoje ");
s.writeObject(new Date());
...
FileInputStream in = new
FileInputStream(t.obj");
ObjectInputStream s = new
ObjectInputStream(in);
String sHoje = (String)
s.readObject();
Date dHoje = (Date)s.readObject
();
98

Exerccios

Considerando o caso do cliente de banco, antes de sair do


programa armazene os dados em disco e antes de inici-lo
carregue os clientes do disco.

Utilizando DataInputStream (arquivo tipado)


Utilizando serializao de objetos

Altere o programa que procura uma palavra num arquivo para um


que procura a palavra em uma URL da Internet.

99

Resumo

Fontes seqenciais

Streams = bytes
Readers = Unicode

de disco, console, rede, ...


Tratamento
Buferizao (desempenho)
Impresso (print, println)
Tipos primitivos
(DataInputStream)
Objetos (ObjectInputStream)
Tokens (StreamTokenizer)
...

BufferedReader teclado =
new BufferedReader(
new InputStreamReader(
System.in))

Como se interpreta a linha

Que tipo de I/O System.out


(Stream ou Reader) e qual o
processamento que possui?
Por que Streams de objetos
diminuem a portabilidade dos
dados?

100

Programao
concorrente

101

Threads - Exemplo
class MinhaThread extends Thread {
String nome;
MinhaThread(String n) { nome = n;}
public void run() {
for (int i=0; i < 10; i++) {
System.out.println(nome + ":" + i);
yield();
// explicitamente d tempo para outras
// Threads do mesmo nivel
} }
}
class DuasT {
public static void main (String[] args) {
new MinhaThread("T1").start();
new MinhaThread("Tx").start();
} }

102

Exemplo de Sincronizao
class Valor {
int val = 0;
synchronized void add(int qdt) {
for (int i=0; i<qdt; i++) {
int temp = val;
System.out.print(","+temp);
val = temp + 1;
} }
int get() { return val; }
}
class MThread extends Thread {
Valor vl;
MinhaThread(Valor v) {
vl = v;
}
public void run() {
vl.add(100);
} }

Main:
Valor v = new Valor();
MThread t1 = new MThread(v);
MThread t2 = new MThread(v);
MThread t3 = new MThread(v);
t1.start();
t2.start();
t3.start();
t1.join();
t2.join();
t3.join();
System.out.println(v.get());
// o que ser impresso? (e sem o
synchronized)
103

Fontes de consulta

Tutorial de Java da Sun

Livro Thinking in Java (Eckel)

Disponvel no site
CAMPIONE, Mary; WALRATH, Kathy. The Java Tutorial. AddisonWesley.
ECKEL, Bruce. Thinking in Java.
http://www.EckelObjects.com/Eckel, 1999.

Documentao do JDK, incluindo a API


Alguns sites de Java:

www.javasoft.com
www.ibm.com/java
www.di.ufpe.br/~java
www.soujava.org.br

104