Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
linguagem Java
Jomi Fred Hbner
jomi@inf.furb.br
Objetivo
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
Origem
Principais caractersticas
Propsito geral
Orientada a objetos e fortemente tipada
Robusta
Concorrente
Funcionamento
Java e a Internet
Java e a Internet
A linguagem Java possibilita a construo de mini-programas applets - que podem executar no browser do cliente.
animaes, sons,
entrada/consistncia de dados,
acesso a bancos de dados,
segurana, etc.
Escalabilidade
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 //
// Exibe na tela
De documentao /** */
12
Inteiros
Reais
Caracter
Lgicos
13
Operadores
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
2
2*4
a=3
5+2*3-a
2 * Math.sqrt(9)
15
Variveis
Declarao
Escopo
Classe
Mtodo
Tempo de vida
Visibilidade
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
Exemplos
int i = 3;
do {
comandos
} while (expresso);
break - sai do loop corrente for (int i=1; i < 10; i++)
System.out.println(i);
19
Ferramentas de
desenvolvimento
J2SDK
22
Programas
23
J2-SDK - Utilizao
Compilao
javac <nomedofonte.java>
javac HelloWorld.java
Execuo
java <nomedaclasse>
java HelloWorld
24
IDE
NetBeans
Eclipse
BlueJ
SunOne
JBuilder
JEdit
25
Exerccios
26
Resumo
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
Comportamentos
Estados
Ex.: cachorro: estados (cor, nome, com fome, ...) e
comportamentos (correr, latir, sujar a casa, ...)
29
Orientao a Objetos
Mtodo
Mtodo
dados
Mtodo
30
B
Mtodo X {
A.latir()
...
}
mtodo latir {
....
}
31
Classes
32
Herana
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
Heranas
35
36
Declarao do handle
Ex.:
tipo nomeHandle;
Date hoje;
Instanciao
nomeHandle = outroHandle;
37
// 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();
39
Converso de tipos
Objetos (upcast)
char a;
int i = (int)a;
int x = (int)10L;
MontainBike mb = ....
Bicicleta b1 = mb
String em nmero
40
A classe String
Operador:
+ (concatenao)
nome = nome + sauro;
Observaes
41
boolean equals(String s)
boolean equalsIgnoreCase(String s)
int indexOf(String s)
int length()
char charAt(int i)
Literais
Literais de string
Apstrofo
Aspas
Barra Invertida
Retorno de carro
Nova linha (linefeed)
Nova pgina (formfeed)
Tab
Backspace
43
A classe StringBuffer
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;
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
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
Principais mtodos
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
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
52
Resumo
String x StringBuffer
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
+ 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)
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
60
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) {
...;
65
66
Declarao de Classes
Declarao
[modificadores] class NomeClasse
[extends SuperClasse]
[implements Interface]
{
atributos
mtodos
}
Modificadores
67
Atributos da Classe
Declarao de Atributos
[modificadores] tipo nomeAtributo [= expresso];
Modificadores
68
Mtodos da classe
Declarao de Mtodos
[modificadores] tipoRetorno nomeMtodo ( [parmetros formais] )
[throws exceptions]
{ corpo }
modificadores:
69
Funcionario
// upcast
p.l();
// qual mtodo chamado?
p.l(Digite:);
l()
depsito(int)
saque(int)
70
objetos da classe
nome;
cor;
peso;
energia;
Mamfero
Raa
Come( )
Cachorro
Nome: String
Cor : String
Peso : integer
Energia: float
Cachorro (s : String)
Cachorro ()
getPeso() : integer
setPeso (v : integer)
Corre ()
Late()
71
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
Exemplo
ArrayList e Vector
implementam a interface List
que tem mtodos add, get, ...
Valem as atribuies:
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
public
...
}
public
...
}
public
...
}
public
...
}
Exerccios
76
Pacotes
Pacote java
Sub-pacote util
Classe ArrayList
Classe HashMap
Sub-pacote io
Classe InputStream
77
...
java.util.ArraList listaDeClientes = new java.util.ArrayList();
import java.util.*;
......
ArrayList listaDeClientes = new ArrayList()
78
Criao de pacotes
package banco;
class Cliente { .... } // a classe cliente esta no pacote banco
79
Exerccio
80
Resumo
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){
}
}
81
Problema
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;
}
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
int i =0;
try {
i = i/i;
} catch (Exception e) {
System.out.println(
"Erro + e)
}
Manipulao de excees
pode-se trat-las
individualmente (try).
86
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
90
I/O em Java
de bytes (Streams)
de processamento
buferizao
filtro
objetos
impresso
Acesso randmico
91
Streams e Reader
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
Reader
FileReader
PipedReader
...
Writer
OuputStream: implementa a
sada seqencial de dados
as mesmas subclasses de
InputStream
92
Processamento de streams
Para Streams
BufferedInputStream
LineNumberInputStream
PushbackInputStream
Para Readers
DataInputStream
BufferedReader
melhora o desempenho no
acesso ao dispositivo
LineNumberReader
PrintStream
PushbackReader
PrintWriter
InputStreamReader
94
96
Serializao de objetos
Exerccios
99
Resumo
Fontes seqenciais
Streams = bytes
Readers = Unicode
BufferedReader teclado =
new BufferedReader(
new InputStreamReader(
System.in))
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
Disponvel no site
CAMPIONE, Mary; WALRATH, Kathy. The Java Tutorial. AddisonWesley.
ECKEL, Bruce. Thinking in Java.
http://www.EckelObjects.com/Eckel, 1999.
www.javasoft.com
www.ibm.com/java
www.di.ufpe.br/~java
www.soujava.org.br
104