Departamento de Informática Comdex Internet...

Preview:

Citation preview

Comdex Internet Brasil’96Tutorial T5: Desenvolvimento em Java(tm)

Jorge Henrique Cabral FernandesDepartamento de InformáticaUniversidade Federal de Pernambuco

Créditos

Andreia Almeida de AlcântaraJorge Henrique Cabral FernandesJulianne Freire de Sousa PepeuSilvio Romero de Lemos Meira

Distribuição do Material para este Tutorial

• Feita através de disquete– Arquivos HTML em três formatos: tar, zip e arj

• Páginas HTML contêm a informação a ser apresentada, com links para diversos recursos na Internet

• Disponibilização desta apresentação na Internet, acessível através da home-page de Java, no DI-UFPE

Introdução

• Java é a linguagem de programação para a Internet

• Quais as principais características de Java ?• Qual o nicho que Java ocupa no

desenvolvimento de software ?• Como desenvolver software em Java ?• Apresentação direcionada a analistas e

programadores

Programação

• Parte 1: O Contexto de Java na Internet• Parte 2: O paradigma da linguagem Java• Parte 3: Elementos e especificações da

Linguagem Java• Parte 4: Threads e exceções em Java• Parte 5: Ambientes de desenvolvimento

para Java• Parte 6: Desenvolvendo software com Java

Parte 1: O Contexto de Java na Internet

Internet

WWW

CGI

Java

Applets

JavaScript

Internet

Internet(TCP/IP)

Aplicações• telnet

terminal remoto

• ftptransferência de arquivos

• e-mailcorreio eletrônicoServidor

Cliente

World Wide WebHipermídia para a Internet

• Universal Resource Locator (URL)– Endereça universalmente recursos hipermídia

• Hypertext Markup Language (HTML)– Descreve documentos hipertextuais

• Hypertext Transfer Protocol (HTTP)– Permite transferência de documentos hipermídia

• Web Server (WWW server, HTTP server)– Disponibiliza documentos hipermídia na Web

• Web Browser (folheador, ex: Netscape e Internet Explorer)– Acessa e mostra documentos hipermídia

Servidores e Clientes WebWeb Server

WWW(HTTP)

Web Browser

Base de documentos hipermídia

Este é o destino

URLEste é o destino

Nome

End

CPF

Formulário

Nome

End

CPF

Alex

Recife

999.999

FormulárioCGIscriptCGIscript

Alex

CGI e Formulários:Acrescentando dinamismo à Web

Web ServerWWW(HTTP)

Web Browser

Limitações e Vantagens do Modelo CGI+Forms

• Entrada de dados orientada a caracteres• Modelo computacional batch

– preenchimento de dados em bloco– sem tratamento de sessões

• Processamento centralizado no servidor– um processo criado para cada invocação

• Segurança para o servidor• Extensamente testado e aprovado

Java: uma Linguagem Orientada a Objetos

• Sintaxe similar a C++• Objetos, classes e

interfaces• Herança simples e

múltiplas interfaces• Threads e monitores• Tratamento de

exceções

• Tipos fortes, com “dynamic binding”

• Bytecode interpretado sobre máquina virtual

• Coleta de lixo • Sem aritmética de

ponteiros• Bibliotecas portáveis • Integração com C/C++

Não Confundir com JavaScript• Linguagem de criação de scripts, com sintaxe

similar a Java, desenvolvida pela Netscape• Poder computacional limitado• Scripts interpretados pelo Netscape Navigator,

sem máquina virtual• Permite a execução de tarefas simplificadas no

cliente:– Consistência de formulários– Geração de páginas, etc.

Applets

• “Pequenos” programas Java;• que são disponibilizados em Web servers;• e se hospedam dentro de páginas HTML.• O código do applet é copiado para o browser,

juntamente com a página HTML.• O código é executados por máquinas virtuais

instaladas no browser.• A interface gráfica do applet ocupa uma área

bidimensional da página HTML

Applets: Código Móvel para aWeb

Web ServerWWW(HTTP)

Web Browser

Resumo da Parte 1: O Contexto de Java na Internet

