Upload
joao-claudio-pralon
View
25
Download
1
Embed Size (px)
DESCRIPTION
curso de java
Citation preview
1
Curso de JAVA
2
Introduo
Programao Orientada a Objetos
Introduo Linguagem Java
Applets
Threads
Programao em rede
Acesso a Banco de Dados
AWT
Sumrio
JFC
3
Java uma linguagem de programao desenvolvida pela Sun Microsystems e lanada em verso beta em 1995.
O seu desenvolvimento foi iniciado em 1991 pela equipe liderada por James Gosling visando o mercado de bens de
eletrnicos de consumo.
Foi criada com o objetivo de ser segura.
uma linguagem orientada a objetos semelhante a C++.
O cdigo Java traduzido para instrues de uma mquina virtual (bytecotes) para que possa ser executado de forma
independente da plataforma.
Atualmente encontra-se na verso SDK 2 V1.4
Introduo
4
Java como soluo para Internet
Java oferece trs tipos de solues para a Internet:
Applets - Programas Java que rodam no Navegador Internet da mquina do Cliente.
Servlets - Programas Java que rodam no no servidor Internet atendendo requisies.
JSP - Pginas contendo scripts Java que quando carregadas iro gerar Servlets.
Introduo
5
Eckel B. Thinking in Java. 2nd Ed. New Jersey : Prentice Hall, 2000.
Gosling J., Joy W., Steele G. The Java Language Specification. Massachusetts :
Addison-Wesley, 1996.
Oaks S. Java Security. California : OReilly & Associates, Inc, 1998.
Oaks S., Wong H. Java Threads. 2 Ed. California : OReilly & Associates, Inc,
1999.
Watt D. A. Programming Language Concepts and Paradigms. Great Britain :
Prentice Hall, 1990.
Wahli U. e outros. Servlet and JSP Programming with IBM WebSphere Studio
and VisualAge for Java, IBM RedBooks, California, May 2000.
Sadtler C. e outros. Patterns for e-business: User-to-Business Patterns for
Topology 1 and 2 using WebSphere Advanced Edition, IBM RedBooks, California,
April 2000.
Bibliografia
6
H. M. Deitel, P. J. Deitel. Java - Como Programar. 3nd Ed. Porto Alegre :
Bookman, 2001.
Alcione de Paiva Oliveira. Curso Prtico de Java. Departamento de Informtica -
Universidade Federal de Viosa, 2001.
Bibliografia
7
Revistas http://www.javaworld.com/
Revista online sobre Java.
Livros http://www.eckelobjects.com/
Pgina do autor do livro Thinking in Java, atualmente em segunda edio. O livro pode ser
baixado gratuitamente no site.
http://www.redbooks.ibm.com/booklist.html
Livros da IBM
Dicas Java e recursos http://java.sun.com/
Pgina da Sun com informaes, tutoriais e produtos Java.
http://gamelan.earthweb.com/
Pgina da com informaes, Applets, Lista de discusso, tutoriais.
http://www.inquiry.com/techtips/java_pro
http://www.jguru.com/
http://www.soujava.org.br
Links
8
O mundo pode ser visto como um conjunto de objetos que se relacionam.
E possuem propriedades.
Os objetos se agrupam em classes.
Raio
Textura
Programao Orientada a Objetos
9
As classes podem ser relacionar hierarquicamente.
As Subclasses podem herdar as propriedades das Superclasses .
Programao Orientada a Objetos
10
As instncias de uma classe so os objetos que pertencem a classe.
E possuem valores particulares para as propriedades da classe.
Raio: 12cm
Material: couro
Presso: 25 lbs
Velocidade: 0m/s
direo:0o
Programao Orientada a Objetos
11
Os objetos de uma classe possuem comportamentos que podem alterar o valor de suas propriedades.
Raio: 12cm
Material: couro
Presso: 25 lbs
Velocidade: 25m/s
direo:0o
0 m/s
Programao Orientada a Objetos
12
Podemos utilizar uma linguagem de programao convencional para modelar as classes e objetos do mundo real.
Exemplo: Pascal
Em Pascal podemos modelar uma classe definindo uma estrutura
contendo variveis que representam as propriedades:
type TEsfera = record
raio : real;
material: array [1..30] of char;
pressao : real;
velocidade: real;
direcao : real;
end;
Programao Orientada a Objetos
13
Os objetos podem ser criados a partir de declaraes de variveis do tipo definido.
type TEsfera = record
raio : real;
material: array [1..30] of char;
pressao : real;
velocidade: real;
direcao : real;
end;
var esfera1 : TEsfera;
Programao Orientada a Objetos
14
As propriedades dos objetos podem ser manipuladas atravs de funes e procedimentos.
procedure atribuiVelocidade(v: real;
var e: TEsfera);
begin
e.velocidade := v;
end;
Programao Orientada a Objetos
15
No entanto, existem algumas limitaes das linguagens convencionais na modelagem de objetos.
No existem recursos para ocultar a estrutura de dados de
mdulos que no foram projetados para a sua manipulao.
No existem recursos para herana de propriedades entre
classes e subclasses.
No existe uma forma de relacionar explicitamente as
estruturas de dados com as funes que as manipulam.
Programao Orientada a Objetos
16
E se crissemos uma estrutura que relacionasse explicitamente as estruturas de dados com as funes que as manipulam?
Teramos em programao uma forma de representar as classes e objetos do mundo real.
Essa estrutura existe e possui o mesmo nome, ou seja:
Programao Orientada a Objetos
17
Java uma linguagem totalmente orientada a objetos.
Possui estruturas para representao direta de classes e objetos.
type tEsfera = record
Raio : real;
Velocidade: real;
Direcao : real;
end;
class TEsfera {
float raio;
float velocidade;
float direcao;
void atribuiVelocidade(float v)
{velocidade = v;};
}
As funes declaradas nas classes so chamadas de mtodo.
Programao Orientada a Objetos
18
Para declarar uma varivel do tipo da classe basta preceder a varivel com o nome da classe.
TEsfera esfera;
At esse momento nenhum objeto foi criado. Para criar um objeto (instncia) usado o operador new.
esfera = new TEsfera();
A partir de ento possvel acessar os mtodos do objeto atravs do operador ..
esfera.atribuiVelocidade(10);
No preciso passar o objeto, j que criada uma cpia do mtodo para cada objeto.
Programao Orientada a Objetos
19
A grosso modo podemos dizer que cada instncia da classe recebe uma cpia das variveis e dos mtodos da classe.
Podemos impedir o acesso direto s variveis dos objetos por meio do qualificador private.
class TEsfera {
private float raio;
private float velocidade;
private float direcao;
void atribuiVelocidade(float v)
{velocidade = v;};
}
Programao Orientada a Objetos
20
Para criar uma subclasse de uma classe existente utilizamos o operador extends.
class TEsferaColorida extends TEsfera{
private Color cor;
void atribuiCor(Color c) {cor = c;};
}
A subclasse herda todos os mtodos e variveis da superclasse.
Programao Orientada a Objetos
21
Sobrescrita e Sobrecarga
Programao Orientada a Objetos
Podemos definir mais de um mtodo com o mesmo nome na
mesma classe ou subclasses.
Caso o mtodo possua a mesma assinatura (nmero e tipos de
argumentos e tipo de retorno) de outro j definido, ento o
mtodo no pode pertencer mesma classe do anterior.
Se ambos os mtodos estiverem na mesma linha hierrquica
(classe/subclasse), dizemos que o mtodo da subclasse
sobrescreve o mtodo da superclasse. O mtodo que ser
executado depender da classe do objeto.
22
Sobrescrita e Sobrecarga
Programao Orientada a Objetos
class Empregado
{
protected float salario;
public float getSalario() {return salario;}
}
class Vendedor extends Empregado
{
protected float comissao;
public float getSalario()
{
return salario+comissao;
}
}
23
Sobrescrita e Sobrecarga
Programao Orientada a Objetos
Se a assinatura do mtodo for diferente de outro mtodo com o
mesmo nome definido anteriormente na mesma classe ou em
outra classe da mesma linha hierrquica, ento estamos
realizando uma sobrecarga sobre o identificador do mtodo.
Quando for usado o identificador dentro do cdigo de um
programa o mtodo invocado ser determinado pela classe a
que pertence o objeto do mtodo e pelo nmero e tipos dos
argumentos passados para o mtodo.
24
Sobrescrita e Sobrecarga
Programao Orientada a Objetos
class Empregado
{
protected float salario;
public void aumento()
{
salario= salario*10.0;
}
public void aumento(float porcent)
{
salario= salario*porcent;
}
}
25
Observaes sobre as convenes
Programao Orientada a Objetos
Na linguagem Java foram adotadas as seguintes convenes de
nomeao:
Toda classe, interface e classe abstrata inicia com letra
Maiscula.
Toda varivel e mtodo inicia com letra minscula.
Nomes compostos so indicados com letras maiscula no corpo do nome, por exemplo: getNome()
Todo mtodo que retorna um valor de um atributo da classe
deve iniciar com a palavra get.
Todo mtodo que modifica um valor de um atributo da classe
deve iniciar com a palavra set.
26
Introduo a Diagrama de Classes
Uma classe representada no diagrama de classes por meio de
um retngulo, que pode ser dividido em at trs sees
horizontais, como mostrado na figura abaixo:
Nome da classe
Atributos da classe
(opcional)
Mtodos da classe
(opcional)
Programao Orientada a Objetos
27
Introduo a Diagrama de Classes
Exemplo
Disciplina
cdigo: String
nome: String
crditos:Num
horasSemanais:Num
AlterarDados()
Nome da classe
Atributos
Mtodos
Programao Orientada a Objetos
OBS: S colocada a assinatura do mtodo, ou seja, o nome do mtodo, o valor de retorno e os argumentos.
28
Introduo a Diagrama de Classes
Visibilidade
Visibilidade Smbolo Descrio
Pblica + Sem restrio de acesso.Protegida # Pode ser acessado apenas na prpria classe e por subclasses.Privada - Pode ser acessado apenas na prpria classe.
Programao Orientada a Objetos
29
Introduo a Diagrama de Classes
Associao comum
Aluno Disciplina
Notao Descrio
1 Exatamente um* ou 0..* Zero ou mais0..1 Opcional (zero ou um)n..m Mximo e mnimo
Programao Orientada a Objetos
30
Introduo a Diagrama de Classes
Exemplo
Aluno Disciplina
+nota
0..* 0..*
Programao Orientada a Objetos
31
Introduo a Diagrama de Classes
Agregao -Alguns objetos so compostos por outros objetos.
Curso Disciplina
Programao Orientada a Objetos
32
Introduo a Diagrama de Classes
Generalizao- Tipo de associao entre classes o que o
ocorre entre superclasses e subclasses.
Corpo Acadmico
+Nome: String
+Endereo:String
+Matrcula:Int
Corpo
Docente
Corpo Discente
Programao Orientada a Objetos
33
Introduo a Diagrama de Classes
Exemplo
Corpo Acadmico
Corpo Docente Corpo Discente Disciplina
+nota
Curso
Programao Orientada a Objetos
34
Byte codes Cdigo fonte
Compilador
Java
Mquina
Virtual
Caractersticas de Java
Orientao a objetos
Compilao do cdigo fonte para cdigo de uma mquina
virtual (Bytecodes)
Introduo Linguagem Java
35
Caractersticas de Java
Ausncia de manipulao explcita de ponteiros
Compilao do cdigo fonte para cdigo de uma
mquina virtual (Bytecodes)
Recuperao automtica de memria no utilizada
(Coleta de Lixo Garbage Collection)
Segurana
Suporte Concorrncia
Programao em rede
Introduo Linguagem Java
36
Programa OlaMundo class OlaMundo{
public void exibeOla()
{
System.out.println(Ola, Mundo!);
}
public static void main(String args[])
{
OlaMundo obj = new OlaMundo();
obj.exibeOla();
}
}
Introduo Linguagem Java
37
Programa OlaMundo
O programa acima composto por uma nica classe que possui um nico mtodo denominado main.
Os mtodos com o nome main so mtodos especiais e servem como ponto
inicial para execuo do programa.
A assinatura do mtodo main sempre a mesma
O qualificador public estabelece que este mtodo pode ser chamado por
mtodos ou procedimentos externos classe.
O qualificador static significa que o mtodo pertence classe e no s
instncias da classe, e deste modo pode ser invocado mesmo antes de ser
criado algum objeto para a classe. (mtodo de classe X mtodo de instncia)
J argumento String args[] um array de strings contendo os
parmetros passados na linha de comando.
Introduo Linguagem Java
38
Passos para compilao
Grave o arquivo com a extenso .java.
Instale o kit SDK.
Execute o comando abaixo para compilar
javac OlaMundo.java
Introduo Linguagem Java
39
Executando o Programa
java OlaMundo
Introduo Linguagem Java
40
Identificadores - Todos os identificadores da linguagem
devem iniciar com uma letra, ou o caractere _`, ou o caractere
$`.
Vlido InvlidoAluno10 Aluno#10
Num_Alunos Num Alunos
_disciplina$ !disciplina
Professor_10 10Professor
&uuuNo No?
Introduo Linguagem Java
41
Palavras chave
abstract default if private throw
boolean do implements protected throws
break double import public transient
byte else instanceof return try
case extends int short void
catch final interface static volatile
char finally long super while
class float native switch
const for new synchronized
continue goto package this
Introduo Linguagem Java
42
Comentrios
// comentrio de linha
/* comentrio de bloco */
/** comentrio de bloco c/ propsito de
documentao */
Introduo Linguagem Java
43
Tipos de dados simples
byte 8 bits
short 16 bits
int 32 bits
long 64 bits
Inteiros
Ponto Flutuante
float 32 bits
double 64 bits
Introduo Linguagem Java
44
Tipos de dados simples
boolean {true,false}
booleanos
Caractere
char 16 bits
Introduo Linguagem Java
45
Tipos de dados compostos
tipo identificador[];
tipo[] identificador;
Exemplos
int numeros[];
char[] letras;
long grade[][];
Arrays
Introduo Linguagem Java
46
Tipos de dados compostos
Declarando as dimenses
char alfabeto[] = new char[26];
int primos[] = {7, 11, 13};
Arrays
Introduo Linguagem Java
Obtendo a dimenso
int numalfa = alfabeto.length;
int numPrimos = primos.length;
47
Tipos de dados compostos
Strings so manipuladas por uma classe especial
chamada de String (so sempre constantes).
String nome = new String(Pedro);
String x, y;
x = nome;
y = Pedro;
Strings
Introduo Linguagem Java
48
Tipos de dados compostos
Operaes comuns
x = Pedro;
// obtendo o tamanho
int tam = x.length();
// obtendo um caractere
char segundo = x.charAt(1);
// comparando
if (Pedro.equals(x)) {...
Strings
Introduo Linguagem Java
49
Converso de Tipos
Todos os tipos primitivos possuem classes correspondentes
com mtodos para manipulao e converso.
Tipo Classe
int Integer
float Float
double Double
boolean Boolean
byte Byte
short Short
long Long
Introduo Linguagem Java
50
Converso de Tipos
Por exemplo, a classe Integer fornece um mtodo para
converter String para int:
int i = Integer.parseInt(12);
Para se converter um inteiro para String podemos utilizar o
mtodo toString:
String s = Integer.toString(12);
Existem mtodos semelhantes nas outras classes
Introduo Linguagem Java
51
Operadores
Unrios
Incremento ++
Decremento --
Negativo -
Complemento de bit ~
Introduo Linguagem Java
52
Operadores
Binrios
Adio e concatenao de
strings +
Subtrao -
Multiplicao *
Diviso /
Modulo %
And de bit &
Or de bit |
Xor de bit ^
rot. Esquerda >
Introduo Linguagem Java
53
Operadores
Relacionais
Menor que <
Maior que >
Menor igual =
igual ==
Diferente !=
Introduo Linguagem Java
54
Operadores
Booleanos
E &
OU |
OU Exclusivo ^
E Curto circuito &&
OU Curto circuito ||
Negao !
Condicional ?:
Introduo Linguagem Java
55
Operadores
Atribuio
Simples =
Adio +=
Subtrao -=
Multiplicao *=
Diviso /=
Modulus %=
AND &=
OR |=
XOR ^=
Introduo Linguagem Java
56
Blocos e Escopo
class Visivel {
public static void main (String args[]){
int x = 5;
int y = 2;
...
{
int x =2;
...
}
...
}
}
escopo do x interno
escopo do x externo
escopo de y { }
}
}
Introduo Linguagem Java
57
Estruturas de Controle
Seleo
if (condio)
comando1
else
comando2
if (x==0)
y = 5;
else
{
y+=6;
x++;
}
Exemplo
Introduo Linguagem Java
58
Estruturas de Controle
Seleo
switch(Expr)
{
case const1: com1;
...
case constN: comN;
default: comDef
}
Introduo Linguagem Java
59
Estruturas de Controle
Seleo (exemplo)
switch(letra)
{
case i: System.out.println(inserir);
break;
case e: System.out.println(excluir);
break;
case a: System.out.println(alterar);
break;
default:
System.out.println(
Ao ignorada: +letra);
}
Introduo Linguagem Java
60
Estruturas de Controle
Repetio
while(condio)
Comando;
while(i
61
Estruturas de Controle
Repetio
for(Expr.Inicializao;condio; expr.passo)
Comando;
for(i=1; i
62
Argumentos da linha de comando
Os argumentos digitados na linha de comando so passados
para o mtodo main da classe invocada por meio de um vetor
de Strings. Por exemplo, se executarmos a linha de comando
abaixo
java teste um dois trs
o mtodo main da classe teste receber o seguinte vetor de
Strings:
[0] um
[1] dois
[2] trs
Introduo Linguagem Java
63
Argumentos da linha de comando
Exemplo 1:
class ImpLinha
{
public static void main(String args[])
{
int i;
for (i=0;i
64
Argumentos da linha de comando
Exemplo 2:
class Soma
{
public static void main(String a[])
{
int i,soma=0;
for (i=0;i
65
Classes, Packages e Interfaces
Classes class Identificador {
corpo da classe
}
class ObjetoGeo
{
protected Color cor;
protected int x, y;
public ObjetoGeo(Color aCor, int aX, int aY)
{
cor = aCor; x=aX; y = aY;
};
public Color getCor() {return cor};
}
Introduo Linguagem Java
66
Classes, Packages e Interfaces
Derivando classes
class Circulo extends ObjetoGeo
{
protected int raio;
public Circulo(Color aCor, int aX, int aY, int aRaio)
{
cor = aCor; x=aX; y = aY; raio = aRaio;
};
public float area()
{
return 3.1415927 * raio *raio;
}
}
Introduo Linguagem Java
67
Classes, Packages e Interfaces
Modificadores de acesso
default Somente classes do mesmo
package possuem acesso
public Todos possuem acesso
protect Apenas os membros da classe
e subclasse
private Apenas os membros da classe
Introduo Linguagem Java
68
Classes, Packages e Interfaces
So mtodos como o mesmo nome da classe e declarados como pblicos e sem tipo de retorno. So chamados pelo operador new.
Uma classe pode no ter construtor ou ter vrios, desde que
tenham diferentes tipos de argumentos. O interpretador decidir
qual chamar a partir dos argumentos.
Construtores
Introduo Linguagem Java
69
Classes, Packages e Interfaces
Com exceo dos construtores todos os outros mtodos precisam
especificar algum valor de retorno. Se programador no est
interessado que o mtodo retorne algum valor, ento ele deve especificar que o mtodo ir retornar o valor void, que o valor
vazio. O retorno do valor dentro do mtodo feito com a palavra chave return seguida de uma expresso:
return
A expresso pode ser uma varivel, um literal ou qualquer
outra expresso que gere um valor do tipo especificado para o
retorno da funo.
Valor de retorno
Introduo Linguagem Java
70
Classes, Packages e Interfaces
Para se criar um objeto de uma classe (ou uma instncia da classe)
preciso primeiro declarar uma varivel que ir referenciar o
objeto, para depois criar o objeto. A declarao de um referncia a
um objeto feita obedecendo a seguinte forma geral:
;
Por exemplo, para declarar uma referncia um objeto da classe Circulo devemos adicionar a seguinte linha ao cdigo.
Circulo c;
Objetos
Introduo Linguagem Java
71
Classes, Packages e Interfaces
Pode-se declarar mais de uma referncia a objetos de uma classe,
separando os identificadores por vrgula.
Circulo c1, c2;
Para criar um objeto usa-se o operador new conforme a forma
geral abaixo:
= new ();
Objetos
Introduo Linguagem Java
72
Classes, Packages e Interfaces
Por exemplo, para criar um objeto do tipo Circulo podemos
usar a declarao abaixo:
c1 = new Circulo (Color.blue,1,5,8);
Podemos tambm combinar a declarao da referncia com a
criao do objeto em uma nica linha de cdigo.
Circulo c1 = new Circulo (Color.blue,1,5,8);
Objetos
Introduo Linguagem Java
73
Classes, Packages e Interfaces
Uma vez criado um objeto podemos acessar os elementos do
objeto por meio de uma referncia ao mesmo e do operador .. Por exemplo, para acessar o mtodo getCor() do objeto
referenciado pela varivel c1 devemos usar o seguinte cdigo:
c1.getCor();
Objetos
Introduo Linguagem Java
74
Classes, Packages e Interfaces
importante notar que a varivel apenas uma referncia ao
objeto (ponteiro) e no o objeto. Portanto preciso ter cuidado
com o compartilhamento de objetos:
c2 = c1; // As variveis c1 e c2 apontam
// para o mesmo objeto
Objetos
Introduo Linguagem Java
75
Classes, Packages e Interfaces
usado para referenciar a instncia corrente.
Objeto this
class ObjetoGeo
{
protected Color cor;
protected int x, y;
public ObjetoGeo(Color cor, int x, int y)
{
this.cor = cor; this.x=x; this.y = y;
};
public Color getCor() {return cor};
}
Introduo Linguagem Java
76
Classes, Packages e Interfaces
usado para referenciar a superclasse.
Objeto super
Introduo Linguagem Java
class Circulo extends ObjetoGeo
{
protected int raio;
public Circulo(Color aCor, int aX, int aY, int aRaio)
{
super(aCor,aX,aY); raio = aRaio;
}
public float area()
{
return 3.1415927 * raio *raio;
}
}
77
Classes, Packages e Interfaces
Outros Modificadores
static A varivel ou mtodo
comum a todas as
instncias da classe.
final O valor da varivel no
pode ser modificado.
synchronized Apenas um thread pode
entrar no mtodo por vez.
native identifica mtodos nativos.
Introduo Linguagem Java
78
Classes, Packages e Interfaces
Packages
package identificador
Agrupa classes e interfaces relacionadas. Tem que ser a
primeira declarao da unidade.
Importando Packages
import identificador
import java.awt.Color;
import java.awt.*;
Introduo Linguagem Java
79
Classes, Packages e Interfaces
Packages
As classes de um determinado pacote devem ser colocadas
em um diretrio obedecendo a mesma estrutura do nome do
pacote, a partir de algum diretrio constando na varivel de ambiente classpath. A varivel de ambiente classpath
indica os diretrios que servem como pontos de entrada para
procura de classes pela mquina virtual.
Introduo Linguagem Java
80
Classes, Packages e Interfaces
Packages
Introduo Linguagem Java
Por exemplo, suponha que eu resolva colocar as classes sobre
objetos geomtricos em um determinado pacote, digamos br.com.alcione.geo. Para indicar que unidade de
compilao pertence a esse pacote devemos colocar a diretiva
adequada no incio do arquivo fonte.
package br.com.alcione.geo;
public class objetoGeo
{
...
}
81
Classes, Packages e Interfaces
Packages
Introduo Linguagem Java
Para que a mquina virtual consiga achar o pacote devemos
coloc-lo em diretrio com a mesma estrutura do nome do pacote e
que tenha como raiz algum diretrio constante na varivel de ambiente classpath. Por exemplo, suponha que a varivel
classpath contenha os seguintes diretrios:
CLASSPATH=.;C:\JAVA\LIB;C:\meujavalib
ento o arquivo objetoGeo.class pode ser colocado no
diretrio:
C:\meujavalib\br\ufv\dpi\alcione\geo
82
Classes, Packages e Interfaces
Packages
Introduo Linguagem Java
Para usar a classe em outra unidade de compilao basta incluir a
seguinte diretiva no arquivo fonte:
import br.com.alcione.geo.*;
83
Classes, Packages e Interfaces
Packages
Introduo Linguagem Java
A partir da verso 1.2 a linguagem Java apresentou um mecanismo de adicionar
classes ao ncleo bsico da linguagem, dispensando deste modo o uso da
varivel de ambiente classpath, chamado de Mecanismo de Extenso. As
extenses so agrupadas em arquivos JAR que sero abordados mais adiante.
Uma vez feito isso, pode-se transformar as classes em extenses utilizando uma
das duas formas:
Extenso Instalada colocando o arquivo JAR em um local predeterminado na
estrutura de diretrios do ambiente de tempo de execuo de Java (Java Runtime
Environment ou JRE).
Extenso de download Extenso referenciando o arquivo JAR de uma forma
especfica, a partir do manifesto de outro arquivo JAR.
84
Classes, Packages e Interfaces
Classes e Mtodos Abstratos
Uma classe abstrata no pode ser instanciada e possui
um ou mais mtodos abstratos.
Um mtodo abstrato um mtodo sem corpo cuja a assinatura precedida da palavra-chave abstract.
As subclasses precisam sobrescrever os mtodos
abstratos, caso contrrio tambm no podero ser
instanciadas.
Introduo Linguagem Java
85
Classes, Packages e Interfaces
Classes e Mtodos Abstratos
Exemplo
abstract public class Animal
{
abstract public void fala();
}
Introduo Linguagem Java
86
Classes, Packages e Interfaces
Interfaces
interface identificador
{
corpo da interface
}
Podem ser vistas como classes abstratas contendo apenas
mtodos abstratos.
Implementando interfaces
class Identificador implements Interface
{
corpo da classe
}
Introduo Linguagem Java
87
Classes, Packages e Interfaces
Interfaces
interface InterUsuario
{
abstract public void exibeMensagem(String men);
}
Exemplo
public class Janela extends Frame implements InterUsuario
{
private Label label1;
...
public void exibeMensagem(String men)
{
label1.setText(men);
}
}
Introduo Linguagem Java
88
Classes, Packages e Interfaces
Converso
Uma referncia a um objeto pode ser atribuda a uma
varivel de referncia para um objeto em um nvel mais
alto na hierarquia dos objetos. Exemplo:
Object o;
String s = teste;
o = s;
A atribuio acima possvel porque a classe Object
uma superclasse de String (Na verdade superclasse de
todas as classes).
Introduo Linguagem Java
89
Classes, Packages e Interfaces
Converso
J a converso inversa s possvel se o objeto for realmente
do tipo da subclasse, e mesmo assim preciso utilizar um
operador de converso forada (casting):
Object o;
String s = teste;
String t = teste;
o = s;
t = (String) o;
Introduo Linguagem Java
90
Classes, Packages e Interfaces
Classes internas
A partir da verso 1.1 da linguagem Java foi includa a
permisso para declarar uma classe dentro da declarao de
outra classe.
public class Externa
{
...
class Interna
{
...
}
}
Introduo Linguagem Java
91
Classes, Packages e Interfaces
Polimorfismo
Seja o seguinte trecho de cdigo:
Introduo Linguagem Java
class A {
public void m1(){System.out.println(ola);}
}
class B extends A {
public void m1(){System.out.println(oi);}
}
class C {
public void m2(A obj){obj.m1();}
public void m3(A obj){
B b= new B();
m2(b);
}
}
O que ser exibido quando invocarmos m3?
92
Classes, Packages e Interfaces
Polimorfismo
Resposta: oi
Portanto a regra a seguinte: sempre chamado o mtodo declarado
na classe a que o objeto pertence, e no da classe superclasse.
Para que essa regra seja implementada necessrio que a associao
da chamada do mtodo com o cdigo do mtodo seja feito em tempo
de execuo. Isso ocorre porque somente em tempo de execuo ser
possvel saber a classe do objeto que est sendo recebido como
parmetro.
O momento em que ocorre a associao de um identificador com a
objeto que identifica chamado tempo de amarrao. Se este
momento ocorre em tempo de compilao a amarrao dita esttica
(static binding). Se associao ocorre em tempo de execuo a
amarrao dita dinmica (dynamic binding).
Introduo Linguagem Java
93
Classes, Packages e Interfaces
Polimorfismo
A amarrao dinmica de mtodos tambm acarreta um
comportamento polimrfico. Por exemplo, o objeto que passado para o mtodo imprimeSaldo() pode exibir comportamento
diversos, dependendo da classe a qual realmente o objeto pertence.
Introduo Linguagem Java
94
Classes, Packages e Interfaces
Classes internas
Os atributos e mtodos declarados na classe externa so
visveis pela classe interna, mesmo os declarados como protected ou private. No entanto, o contrrio no
verdadeiro, ou seja, os atributos e mtodos da instncia da
classe interna s so visveis pela classe externa se forem
declarados como pblicos.
A incluso de classes internas foi uma modificao a nvel
de linguagem em Java e o que motivou a modificao foi
o novo modelo de eventos proposto pela verso 1.1.
Introduo Linguagem Java
95
Excees
Formato geral
try
{
cdigo que pode gerar excees
} catch(classe de exceo1 objeto) {
tratamento da exceo1
} catch(classe de exceo2 objeto) {
...
} catch(classe de exceoN objeto) {
tratamento da exceoN
}
Introduo Linguagem Java
96
Excees
Exemplo
public void init()
{
MediaTracker tr = new MediaTracker(this);
im = getImage(getDocumentBase(),img.gif);
tr.addImage(im,0);
try
{
tr.waitForId(0);
}
catch (InterruptedException excep) {
System.out.print(Erro na carga);
}
}
Introduo Linguagem Java
97
Excees
Capturando qualquer exceo
try
{
Cdigo que pode gerar exceo
}
catch (Throwable t) {
// tratamento
...
}
Introduo Linguagem Java
98
Excees
Transferindo a captura de excees para mtodos mais
anteriores na pilha de chamadas
class esperaTecla
{
public void espera() throws Exception
{
System.in.read();
}
}
Introduo Linguagem Java
99
Excees
Throwing Exceptions
public void init()
{
MediaTracker tr = new MediaTracker(this);
im = getImage(getDocumentBase(),img.gif);
tr.addImage(im,0);
try
{
tr.waitForId(0);
}
catch (InterruptedException excep) {
System.out.print(Erro na carga);
throw excep;
}
}
Introduo Linguagem Java
100
IO
As funes de entrada e sada so suportadas por classes agrupadas no pacote java.io.
Se baseiam no conceito de stream de bytes (corrente ou sequncia), onde a entrada/sada um duto onde se
retira/coloca cada byte como em uma fila do tipo First in-
first out.
Introduo Linguagem Java
101
IO
O produtor e o consumidor podem se selecionados de uma ampla variedade que vai desde arquivos e portas de protocolos TCP/IP at
arranjos (arrays) de bytes e Strings.
As classes so combinadas, formando camadas, onde as classes das camadas inferiores fornecem servios bsicos como leitura/escrita de
um byte, enquanto que as classes superiores fornecem servios de
leitura/escrita mais sofisticados.
Camada n
Camada 1
Classe I/OBsica
Nvel dosservios
Introduo Linguagem Java
102
IO
Para complicar um pouco mais a situao, a linguagem Java Possui dois conjuntos distintos de classes para I/O.
Um originado da verso 1.0 e outro introduzido na verso
1.1. A razo para isso que as classes projetadas na verso
1.0 so orientadas para bytes e portanto no so adequadas
para lidar cdigos Unicodes que utilizam dois bytes.
Algumas vezes ser preciso combinar as funes antigas com as novas para obter algum tipo de funcionalidade.
A Sun adicionou novas facilidades ao conjunto antigo na verso 1.1, dando sinais que no pretende simplesmente
abandon-lo.
Introduo Linguagem Java
103
IO
classes de entrada.
StringBufferInputStream
ByteArrayInputStream
PipedInputStream
FileInputStream
InputStream
ints
floatsStrings
etc.
bytes
FilterInputStream
DataInputStream
BufferedInputStream
LineNumberInputStream
ints
floatsStrings
etc.
caracteres
PipedReader
CharArrayReader
StringReader
FileReader
Reader
FilterReader
BufferedReader
LineNumberReader
Introduo Linguagem Java
104
IO
classes de sada.
ByteArrayOutputStream
PipedOutputStream
FileOutputStream
OutputStream
intsfloats
Strings
etc.
bytes
FilterOutputStream
PrintStream
DataInputStream
BufferedOutputStream
ints
floatsStrings
etc.
caracteres
PipedWriter
CharArrayWriter
StringWriter
FileWriter
Writer
FilterWriter
BufferedWriter
PrintWriter
Introduo Linguagem Java
105
IO
As funes bsicas so tratadas pelas classes abstratas bsicas InputStream e OutputStream.
Para as funes de entrada e sada com Buffers so utilizadas as classes BufferedInputStream, BufferedOutputStream,
BufferedReader e BufferedWriter .
A traduo entre InputStream, OutputStream e BufferedReader , BufferedWriter feita por InputStreamReader
e OutputStreamWriter.
Para IO em arquivos podem ser utilizadas classes de baixo nvel: FileInputStream, FileOutputStream, FileReader e
FileWriter.
Introduo Linguagem Java
106
IO
Exemplo: Leitura no formatada de arquivos.
a) Streams b) I/O 1.1 import java.io.*;
class TesteIO101
{
public static void main(String a[])
{
try
{
DataInputStream in =
new DataInputStream(
new BufferedInputStream(
new FileInputStream(a[0])));
String str;
while((str = in.readLine())!= null)
System.out.println(str);
} catch(IOException e)
{ System.out.println(e.getMessage());}
}
}
import java.io.*;
class TesteIO111
{
public static void main(String a[])
{
try
{
BufferedReader in =
new BufferedReader(
new FileReader(a[0]));
String str;
while((str = in.readLine())!= null)
System.out.println(str);
} catch(IOException e)
{System.out.println(e.getMessage());}
}
}
Introduo Linguagem Java
107
IO
Exemplo: escrita no formatada de arquivos.
a) Streams b) I/O 1.1import java.io.*;
class TesteIO102
{
public static void main(String a[])
{
try { PrintStream out = new PrintStream( new BufferedOutputStream( new FileOutputStream("saida.out"))); out.println("Linha de teste 1"); out.println("Linha de teste 2"); out.close(); }catch(IOException e) {
System.out.println(e.getMessage());}
}
}
import java.io.*;
class TesteIO112
{
public static void main(String a[])
{
try { PrintWriter out = new PrintWriter( new BufferedWriter( new FileWriter("saida.out"))); out.println("Linha de teste 1"); out.println("Linha de teste 2"); out.close(); }catch(IOException e) {
System.out.println(e.getMessage());}
}
}
Introduo Linguagem Java
108
IO
Exemplo: escrita e leitura formatada de arquivos.
import java.io.*;
class TesteIO103
{
public static void main(String a[]){
try {
DataOutputStream out = new DataOutputStream(
new BufferedOutputStream(new FileOutputStream("a.out")));
out.writeBytes("O valor de pi: \n");
out.writeDouble(3.14159);
out.close();
DataInputStream in = new DataInputStream(
new FileInputStream("a.out"));
System.out.println(in.readLine());
System.out.println(in.readDouble());
}catch(IOException e) {System.out.println(e.getMessage());}
}
}
Introduo Linguagem Java
109
IO
A Classe System responsvel por manter os stream bsicos: System.in, System.out e System.error.
import java.io.*;
class TesteIO114
{
public static void main(String a[]){
try {
BufferedReader in = new BufferedReader(
new InputStreamReader(System.in));
System.out.print("Entre uma linha:");
System.out.println(in.readLine());
}catch(IOException e)
{System.out.println(e.getMessage());}
}
}
Introduo Linguagem Java
110
Util
Contm classes teis ao desenvolvimento de aplicaes
Alguns Exemplos:
Hashtable
Vector
Stack
Date
Introduo Linguagem Java
111
Util
Exemplo: Hashtable
Hashtable numbers = new Hashtable();
numbers.put("one", new Integer(1));
numbers.put("two", new Integer(2));
numbers.put("three", new Integer(3));
...
Integer n = (Integer)numbers.get("two");
if (n != null) {
System.out.println("two = " + n);
}
...
for (Enumeration e = numbers.elements(); e.hasMoreElements() ;) {
Integer i = (Integer)e.nextElement()
System.out.println( i.toString());
}
Introduo Linguagem Java
112
Util
Exemplo: Hashtable
class Pessoa {
String Nome;
String Tel;
public Pessoa(String Nome, String Tel)
{this.Nome = Nome; this.Tel = Tel;}
public String getNome(){return Nome;}
public String getTel(){return Tel;}
}
...
Hashtable pessoas = new Hashtable();
...
pessoa P1 = new pessoa("Pedro", "899-1313");
pessoas.put(P1.getNome(), P1);
...
pessoa P2 =(pessoa) pessoas.get("Pedro");
if (P2!=null) System.out.println
("Nome:"+P2.getNome(), "\nTel:"+P2.getTel());
Introduo Linguagem Java
113
Exerccio
Faa uma agenda. Utilize a classe pessoa e Hashtable
para armazenar o nome e telefone. Obtenha do teclado
os dados das pessoas e as instrues para
armazenamento e consulta. Posteriormente faa funes
para gravar e recuperar os dados em arquivo.
Introduo Linguagem Java
114
Exerccio: Diagrama de classes
AgendaInt
+obterPessoa()
+exibirLista()
+exibirPessoa()
+gravarAgenda()
+recuperarAgenda()
Agenda
+inserir(pessoa p)
+pessoas getPessoas()
+Pessoa getPessoa(String Nome)
Pessoa
-String Nome
-String Tel
-String End
+getNome()
+getTel()+getEnd()
0..*
Introduo Linguagem Java
115
Serializao e Persistncia
Um objeto serializvel se e possvel transform-lo em um stream de bytes de modo que seja possvel o seu armazenamento
em arquivo ou comunicao atravs de um stream.
Se o objeto for armazenado em uma memria no voltil dizemos que o objeto possui persistncia.
Para um objeto ser serializvel basta implementar a interface Serializable.
Introduo Linguagem Java
116
Serializao e Persistncia
Exemplo:
class Pessoa implements Serializable {
String Nome;
String Tel;
public pessoa(String Nome, String Tel)
{this.Nome = Nome; this.Tel = Tel;}
}
...
Pessoa p = new Pessoa(Ana,234-6757);
FileOutputStream fout = null;
ObjectOutputStream out;
try {
fout = new FileOutputStream(p.dat");
out = new ObjectOutputStream(fout);
out.writeObject(p);
out.close();
} catch(Exception e) {System.out.println(Erro:");return;}
Introduo Linguagem Java
117
Serializao e Persistncia
Exemplo:
FileInputStream fin = null;
ObjectInputStream in;
try {
fin = new FileInputStream(p.dat");
in = new ObjectInputStream(fin);
p = (pessoa) in.readObject();
in.close();
} catch(Exception e)
{ System.out.println(Erro:+e);
return;}
Introduo Linguagem Java
118
Exerccio
Modifique o programa da agenda de modo que a
gravao e a carga do arquivo seja feita atravs da
serializao do objeto Hashtable pessoas.
Introduo Linguagem Java
119
Abstract Window Toolkit
um package contendo classes para a criao de objetos para interao em janelas grficas.
Com essas classes possvel criar e manter objetos tais como:
Botes (Classe Button)
Caixa de Escolha (Classe Choice)
Dilogos (Classe Dialog)
Janelas (Classe Window)
Menus (Classe Menu)
Barra de Rolamento (Classe Scrollbar)
Etc...
AWT
120
O pacote conhecido como AWT 1.0 (Abstract Window Toolkit), no era muito harmnico e tinha um conjunto muito
pobre de componentes grficos.
A verso AWT 1.1 solucionou vrios deste problemas, com o oferecimento de um novo modelo para tratamento dos eventos
gerados na interface e com a introduo de um modelo para
programao de componentes, denominados de Javabeans.
Na verso 1.2 da linguagem novas facilidades foram incorporadas com a adio de um conjuntos de componentes
leves, denominados de Swing, na JFC (Java Foundation
Classes).
AWT
121
A hierarquia de classes.
AWT
Color Component Button Canvas Checkbox Choice Container Panel Window
Dialog
Frame Label List Scrollbar TextComponent TextArea TextField
MenuComponent MenuBar MenuItem Menu
122
Para usar classes definidas na AWT preciso import-las
import java.awt.*;
Um exemplo de uma classe que exibe uma mensagem.
class testeFrame1 extends Frame
{
public testeFrame1(){}
public static void main(String args[]){
testeFrame1 t = new testeFrame1();
t.setSize(100,50);
t.add(new Label("ola"));
t.setVisible(true);
}
};
AWT
123
Dois objetos das classes Frame e Label foram utilizados.
A Classe Frame cria uma janela com 0 x 0 pixels e invisvel. Para dimension-la e necessrio usar os mtodos resize() e show().
A classe Label usada para criar um objeto de texto que adicionado ao Frame.
Um objeto Frame no responde a nenhum evento. Para receber os eventos sobre a janela preciso implementar a interface WindowListener.
class testeFrame1 extends Frame implements WindowListener
AWT
124
class FrameX extends Frame implements WindowListener
{
public FrameX(String Titulo){
super(Titulo);
addWindowListener(this);
setSize(100,50);
}
public void windowOpened(WindowEvent we){}
public void windowClosed(WindowEvent we){}
public void windowIconified(WindowEvent we){}
public void windowDeiconified (WindowEvent we){}
public void windowActivated(WindowEvent we){}
public void windowDeactivated(WindowEvent we){}
public void windowClosing(WindowEvent we){
setVisible(false);
dispose();
System.exit(1);
}
};
Ou melhor, podemos criar uma subclasse da Frame que recebe eventos.
AWT
125
O Modelo de eventos do AWT1.1 um grande avano sobre o modelo antigo. Ele no s mais flexvel, e orientado a objetos,
como permitiu o desenvolvimento da interface de aplicao
JavaBeans, que permite a descrio de componentes visuais.
A idia por trs do novo modelo que uma fonte de eventos possa enviar os eventos para um ou mais objetos cadastrados para o
recebimento do evento, denominados de event listeners.
Geralmente, a fonte de evento um componente. Um listener um
objeto que implementa a interface EventListener ou alguma de suas
sub-interfaces.
EVENTOS: Modelo de Eventos 1.1
AWT
126
EVENTOS: Modelo de Eventos 1.1
Componente 1
ABC
Componente 2
BDE
Listener A
Listener B
Listener C
Listener D
Listener E
evento 1
evento 2
AWT
127
EVENTOS: Modelo de Eventos 1.1
Um listener pode estar registrado em mais de um componente. Um componente pode ter mais de uma lista de listener, dependendo
dos tipos de eventos que ele pode gerar. Uma ao sobre um
componente pode gerar mais de um evento.
Diferentemente do AWT1.0 onde existia apenas uma classe de eventos, o Event, no AWT1.1 existem 10 classes para os eventos,
definidas no pacote java.awt.event, todas subclasses da classe
java.awt.event.AwtEvent e cada uma representando um conjunto de
eventos relacionados, como mostrado na tabela.
AWT
128
EVENTOS: Modelo de Eventos 1.1
ComponentEvent Um componente moveu, foi escondido, exibido ou mudou de tamanho.FocusEvent Um componente recebeu ou perdeu o foco.KeyEvent Um componente recebeu uma entrada pelo teclado.MouseEvent Um componente recebeu uma entrada pelo mouse.ActionEvent Um componente foi ativado.AdjustmentEvent Uma barra de rolamento ou componente similar foi movido.ItemEvent Um item de um componente como lista, ou similar foi selecionado.ContainerEvent Um componente foi adicionado ou removido de um container.TextEvent Uma mudana ocorreu em um campo de texto.
AWT
129
EVENTOS: Modelo de Eventos 1.1
class FrameX extends Frame implements WindowListener
{
public FrameX(String Titulo){
super(Titulo);
addWindowListener(this);
setSize(100,50);
}
public void windowOpened(WindowEvent we){}
public void windowClosed(WindowEvent we){}
public void windowIconified(WindowEvent we){}
public void windowDeiconified (WindowEvent we){}
public void windowActivated(WindowEvent we){}
public void windowDeactivated(WindowEvent we){}
public void windowClosing(WindowEvent we){
setVisible(false);
dispose();
System.exit(0);
}
};
AWT
130
EVENTOS: Modelo de Eventos 1.1
Agora vamos supor que uma determinada classe necessitasse receber vrios eventos de vrios componentes. O cdigo da classe
poderia ficar um pouco confuso, alm da lista enorme de interfaces
que necessitariam de ser declarada aps a palavra implements. Uma
forma mais elegante de se lidar com estes casos por meio de
classes internas, ou inner classes. Desta forma, o cdigo para tratar
cada grupo de eventos fica localizado em uma nica classe, e como
as classes internas possuem acesso classe externa, os atributos e
mtodos da classe externa podem ser diretamente referenciados.
AWT
131
EVENTOS: Modelo de Eventos 1.1 import java.awt.*;
import java.awt.event.*;
public class TesteFrame3 extends FrameX {
Button b;
public TesteFrame3() {
setLayout(null);
setSize(100,80);
b = new Button("Aperte Aqui");
add(b);
b.setBounds(10,40,80,30);
b.addActionListener(new Bl());
}
class Bl implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (b.getLabel().equals("Aperte Aqui")) b.setLabel(Valeu);
else b.setLabel("Aperte Aqui");
}
}
public static void main(String args[]){
(new TesteFrame3()).setVisible(true);
}
}
AWT
132
EVENTOS: Modelo de Eventos 1.1
FocusEvent
ActionEvent
AdjustmentEvent
ItemEvent
ContainerEvent
TextEvent
WindowEvent
TextFieldMouseEvent
Scrollbar
Component
Label
Dialog
Panel
MenuItem
Button
Frame
Choice
Menu
ComponentEvent
KeyEvent
AWT
133
EVENTOS: Modelo de Eventos 1.1
As instncias das classes de eventos mantm as informaes relativas ao evento. Por exemplo, a classe MouseEvent possui os seguintes mtodos para recuperao de
informao sobre o evento:
int getId() tipo do evento. Por exemplo: MouseEvent.MOUSE_CLICKED,
MouseEvent.MOUSE_PRESSED
int getX() coordenada x do evento.
int getY() coordenada y do evento.
Point getPoint() coordenada x e y do evento.
int getClickCount() retorna o nmero de mouse clicks.
boolean isPopupTrigger() indica se o evento um disparo para menu pop-up.
void translatePoint(int x, int y) move a posio do evento por x e y.
AWT
134
EVENTOS: Modelo de Eventos 1.1
para se codificar um tratador para um determinado evento basta seguir os seguintes passos:
Determine o grupo de eventos deseja tratar.
No nome do grupo de eventos substitua o termo trecho Event por Listener.
Este o nome da interface que voc deve implementar. Crie uma classe
interna que implementa a interface.
Codifique os mtodos que tratam os eventos que voc deseja tratar. Todos os
mtodos da interface tem que ser implementados, mas o corpo dos mtodos
que no interessam podem ser deixados vazios.
Registre um objeto da classe interna junto ao componente, por meio do
mtodo addXXX, onde XXX o nome da interface implementada.
AWT
135
EVENTOS: Modelo de Eventos 1.1
Alguns mtodos para registro de listeners:
Button.addActionListener(ActionListener l)
Frame.addWindowListener(WindowListener l)
Choice.addItemListener(ItemListener l)
TextField.addTextListener(TextListener l)
Scrollbar.addAdjustamentListener(AdjustamentListener l)
Component.addComponentListener(ComponentListener l)
Component.addFocusListener(FocusListener l)
Component.addKeyListener(KeyListener l)
AWT
136
Adapter
Um event listener precisa implementar todos os mtodos da interface.
O package java.awt.event fornece seis classes abstratas, denominadas adapters que facilitam a implementao de listener.
ComponentAdapter
ContainerAdapter
FocusAdapter
KeyAdapter
MouseAdapter
MouseMotionAdapter
WindowAdapter
EVENTOS: Modelo de Eventos 1.1
AWT
137
EXEMPLO
class testeFrame3 extends FrameX{
Button b;
class SymMouse extends java.awt.event.MouseAdapter {
public void mouseClicked(java.awt.event.MouseEvent event){
Object object = event.getSource();
if (object == b) b.setLabel("Clik");
}
}
public testeFrame3 (String Titulo){
super(Titulo);
b = new Button("ola");
b.addMouseListener(new SymMouse());
this.add(b);
setSize(100,80);
}
public static void main(String args[]){
testeFrame3 t = new testeFrame3("Teste 3");
t.show();
}
}
AWT
138
EXEMPLO : TextField
public class testeFrame4 extends FrameX {
public testeFrame4(String titulo) {
super(titulo);
setLayout(new GridLayout(1,2));
textField1 = new TextField(20);
add(textField1);
button1 = new Button("Duplica");
add(button1);
button1.addMouseListener(new SymMouse());
}
public synchronized void show() {
move(50, 50);
setSize(200,50);
super.show();
}
TextField textField1;
Button button1;
AWT
139
EXEMPLO: TextField (continuao)
class SymMouse extends java.awt.event.MouseAdapter {
public void mouseClicked(java.awt.event.MouseEvent event){
Object object = event.getSource();
if (object == button1) {
int i = Integer.parseInt(textField1.getText());
textField1.setText(""+i*2);
}
}
}
public static void main(String args[]){
new testeFrame4("Teste 4").show();
}
}
AWT
140
EXEMPLO: TextField Sem layout
public class testeFrame5 extends FrameX {
public testeFrame5(String titulo) {
super(titulo);
setSize(220,70);
setLayout(null);
textField1 = new TextField();
textField1.setBounds(10,30,100,25);
add(textField1);
button1 = new Button("Duplica");
button1.setBounds(110,30,100,25);
button1.addMouseListener(new SymMouse());
add(button1);
}
AWT
141
EXEMPLO: Imagem
public class testeFrame6 extends FrameX {
public testeFrame6(String titulo) {
super(titulo);
setSize(500,460);
move(50, 50);
theImage = tk.getImage(ganso.gif");
}
private static Toolkit tk = Toolkit.getDefaultToolkit();
private Image theImage;
public void paint(Graphics g) {
g.drawImage(theImage, 20, 20, getSize().width-20,
getSize().height-20, this);
}
public static void main(String args[]){
new testeFrame6("Teste 6").setVisible(true);
}
}
AWT
142
O objeto toolkit oferece recursos para carregar imagens da forma correta para cada plataforma.
O mtodo Paint responsvel por desenhar a figura. Ele chamado toda vez que ocorre um evento sobre o componente, de
modo que a figura ser sempre redesenhada.
AWT
143
Exerccios
Faa um programa para converter Graus Celcius em
Farenheit
Faa um Programa que some nmeros.
Faa uma interface grfica para o programa agenda.
AWT
144
um programa Java que executado por meio de um visu-
alizador Applet ou atravs de um navegador da World Wide
Web (WWW).
Possibilita um aumento das capacidades da WWW uma vez
que permite:
Animaes
Imagens com som
Efeitos grficos
Programas interativos, como jogos
Applets
145
O que diferencia os applets das outras aplicaes em Java
So executados atravs de browsers
Possuem limitaes no acesso a arquivos
Possuem limitaes no acesso sobre a rede
Applets
146
Cliente com browser
Servidor
Requisio de pgina Web
Pgina Web construdapelo programa CGI
O servidor Webexecuta o programaCGI que constri apgina Web.
A soluo CGI
Applets
147
A soluo Applet
Cliente com browserServidor
Requisio de pgina Web
Pgina Web ebytecodes
O servidor Webenvia pgina Webe cdigo embytecodes
Executa o cdigoem bytecodes
Applets
148
Hierarquia de classes
java.lang.Object
java.awt.Component
java.awt.Container
java.awt.Panel
java.awt.Applet
Applets
149
Applet HTML
Applets
150
Estrutura bsica
import java.awt.*;
import java.applet.Applet;
public class indentificador extends Applet
{
corpo do applet
}
Applets
151
Exemplo Simples
import java.awt.*;
import java.applet.*;
public class Applet1 extends Applet
{
Label label1 = new Label();
public void init()
{
setLayout(null);
setSize(150,87);
label1.setText("Ola Mundo!");
add(label1);
label1.setBounds(24,12,84,48);
}
}
Applets
152
Execuo
javac Applet1.java
appletviewer exemplo1.html
Applets
153
Principais mtodos
init o primeiro mtodo executado e
executado apenas uma vez.
start executado toda vez que o applet
aparece no browser.
stop executado toda vez que o applet
passa a no ser exibido pelo
browser.
destroy executado quando o browser no
precisa mais do applet.
paint executado toda vez que o applet
aparece no browser. Recebe uma
instncia da classe Graphics.
Applets
154
Exemplo com paint
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class Applet2 extends Applet{
int x=0, y=0;
public void init(){
setLayout(null);
setSize(426,266);
this.addMouseMotionListener(new SymMouseMotion());
}
public void paint(Graphics g){
if (x>0)g.drawRect(x, y, 30, 30);
}
Applets
155
Exemplo com paint
class SymMouseMotion extends MouseMotionAdapter
{
public void mouseMoved(MouseEvent event)
{
if (event.getSource()== Applet2.this){
x = event.getX();
y = event.getY();
repaint();
}
}
}
}
Applets
156
Ciclo do repaint, update e paint
repaint()
update(Graphics g)
paint(Graphics g)
escala (dentro de 100 ms)
chama
Applets
157
Construa um applet que desenhe um quadrado em uma
posio aleatria (use o mtodo Math.random()). Se o
usurio clicar no quadrado imprima uma mensagem no
quadrado (use o mtodo g.drawString).
Exerccios
Analise o cdigo do programa demo JumpingBox.
Applets
158
Componentes
Button
Button()
Button(String lbl)
Construtores
Mtodos mais importantes
String getLabel()
void setLabel(String lbl)
Ao : envia uma ao quando pressionado
Exemplo
Button b= new Button(ok);
Applets
159
Componentes
Label
Label()
Label(String lbl)
Label(String lbl. Int align)
Construtores
Mtodos mais importantes
String getText()
void setText(String lbl)
int getAlignment()
void setAlignment()
Applets
160
Componentes
List
List()
List(int vlines, boolean src)
Construtores
Mtodos mais importantes
void addItem(String item)
void addItem(String item, int index)
void clear()
int countItems()
void delItem(int index)
String getItem(int index)
void replaceItem(String new, int index)
Applets
161
Componentes
TextField
TextField()
TextField(int cols)
TextField(String txt)
TextField(String txt,int cols)
Construtores
Mtodos mais importantes
String getText()
int getColumns()
void setText(String txt)
Applets
162
Componentes
TextArea
TextArea()
TextArea(int lin, int cols)
TextArea(String txt)
TextArea(String txt, int lin, int cols)
Construtores
Mtodos mais importantes
String getText()
int getColumns()
int getRows()
void setText(String txt)
Applets
163
Containers
Layouts
BorderLayout Posiciona conforme pontos
cardeais
GridLayout Posiciona uma grade
FlowLayout Posiciona componentes da
esquerda para direita
GridBagLayout Posiciona um grade com
elementos de tamanhos
diferentes
CardLayout Sobrepe os componentes
north
south
west east center
um dois
quatro trs
um dois
quatro trs um
um dois
quatro
trs Applets
164
Containers
Layouts
Exemplo
import java.awt.*;
public class Exemplo4 extends java.applet.Applet
{ Button but1, but2;
public void init()
{
setLayout(new BorderLayout());
but1 = new Button(primeiro);
add(North,but1);
but2 = new Button(segundo);
add(South,but2);
}
}
primeiro
segundo
Applets
165
Containers
Layouts
Inserindo novos painis
import java.awt.*;
public class Exemplo5 extends java.applet.Applet
{ Panel fundo;
public void init()
{ fundo = new Panel();
fundo.setLayout(new GridLayout(1,2));
fundo.add(new Button(primeiro));
fundo.add(new Button(segundo));
add(south,fundo);
}
}
primeiro segundo
Applets
166
Containers
redimensionando & movendo
void resize(int width, int height)
void move(int x, int y)
cores
Color c = new Color(int r, int g, int b)
padres
black, blue, cyan, darkGray, gray,
green, lightGray, magenta, orange, pink,
red, white, yellow
Applets
167
Faa uma calculadora com o seguinte layout:
Exerccios
0 . =
3 2 1
6 5 4
9 8 7
/
*
-
+
Transforme o programa agenda em um applet.
Applets
168
Localizando arquivos
String getDocumentBase() String getDocumentBase()
Imagens
Carregando
Exibindo
Image getImage(String lcl, String arq)
Graphics.drawImage(Image img, int x, int y,
ImageObserver imgO)
Applets
169
Exemplo
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class Applet4 extends Applet
{
Image img[];
private static int i=0;
public void init()
{
img = new Image[2];
img[0] = getImage(getDocumentBase(),"baleia1.jpg");
img[1] = getImage(getDocumentBase(),"baleia2.jpg");
this.addMouseListener(new SymMouse());
}
Applets
170
Exemplo
class SymMouse extends MouseAdapter
{
public void mouseClicked(MouseEvent event)
{
if (event.getSource() == Applet4.this)
repaint();
}
}
}
Applets
171
Exemplo
import java.awt.*;
import java.net.URL;
public class Exemplo6 extends java.applet.Applet
{
Image img;
public void init()
{ img = getImage(getDocument(),simp.bart.gif);}
public void paint(Graphics g)
{
g.drawImage(img,0,0,this);
}
}
Applets
172
MediaTracker
Usado para monitorar o carregamento de imagens.
public void init()
{
MediaTracker tr = new MediaTracker(this);
im = getImage(getDocumentBase(),img.gif);
tr.addImage(im,0);
try
{
tr.waitForId(0);
}
catch (InterruptedException excep) {}
}
Applets
173
Audio
O verso JDK1.0 oferece suporte para execuo de arquivos de
udio apenas no formato AU. O JDK1.2 estendeu este suporte
para arquivos de udio no formato AIFF, WAV, MIDI e RMF.
Classe
Mtodos
AudioClip
getAudioClip()
play()
loop()
stop()
Applets
174
Audio
Exemplo
import java.lang.*;
import java.net.URL;
public class Exemplo7 extends java.applet.Applet
{
AudioClip som;
public void init()
{
som = getAudioClip(getDocument(),ola.au);
}
public void start() {som.play();}
}
Applets
175
Obtendo parmetros
public void init()
{ String imageFile = getParameter(imageFile);
String nImages = getParameter(nImages);
}
Applets
176
Graphics
Graphics constri um objeto grfico.
drawline desenha uma linha entre dois pontos.
drawRect desenha um retngulo.
drawRoundRect desenha um retngulo com bordas
arredondadas.
draw3DRect desenha um retngulo 3D.
drawOval desenha um oval.
drawPolygon desenha um polgono usando um vetor
de pontos.
drawString desenha um string.
fillRect desenha um retngulo preenchido.
fillRoundRect desenha um retngulo com bordas
arredondadas preenchido.
fill3DRect desenha um retngulo 3D preenchido.
fillOval desenha um oval preenchido.
fillPolygon desenha um polgono usando um vetor
de pontos preenchido.
Applets
177
Graphics
getColor obtm a cor corrente.
setColor define a cor corrente.
getFont obtm a fonte corrente.
setFont define a fonte corrente.
Applets
178
Exerccios
Faa um applet que mude o desenho ao lado
quando clicado.
Estude o cdigo do programa slideshow.
Applets
179
Introduo threads
Thread uma linha de execuo dentro de um mesmo
processo.
Sistemas mono tarefas como o DOS possuem apenas um
processo em execuo e apenas um Thread no processo.
Sistemas multi-tarefas como o Windows 3.1 permitem
vrios processos em execuo e apenas um Thread por
processo.
Sistemas multi-tarefas e multi-thread como o Unix e
Windows 95 permitem vrios processos em execuo e
vrios Threads por processo.
Threads
180
Introduo threads
Processos com vrios threads podem realizar mais de
uma tarefa simultaneamente.
So teis na criao de processos servidores e na criao
de animaes.
Mesmo que voc no crie mais de um thread todo applet
possui vrios threads: threads de garbage collection,
monitoramento de eventos, carga de imagens, etc.
Portanto, Java s pode ser executada em ambientes
multi-thread.
Threads
181
Introduo threads
Para criar um thread em java preciso cria um objeto da
classe thread.
Thread t1 = new Thread(ob);
O objeto Thread recebe um objeto que define o cdigo e os
dados que sero utilizados pelo thread.
O objeto recebido uma instncia de uma classe qualquer
que implementa a interface Runnable.
Threads
182
Introduo threads
O objeto thread inicia a sua execuo no mtodo run do
objeto recebido como parmetro.
Para iniciar a execuo preciso invocar o mtodo start
do objeto thread.
A interface Runnable exige que a classe que a implementa
defina o mtodo run.
public class exemplo8 implements Runnable
Threads
183
Exemplo
public class exemplo8 implements Runnable
{
private String men;
public static void main(String args[])
{
exemplo8 ob1 = new exemplo8(ola);
Thread t1 = new Thread(ob1);
t1.start();
}
public exemplo8(String men) {this.men=men;}
public void run()
{ for(;;) System.out.println(men);}
}
Threads
184
Introduo threads
Neste caso alguns cuidados devem ser tomados, uma vez
que existe o compartilhamento de cdigo e dados.
O construtor Thread permite a nomeao dos threads.
Pode se criado mais de um thread sobre o mesmo objeto.
Thread t1 = new Thread(ob1);
Thread t2 = new Thread(ob1);
Thread t1 = new Thread(ob1,primeiro thread);
Threads
185
Threads com Applets
O mtodo start cria um novo thread.
preciso alterar a declarao de uma classe.
public class nomeapplet extends applet implements Runnable;
public void start()
{
if (t1==null)
{
t1 = new Thread(this);
t1.start();
}
}
Threads
186
Threads com Applets
O mtodo stop elimina o thread.
O mtodo run executa o cdigo
public void run()
{
// aqui vai o cdigo
}
public void stop()
{
if (t1!=null) { t1.stop(); t1= null;}
}
Threads
187
Exemplo
import java.awt.Graphics;
import java.awt.Font;
public class exemplo9 extends
java.applet.Applet implements Runnable
{
char separated[];
String s = JAVA WORKSHOP - IME;
Thread t1 = null;
int x_coord = 0, y_coord = 0;
String num;
int speed=35;
boolean threadSuspended = false;
Threads
188
Exemplo
public void init()
{
resize(150,50);
setFont(new Font("TimesRoman",Font.BOLD,36));
separated = new char [s.length()];
s.getChars(0,s.length(),separated,0);
}
public void start()
{
if(t1 == null)
{t1 = new Thread(this);t1.start();}
}
Threads
189
Exemplo
public void stop() { t1 = null;}
public void run()
{
while (t1 != null)
{
try {Thread.sleep(100);}
catch (InterruptedException e){}
repaint();
}
t1 = null;
}
Threads
190
Exemplo
public void paint(Graphics g)
{ int i;
for(i=0;i
191
Animao exibir uma figura que muda com o
tempo
No momento o suporte a animao da API central do Java
limitado.
Espera-se para o final de 1997 uma API que d suporte
avanado para animao.
A animao pode ser controlado por um thread que
executado em um certo intervalo pr-definido.
Animao
192
Exemplo bsico de animao in-place.
import java.awt.*; import java.applet.Applet;
public class exemplo10 extends Applet implements
Runnable
{
Image imgs[];
int ind=0;
Thread t1;
public void init()
{imgs = initImgs(); t1=new Thread(this);
t1.start();}
public void paint(Graphics g)
{g.draw.Image(imgs[ind],0,0,this);}
...
Animao
193
Exemplo bsico de animao in-place.
...
public void start() {
if (t1 == null) { t1 = new Thread(this);
t1.start();}
}
public void stop() {
if (t1 != null) {t1.stop();t1 = null;}
}
public void run() {
while (true){
try {Thread.sleep(100};}
catch(InterruptedException ex){}
repaint();
ind=++ind % imgs.length;
}
}
}
Animao
194
Problemas com o exemplo
Ele no permite interromper a animao
O repaint chama o update default que repinta todo o
fundo, o que causa flicker na animao
Existe um problema relacionado com a integridade da
varivel ind. A varvel atualizada pelo Thread t1
(run) e lida pelo Thread update (paint).
Animao
195
permitir interromper a animao
boolean pause = false;
public boolean mouseDown(Event e, int x, int y)
{
if (pause) {t1.resume();}
else {t1.suspend();}
pause = !pause;
return true;
}
Animao
196
public void update(Graphics g)
{
g.setColor(getBackground());
g.fillRect(0,0,width, height);
g.setColor(getForeground());
paint(g);
}
Eliminar o flicker
Default
Mudana
public void update(Graphics g) {paint(g);}
Animao
197
Eliminando conflitos
public synchronized void paint(Graphics g)
{
g.draw.Image(imgs[ind],0,0,this);
}
public synchronized void mundaInd()
{
ind = ++ind % imgs.length;
}
Animao
198
Copiando a figura
public void drawStickFigure (Graphics g, int nX, int nY)
{
g.drawOval (nX + 10, nY + 20, 20, 40);
g.drawLine (nX + 20, nY + 60, nX + 20, nY + 100);
g.drawLine (nX + 10, nY + 70, nX + 30, nY + 70);
g.drawLine (nX + 10, nY + 150, nX + 20, nY + 100);
g.drawLine (nX + 20, nY + 100, nX + 30, nY + 150);
}
public void paint (Graphics g, Applet Parent)
{
if (bFirstTime) {
bFirstTime = false;
drawStickFigure (g, nX, nY);
}
else { g.copyArea (nX, nY, 35, 155, 5, 0);}
}
Animao
199
Double-buffer
offScreenImage = createImage (nWidth, nHeight);
offScreenGraphic = offScreenImage.getGraphics();
...
offScreenGraphic.setColor (Color.lightGray);
offScreenGraphic.fillRect (0, 0,nWidth, nHeight);
offScreenGraphic.setColor (Color.black);
...
offScreenGraphic. drawOval(10,10,20,20);
...
g.drawImage (offScreenImage, 0, 0, this);
Animao
200
Ticker-Tape
class TextScrolling extends AnimationObject
{
String pcMessage; // The message
int nXPos; // The location of the message
int nYPos; // The location of the message
int nAppletWidth; // The width of the applet
int nMessageWidth; // The width of the message
public TextScrolling (String pcMsg, int nWide)
{
pcMessage = pcMsg;
nAppletWidth = nWide;
nMessageWidth = -1;
nYPos = -1;
nXPos = 0;
}
Animao
201
Ticker-Tape
public void paint (Graphics g, Applet parent)
{
if (nYPos < 0)
{
nYPos = (g.getFontMetrics ()).getHeight ();
char pcChars [];
pcChars = new char [pcMessage.length() + 2];
pcMessage.getChars
(0, pcMessage.length() - 1, pcChars, 0);
nMessageWidth = (g.getFontMetrics ()).charsWidth
(pcChars, 0, pcMessage.length());
}
g.drawString (pcMessage, nXPos, nYPos);
}
Animao
202
Ticker-Tape
public void clockTick ()
{
if (nMessageWidth < 0) return;
// Move Right
nXPos -= 10;
if (nXPos < -nMessageWidth)
nXPos = nAppletWidth - 10;
}
Animao
203
Ticker-Tape
public void run()
{
int ndx = 0;
Thread.currentThread().setPriority
(Thread.MIN_PRIORITY);
while (size().width > 0 && size().height > 0
&& kicker != null)
{
AnimatedObjects[0].clockTick ();
repaint();
try {Thread.sleep(nSpeed);}
catch (InterruptedException e){}
}
}
Animao
204
Exerccios
Adicione um boto para alterar a direo das
cambalhotas.
Faa o desenho abaixo dar cambalhotas .
Animao
205
Ethernet, X.25, Token RingCamada fsica
IPCamada de rede
UDPTCPCamada de Transporte
SNMPFTP HTTP SMTP TELNET
MIME
Camada de Aplicao
FTP - File Transfer Protocol SMTP - Simple Mail Transfer ProtocolHTTP - Hypertext Transfer Protocol SNMP - Simple Network Management ProtocolIP - Internet Protocol TCP - Transmission Control ProtocolMIME - Multi-purpose Internet Mail Extensions UDP - User Datagram Protocol
Programao em Redes
206
Dados TCP
Header
Dados
Dados Aplicao
Dados TCP
Header
Transporte
TCP
Header
IP
Header
Rede
IP
Header
Ethernet
Header Fsica
Programao em Redes
207
Host meucomp.com.brIP: 200.18.46.12
Host outrocomp.eduIP: 205.50.30.75
Internet
Identificao de Hosts
Programao em Redes
208
Identificao de Processos (Portas)
Protocolo PortaHTTP 80echo 7FTP 20, 21SMTP 25Finger 79Daytime 13pop3 110
Programao em Redes
209
Alternativas de Computao Remota
Sockets
HTTP (CGI, ASP,JSP)
Common Object Request Brocker Architecture (CORBA)
Remote Method Invocation (RMI)
Distributed Component Object Model (DCOM)
Programao em Redes
210
Sockets
Cliente Servidor
HOST:xxx.yyy.zzz
Port: nnnn
HOST:aaa.bbb.ccc
Port: iiii
Sequncia de bytes
Programao em Redes
211
CGI
Cliente Servidor
Servidor Web
Programa CGI
Web Browser
Solicitao de pgina
Pgina construda
Programao em Redes
212
CORBA
Cliente Servidor
Objeto Cliente
Server Stub
Objeto Servidor
Servidor Virtual
ORB
Programao em Redes
213
O pacote java.net contm as classes e interfaces usadas para programao de sistemas em rede com Java. As classes podem
ser enquadradas em trs categorias:
Classes para comunicao bsica em rede. Tratam da
comunicao em baixo nvel entre aplicaes. Outros
protocolos podem ser implementados usando como base
esta comunicao bsica.
Classes para comunicao dentro da Web. Estas classes
provem facilidades para acessar contedos por meio de
URLs.
Classes para tratamento dos formatos estendidos da Web.
Utilizadas para tratar novos protocolos e tipos MIME.
Programao em Redes
214
Classe DescrioSocket Prov um socket cliente para comunicao orientada
conexo via protocolo TCP.ServerSocket Prov um socket servidor para comunicao orientada
conexo via protocolo TCP.DatagramSocket Prov um socket UDP para comunicao no orientada
conexo.DatagramPacket Representa um datagrama que pode ser enviado usando
DatagramSocket.InetAddress Representa os dados de um Host (Nome e endereo IP)
Programao em Redes
215
Comunicao orientada conexo (cliente)
import java.io.*;
import java.net.*;
public class ClienteData {
public static void main(String[] args) throws Exception{
Socket socket = null;
BufferedReader in = null;
socket = new Socket(args[0], 13);
in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
System.out.println("Data: " + in.readLine());
}
in.close();
socket.close();
}}
Programao em Redes
216
Comunicao orientada conexo (Servidor)
import java.io.*;
import java.net.*;
import java.util.*;
public class ServerData {
public static void main(String[] args) throws IOException {
SeverSocket ssocket = null;
Socket socket = null;
BufferedWriter out = null;
ssocket = new SeverSocket (5013,5);
for(;;) {
socket = ssocket.accept();
out = new BufferedWriter (new OuputStreamWriter (
socket.getOuputStream()));
out.write((new Date()).toString()+\n);
out.flush();
}
}
}
Programao em Redes
217
Comunicao orientada conexo (Servidor Multithreaded)
import java.net.*;
import java.io.*;
public class ServerData
{
public static void main(String args[]) {
ServerSocket ssocket=null;
try { ssocket = new ServerSocket(pt); }
catch(Exception e) {System.err.println(e); System.exit(1);}
while(true){
try {
Socket socket = ssocket.accept();
(new serversec(socket)).start();
}
catch(Exception e) {System.err.println(e);}
}
}
}
Programao em Redes
218
Comunicao orientada conexo (Servidor Multithreaded)
class serversec extends Thread
{
Socket socket;
public serversec(Socket aSocket) {socket = aSocket;}
public void run() {
try {
BufferedWriter out = new BufferedWriter (
new OuputStreamWriter (
socket.getOuputStream()));
out.write((new Date()).toString()+\n);
out.flush();
out.close();
socket.close()