b_Curso de Java

390
1 Curso de JAVA

description

curso de java

Transcript of b_Curso de Java

  • 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()