• WWW: hipermídia para a Internet• HTTP, HTML e CGI: tecnologias

amadurecidas na Web• Java: linguagem orientada a objetos, de uso

geral, cujo código tem mobilidade• Applets em Java acrescentam maior

dinamismo à Web por executarem no lado do cliente, dentro de Web browsers

Parte 2: Paradigma da Linguagem Java

• Orientação a Objetos– Aumenta a qualidade do projeto e código

• Código Móvel– Facilita a instalação da aplicação em diferentes

plataformas• Applet

– Facilita a disseminação da aplicação através daWeb

Orientação a Objetos

• Objetos– Componentes de software que contêm um

estado e uma interface, e trocam mensagens• Classes

– “Moldes” para a criação de objetos• Herança

– Modelo de estruturação de classes, que facilita a reusabilidade de código

Objetos Trocam Mensagens

Cliente ContaBancária

debite(100, “11, 5, 1996”)

contaBancaria.debite(100, “11, 5, 1996”);

Classes são Moldes para a Criação de Objetos

newnewnew

newnew

newnew

new

Definindo a ClasseContaBancaria

class contaBancária {int saldo;

/* metodo construtor */ContaBancaria(int saldoInicial) {

saldo = saldoInicial;}

/* metodo de instancia */void debite(int valor, String data) {

...}

}

Criando Contas Bancáriasclass ContaBancaria

ContaBancaria(int)

ContaBancaria(int) Método construtor

saldo

saldo Variável de instância

debite(int, String)

debite(int, String) Método de instância

Banco

new ContaBancaria(100)100

new ContaBancaria(55)

55

new ContaBancaria(-33) -33

Herança: Estruturação eReusabilidade

ContaBancaria

saldotransacoes

herdaContaCorrente

talonariosPoupanca

jurostaxaJuros

herda

ContaEspecial

limitetaxaJuros

herda

Classe ContaCorrente

class ContaCorrente extends ContaBancaria {int talonarios;

}

ContaCorrente

saldotransacoestalonarios

newnew

saldotransacoestalonarios

Classe ContaEspecial

class ContaEspecial extends ContaCorrente {int limite;float taxaJuros;

}ContaEspecial

saldotransacoestalonarios

limitetaxaJuros

new

new

saldotransacoestalonarios

limitetaxaJuros

Classe Poupanca

class Poupanca extends ContaBancaria {int juros;float taxaJuros;

}Poupanca saldo

transacoesjuros

taxaJuros

new

new

saldotransacoes

jurostaxaJuros

Benefícos da Herança

• Fatoração e redução do tamanho do código• Estruturação do código• Aumenta a reutilização de código• Redução do esforço de evolução da

aplicação• Melhoria da qualidade do código

Tecnologia de Código Móvel em Java

• Programas compilados são um conjunto de classes

• O código gerado é arquiteturalmente neutro, executado sobre uma máquina virtual

• Recursos nativos do sistema operacional são tratados de modo abstrato

Compilação de um Programa em Java

ContaBancaria.java

Poupanca.java

ContaCorrente.java

ContaBancaria.class

Poupanca.class

ContaCorrente.class

Execução de um Programa em Java

Software Chip

Área de objetos

Area de métodos

Sistema Operacionalcom coleta de lixo

Recursos Nativos do Ambiente de Execução

São isolados através de classes com métodos nativos internos, classes abstratas e interfaces

• Sistema de Arquivos– java.io

• Sistema de Interface Gráfica– java.awt, java.awt.peer, java.awt.image

• Comunicações em rede (sockets, etc)– java.net

Applets Facilitam Disseminação de Código

• Funcionamento dos applets– Verificação do bytecode– Restrições de acesso

• Inserção de um applet em uma página HTML

• Mensagens mais importantes para mandar a um applet

Funcionamento dos AppletsWeb Server

WWW(HTTP)

Web Browser

Verificação do BytecodeWWW(HTTP)

Web Browser

?

Restrições de Funcionamento dosApplets

Carregados viasistema de arquivos

Carregados via rede

Restrições e Permissões dos AppletsCarregados Via Sistema de Arquivos

