Upload
vudiep
View
218
Download
0
Embed Size (px)
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– [email protected]– enterprise-java
• Sun Microsystems• Internet• Livros