• Se carregados no Netscape, não podem ler ou gravar arquivos. carregados no appletviewer pode fazer leitura e escritura

• Podem fazer conecção de rede com qualquer host• Podem saber o nome do usuário• Podem carregar bibliotecas dinâmicas• Podem abrir uma janela pop-up sem warning

Restrições e Permissões dos AppletsCarregados Via Rede

• Não podem ler ou gravar arquivos no cliente em qualquer situação

• Só podem fazer conecção de rede com ohost de onde veio

• Não tem acesso ao nome do usuário • Não podem carregar bibliotecas dinâmicas• Toda janela pop-up tem uma barra de

warning

Inserção de um Applet em uma Página HTML

<html><body><h1>Este applet é bastante simples</h1><applet code=Clock.class

width=100height=200>

<param name=mode value=digital><param name=beep value=off></applet></body></html>

Mensagens mais Importantes para Mandar a um Applet (1)

• void init()– Enviada uma única vez, logo após a criação do applet

• void paint(Graphics g)– Enviada sempre que o applet precisa atualizar a

interface• void start()

– Enviada sempre que a página do applet é visitada• void stop()

– Enviada sempre que a página do applet é sobreposta

Mensagens mais Importantes para Mandar a um Applet (2)

• void destroy()– Enviada para o applet imediatamente antes de sua

destruição.

• String getParameter(String name)– Enviada para o applet a fim de descobrir os parâmetros

que lhes foram passados no código HTML

Mensagens para um AppletWWW(HTTP)

Web Browser

new

init() paint()

nome:stop() nome:

start()

destroy()

Resumo da Parte 2: Paradigma da Linguagem Java

• Orientação a objetos– Aumenta a qualidade do código

• Código Móvel– Aumenta a portabilidade e facilita a instalação

de aplicações• Applets

– Facilitam a disseminação de aplicações na Web

Parte 3: Elementos e Especificações da Linguagem

Java

• JDK - Java Development Kit v. 1.0.2• API - Application Program Interface• Palavras chave

JDK - Java Development Kit

• javac - compilador• java - interpretador• jdb - depurador simbólico• javah - interface com C• javap - desassemblador• javadoc - documentador • appletviewer - visualizador de applets

javac - Compilador de Java

X.java

javac

X.class

javadoc - Gerador de Documentação de Java

X.java

javadocPáginaHTML

X.html

class X

variable indexab

method indexint test()init()

appletviewer - Visualizador deApplets

appletviewerURL

URL

WWW(HTTP)

Página HTML

Execução doApplet contidona página HTML

API de Java

• java.lang• java.io• java.util• java.net• java.awt, java.awt.image, java.awt.peer• java.applet• sun.tools.debug

java.langSuporte Básico aos Elementos da Linguagem

• Object• Class• Thread• Exception• String• Integer• ...

String

new String(“Comdex”);

Comdex

java.io• File• InputStream• OutputStream File

File teste = new File(“Teste”)

TesteInputStream

new InputStream(teste)

OutputStreamnew OutputStream(teste)

read()write()

java.util• Stack• Date• Vector

Stacknew Stack()

push()push()

push()push()

push()

java.net• URL• URLConnection• Socket

URLnew URL(“http://www.di.ufpe.br”)

URLopen()

read()

Cliente

www.di.ufpe.br WWW(HTTP)

java.awt• Component, Container• Frame, Panel• Button, List

Panel

Panel panel = new Panel()

Buttonpanel.add(new Button(“Start”))

add()

Start

panel.add(new Button(“Stop”))

add()

Stop

panel.add(new Button(“Cancel”))

add()

Cancel

Palavras Chave de Java (1)• Pacotes

– import– package

• Tipos de dados primitivos– boolean– void– char– byte, short, int, long– float, double

Palavras Chave de Java (2)

• Declaração de classes e interfaces– class– interface– extends– implements

• Criação de objetos– new

l Literais– null– true, false

l Modificadores de visibilidade– private– protected– public

Palavras Chave de Java (3)

Palavras Chave de Java (4)

• Tratamento de exceções• Desvio e Controle de Fluxo• Pseudo-variáveis• Teste de compatibilidade de tipo• Modificadores gerais de métodos e

variáveis

Parte 4: Threads e Exceções em Java

• Threads– Facilitam a construção de software concorrente

• Tratamento de Exceções– Conferem homogeneidade e legibilidade ao

código

Threads em um Programa Java

Estados e Métodos de um ThreadThread

new Thread()

New

start()

Runnable

yield()

Runnable

Not Runnable

Runnable

stop()

stop()

stop()ou fimde run()

Dead

Implementação de Threads

• Herdando da classe Thread ou de subclasses da classe Thread.

class MyThread extends Thread {}

l Implementando a interface Runnable e criando um thread. class MyThread extends Applet implements Runnable {}

Herdando da Classe ThreadThread

RUN

MyThread

RUN RUN

Criação do objeto

Escalonador / Processador

RUNRUNRUN

RUNRUN

Implementando Runnable

InterfaceRunnable

RUN

MyClassRUN

Thread

RUN

RUN

Criação do objeto

RUN

Criação do thread

Escalonador / Processador

RUNRUNRUN

RUNRUN

O Applet Clock em Funcionamento

Browser

Página HTML

applet Clock

12:4812:4912:5012:5112:5212:53

O Código do Applet Clockimport java.applet.Applet;import java.awt.Graphics;import java.util.Date;public class Clock extends Applet

implements Runnable {Thread updater;public void start() {...};public void stop() {...};public void paint(Graphics g) {...};public void run() {...};

}

O Método start(): CriandoThreads

public void start() {if (updater == null) {

updater = new Thread(this);updater.start();

}}

O Método run(): Executando uma Tarefa Concorrente

public void run() {

while (true) {repaint();try {

updater.sleep(1000);} catch (InterruptedException e) {

}

}

}

O Método paint(): Desenhando na Interface Gráfica

public void paint(Graphics pen) {

Data date = new Date();

pen.drawString(date.getHours() + “:” +date.getMinutes() + “:” +date.getSeconds(), 5, 15);

}

O Método stop(): MatandoThreads

public void stop() {

updater.stop();updater = null;

}

Tratamento de Exceções:Simplicidade e Homogeneidade

• entrada de dados inválida;• falhas no tratamento de arquivos;• falhas na comunicação entre processos;• reativação de threads;• erros aritméticos;• estouro de limites de arrays;• etc

• Sem tratar exceções • Tratando exceções...erro = 0;oper1;if (!erro1) {

oper 2;if (!erro2) {

...}else erro = -2;

}else erro = -1;if (erro < 0) {

tratarErro(erro);...

Tratamento de Exceções: Legibilidade de Código

...try {

oper1;oper2;

} catch(erro1) {// tratar erro1

} catch(erro2) {// tratar erro2

}...

Palavras Chave no Tratamento de Exceções

• throws– Declara que um método pode levantar exceção

• throw– Levanta uma Exceção

• try, catch e finally– Define bloco de tratamento de exceção

Usando Throws (1)class Count {

public static void main (String args[])throws java.io.IOException

{int count = 0;while (System.in.read() != -1)

count ++;System.out.println(“Caracteres: ”+count);

}}

> javac Count.javaCount.java:4: Exception java.io.IOException must be caught, or it must be declared in the throws clause of this method.

while (System.in.read() != -1)^

1 error

> javac Count.java

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

throws java.io.IOException{

int count = 0;while (System.in.read() != -1)

count ++;System.out.println(“Caracteres: ”+count);

}}

Usando Throws (2)class Count {

public static void main (String args[]) {

int count = 0;while (System.in.read() != -1)

count ++;System.out.println(“Caracteres: ”+count);

}}

> javac Count.javaCount.java:4: Exception java.io.IOException must be caught, or it must be declared in the throws clause of this method.

while (System.in.read() != -1)^

1 error

Usando Throws (3)class Count {

public static void main (String args[]) {try {

read();} catch (IOException e) {}

}

static void read() throws IOException {int count = 0;while (System.in.read() != -1)

count ++;System.out.println(“Caracteres: ”+count);

}}

Throw

throw new Exception(“Ocorreu uma Excecao!”);

Try, Catch e Finally

try {...

} catch (umaExcecao e1) {...

} catch (outraExcecao e2) {...

} catch (maisUmaExcecao e3) {...

} finally {...

}

Exemplo 1: Não Tratando Exceçõesclass Divide {

public static void main (String args[]) {int dividendo, divisor;

dividendo = (Integer.valueOf(args[0])).intvalue();divisor = (Integer.valueOf(args[1])).intvalue();metodoA (dividendo, divisor);

}

public static void metodoA (int dividendo, divisor) {metodoB (dividendo, divisor);return;

}

public static void metodoB (int dividendo, divisor) {System.out.println (“Resultado: ” + dividendo/divisor);return;

}} ArithmeticException

levantada!

ArithmeticEception

ArithmeticException

Erro em tempo de execução!

ArithmeticExceptionlevantada!

ArithmeticEception

ArithmeticException

Erro em tempo de execução!

Exemplo 2: Capturando uma Exceçãoclass Divide {

public static void main (String args[]) {int dividendo, divisor;

dividendo = (Integer.valueOf(args[0])).intvalue();divisor = (Integer.valueOf(args[1])).intvalue();try {

metodoA (dividendo, divisor);} catch (ArithmeticException e) {

System.out.println (“Divisor Invalido!”);}

}

public static void metodoA (int dividendo, divisor) {metodoB (dividendo, divisor);return;

}

public static void metodoB (int dividendo, divisor) {System.out.println (“Resultado: ” + dividendo/divisor);return;

}} ArithmeticException

levantada!

ArithmeticEception

Excecao capturada!

ArithmeticExceptionlevantada!

ArithmeticException

Excecao capturada!

Resumo da Parte 4: Threads e Tratamento de Exceções

• Threads– Simplificam a construção de programas

concorrentes• Exceções

– Aumentam a qualidade do código, por torná-lomais organizado

Prática Simulada: Construir umApplet

• Criar página HTML• Criar programa Java• Compilar e retirar erros do programa• Executar via appletviewer• Executar via Netscape

Parte 5: Ambientes de Desenvolvimento

• AppletMaker, by Heechang Choi• SunSoft JavaWorkshop• Symantec Café• JavaSoft HotJava

AppletMaker

• Simples e pequeno. 125 KB compactados• Interface gráfica para automatizar edição,

compilação e execução de applets.• Windows 95, NT• Sem custo

JavaWorkshop 1.0• Gerenciamento de portfólios e projetos• Automatiza a construção de aplicações, applets,

pacotes e HTML• Escrito em Java, mas com versão própria do JDK• 7 MB compactados, lento para micros pequenos• Programação e depuração visual• Interessantes provas de conceito sobre Java• Solaris, Windows 95, NT. Mac em 1997• Avaliação sem compromisso por 30 dias • Us$ 99, nos EUA

Café• Gerenciamento de projetos• Automatiza construção de aplicações e applets,

com várias opções• Tutorial, introdução a Java, API e referência em

um mesmo pacote.• Escrito em C, para Windows 95/NT• Rápido em micros pequenos• 13 MB compactados• us$ 130,00, via Internet

HotJava

• Browser escrito em Java, com suporte limitado a HTML, mas com ...

• Prova de conceitos interessantes para arquiteturas de software na Internet– content handler– protocol handle

• Solaris e Windows 95/NT• Licensa de uso interno gratuita

Parte 5: Resumo

• Existem vários ambientes de desenvolvimento de programas em Java

• Alguns são gratuitos, outros pagos• É preciso usar o espírito da linguagem no

desenvolvimento de projetos– Orientação a objetos– Código móvel

• A cada semana surgem novas propostas

Parte 6: Desenvolvendo Software com Java

• Projetos Desenvolvidos no DI-UFPE– WebSteer– The Visible Computer– BRight!

• Desenvolvimento de Projetos em Java– Teoria e métodos– Ferramentas e ambientes– Pragmáticas

Projetos desenvolvidos no DI-UPFE:WebSteer

• Applet de suporte a treinamento e documentação interativa na Web– Integração de eventos entre browser e applets

• 19 pesquisadores envolvidos durante 2 meses• 2 grandes grupos de desenvolvimento

– WebSteer Básico (10.2 KLOC)– Módulos de Treinamento (13.1 KLOC)

WebSteer: Próximos Passos

• Incorporar Funções de Gerenciamento• Criar Ambiente de Autoria• Estender o Conceito para Ambientes de

Desenvolvimento de Software na Web

• Ambiente para experimentação visual de arquiteturas de computador

• Níveis de visualização– Clock, unidade de controle, CPU, memória, programas,

E/S

• Dois pesquisadores envolvidos durante 2 mêses• Desenvolvimento do projeto (8.25 KLOC)

Projetos desenvolvidos no DI-UPFE:The Visible Computer

The Visible Computer: Próximos Passos

• Integração de compiladores ao ambiente• Substituição de unidades “on-the-fly”• Integração com WebSteer

• Armazenamento e busca de páginas na Web• Conceitos de vizinhança

– Domínio, localização geográfica e assunto• Três pesquisadores envolvidos durante três

mêses• Desenvolvimento do projeto

– 2.5 KLOC em Java– 1.1 KLOC em C (CGI Scripts)– Integração com ADABAS

Projetos desenvolvidos no DI-UPFE:BRight!

BRight!: Próximos Passos

• Indexação e busca distribuídas• Robôs reusáveis em outros contextos• Grenciamento de sessões de busca

• Objetos, classes e interfaces• Threads• Código móvel na Web• Computação distribuída na Web• Persistência e integração com SGBD’s

Desenvolvimento de Projetos em Java:Teoria

• API padrão de Java• Ferramentas do Java Development Kit• Ambientes de Desenvolvimento• Código Disponível na Internet• Extensões da API

Desenvolvimento de Projetos em Java:Desenvolvimento de Projetos em Java:Ferramentas e AmbientesFerramentas e Ambientes

Extensões da API de Java• Java Enterprise API

– JDBC, Java IDL, Java RMI e Object Serialization• Java Server API• Java Security API• Java Commerce API• Java Management API• Java Beans• Java Embedded API• Java Media API

– 2D, Media (áudio, vídeo, MIDI), Share,Animation, telephony, 3D

• Desenvolvimento em grupo– Cada equipe resposável por um ou mais packages

• Applets versus Aplicações– Devem ser integradas– Applets no front-end– Aplicações no back-end

Desenvolvimento de Projetos em Java:Pragmáticas (1)

• Sistemas de grande porte– RMI+Serialization é a opção básica– JDBC requer que se tenha um SGBD compatível

com ODBC– Java IDL requer um ORB instalado

• Gerenciamento de Threads– Agrupe threads em threadgroups– Planeje cuidadosamente regiões de sincronização

Desenvolvimento de Projetos em Java:Pragmáticas (2)

• Interface Gráfica– Use Layout Managers– Deixe espaço para barras de warnings– Veja diferenças e limitações no tratamento de

eventos– Use BorderLayout, CardLayout e Panel

• Testes– Crie métodos de teste para cada classe criada

Desenvolvimento de Projetos em Java:Pragmáticas (3)

Desenvolvimento de Projetos em Java:Pragmáticas (4)

• Netscape versus Appletviewer– Não são completamente compatíveis– Quando em desenvolvimento use o appletviewer e

carregue as classes via sistema de arquivos– Periodicamente faça testes “smoke and run”

• Codificação e Documentação– Criar documentários após escrever cada método– Usar as facilidades do javadoc

Conclusões Gerais• Java implementa o modelo de objetos de forma

elegante e simplificada• Java está para ficar, embora existam várias outras

propostas• Ainda há muito o que ser melhorado

– performance– robustez

• Código móvel ainda está no início de seu processo de amadurecimento

Onde obter mais informações• Tutorial em HTML• Home-page do Recife Java Team

– http://www.di.ufpe.br/~java– Cursos on-line

• Listas de discussão– java-l@di.ufpe.br– enterprise-java

• Sun Microsystems• Internet• Livros

Recommended