0% acharam este documento útil (0 voto)
19 visualizações119 páginas

Cursojava

O documento apresenta um curso de Pós-Graduação em Consultoria em Internet, focando na linguagem de programação Java e seus conceitos, como Orientação a Objetos, Applets, Servlets e JDBC. O curso inclui práticas e trabalhos que envolvem a aplicação desses conceitos, além de uma visão geral sobre a linguagem e suas características. Também são abordadas variáveis, manipulação de exceções e desenvolvimento de interfaces gráficas com Java.

Enviado por

wandersoncastro8
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
19 visualizações119 páginas

Cursojava

O documento apresenta um curso de Pós-Graduação em Consultoria em Internet, focando na linguagem de programação Java e seus conceitos, como Orientação a Objetos, Applets, Servlets e JDBC. O curso inclui práticas e trabalhos que envolvem a aplicação desses conceitos, além de uma visão geral sobre a linguagem e suas características. Também são abordadas variáveis, manipulação de exceções e desenvolvimento de interfaces gráficas com Java.

Enviado por

wandersoncastro8
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

Objetivo

FASP - Pós Graduação Consultoria em Internet

Java é a plataforma para desenvolvimento de


aplicação robusta, escalonável, multi plataforma
e ideal como ferramenta para as necessidades
tecnologicas da Internet.
Por estas e outras razões a linguagem JAVA faz
parte do conteúdo do nosso curso.
O objetivo deste módulo é prover uma
explanação sobre conceitos de Orientação
Objetos, como Classe, Método, Polimorfismo e
outros independente de implementação. Vamos
abordar Orientação Objetos aplicada em Java,
interface gráfica, Applet, JDBC, Servlets,
Performance, um visão so Java Server Page, e
um Estudo de Caso envolvendo a tecnologia
Servlets e JDBC.
Será apresentado as principais ferramentas
desenvolvidas em Java.

Produzido por: Equipe Consultoria em Internet © 2000


Este Web Site será melhor visualizado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:18:24]


Equipe

Coordenação
Prof. Francisco Eugenio BARRELLA barrella@[Link]
Prof. EDSON Gonzalez Martins emartins@[Link]

Consultoria Técnica
Prof. UIRES Tapajós Cabral uires@[Link]

Docentes da Disciplina
Prof. FERNANDO José Moura Marcellino fmarcellino@[Link]
Prof. JULIANO Ribeiro Ipolito jipolito@[Link]
Prof. RILDO Ferreira dos Santos rildosan@[Link]

Produzido por: Equipe Consultoria em Internet © 2000


Este Web Site será melhor visualizado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:18:29]


Trabalho

1. Applet para senha de acesso


2. Consulta a uma tabela usando Servlets.
Forneça os seguintes dados:
● Nome completo e e-mail dos integrantes da equipe;

● E-mail da Equipe;

● Código da turma;

● Forneça a URL, onde encontra-se o trabalho realizado;

● Respeito o prazo limite.

Prazo: 2 semanas, após o término do curso.

Produzido por: Equipe Consultoria em Internet © 2000


Este Web Site será melhor visualizado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:18:29]


Visão

O que é o Java ?
O Java é:
● Uma linguagem de programação;

● Um ambiente de desenvolvimento;

● Um ambiente de aplicação.

O Java é resultado de uma busca por uma plataforma de programação que pudesse
fornecer segurança, portabilidade (independência de sistema operacional) e
escalabilidade.
Os primeiros objetivos alcançados com desenvolvimento desta nova linguagem foram:
* Orienta a objetos: A linguagem é orienta a objetos a partir de sua arquitetura,
permitindo herança, polimorfismo, encapsulamento, abstração de dados e persistência
de objetos e reúso de código.
* Velocidade no desenvolvimento - eliminando o ciclo de compilar-linkedição;
* Portabilidade do Código - com um interpretador que especifica a forma do nível
do sistema operacional. (Pode rodar em qualquer tipo de sistema operacional, tais
como Solaris, AIX, Linux, MacOS, Win32, PalmOS e etc);
* Dinamismo: A natureza dinâmica do Java, sendo uma extensão natural de seu
projeto orientado a objetos, permite a extensibilidade durante a execução.
* Alto desempenho: Suporte há vários recursos, como multhreading, compilação
em Jus-in-time, atomização do código e suporte a protocolos de rede (TCP/IP)
* Facilidade de manutenção de programas;
Linguagem não tem:
● Ponteiros do sistema operacional;

● Defines;

● Sobrecarga de operadores;

● Herança múltipla de classes e Função e/ou procedure, somente classes e


métodos.
O Java Development Kid (JDK) é um ambiente de desenvolvimento que, além das
ferramentas de desenvolvimento, contém todos os elementos da arquitetura Java.

[Link] (1 of 2) [01/09/2000 19:18:30]


Variáveis

Variáveis e Tempo de vida


Você tem dois meios para descrever variáveis: usando o tipo simples de ligação int e
float ou usando tipos de classes definidas pelo programa. Você pode declarar
variáveis de duas formas, uma dentro de um método e a outra dentro da classe a
qual este método está incluído.
Inicialização de variáveis
No Java não é permitido o uso de variáveis indefinidas.
Variáveis definidas dentro do método são chamadas de variáveis automáticas, locais,
temporárias ou estáticas e devem ser inicializadas antes do uso.
Quando um objeto é criado, as variáveis membro são inicializadas com os seguintes
valores em tempo de alocação:

Tipo de variável Valor inicial Tamanho


byte 0 8 bits
short 0 16 bits
int 0 32 bits
long 0L 64 bits
float 0.0f 32 bits
Double 0.0d 64 bits
Char '\u0000' (Null) 64 bits
Boolean false

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:18:31]


OO

Paradigma:
"Paradigma é um conjunto de regras que estabelecem fronteiras e descreve como
resolver os problemas dentro destas fronteiras.
Os paradigmas influenciam nossa percepção, ajudam-nos a organizar e a coordenar a
maneira como olhamos para o mundo..."
Reengenharia - Reestruturando a Empresa
Daniel Morris e Joel Brandon

Orientação a Objetos:
O termo orientação a objetos significa organizar o mundo real como uma coleção de
objetos que incorporam estrutura de dados e um conjunto de operações que
manipulam estes dados
Exemplos
Coisas tangíveis = um livro
Incidente = Copa do Mundo de Futebol
(evento/ocorrência)
Interação = Débitos de CPMF
(transação/contrato)
Metáfora

A estrutura de dados armazena o estado de um objeto (valores dos atributos).


As operações definem o comportamento do objeto, que é a forma como um
objeto age e reage em termos de mudanças de estado e passagem de mensagens.
Exemplo Um Círculo

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:18:33]


OO Java

Abstração de Tipos de Dados


Quando itens de dados são compostos para tipos de dados, semelhante a uma data, você
pode definir um número de bits de programas que especifica a operação do tipo de dados.
Em Java você pode criar uma associação entre o tipo data e a operação tomorrow a seguir:
public class Date {
private int day, month, year;
public void tomorrow( )
{ // código que incrementa o dia
}
}
Definição de Métodos
Em Java, métodos são definidoss usando uma aproximação que é muito similar à usada em
outras linguagens, como por exemplo C e C++. A declaração é feita da seguinte forma:
< modifiers > < tipo de retorno > < nome > ( < lista de argumentos > ) < bloco >
< modifiers > -> segmento que possue os diferentes tipos de modificações incluíndo public,
protected e private.
< tipo de retorno > -> indica o tipo de retorno do método.
< nome > -> nome que identifica o método.
< lista de argumentos > -> todos os valores que serão passados como argumentos.
public void addDays (int days)

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:18:34]


Exception

O que é uma Exception ?


Em Java, a classe de Exceção define condições de erro moderados que seus
programas podem encontrar. Em vez de você deixar o programa terminar, você pode
escrever um código para tratar as exceções e continuar a execução do programa.
A linguagem Java implementa C++ nomeando exceções para poder construir um
código elástico. Quando um erro acontece em seu programa, o código que acha o
erro pode "disparar" uma exceção. Dispara uma exceção é o processo de sinalizar o
processo corrente atual de que um erro aconteceu. Você enlata a captura da exceção
e quando possível recupera a condução das próximas rotinas.
Manipulação de Exceptions
Declarações try e catch
Uma maneira de manipular possíveis erros, é usando as declarações try e catch. A
declaração try indica a parte do código aonde poderá ocorrer uma exception, sendo
que para isso você deverá delimitar esta parte do código com o uso de chaves. Na
declaração catch você coloca o código a ser executado caso venha a ocorre uma
exception.
try {
// código que pode ocasionar uma exception
}
catch{
// tratamento do erro
}

Declaração finally
A declaração finally é utilizada para definir o bloco que irá ser executado tendo ou
não uma exception, isto após o uso da declaração de try e catch.
try {
// código que pode ocasionar uma exception
}
catch{
// tratamento do erro
}
finally {
// código
}
Exceptions mais comuns
ArithmeticException - int i = 12 / 0

[Link] (1 of 2) [01/09/2000 19:18:34]


Exception
NullPointerException - ocorre quando utilizo um objeto que não foi instanciado.
NegativeArraySizeException - ocorre quando é atribuido um valor nulo para um
array.
ArrayIndexOutOfBoundsException - ocorre quando tento acessar um elemento do
array que não existe.
Categorias de Exceptions
Há três grandes categorias de exceções em Java. De fato, a classe
[Link] age como uma classe pai , para que todos os objetos disparados
possam ser pegos nas exceptions.
Deve-se evitar usar a classe Throwable, procure usar uma das três classes descritas
à seguir:
* Erro - indica um problema sério de recuperação difícil, se não impossível;
* RuntimeException - problema ocorrido durante a implementação;
* Outra exceção - indica uma dificuldade durante a implementação que pode
acontecer razoavelmente por causa de efeitos ambientais e pode se manipulado.
Declare ou Manipule a sua Exception
Na construção de um código em Java, o programador deve prever métodos para
tratar possíveis erros. Existem duas maneiras de o programador satisfazer esta
exigência. A primeira é com o uso da declaração try e catch, como foi visto
anteriormente, e a segunda maneira é indicando que a exceção não é dirigida para
este método, sendo então jogado para o método chamador.
public void troublesome( ) throws IOException

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] (2 of 2) [01/09/2000 19:18:34]


GUI

O Pacote [Link]
No pacote [Link] contém as classes para a geração de componentes Gui. Os
componentes Gui geralmente são de aspectos visíveis, como butões ou labels.
Posição dos componentes
A posição dos componentes no container é determinado pelo gerente de layout. O
tamanho dos componentes é também de responsabilidade do gerente de layout.
O método main()
É responsável pela criação da instância de objetos e pela inicialização do método go().
O new Frame
Cria uma instância da classe [Link]. O Frame no java é o nível mais alto da
janela, aonde ficam por exemplo o barra de títulos.
O setLayout()
Cria uma instância do fluxo do gerente de layout, aonde é colocado o Frame.
O new Button()
Cria uma instância da classe [Link]. O botão é o local na janela aonde é
empurrado para que se tenha uma ação.
O add()
Éste método adiciona elementos (butões, caixas de texto, etc.) ao frame.
O pack()
Este método fixa o tamanho dos elementos no frame.
O setVisible()
Este método torna os elementos visíveis no frame.
O Flow Layout Manager
O flow layout para posicionar componentes em uma determinada linha ou conjunto de
linhas. A cada instante uma nova linha fica cheia e uma nova linha é começada.
O Border Layout Manager
É mais complexo do que o Flow Layout Manager, pois fornece componentes que
possibilitam manusear o posicionamento do elemento dentro do container.
O Grid Layout Manager
Você pode criar linha e colunas dentro de seu container.
O CardLayout
Permite você criar duas interfaces semelhantes a butões, sendo entretanto o painel
completo.
Frame
É uma armação aonde são inseridos diversos elementos como: botões, labels, etc.

[Link] (1 of 2) [01/09/2000 19:18:35]


GUI
Panels
São recipientes aonde são inseridos diversos elementos como: botões, labels, etc.

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] (2 of 2) [01/09/2000 19:18:35]


Applet

O que é um Applet?
Um applet é um pedaço de código de Java que corre em um ambiente de browser.
Difere de uma aplicação do modo que é executado. Uma aplicação é começada
quando seu método main() é chamado. Através de contraste, o ciclo de vida de
um applet é um pouco mais complexo. Este módulo examina como um applet é
corrido, como carregar isto no browser, e como escrever o código para um applet.
Carregando um Applet
Você tem que criar um arquivo de HTML que conta para o browser o que carregar
e como correr isto. Você então "aponta" o browser ao URL que especifica aquele
arquivo de HTML.
Segurança e Restrições nos Applet
Existem Seguranças e Restrições nos Applets porque applets são pedaços de
código que são carregados em cima de arames, eles representam um prospecto
perigoso; imagine se alguém escrever um programa malicioso que lê seu arquivo
de contra-senha e envia isto em cima da Internet?
O modo que Java previne isto está contido na classe de SecurityManager que
controla acesso para quase toda chamada de sistema-nível no Java Máquina
Virtual (JDK).
Portanto Applets não faz chamadas ao seu sistema operacional.
Métodos de Applet chaves
Em uma aplicação, no programa é entrado ao método main(). Em um applet,
porém, este não é o caso. O primeiro código que um applet executa é o código
definido para sua inicialização, e seu construtor.
Depois que o construtor é completado, o browser chama um método no applet
chamado init (). O método init () executar inicialização básica do applet . Depois de
init () é completado, o browser chama outro método chamado start ().
Applet Display
Você pode puxar sobre a exibição de um applet criando um método paint(). O
método paint() é chamado pelo ambiente de browser sempre que a exibição do
applet precise ser refrescado. Por exemplo, isto acontece quando a janela de
browser é aparecida depois de ser minimizado.

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:18:36]


JDBC

Camada de abstração que permite um aplicativo Java utilizar uma interface padrão (que
adere ao ANSI-2 SQL) para fazer acesso a banco de dados relacional, através da linguagem
SQL.
ODBC (Open Database Connectivity) também é uma interface de acesso a banco de dados
relacionais que possui drivers para um grande número de banco de dados.
Uma aplicativo Java pode utilizar diretamente uma interface ODBC, mas isto implica em
executar chamadas, dentro do código Java, a rotinas C da API do ODBC, chamadas com
código nativo Java são trabalhosas e elimina a portabilidade de uma aplicação.

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:18:36]


Threads

O que são Linhas?


Uma visão simplista de um computador é a que tem uma CPU que manipula os dados,
uma memória ROM que contém o programa que o CPU executa, e RAM que segura os
dados nos quais o programa opera. Nesta visão simples, um trabalho é executado de
cada vez.
Thread e thread para referenciar a ideia de execução.
Três Partes de uma Linha
Uma linha inclui três partes principais. Primeiro, há o CPU virtual. Segundo, há o código
que esta CPU está executando. Terceiro, há os dados no que o código trabalha.
Criando a Linha
Demos uma olhada no modo que uma linha é criada, e discuta como os argumentos de
construção são usados para prover o código e dados para a linha quando corre.
Começando a Linha
Embora nós criamos a linha, não começa correndo imediatamente. Para começar isto,
nós usamos o método start ( ). Este método está na classe de Linha, tão determinado
nosso esboço prévio que nós simplesmente dizemos.
Thread Sheduling
Embora a linha se torna runnable, necessariamente não começa imediatamente.
Claramente em uma máquina que de fato tem só uma CPU, pode estar fazendo só uma
coisa de cada vez.
Testando uma Linha
Às vezes é possível para uma linha estar em um estado desconhecido. É possível
inquirir se uma linha ainda é viável através do método isAlive ( ).
Estado de espera (Putting Threads on Hold)
Vários mecanismos existem que podem parar a execução de uma linha
temporariamente. Seguindo este tipo de suspensão, execução pode ser retomada como
se nada tivesse interrompido sua execução, a linha aparece ter executado uma
instrução muito lentamente simplesmente.
O método sleep foi introduzido na primeira seção e foi usado para deter uma linha para
um período de tempo.
Às vezes é apropriado suspender execução de uma linha indefinidamente em qual caso
alguma outra linha será responsável para retomar a execução. Um par de métodos de
Linha está disponível para isto. Eles são chamados suspend () e resume ().
O método join ( ) causa a linha atual para esperar até a linha em qual o método join é
chamado termina.
Outros modos para criar linhas
Nós discutimos criando Linha por uso de uma classe separada que implementa
Runnable. De fato, esta não é a única possível aproximação.
Usando sincronizaram em Java

[Link] (1 of 2) [01/09/2000 19:18:37]


Threads
O Problema
Imagine uma classe que representa uma pilha. Advertência que a classe não faz
nenhum esforço para dirigir transbordamento ou underflow da pilha, e que a
capacidade de pilha está bastante limitada. Estes aspectos não são pertinentes a nossa
discussão.
A Bandeira de Fechadura de Objeto (The Object Lock Flag)
Em Java, toda instância de qualquer objeto tem um flag (bandeira) associado com isto.
Esta bandeira pode ser pensada de como uma " bandeira " de fechadura. Um palavra
sincronizado é provido para permitir interação com esta bandeira.
Reunindo isto
Como foi sugerido, o mecanismo sincronizador () só trabalha se o programador põe as
chamadas nos lugares corretos.
Paralisação completa
Em programas onde linhas múltiplas estão competindo para acesso a recursos
múltiplos, pode haver uma possibilidade de uma condição conhecida como paralisação
completa. Isto acontece quando uma linha está esperando por uma fechadura segurada
por outra linha, mas a outra linha já está esperando por uma fechadura segurada pela
primeira linha.
Enfie Interação (Thread Interaction)
O Problema
Por que duas linhas poderiam precisar interagir?
A Solução
Toda instância de objeto em Java tem duas tranças de linha associadas com isto. O
primeiro é usado por linhas que querem obter a bandeira de fechadura, e foi discutido
na seção. A segunda trança é usada para implementar os mecanismos de comunicação
de wait () e notify ().

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] (2 of 2) [01/09/2000 19:18:37]


Servlets

Um programa Java (API Java Servlet é uma extensão da plataforma Java) que expande
a funcionalidade de Servidor Web, gerando conteúdo dinâmico e interativo com
Clientes Web usando o paradigma requisição-resposta.
Principal características:
● Um servlet executa somente no Side Server (lado servidor).

Serviços:
Um servlet pode fornecer vários serviços ao servidor web como por exemplo:
● processar formulários de pedido;
● persistência de conexões http;
● acesso a Banco de Dados;
● envio de e-mails automáticos;
● agentes de procura;
● compatibilidade com vários protocolos (http, url, ftp)
O que são aplicação web ?
São Aplicações que estão armazenadas em um único local e são acessadas
remotamente por dispositivos conectados a internet.
As principais vantagens são:
● clientes leves;
● facilidade de manutenção (centralização);
● grande abrangência do software;
● baixo custo de operação;
● Custo médio por transação bancária.

Transação Valor (US$)


Caixa na agência 1,07
Por telefone 0,54
Em caixa eletrônico 0,21
Na Internet 0,01

Fonte: América economia, ediçãode 04 de maio de


2000, pg 51

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:18:38]


JSP

É uma script Java para desenvolvimento de aplicações Web dinâmica utilizando HTML, Em
segundo plano todo arquivo JSP é convertido em um arquivo Servlet e enviado ao cliente. As
outras tecnologias Java são acionadas pelo JSP via tags específicos. Veio para atender a
facilidade de manipulação do HTML.
Características do JSP - JavaServer Pages:
● Estrutura básica do JSP
● Elementos de script
● Trabalhado com um JavaBean
● Tipos de variáveis
● Estruturas de controle
● Declaração de funções
● Definindo classes
● Passagem de parâmetros
Exemplos:
<HTML>
<HEAD>
<TITLE>JSP JDBC Example 1</TITLE>
</HEAD>
<BODY>
<!-- Set the scripting language to java and -->
<!-- import the [Link] package -->
<%@ page language="java" import="[Link].*" %>
<%
Connection con = null;
try {
// Load the Driver class file
[Link]("[Link]");
// Make a connection to the ODBC datasource Movie Catalog
con = [Link]("jdbc:odbc:Movie Catalog", "", "");
// Create the statement
Statement statement = [Link]();
// Use the created statement to SELECT the DATA
// FROM the Titles Table.
ResultSet rs = [Link]("SELECT * " + "FROM Titles");
// Iterate over the ResultSet
%>
<!-- Add an HTML table to format the results -->
<TABLE BORDER="1">
[Link] (1 of 3) [01/09/2000 19:18:39]
JSP

<TR>
<TH>Title</TH><TH>Rating</TH><TH>Price</TH><TH>Quantity</TH>
<%
while ( [Link]() ) {
// get the title_name, which is a String
[Link]("<TR>\n<TD>" + [Link]("title_name") + "</TD>");
// get the rating
[Link]("<TD>" + [Link]("rating") + "</TD>");
// get the price
[Link]("<TD>" + [Link]("price") + "</TD>");
// get the quantity
[Link]("<TD>" + [Link]("quantity") + "</TD>\n</TR>");
}
// Close the ResultSet
[Link]();
}
catch (IOException ioe) {
[Link]([Link]());
}
catch (SQLException sqle) {
[Link]([Link]());
}
catch (ClassNotFoundException cnfe) {
[Link]([Link]());
}
catch (Exception e) {
[Link]([Link]());
}
finally {
try {
if ( con != null ) {
// Close the connection no matter what
[Link](); }
}
catch (SQLException sqle) {
[Link]([Link]());

[Link] (2 of 3) [01/09/2000 19:18:39]


JSP
}
}
%>
</BODY>
</HTML>

Produzido por: Equipe Consultoria em Internet © 2000


Este Web Site será melhor visualizado em monitor com resolução 800 x 600

[Link] (3 of 3) [01/09/2000 19:18:39]


Performance

Abrir as conexões com o BD na inicialização do servlet (init()) e fechá-la ao final


(destroy()), aumenta a performance do servlet, já que este é um processo que consome
muitos recursos.
● Evite enviar informações para o cliente através de consecutivos [Link]( ).

● Utilizar um buffer para armazenar as informações e enviá-la somente ao final do


processamento melhora o tempo de resposta. É claro que levando em conta a
proporção das tarefas executadas pelo servlet.
● Algumas vezes será necessário sincronizar o acesso aos recursos compartilhados
pelo servlet , como uma conexão a um Banco de Dados.
● A interface SingleThreadModel pode ser usada para garantir a sincronização da
execução do Servlet, e consequentemente degradando a performance do Servlet.

● Utilizar um pool de conexões para acesso ao banco de dados é uma das formas de
contornar o problema de compartilhamento de recursos.
● É possível iniciar o pool de conexões no método init( ) abrindo 20 conexões
simultaneas ao BD e compartilhando-as nas várias chamadas ao método service(
).

Produzido por: Equipe Consultoria em Internet © 2000


Este Web Site será melhor visualizado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:18:40]


Estudo de Caso

Implementando um serviço de busca com acesso a banco de dados utilizando


servlets
Os servlets são uma solução rápida e fácil para as atuais aplicações CGI. Avalie você
mesmo sua performance implementando um serviço de busca de páginas web com
acesso a banco de dados.
by Handerson Ferreira Gomes (Taos Consultoria)

Os servlets substituem com grandes vantagens as atuais aplicações CGI utilizadas na


maioria dos servidores Web. Este artigo irá mostrar a construção de um serviço de
cadastro e busca de páginas Web por palavras chave. Resumindo, um serviço de
busca semelhante ao Cadê?, claro que com suas devidas proporções.
Os dados são armazenados em um banco de dados MS Access localizado no
servidor. Este foi escolhido por ser de fácil acesso para a maioria das pessoas, mas
qualquer banco de dados que tenha um driver JDBC ou seja acessível pelo ODBC
usando a ponte JDBC-ODBC para acesso poderá ser utilizado.
A arquitetura do sistema é muito simples: a partir de um formulário HTML você faz a
consulta e inclusão dos dados. Como? Esta é a tarefa do Servlet. Mas para não
confundir nem passar o carro na frente dos bois, vamos fazer por passos.
Configurando o Banco de Dados
A primeira tarefa é construir o banco de dados. Para facilitar sua vida um banco de
dados está disponível para download aqui. Com o BD instalado em sua máquina, é
necessário agora configurar um nome de fonte de dados (NFD).
No painel de Controle do Windows 95 ou 98 há um ícone para ODBC(32 bits). Abra o
ODBC32 e depois clique em System DSN ou NFD e, em seguida pressione
"Adicionar" para fazer aparecer "Criar nova fonte de dados" e realce "Driver para o
Microsoft Access" e pressione "OK". Isso faz aparecer um painel denominado "ODBC
Microsoft Access 97 Setup" no qual você digita um Data Source Name. O valor para
este campo será "ServletSearch" e se quiser pode digitar também uma descrição
para o Banco de Dados. Em seguida pressione "Select" e selecione o arquivo
[Link] que você instalou em sua máquina, clique em "OK". Se o Database
aponta para o diretório correto você associou com êxito o nome da fonte de dados e
o ODBC de 32 bits com o banco de dados do Access, pressione "OK" para concluir a
configuração.
Criando as páginas HTML
A interface entre o usuário e o sistema de busca é feita por uma página HTML com
formulários. São nestes formulários que os dados são inseridos para cadastro ou
consulta e sua construção é muito simples. O formulário para a chamada de um
Servlet não é diferente para a chamada de uma aplicação CGI ou até mesmo em
páginas ASP:

[Link] (1 of 5) [01/09/2000 19:18:40]


Estudo de Caso
<FORM action="[Link]
Servlet/ServletSearch" method="POST">
<BR><input type=hidden name="par_tipooper"
value="cadastra">
URL do site: <INPUT type="text" name="par_url" value="[Link]
size=40>
T&iacute;tulo do site: <INPUT type="text" name="par_titulo"
value="">
Descri&ccedil;&atilde;o: <TEXTAREA NAME="par_descricao"
ROWS=3 COLS=60></TEXTAREA>
Nome do Respons&aacute;vel: <INPUT type="text"
name="par_nome">
e-mail do Respons&aacute;vel: <INPUT type="text"
name="par_email">
<INPUT type="SUBMIT" value="Cadastrar">
<INPUT type="reset" value="Limpar Formulário"></TD>
</FORM>
Uma consideração importante é quanto ao método usado no formulário. Grande parte
das aplicações para Internet utilizam dois tipos de método o GET e POST. A diferença
básica entre eles é que o método esconde GET anexa na URL da página os
parâmetros passados pela conexão http enquanto o método POST oculta estes dados
do usuário. As aplicações CGI tratam de forma separada cada um destes métodos,
isto quer dizer que uma alteração no método de um formulário pode fazer o CGI não
funcionar corretamente.
Como os servlets são processados no servidor, o cliente pode ter qualquer browser de
qualquer geração que tudo funcionará perfeitamente. Uma grande vantagem dos
Servlets sobre as Applets.
O ServletSearch
Chegamos agora no foco principal deste artigo, mostrar como é fácil fazer um serviço
de busca utilizando os Servlets. Já temos o banco de dados e as páginas HTML
necessárias para o funcionamento do Servlet, então vamos por mão na massa.
Mas antes um pouco de teoria. (Tenha calma, esta teoria é importante para a
compreensão do exemplo) Os dados do formulário serão enviados através de uma
conexão http para o Servlet que irá receber e responder a requisição. A classe
HttpServlet tem vários métodos para tratar os vários tipos de requisição (POST, GET,
PUT, DELETE, etc.). Para formulários com requisições do tipo POST pode-se utilizar o
método doPost(HttpServletRequest, HttpServletResponse), para o GET existe o
doGet(HttpServletRequest, HttpServletResponse) e assim por diante. Este tipo de
implementação oferece a possibilidade de utilizar os vários tipos de requisições mas
também prende o Servlet ao formulário ou vice-versa, o formulário HTML não poderá
ser alterado devido à incompatibilidade com o Servlet. Quem já programou CGI's
utilizando Perl, C ou até mesmo ASP sabe do que estou dizendo. Java mais uma vez
facilitou isso para os desenvolvedores e implementou o método
service(HttpServletRequest, HttpServletResponse) que aceita todos os tipos de
requisição como GET e POST e a repassa para o método especializado em tratar
aquela requisição. Isto facilita em muito o desenvolvimento.
Quaisquer dos métodos citados acima recebem como parâmetro dois valores:
HttpServletRequest e HttpServletResponse. Estes dois métodos são responsáveis pela
comunicação entre o Servlet e o cliente HTML, fazendo a comunicação através de
uma conexão http. É através da interface HttpServletRequest que o Servlet tem
acesso à informações enviadas pelo cliente como por exemplo os dados do
formulário, o tipo do método HTTP usado (GET,POST,PUT) e até mesmo os cookies
instalados. A interface HttpServletResponse por sua vez permite ao Servlet enviar os
dados para o cliente, manipular o protocolo HTTP, especificar informações de
[Link] (2 of 5) [01/09/2000 19:18:40]
Estudo de Caso
cabeçalho da conexão. Esta interface possui métodos que permitem adicionar um
Cookie no cliente ou redirecioná-lo para um outro endereço. Vale complementar que a
interface HttpServletRequest é uma extensão da interface ServletRequest e o mesmo
acontece com a interface HttpServletResponse que extende a interface
ServletResponse.
Os métodos apresentados abaixo foram usados no ServletSearch e são geralmente
utilizados na maioria dos Servlets, por isso há uma descrição de sua funcionalidade.
● public void init(ServletConfig config) throws ServletException

● Inicializa o Servlet e os logs de inicialização. Este método é chamado apenas


uma vez e automaticamente assim que o Servlet é carregado pela primeira vez,
ficando depois alocado na memória do servidor. Nenhuma requisição será
processada até que este método esteja concluído. Neste método geralmente é
feita a conexão ao Banco de Dados. Desta forma há apenas uma conexão ao BD
e todos as requisições dos clientes usam esta mesma conexão para o acesso
aos dados. Esta é uma das principais diferenças entre os Servlets e as
aplicações CGI. As aplicações CGI inicializam um novo programa para cada
requisição. Se houver 10 requisições simultâneas haverá 10 programas sendo
executados ao mesmo tempo, cada um abrindo uma conexão com o banco de
dados. Imagine isso numa página com 5000 visitas diárias. Vale ressaltar aqui
que a conexão ao banco de dados é feito da mesma forma que em uma
aplicação Java, isto quer dizer que não é necessário nenhum aprendizado pois
você reaproveita todo o seu conhecimento. Os Servlets podem se tornar na
forma mais fácil de migração de aplicações stand-alone para aplicações para a
Internet. E o melhor, multiplataforma.
● public void destroy()

● Finaliza o Servlet, liberando os recursos alocados e destruindo os logs do


Servlet. Este método, assim como o init, é chamado apenas uma vez e
automaticamente pelo serviço de rede cada vez que o Servlet for removido da
memória. Para este método ser chamado novamente é preciso que o Servlet
seja recarregado. É neste método que fechamos a conexão ao Banco de Dados.
● public abstract void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException
● Esta é uma versão de específica do método [Link], que aceita
parâmetros da conexão HTTP. Este método é cancelado raramente. Os pedidos
padrão do HTTP são suportados despachando aos métodos de Java
especializados para executá-los. Toda vez que uma requisição é feita ao servlet
este método é executado e caso haja mais de uma conexão simultânea, vários
threads são criados automaticamente. É responsabilidade do desenvolvedor do
servlet sincronizar o acesso a todos os recursos compartilhados, tais como
conexões de rede ou as variáveis da classe. O objeto ServletRequest contém
informações sobre a requisição, incluindo os parâmetros fornecidos pelo cliente.
O objeto ServletResponse é usado para retornar as informações para o cliente.
Este método não é executado até que o método init seja finalizado.
● public abstract String getParameter(String name)

● Retorna uma string contendo o valor do parâmetro especificado, ou null se o


parâmetro não existir. Este método será usado no ServletSearch para recuperar
o valor digitado pelo usuário. Se o método GET fosse utilizado a URL da
consulta ficaria assim:
[Link]
servletsearch?oper=consulta Para recuperar o valor o método seria usado da
seguinte forma:
● String tipooper = [Link](par_tipooper);

● public abstract void setContentType(String type)

● Define o tipo do conteúdo para a resposta ao cliente. Na maioria dos casos

[Link] (3 of 5) [01/09/2000 19:18:40]


Estudo de Caso
utilizamos: [Link]("text/html");. Mas podem
surgir casos onde o content type será um valor como "text/plain" para um
documento texto ou ainda "image/gif" para imagens.
● public abstract void setContentLength(int len)
● Este método define o tamanho da resposta. Utilizamos este método como uma
forma de aumentar a performance do Servlet. Uma forma comum de reposta
para o cliente é criar um objeto da Classe ServletOutputStream e depois a
utilizar para enviar os dados.
Exemplo:
ServletOutputStream out = httpServletResponse.
getOutputStream();
[Link]("Bem vindo ao serviço de busca ServletSearch");
● Porém para cada envio de um pequeno texto, uma nova conexão para o cliente
é criada.
Uma forma de melhorar a performance do Servlet é adicionar todos os string
num buffer e depois que ele estiver todo preenchido abrir uma conexão com o
cliente e mandar os dados de uma só vez. Exemplo:
● StringBuffer buffer = new StringBuffer();
[Link]("<HTML><BODY>\n");
[Link]("Bem vindo ao serviço de busca ServletSearch");
[Link]("</BODY></HTML>");
[Link]([Link]());
[Link]().print([Link]());

Teste o serviço de busca.


Primeiro faça a inclusão de um site no banco de dados, avalie o tempo de
resposta para esta inclusão. Vale lembrar que o banco de dados usado é o MS
Access que não possui SGBD e portanto é mais lento que outros tipos de BD.

[Link] (4 of 5) [01/09/2000 19:18:40]


Estudo de Caso
código usado para o serviço de busca é muito fácil e está todo comentado no
programa fonte. (Clique aqui para visualizá-lo)

Conclusões
Para desenvolver este servlet foram necessárias três horas para implementar toda a
sua funcionalidade, desde a fase de planejamento, passando pelo design, codificação,
compilação e testes e utilizadas pouco mais de 120 linhas de código. Isto é um ponto
muito importante que deve ser ressaltado. É impressionante como Java, sendo uma
linguagem comparada a C++, pode ser tão produtiva, tanto em funcionalidade quanto
em facilidade de desenvolvimento. Isso não é papo de vendedor, é uma análise feita
por grande parte dos desenvolvedores java.
Você viu como fazer a conexão de um servlet a um banco de dados e partindo deste
exemplo você pode criar os mais variados tipos de aplicações para seu site Web ou
para a Internet de sua empresa, como um guestBook ou um fórum de discussão.
Você percebeu como a migração de aplicações Java para a Internet pode ser feita de
forma fácil com os Servlets, construindo inclusive aplicações em camadas. Você pode
ter um applet fazendo a interface com o cliente e enviando informações para um
servlet no servidor, fazendo um balanceamento de carga nas tarefas de cada camada.
Foi descrito também o ciclo de vida de um servlet e seus métodos mais utilizados.
Considerações
Este serviço de busca foi desenvolvido com o intuito de apresentar as funcionalidades
de um servlet e seu acesso a banco de dados, não tendo em momento algum a
intenção de ser um serviço de busca completo e final. Você tem toda a liberdade de
alterar o código fonte e implementar novas funcionalidades ao servlet.

Produzido por: Equipe Consultoria em Internet © 2000


Este Web Site será melhor visualizado em monitor com resolução 800 x 600

[Link] (5 of 5) [01/09/2000 19:18:40]


Tools

Produzido por: Equipe Consultoria em Internet © 2000


Este Web Site será melhor visualizado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:18:41]


Referência

Livros:
● Aplicações e Banco de Dados para Internet 199 - Editora Érica - Antonio Marcos Marcon e
Denise Neves
● Programando Banco de Dados em JAVA - 1997 - Editora Makrn Books - Brian Jepson

● Guia de Referência JDBC 2 - 19XX - Editora Novatec - Fábio Ramon

● Guia de Referência Java - 19XX - Editora Novatec - Fábio Ramon

● Developing Java Servlets - 1999 - Editora Sams - James Goodwill

● Java Servlet Programming - 1998 - Editora O'Reilly - Jason Hunter e Willian Crawford

● Java Examples in a Nutshell, 2º Edição – 2000 - Editora O'Reilly


- David Flanagan
● Java Network Programming, 2º Edição – 2000 - Editora O'Reilly
- Elliotte Rusty Harold
● Java Performance Tuning – 1º Edição – 2000 - Editora O'Reilly
- By Jack Shirazi
● Database Programming with JDBC and Java, 2º Edição – 2000
– Editora O'Reilly - By George Reese
● The Complete JAVA2 Certification Study Guide – 1999 – Sybex – Simon Roberts, Philip
Heller e Michaeel Ernest
● Java 2 for Professional Developers – 19XX - (SAMS Publishing),
- Michael Morgan
● Professional Java Server Programming
Andrew Patzer / Wrox Press / 1999
● Thinking in Java
Bruce Eckel / Prentice Hall / 2000 / 0130273635 / 2nd Bk&cdr
● Desenvolvendo Applets com Java – 1997 – Sams / Editora Campus – K.C. Hopson e
Stephen E. Ingram.
Web Sites:
(SUN) [Link]
[Link]

[Link]
[Link]

[Link]

Foruns: [Link]

Produzido por: Equipe Consultoria em Internet © 2000


Este Web Site será melhor visualizado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:18:42]


IDE

1. GDPro 3.0 - [Link]


2. IBM's VisualAge for Java v2.0 - [Link]

3. ImageGear Java - [Link]


4. Progress Apptivity - [Link]
5. JDesignerPro - [Link]
6. Spirit - [Link]
7. Borland JBuilder 2 - [Link]
8. SuperCede - [Link]
9. Intertop Application Platform - [Link]
10. Metamata Audit - [Link]
11. Microsoft Visual J++ - [Link]
12. NetBeans Developer 2.0 - [Link]
13. NetDynamics 4.1 - [Link]
14. NetObjects BeanBuilder 1.0 - [Link]
15. Parts for Java 2.6 - [Link]
16. Oracle JDeveloper - [Link]
17. ProtoSpeed - [Link]
18. StudioJ - [Link]
19. iPP - [Link]
20. SilverStream Application Server 2.0 - [Link]
21. RasterMaster for Java 2.0 - [Link]
22. Sybase PowerJ - [Link]
23. VisualCafe Database Edition - [Link]
24. CodeWarrior - [Link]
25. KAWA - [Link]
26. Visaj - [Link]
27. CosmoCode - [Link]
28. WebObjects - [Link]
29. JWS - [Link]
30. Elixir IDE - [Link]
31. 2LKit for VJ++ - [Link]

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:18:45]


App Server

1. Dynamo Personalization Server - [Link]


2. Avenida Web Server - [Link]
3. Sapphire/Web 5.1 - [Link]
4. CreDO Advance Application Server - [Link]
5. Jacada for Java - [Link]
6. Forte WebEnterprise Professional Edition - [Link]
7. GemStone/J 2.0 - [Link]
8. Informix Dynamic Server - [Link]
9. JReport Server - [Link]
10. JRun - [Link]
11. ServletExec 2.0 - [Link]
12. Persistence PowerTier - EJB - [Link]
13. Proton - [Link]
14. Secant Extreme Enterprise Server - [Link]
15. iServer - [Link]
16. SilverStream Enterprise Application Server 2.0 - [Link]
17. Sybase Enterprise Application Server - [Link]
18. Vision JADE - [Link]
19. WebLogic Tengah - [Link]
20. WebChallenger - [Link]
21. WorkOut - [Link]
22. IBM WebSphere Application Server 2.0 -
[Link]
23. Inprise Application Server - [Link]
24. Apache-JServ - mark@[Link]
25. Progress Apptivity - [Link]
26. NetDynamics - [Link]
27. WebObjects - [Link]

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:18:45]


Class Library

1. The Java Collections Framework -


[Link]
2. Argent Coffee Table - [Link]
3. J/CRYPTO 3.01 - [Link]
4. Careflow Development Kit - [Link]
5. Spirit - [Link]
6. ILOG JViews 2.0 - [Link]
7. TeaSet Widgets - [Link]
8. Style Report - [Link]
9. JClass Enterprise Suite - [Link]
10. Parallel Crystal Report Engine - [Link]
11. JGL - The Generic Collection Library for Java - [Link]
12. Java SpatialX Toolkit - [Link]
13. [Link] SDK - [Link]
14. The CenturisTM PKI Platform - [Link]
15. JFCSuite - [Link]
16. StudioJ - [Link]
17. RasterMaster for Java 2.0 - [Link]
18. ROAD:BeanBox - [Link]
19. Emule SDK - [Link]
20. Formula One for Java - [Link]
21. VisImage - [Link]
22. alphaBeans - [Link]
23. JIMI Pro - [Link]
24. Graph Editor Toolkit for Java - [Link]
25. ICE Browser - [Link]
26. JConfig - [Link]

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:18:46]


Middleware

1. Aviva for Java - [Link]


2. RoboHELP Office - [Link]
3. HP ChaiServer - [Link]
4. InstantOnline Basic 2.0 - [Link]
5. GO-Joe 2.0 - [Link]
6. JdbStore - [Link]
7. OrbixWeb 3.1 - [Link]
8. JReport Server - [Link]
9. Jintegra - [Link]
10. DataDirect SequeLink Java Edition 2.0 - [Link]
11. MindQ - [Link]
12. Elements Advisor 2 - [Link]
13. NobleNet Nouveau - [Link]
14. jBusiness Suite - [Link]
15. JFCSuite - [Link]
16. ObjectStore PSE Pro 3.0 - [Link]
17. TopLink for Java - [Link]
18. Voyager Professional Edition - [Link]
19. WebConnect Pro - [Link]
20. Secant Extreme Persistent Object Service - [Link]
21. iScript - [Link]
22. SimbaExpress - [Link]
23. IBM eNetwork Host On-Demand -
[Link]
24. JDX - [Link]
25. Tarantella - [Link]
26. OpenMOM - [Link]
27. Inprise VisiBroker ORB - [Link]
28. OpenLink Data Access Drivers for JDBC - [Link]
29. Activated AXSL Processor - [Link]
30. jTicket - [Link]
31. JBroker 2.0 - [Link]
32. Visual BSF - [Link]
33. DataChannel RIO - [Link]
34. HOBLink J-Term V. 2.1 - [Link]
35. HOBLink J-DRDA V. 1.1 - [Link]

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:18:47]


Java Bean

1. BeanBox - [Link]
2. Virtual Instrumentation Beans - [Link]
3. Spirit - [Link]
4. JClass Enterprise Suite - [Link]
5. JSuite - [Link]
6. Java SpatialX Toolkit - [Link]
7. StudioJ - [Link]
8. CocoBase - [Link]
9. Formula One for Java - [Link]
10. J-Spell - [Link]
11. alphaBeans - [Link]
12. ICE Browser - [Link]

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:18:47]


Installation

1. J'Express - [Link]
2. InstallShield Java Edition - [Link]
3. DashO-Pro - [Link]
4. InstallAnywhere - [Link]
5. Install Toolkit for Java - [Link]
6. InstallWiz Professional Edition - [Link]

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:18:48]


Java App

1. Blaupunkt Virtual Radio -


[Link]
2. Jasmine - [Link]
3. JBMS Developer - [Link]
4. Password Courier - [Link]
5. Simplicity for Java - [Link]
6. Internet Shopping with Java - [Link]
7. Interactive OrgChart - [Link]
8. Spirit - [Link]
9. Extensity, Inc. - [Link]
10. [Link] - [Link]
11. InstallShield Java Edition - [Link]
12. Homestead - [Link]
13. ActionPlan - [Link]
14. Rubric EMA - [Link]
15. Jsales - [Link]
16. SpatialVision - [Link]
17. StructureBuilder - [Link]
18. Formula One for Java - [Link]
19. Timecruiser - [Link]
20. VisualCafe Database Edition - [Link]
21. Zelix KlassMaster - [Link]
22. InstallAnywhere - [Link]
23. BackOnline & infoBook - [Link]
24. SiteSurfer - [Link]
25. Synkronix PERCobol - [Link]
26. Activated Community - JavaLobby - [Link]
27. jForge - [Link]
28. 4thPass SourceGuard - [Link]
29. DataChannel RIO - [Link]
30. Together/J - [Link]
31. ObjectDomain 2.5 - [Link]
32. JWeb Builder - [Link]
33. JCertify - [Link]
34. Elixir IDE - [Link]
35. LOREx2 for Java - [Link]
Produzido por: Equipe Consultoria em Internet (c) 2000
Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:18:49]


Testing

1. JBMS Developer - [Link]


2. Assure - [Link]
3. WinRunner - [Link]
4. Metamata Metrics - [Link]
5. jtest! - [Link]
6. RadView Webload 3.0 - [Link]
7. SilkTest - [Link]
8. SunTest - [Link]
9. Global Checker for Java - [Link]
10. Rational TeamTest - [Link]
11. RSW e-TEST Suite - [Link]

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:18:50]


Team

1. GDPro 3.0 - [Link]


2. PVCS - [Link]
3. MKS Source Integrity Professional Edition - [Link]
4. Parts for Java - [Link]
5. Rational ClearQuest - [Link]
6. CVS - [Link]

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:18:51]


Reporting

1. GDPro 3.0 - [Link]


2. JPrinter - [Link]
3. WebIntelligence 2.0 - [Link]
4. EnterpriseSoft Report Writer for Java - [Link]
5. Style Report - [Link]
6. JReport Server - [Link]
7. dbProbe 4.0 - [Link]
8. MIS JavaClient - [Link]
9. Java SpatialX Toolkit - [Link]
10. SQRIBE Enterprise - [Link]
11. Formula One for Java - [Link]

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:18:51]


Modeling

1. GDPro 3.0 - [Link]


2. JaVision - [Link]
3. ERwin - [Link]
4. System Architect - [Link]
5. Rational Rose - [Link]
6. HOW Professional Edition for Java - [Link]
7. Rose Secant Extreme Link - [Link]
8. SoftModeler/Business - [Link]
9. StructureBuilder - [Link]
10. Together/J - [Link]
11. Sybase PowerDesigner - [Link]
12. Object Domain 2.5 - [Link]
13. MagicDraw - [Link]
14. Javelin - [Link]
15. objectiF - [Link]
16. LOREx2 for Java - [Link]
17. ER/Studio - [Link]

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:18:52]


Protection

1. SourceGuard - [Link]
2. Jcloak - [Link]
3. ObfuscatePro - [Link]
4. RetroGuard - [Link]
5. OuyaSafe - [Link]
6. Elixir IDE - [Link]

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:18:52]


Componentes_servlets

· Uma aplicação web é constituída de forma semelhante ao mundo real, onde temos
um fornecedor de serviços (Servidor) e o cliente.
· Nos servidores temos as páginas HTML, applets/Servlets Java, imagens, e-mails e
dados.
· Cliente envia uma requisição para o servidor solicitando alguma informação.
O software necessário no servidor para uma aplicação web na maioria das vezes:
● Servidor Web;

● Servidor de Banco de Dados;

● Servidor de Mail;

● Java.

No cliente:
● Browser

● Telefone Celular

● Palm Pilot

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:18:55]


Comparação

Os servlets oferecem várias vantagens sobre as aplicações baseadas em CGI, entre


as quais podemos destacar:
● Independência de plataforma;

● performance;

● extensibilidade;

● facilidade;

Independência de plataforma
● Os Servlets podem rodar em qualquer plataforma sem serem reescritos e até
mesmo compilados novamente.
● Os servlets podem ser executados em vários sistemas operacionais (Linux, AIX,
NT, Solaris) utilizando um grande número de servidores Web com acesso a
vários tipos de bancos de dados.
Performance
● Um novo programa CGI é carregado para cada requisição ao servidor. Um
Servlet é carregado apenas uma vez e para cada nova requisição este Servlet
gera um novo thread.
● método init() do Servlet, assim como nas Applets, ocorre apenas na primeira
vez que a classe é carregada.
● A SUN liberou a pouco tempo uma nova versão do HotSpot, um compilador
dinâmico, focado principalmente para servidores. Você pode conseguir uma
cópia em [Link]
● HotSpot verifica em tempo de execução o código do servlet java em busca de
pontos com lentidão de performance e tenta resolver estes problemas on the
fly.
Extensibilidade
● Com Java você pode criar aplicações muito mais modulares, tirar todo o
proveito da orientação a objetos e utilizar o grande número de APIs disponíveis
pela Javasoft e terceiros.
● Que tal acessar o banco de dados usando JDBC, gravar os dados do cartão de
crétido do cliente usando JCE para criptografar e confirmar informações com o
JavaMail ?
Facilidade de desenvolvimento
● Programar em Java é muito mais fácil que programar em C ou PERL. Algumas
IDEs Java, como o Visual Age da IBM e o Borland JBuilder, auxiliam na criação
de servlets Java.
● Quem já desenvolve Applets ou programas java simples já está capacitado a
desenvolver Servlets Java e páginas JSP.

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:18:55]


Servidores_servelets

Existem três formas de utilizar os Servlets:


● A mais popular é quando o próprio web server possui um servlet container.

● A segunda utiliza um Servlet Engine, um software que adiciona funcionalidades ao


seu servidor web não compatível com servlets e JSP.
● ou através de um Application Server (Servidor de aplicação).

Servidores web compatíveis com Servlets


● iPlanet Web Server (Netscape)
● Apache Tomcat
● Java Web Server
● Resin
● Jo! e JSPExecutor
● iServer
● vqServer
● Zeus Web Server
● Veja mais em:
[Link]

Servlets Engines
● Allaire JRun
● Apache Web Server JServ
● Caucho Resin
● iServer
● New Atlanta Communication - ServletExec
● Gefion Software - WAICoolRunner
● Veja mais em:
[Link]

Application Server
● BEA Weblogic Application Server
● IBM WebSphere Application Server
● Inprise Application Server
● iPlanet Application Server 6.0
● Lutris Technologies Enhydra
● Orion Application Server
● NetDynamics Application Server
● Silverstream Application Server
● Veja mais em:
[Link]

[Link] (1 of 2) [01/09/2000 19:18:56]


Ciclo

● web server se comunica com o servlet através de uma simples interface,


[Link]. Esta interface consiste em três métodos principais:
● init()
● service()
● destroy()
O método init()
● O método init() é invocado quando o servlet é carregado pela primeira vez e
somente na primeira inicialização do servlet.
● Este é um bom local para abrir conexões com uma base de dados ou declarar
variáveis globais.
● método recebe um argumento, uma referência ao objeto ServletConfig.

O método service( )
● Este é o núcleo de um servlet, é neste método que as requisições são recebidas,
onde ocorre o processamento e o envio da resposta para o cliente.
● Este método recebe dois parâmetros um ServletRequest e um ServletResponse
que correspondem a Requisição e Resposta.
O Objeto ServletRequest
● O objeto ServletRequest contém os dados enviados pelo cliente.
● Estes dados são formados em pares de nome/valor e obtidos através do método:
String getParameter(String)
● Usaremos este objeto ou uma especialização dele para obter uma série de
informações sobre o cliente.
O objeto ServletResponse
● Representa a resposta do servlet para o cliente. Quanto todo o processamento
estiver concluído usaremos este objeto para enviar as informações.
● O método void setContentType(String) deve ser chamado para definir o tipo de
resposta.
● método getOutputStream( ) ou getWriter() deve ser usado para enviar os dados
para o cliente.
O método service( )
O método service() manipula as requisições HTTP recebidas do cliente através do
parâmetro ServletRequest e em seguida envia a requisição ao método
desenvolvido especificamente para manipular aquele tipo de requisição.
● Alguns destes métodos são:
● doGet para requisições GET e HEAD
● doPost para requisições POST
● doPut para requisições PUT
● doDelete para requisições DELETE
● doOptions para requisições OPTIONS
O método destroy( )
● É chamado antes que o servlet seja finalizado a fim de possibilitar a liberação dos
recursos que estão sendo usados pelo servlet.
● É importante usar alguns flags para certificar que o todos os outros métodos já
foram concluídos antes de finalizar o servlet.

[Link] (1 of 2) [01/09/2000 19:18:56]


Exercícios 11

Escrevendo o primeiro Servlet


● Escreva o código do servlet. Salve-o como [Link]

● Compile o Servlet.

● Instale o JSDK (Jeeves)

● Execute o servlet através do browser.

Código:
Source Code for HelloWorld Example
import [Link].*;
import [Link].*;
import [Link].*;

public class HelloWorld extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)


throws IOException, ServletException
{
[Link]("text/html");
PrintWriter out = [Link]();
[Link]("<html>");
[Link]("<body>");
[Link]("<head>");
[Link]("<title>Hello World!</title>");
[Link]("</head>");
[Link]("<body>");
[Link]("<h1>Hello World!</h1>");
[Link]("</body>");
[Link]("</html>");
}
}

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:18:57]


Context

Servlet Context Enviando informações para inicialização do servlet


● O objeto ServletConfig enviado para o método init() fornece métodos que
permitem a recuperação e envio de informações sobre o contexto do servlet.
● arquivo [Link], ou outro semelhante, permite o envio automático de
parâmetros de inicialização para o servlet.
Servlet Context Informações sobre o contexto do servidor
● O objeto ServletContext fornece informações sobre o contexto do servidor.
● É aconselhável que o método init( ) salve a referência ao objeto ServletConfig em
uma variável privada da classe.
Servlet Context Contexto do servlet durante uma requisição
● Cada requisição pode conter informações na forma de nome/valor. Estas
informações podem ser obtidas através do objet ServletRequest que é enviado ao
método service().
● Para recuperar estas informações use o método getParameter(String nome), já
citado anteriormente

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:18:58]


Utilitárias

Classes Utilitárias
● [Link]

● Esta interface faz com o que o servlet trabalhe sempre com apenas uma linha
de execução para o método service.
● O servlet fica mais fácil porém mais lento em requisições concorrentes.

● [Link]

● [Link]

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:18:58]


HTTP

Suporte HTTP
● O pacote [Link] é fornecido para manipular o protocolo HTTP.

● Alguns métodos que esta interface suporta são:

● GET

● HEAD

● POST

● PUT

● DELETE

● TRACE

● CONNECT

● OPTIONS

Suporte HTTP - O Método HTTP GET


O mais importante neste método é que as requisições HTTP GET
possuem uma limitação de quantidade de dados que podem ser
enviados como parte do nome da URL.
Suporte HTTP
O Método HTTP HEAD
● É semelhante ao método GET, diferenciando apenas no retorno do servidor, que
é apenas um cabeçalho de informações.
● HEAD é usado para verificar
● a última data de modificação em um documento, usado para proxy.
● o tamanho dos documentos antes do download
● O tipo do servidor
● tipo de resposta do documento
Suporte HTTP
O Método HTTP POST
Este método deve ser usado quando se precisa enviar muitas informações para
o servidor, pois ele praticamente não possui limitação de quantidade de dados
que podem ser enviados.

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:18:59]


Cookies

● Os cookies são usados para armazenar dados no browser do cliente, a fim de


manter informações persistentes ou fazer controle de sessão.
● A classe Cookie é fornecida pelo pacote [Link];
● método setMaxAge(int i) define o tempo de vida de um cookie;
Mantendo informações sobre uma sessão
● Quando o usuário faz a primeira chamada ao servidor uma sessão é criada,
gerando um número de identificação.
● Este número é mantido durante as várias conexões do usuário, até que ele feche
o browser ou o tempo de vida da sessão expire.
● A classe HttpSession implementa esta funcionalidade.
● O método getSession(boolean) retorna a sessão corrente.
● Os valores de uma sessão são armazenados na forma de chave/valor. Use o
método putValue(chave,valor) para isso.
● Para recuperar uma informação use o método getValue(chave).

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:18:59]


Jmeter

● O Apache JMeter é uma ferramenta gráfica desenvolvida pela comunidade


Apache que permite ao desenvolvedor analisar a performance de seus servlets e
páginas JSP através de diversos gráficos.
● Esta ferramenta é free e pode ser encontrada em:
[Link]
Instalando o Caucho Resin
● O Resin é um dos servidores web compatíveis com Servlets Java e também
trabalha como Servlet Engine para servidores web IIS, Netscape e Apache.
● Além de Open Source ele tem uma boa performance e bons recursos como
bibliotecas próprias.

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:19:00]


Exercícios 12

import [Link].*;
import [Link].*;
import [Link].*;
public class CookieExample extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
[Link]("text/html");
PrintWriter out = [Link]();

// print out cookies


Cookie[] cookies = [Link]();
for (int i = 0; i < [Link]; i++) {
Cookie c = cookies[i];
String name = [Link]();
String value = [Link]();
[Link](name + " = " + value);
}
// set a cookie
String name = [Link]("cookieName");
if (name != null && [Link]() > 0) {
String value = [Link]("cookieValue");
Cookie c = new Cookie(name, value);
[Link](c);
}
}
}

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:19:00]


Exercícios 10

Exercício 01
class Prog1 extends Thread
{ int a = 0;
public void run(){
for(int r=0;r<7;r++)
{ a = a+1; [Link](getName()+" "+a);}
}
}

class Prog2 extends Thread


{ int b = 0;
public void run(){
for(int r=0;r<7;r++)
{ b = b+1; [Link](getName()+" "+b);}
}
}

class Prog1301 { public static void main(String arg[])


{
Prog1 x = new Prog1();
Prog2 y = new Prog2();
[Link]("Paulo");
[Link]("Mario");
[Link](); [Link]();
for (int i =0; i<3; i++)
[Link]("executando o Main");
/*try{[Link](); [Link]();} catch(InterruptedException e){} */
}
}

[Link] (1 of 2) [01/09/2000 19:19:01]


Exercícios 10
Exercício 02
class Prog3 extends Thread {
public void run()
{ int a = 0;
for(int r=0;r<7;r++)
{ a = a+1;
[Link](getName()+" "+ a);
}
}
}

class Prog1302 { public static void main(String arg[])


{ Prog3 x = new Prog3();
Prog3 y = new Prog3();
[Link]("Paulo");
[Link]("Mario");
[Link]();
[Link]();
try{ [Link](); [Link]();} catch(InterruptedException e){}
}
}

Produzido por: Equipe Consultoria em Internet © 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] (2 of 2) [01/09/2000 19:19:01]


Arquitetura

Um aplicativo Java utiliza uma API JDBC única que


independente do Banco de Dados ou driver que
estiver sendo utilizado. Os drivers para conexão e
acesso ao principais banco de dados são fornecidos
pelos fabricantes. O desenvolvedor precisa apenas
saber utilizar o drive adequando e a API JDBC.
Onde obter os drivers?
A lista de fornecedores e/ou fabricantes de drivers
JDBC está constante crescimentio. Para maiores
informações veja o site:
[Link]

Produzido por: Equipe Consultoria em Internet © 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:19:02]


Drivers

Tipos de Drivers
1- Ponte JDBC-ODBC com driver ODBC
2- Driver com API parcialmente nativa
3- Driver puro-Java JDBC-rede
4- Driver puro-Java com protocolo nativo
O Tipo 1 - Ponte
O acesso ao banco de dados via driver ODBC convencional. A ponte possui código
nativo a fim de fazer chamadas à API ODBC. Como pode ser visto na figura abaixo,
tanto a ponte quanto o driver ODBC devem residir na máquina onde está o
programa Java (uma vez que as chamadas são locais). Isso exige um controle maior
sobre a distribuição do aplicativo Java (Cliente/Servidor)

[Link] (1 of 3) [01/09/2000 19:19:03]


Drivers
Desvantagens
- Maior custo de manutenção;
- Gerenciado ODBC32;
- Nem sempre é portável (ODBC existe Win32 e algumas versões de Linux/Unix)
- Baixa performance.
Tipo 2 – Dirver com API parcialmente nativa
Semelhante ao tipo 1. O driver JDBC faz acesso a uma aplicação cliente do
gerenciador de banco de dados (SQLNet, Oracle). Geralmente esta conexão é feita
em código nativo. Cada estação deve ter instalado o Client Oracle. Isso exige um
controle maior sobre a distribuição do aplicativo Java (modelo: client/server). Como
o driver depende do aplicativo Client Oracle, o procedimento para instalação é
formada pelo fornecedor.

Desvantagens
- Maior custo de manutenção
- Maior custo de aquisição (lincesas do Client)
- Nem sempre é portavel (dependencia do Banco de Dados)
Tipo 3 – Driver puro-Java JDBC-Rede
Este é tipo mais flexível de driver. Pode ser escrito totalmente em Java. Odriver
acessa um servidor usando um protocolo neutro (HTTP, RMI, IIOP e etc). Este
servidor por sua vez estabelece a conexão com um ou mais gerenciadores de
banco de dados. Pelo fato do protocolo usado ser neutro, este driver pode ser
usado para acessar um banco de dados protegido por "firewall". Este é um
exemplo de três camadas.
Geralmente não é instalar o driver, já que é uma classe Java que pode ser
carregada como as outras (inclusive em Applets).

[Link] (2 of 3) [01/09/2000 19:19:03]


Drivers

Tipo 4 – Driver puro-Java com protocolo nativo


Assim como o tipo 3, este tipo poder se escrito totalmente em Java. O driver acessa
diretamente o gerenciador de banco de dados usando o protocolo nativo do mesmo.
Poer essa razão normalmente é fornecido pelos fabricantes de banco de dados. Em
geral é de tamanho reduzido e chamado de "thin driver". Não é necessário
instalação uma vez que o driver é carregado como uma classe Java (inclusive em
applets). Este tipo ideal para aplicações com tecnologia baseada em Internet,
Extranet e Intranet.

Vantagem
- Não instalação do Client
- Tamanho do driver
- Melhor performance em relação ao driver que Ponte

Produzido por: Equipe Consultoria em Internet © 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] (3 of 3) [01/09/2000 19:19:03]


Driver Manager

Driver Manager é uma classe do pacote [Link] responsável por:


- Gerenciar o conjunto de drivers JDBC disponíveis para o aplicativo Java;
- Fazer a conexão dos drivers com o banco de dados;
- Controlar o login e as mensagens entre banco de dados e driver.
Um aplicativo pode usar simultaneamente vários tipos de Drivers JDBC distintos
(acessando banco de dados diferentes, se necessário). Todos os drivers devem ser
registrados na Classe Driver Manager. Para isso, todos os drivers devem possuir um
bloco estático onde um objeto de sua classe é "instanciado" e registrado no
DriverManager com método estático registerDriver, por exemplo:
// Fragmento de código de um driver JDBC
import [Link];
public class DriverJDBC implements Driver {
static {
try { Driver drv = New xDriver();
[Link](drv);
...
} catch (SQLExpection e) { }
}
}

Um desenvolvedor que utiliza um driver não precisa saber como ele foi codificado,
entretanto deve saber que é suficiente carregar o driver para que ele se registre no
DriverManager.
Para carregar o driver pode-se usar um dos 3 modos:
- Carga dinâmica da classe com o método ClassforName:
[Link]("[Link]");
- Instanciação de um objeto para forçar a carga da classe:
new [Link]();
- Atribuição a variáveis do sistema, no momento de invocação do aplicativo Java, com a
opção –D
Java –[Link]=[Link] Aplicativo
Programa exemplo: PASSO A PASSO:
Para fazermos uma conexão com banco de dados devemos seguir os passos:
Primeiro: Importar [Link] (import [Link])
Segundo: Carregar Driver JDBC;
Terceiro: Especificar um banco de dados (através da URL de conexão).
Quarto: Abrir uma conexão com o banco de dados;
Quinto: Criar um Statement;
Sexto: Submeter um comando SQL (select, update, insert, delete);
Sétimo: Receber os resultados
[Link] (1 of 4) [01/09/2000 19:19:04]
Driver Manager
Oitavo: Encerrar a sessão
Exemplo 1: Tipo 1 – Ponte:
//passo 1
import [Link];
public class DBConexao {
//Construtor
public void DBConexao() {
try {
//passo 2
[Link] ("[Link]:[Link]");
//passo 3 – URL de conexão com a ponte jdbc-odbc
String URL = "jdbc:odbc:data"
//passo 4 – URL : da etapa anterior + usuário + senha
Connection con = [Link](URL, "nome do usuário", "senha");
//passo 5
Statement stmt = [Link]();
//passo 6 – query
String sql = "Select * from Tabela"
ResultSet rs = [Link](sql);
//passo 7 – laço
while ([Link]()) {
//getstring(n) = onde n posição da coluna na tabela (resultset)
[Link]([Link](1));
[Link]([Link](2));
[Link]([Link](3));
[Link]([Link](4));
}

} catch([Link] e)
{ [Link]():
}finally {
//passo 8 – encerrando a sessão
[Link]();
[Link]();
[Link]();
[Link] (2 of 4) [01/09/2000 19:19:04]
Driver Manager

}
Exemplo 2: Tipo 4 thin driver
import [Link].*;
public class TesteJdbc {
public static void main(String[] args) {
try {
// [Link]("[Link]");
new [Link]();
String strCon = "jdbc:oracle:thin:@[Link]:1521:ORCL";
String sql;
Connection con =
[Link](strCon,"jcurso","jcurso");
sql="DELETE TABELA WHERE CHAVE like ? AND DATAINI = ?";
PreparedStatement pstmt = [Link](sql);
[Link](1, "C");
[Link](2, new Date());
[Link]();
Statement stmt = [Link]();
sql = "SELECT * FROM TABELA";
ResultSet rs = [Link](sql);
while([Link]()) {
String chave = [Link]("CHAVE");
String valor = [Link]("VALOR");
[Link](chave + ": " + valor);
}
[Link]();
[Link]();
[Link]();

} catch(SQLException e) {
[Link]();
} catch(Exception e) {
[Link]();
}

[Link] (3 of 4) [01/09/2000 19:19:04]


Driver Manager
}
}

Produzido por: Equipe Consultoria em Internet © 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] (4 of 4) [01/09/2000 19:19:04]


Transações

JDBC permite definir transações nos acessos aos banco de dados. Transações são
grupos de comandos SQL que devem ser executados por inteiro. Assim, o processo de
COMMIT finaliza a transação anterior e começa outra, que vai terminar no próximo
instrução COMMIT e assim por diante. Um ROLLBACK, desfaz todos os comandos
anteriores deste o último COMMIT.
O banco de dados garante que a transação iniciada, mas terminada com um COMMIT,
seja automaticamente cancelada (ROLLBACK). Isso assegura que os processos
dependentes de várias instruções SQL sejam integralmente feitos ou integralmente
desfeitos.
Um exemplo clássico de transação é o processo de débito entre contas correntes
(exemplo: DOC), deve existir o débito e crédito nas respectivas contas, caso contrário
a operação deve ser desfeita.
Autocommit, commit e rollback
O método setAutoCommit da classe Connection permite mudar esta propriedade:
[Link](true);
faz com que a mensagem de commit seja enviada após cada commando SQL, e
[Link](false);
desabilita o commit automático. Neste caaso devewm ser usados métodos commit e
rollback, da classe Conection, para controlar as transações. (Ver a classe Connection –
Javadoc)
void commit()
Efetiva todos as instruções enviadas ao banco de dados desde a última mensagem
semelhante. Termina a transação e começa uma nova.
void rollback()
Desfaz todos as instruções SQL foram envidas ao banco de dados desde o último
commit(). Recomeça a última transação. Por exemplo:
[Link](false);
try {
[Link](valor);
[Link](valor);
// instruções SQL;
[Link](); //envia commit para o banco
} catch(Error e) {
[Link](); //Desfaz a transação
}
}

[Link] (1 of 2) [01/09/2000 19:19:05]


Limitação

Nem todos os driver JDBC implementam a funcionalidade de consulta alteráveis da


mesma forma. Mesmo que o driver implemente este recurso, para funcionar é
necessário que a consulta atenda determinadas condições:
- referencie apenas uma tabela;
- não contenha "joins";
- contenha chave primária da tabela consultada
- contenha todos os campos não nulos da tabela (somente para o caso de insert)
* Consulte a documentação do Driver para saber quais são limitações.

Produzido por: Equipe Consultoria em Internet © 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:19:05]


Exercícios 09

Exercício 01
import [Link].*;
import [Link].*;

public class Prog1001 extends Applet


{
public void init()
{
[Link]("Executando o Init");
}
public void start()
{
[Link]("Executando o Star");
}
public void stop()
{
[Link]("Executando o Stop");
}
public void destroy()
{
[Link]("Executando o destroy");
}
}

Exercício 02
import [Link].*;
import [Link].*;
import [Link].*;

public class Prog1002 extends Applet implements Runnable,ActionListener


{

[Link] (1 of 5) [01/09/2000 19:19:06]


Exercícios 09
TextField b1,b2;
String x;
Thread k;

public void init()

{
setLayout(new FlowLayout());
b1 = new TextField(10);
b2 = new TextField(10);
[Link](this);
[Link](this);
add(b1);
add(b2);
k = new Thread(this);
[Link]();
}

public void paint(Graphics g)


{
if ( x != null)
[Link](x,50,50);
}

public void run()

{
int cont = 0;
while(true)
{ cont = cont + 1;
[Link](""+cont);}
}

public void stop()

[Link] (2 of 5) [01/09/2000 19:19:06]


Exercícios 09

{
[Link]();
}

public void start()

{
[Link]();
}

public void actionPerformed(ActionEvent e)

{
x = [Link]();
repaint();
}

}
Exercício 03

import [Link].*;
public class Prog1101 extends Vector
{
public Prog1101()
{
super(1,1);
}
public void addInt(int i)
{
addElement(new Integer(i));
}
public void addFloat(float f)
{

[Link] (3 of 5) [01/09/2000 19:19:06]


Exercícios 09
addElement(new Float(f));
}
public void addString(String s)
{
addElement(s);
}
public void addCharArray(char a [])
{
addElement(a);
}
public void printVector()
{
Object o;
int length = size();
[Link]("Numero de elementos do vetor " + length + " e eles sao:
");
for (int i = 0; i < length; i++)
{
o = elementAt(i);
if (o instanceof char [])
{
[Link]([Link]((char[]) o));
}
else
[Link]([Link]());
}
}
public static void main(String args [])
{
Prog1101 v = new Prog1101();
int digit = 5;
float real = 3.14f;
char letters[] = {'a', 'b', 'c', 'd'};
String s = new String("Hi there");
[Link](digit);
[Link] (4 of 5) [01/09/2000 19:19:06]
Exercícios 09

[Link](real);
[Link](s);
[Link](letters);
[Link]();
}
}

Produzido por: Equipe Consultoria em Internet © 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] (5 of 5) [01/09/2000 19:19:06]


Exercícios 06

Exercício 01
import [Link].*;
import [Link].*;
class Prog0701 extends Frame implements ActionListener{
String x;
public void paint(Graphics g)
{if (x != null)
[Link](x,100,100);
}

public void actionPerformed(ActionEvent e)


{ x="TRATEI O EVENTO DE BOTAO";
repaint();
}

public static void main (String arg [])


{Prog0701 f = new Prog0701();
Button B = new Button();
[Link](new FlowLayout());
[Link](B);
[Link](f);
[Link](300,300);
[Link]();
}
}

Exercício 02
import [Link].*;
import [Link].*;

class Prog0702 extends Frame implements ActionListener{


String x;
Button b;
Button c;

[Link] (1 of 3) [01/09/2000 19:19:07]


Exercícios 06

public void paint(Graphics g)


{if (x != null)
[Link](x,100,100);
}

public Prog0702()
{ setLayout(new FlowLayout());
b = new Button();
c = new Button();
add(b);
add(c);
[Link](this);
[Link](this);
setSize(300,300);
show();
}

Exercício 03
import [Link].*;
import [Link].*;

class Prog0703 extends Frame implements ItemListener{


Checkbox b;
Checkbox c;

public Prog0703()
{ setLayout(new FlowLayout());
b = new Checkbox("one",null,true);
c = new Checkbox("two");
add(b);
add(c);
[Link](this);
[Link](this);
setSize(300,300);
show();
}

[Link] (2 of 3) [01/09/2000 19:19:07]


Exercícios 06
public void itemStateChanged(ItemEvent e)
{ if ([Link]().equals(b))
{ [Link]("Cliquei no botao b");
[Link]("O estado do botao b e: " + [Link]() );
}
else
if ([Link]().equals(c))
{ [Link]("Cliquei no botao c");
[Link]("O estado do botao c e: " + [Link]() );
}
}

public static void main (String arg [])


{
new Prog0703();
}
}

Produzido por: Equipe Consultoria em Internet © 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] (3 of 3) [01/09/2000 19:19:07]


Evento

O que é um evento?
Quando o usuário executa uma ação à interface de usuário, isto causa um evento a
ser emitido. Eventos são objetos que descrevem o que aconteceu. Vários tipos
diferentes de classes de evento existem para descrever categorias gerais diferentes de
ação de usuário.
Fontes de evento
Uma fonte de evento (ao nível de interface de usuário) é o resultado de alguma ação
de usuário em um componente de AWT. Por exemplo, um trinco de rato em um
componente de botão gerará (fonte) um ActionEvent.
Manipuladores de evento
Quando um evento acontece, o evento é recebido pelo componente com o que o
usuário interagiu; por exemplo, o botão, slider, campo de texto, e assim por diante.
Um manipulador de evento é um método que recebe o objeto de Evento de forma que
o programa pode processar a interação do usuário.
Como são processados Eventos
Entre JDK 1.0 e JDK 1.1, houve mudanças significantes do modo que são recebidos
eventos e são processados.
JDK 1.0 x JDK 1.1 Modelo de Evento
JDK 1.0 usa um modelo de evento de hierarquia, e partir da versão JDK 1.1 usa um
modelo de evento de delegação. Abaixo faremos uma comparação sobre os dois tipos
de eventos .
Modelo de hierarquia (JDK 1.0)
O modelo de evento de hierarquia é baseado em hierarquia de retenção. Eventos que
não são dirigidos ao componente continuarão propagando ao recipiente do
componente automaticamente.
Modelo de delegação (a partir da versão JDK 1.1)
O JDK 1.1 introduziu um modelo de evento novo, chamou-o de evento de delegação.
No modelo de evento de delegação, são enviados eventos a componente, onde cada
componente registrar uma rotina de manipulação de eventos (chamado de ouvinte)
para receber o evento. Deste modo o manipulador de eventos pode estar em uma
classe separada do componente. A manipulação do evento é delegada então à classe
separada.
Vantagens do Modelo de delegação
* Não são dirigidos eventos acidentalmente; no modelo de hierarquia é possível para
um evento propagar a um recipiente e é dirigido a um nível que não é esperado.
* É possível criar filtro (adaptador) de classes para classificar ações de evento.
* O modelo de delegação é muito melhor para a distribuição de trabalho entre
classes.
* O modelo de evento novo provê apoio por feijões de Java.
Desvantagens do Modelo de delegação
* É mais complexo, pelo menos inicialmente, entender.
* A migração do JDK 1.0 para o JDK 1.1 não é fácil.
● Embora o JDK atual apóia o JDK 1.0, os modelos podem ser misturados.

[Link] (1 of 2) [01/09/2000 19:19:08]


AWT

* Reconheça os componentes do pacote biblioteca AWT.


* Use os componentes da AWT para construir interfaces de usuário para programas
reais.
● Controle as cores e mananciais usados por um componente de AWT

Instalações do AWT
O AWT provê uma variedade larga de instalações standards.
Buttons
É uma das interfaces básicas, que é ativa após ser precionada.
Checkboxes
Checkboxe fornece uma interface simples, aonde as opções possíveis são
"on/off".
CheckboxGroups
CheckboxGroups é um tipo de Checkboxe especial, diferenciando do anterior
pelo sinal de seleção, no caso uma bolinha, e aonde apenas uma opção poderá
ser marcada.
Choice
O Choice fornece uma seleção simples dentro de uma lista de opções.
Canvas
Canvas é uma tela de fundo (papel de parede) aonde irão ser adicionados
componentes.
Label
Label é um objeto simples que mostra uma linha simples de texto.
TextField
TextField é um objeto simples que permite a digitação dentro dele.
TextArea
TextArea é um objeto mais completo que permite a digitação de várias linhas
dentro dele.
List
O List é um tipo de Choice, mas que permite a seleção múltipla dentro da lista
de opções.

Produzido por: Equipe Consultoria em Internet © 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:19:08]


Exercícios 07

Exercício 01
import [Link].*;
import [Link].*;

class Prog 0801 extends Frame implements ItemListener{


CheckboxGroup cgb = new CheckboxGroup();
Checkbox one = new Checkbox("one",cgb,false);
Checkbox two = new Checkbox("two",cgb,false);
Checkbox three = new Checkbox("three",cgb,true);

public Prog0801()
{ setLayout(new FlowLayout());
add(one);
add(two);
add(three);
[Link](this);
[Link](this);
[Link](this);
setSize(300,300);
show();
}

public void itemStateChanged(ItemEvent e)


{ if ([Link]().equals(one))
{ [Link]("Cliquei no botao one");
[Link]("O estado do botao one e: " + [Link]() );
}
else
if ([Link]().equals(two))
{ [Link]("Cliquei no botao two");
[Link]("O estado do botao two e: " + [Link]() );
}
if ([Link]().equals(three))
{ [Link]("Cliquei no botao three");
[Link]("O estado do botao three e: " + [Link]() );

[Link] (1 of 4) [01/09/2000 19:19:09]


Exercícios 07
}
}

public static void main (String arg [])


{
new Prog0801();
}
}

Exercício 02

import [Link].*;
import [Link].*;

class Prog0802 extends Frame implements ItemListener{


Choice cgb = new Choice();

public Prog0802()
{ setLayout(new FlowLayout());
[Link]("one");
[Link]("two");
[Link](this);
add(cgb);
setSize(300,300);
show();
}

public void itemStateChanged(ItemEvent e)


{ if ([Link]().equals(cgb))
[Link]([Link]());
}

public static void main (String arg [])


{
new Prog0802();
}
}

[Link] (2 of 4) [01/09/2000 19:19:09]


Exercícios 07
Exercício 03

import [Link].*;
import [Link].*;

class Prog0803 extends Frame implements ActionListener{


TextField b;

public Prog0803()
{ setLayout(new FlowLayout());
b = new TextField(20);
add(b);
[Link](this);
setSize(300,300);
show();
}

public void actionPerformed(ActionEvent e)


{ if ([Link]().equals(b))
{ [Link]([Link]()); }
}

public static void main (String arg [])


{
new Prog0803();
}
}

Exercício 04

import [Link].*;
import [Link].*;

class Prog0804 extends Frame implements ActionListener{


TextArea b;
Button a;

public Prog0804()

[Link] (3 of 4) [01/09/2000 19:19:09]


Exercícios 07
{ setLayout(new FlowLayout());
a = new Button();
b = new TextArea(5,5);
add(a);
add(b);
[Link](this);
setSize(300,300);
show();
}

Produzido por: Equipe Consultoria em Internet © 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] (4 of 4) [01/09/2000 19:19:09]


Outros 02

Frame
Frame é uma armação aonde serão inseridos objetos.
Panel
Panel é um tipo de container aonde serão inseridos objetos.
Dialog
Um Dialog é semelhante ao Frame, nisso é uma janela parada grátis com algumas
decorações.
Não são feitos Dialog normalmente visível para o usuário quando eles são criados
primeiro.
FileDialog
FileDialog é um tipo de implementação que permite ao usuário selecionar pastas dentro
de uma lista de opções.
ScrollPane
ScrollPane são as barras de rolagens de um panel.
Menus
Menu é uma série de opções disponível.
Um fator importante da criação de menus no Java é a respeito do Help. O help pode ser
deslocado para ficar o mais a direita possível dos demais itens.
O MenuBar é um tipo de menu horizontal.
O MenuItem são os itens do menu.
CheckboxMenuItem
É uma variação dos tipos de menu, aonde o usuário seleciona uma das opções e esta
opção selecionada fica marcada com "quique".
PopupMenu
É um tipo de menu acionado a partir de qualquer posição na tela.
Controlando Aspectos Visuais
Colors
Existem dois métodos para controlar as cores:
● SetForeground()

● SetBackground()

Fonts
É utilizado para controlar os tipos de fontes.
Printing
Frame f = new Frame("Print test")
...

[Link] (1 of 2) [01/09/2000 19:19:10]


Exercícios 08

Exercício 01
import [Link].*;
import [Link].*;

class Prog0901 extends Frame implements ActionListener{


List lst = new List(4,false);

public Prog0901()
{ setLayout(new FlowLayout());
[Link]("a");
[Link]("b");
[Link]("c");
[Link]("d");
[Link]("e");
[Link]("f");

[Link](this);
add(lst);
setSize(300,300);
show();
}

public void actionPerformed(ActionEvent e)


{ if ([Link]().equals(lst))
[Link]([Link]());
}

public static void main (String arg [])


{
new Prog0901();
}
}

Exercício 02
import [Link].*;

[Link] (1 of 5) [01/09/2000 19:19:10]


Exercícios 08
import [Link].*;

class Prog0902 extends Frame implements ActionListener{


Button a = new Button();
String vet[];
List lst = new List(4,true);

public Prog0902()
{ setLayout(new FlowLayout());
[Link]("a");
[Link]("b");
[Link]("c");
[Link]("d");
[Link]("e");
[Link]("f");
[Link](this);
add(lst);
add(a);
setSize(300,300);
show();
}

public void actionPerformed(ActionEvent e)


{ if ([Link]().equals(a))
vet=[Link]();
for (int i=0; i < [Link];i++)
{
[Link](vet[i]);
}
}

public static void main (String arg [])


{
new Prog0902();
}
}

Exercício 03

[Link] (2 of 5) [01/09/2000 19:19:10]


Exercícios 08

import [Link].*;
import [Link].*;

class Prog0903 extends Frame implements WindowListener


{
Prog0903()
{ addWindowListener(this);
setSize(300,300);
setVisible(true);
}
public void windowActivated(WindowEvent e)
{
}
public void windowClosed(WindowEvent e)
{
}
public void windowClosing(WindowEvent e)
{
[Link](0);
}
public void windowDeactivated(WindowEvent e)
{
}
public void windowDeiconified(WindowEvent e)
{
}
public void windowIconified(WindowEvent e)
{
}
public void windowOpened(WindowEvent e)
{
}
static public void main(String agr[])
{ new Prog0903();
}
}

[Link] (3 of 5) [01/09/2000 19:19:10]


Exercícios 08
Exercício 04
import [Link].*;
class Prog0904 {
public static void main (String [] arg)
{ Frame f = new Frame();
Button b1 = new Button();
Button b2 = new Button();
Button b3 = new Button();
Button b4 = new Button();
[Link](new FlowLayout());
[Link](b1);
[Link](b2);
[Link](b3);
[Link](b4);
[Link](200,200);
[Link](true);
}
}

Exercício 05
import [Link].*;
import [Link].*;

class Prog0905 extends Frame implements ActionListener{


MenuBar mb = new MenuBar();
Menu m1 = new Menu("File");
Menu m2 = new Menu("Edit");
Menu m3 = new Menu("Help");

MenuItem mi11 = new MenuItem("Save");


MenuItem mi12 = new MenuItem("Open");
MenuItem mi13 = new MenuItem("Exit");

public Prog0905()
{ setLayout(new FlowLayout());
[Link](mi11);
[Link](mi12);
[Link]();

[Link] (4 of 5) [01/09/2000 19:19:10]


Exercícios 08
[Link](mi13);

[Link](m1);
[Link](m2);
[Link](m3);

[Link](this);
[Link](this);
[Link](this);

setMenuBar(mb);

setSize(300,300);
show();
}

public void actionPerformed(ActionEvent e)


{ if ([Link]().equals(mi11))
{ [Link]("Iten Selecionado: mi11 " );
}
}

public static void main (String arg [])


{
new Prog0905();
}
}

Produzido por: Equipe Consultoria em Internet © 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] (5 of 5) [01/09/2000 19:19:10]


Exercícios 05

class Prog0601
{
public static void main (String args[ ])
{
int i = 0;
int scap = 0;
String greetings [ ] = { "Hello word" , "No, I mean it!", "HELLO WORLD!"};
While (i < 4)
{
try
{
[Link](greetings[i]);
}
catch(ArrayIndexOutOfBoundsException e)
{
scap++;
[Link]("Valor do Índice foi refixado " + scap);
if (scap < 5)
{
i = -1;
}
}
catch(Exception e)
{
[Link]([Link]());
}
finally
{
[Link]("Esta mensagem será sempre impressa.");
}
i++;

[Link] (1 of 2) [01/09/2000 19:19:12]


Exercícios 05
}
}
}

Produzido por: Equipe Consultoria em Internet © 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] (2 of 2) [01/09/2000 19:19:12]


Abstração

Abstração de Tipos de Dados


Quando itens de dados são compostos para tipos de dados, semelhante a uma data, você
pode definir um número de bits de programas que especifica a operação do tipo de dados.
Em Java você pode criar uma associação entre o tipo data e a operação tomorrow a seguir:
public class Date {
private int day, month, year;
public void tomorrow( )
{ // código que incrementa o dia
}
}

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:19:13]


Métodos

Definição de Métodos
Em Java, métodos são definidoss usando uma aproximação que é muito similar à usada em
outras linguagens, como por exemplo C e C++. A declaração é feita da seguinte forma:
< modifiers > < tipo de retorno > < nome > ( < lista de argumentos > ) < bloco >
< modifiers > -> segmento que possue os diferentes tipos de modificações incluíndo public,
protected e private.
< tipo de retorno > -> indica o tipo de retorno do método.
< nome > -> nome que identifica o método.
< lista de argumentos > -> todos os valores que serão passados como argumentos.
public void addDays (int days)
Passagem de Valores

Em Java o único argumento passado é "by-value"; este é um argumento may not be


changed do método chamado. Quando um objeto é criado, é passado um argumento para o
método e o valor deste argumento é uma referência do objeto. O conteúdo do objeto
passível de alteração é chamado do método, mas o objeto referenciado jamais é alterado.
A Referência This
É aplicado a métodos não estáticos.
O Java associa automaticamente a todas as variáveis e métodos referenciados com a
palavara this. Por isso, na maioria dos casos torna-se redundante o uso em todas as variáveis
da palavra this.
Existem casos em se faz necessário o uso da palavar this. Por exemplo, você pode necessitar
chamar apenas uma parte do método passando uma instância do argumento do objeto.
(Chamar um classe de forma localizada);
Birthday bDay = new Birthday(this);
Ocultando Dados
Usando a palavra private na declaração de day, month e year na classe Date, você
impossibilitará o acesso a estes membros de um código fora desta classe. Você não terá
permissão para atribuir valores, mas poderá comparar valores.

[Link] (1 of 2) [01/09/2000 19:19:13]


Encapsulamento

Encapsulamento
É uma proteção adicional dos dados do objeto de possíveis modificações impróprias,
forçando o acesso a um nível mais baixo para tratamento do dados.
Sobrescrevendo Métodos
O Java permite que você tenha métodos com o mesmo nome, mas com assinaturas
diferentes. Isto permite a reusabilidade dos nomes dos métodos.
public void print( int i )
public void print( float f )
public void print( String s)
Quando você escreve um código para chamar um desses método, o método a ser
chamado será o que coincidir com tipos de dados da lista de parâmetros.

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:19:14]


Construtores

O mecanismo de inicialização do Java é automático, ou seja se não incializarmos um


construtor, o Java o inicializará automaticamente.
Mas existem casos que se faz necessário a declaração explicita dos construtores.
Para escrever um método que chama um construtor, você deve seguir duas regras:
1ª O nome do método precisa ser igual ao nome da classe.
2ª Não deve retornar um tipo declarado para o método.

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:19:15]


Subclasses

Subclasses (Relacionadas)
Na classe Pai você deve declarar os objetos comun a todos, e nos sub-níveis (Subclasses),
você declara as particulariedades:
public class Employee {
private String name;
private Date hireDate;
private Date dateOfBirth;
private String jobTitle;
private int grade;
.......
}
Subclasses (Extensões)
Em linguagens de orientação a objetos, um mecanismo especial é fornecido para que
permita ao programa defina classes e termos previstas na definição de outras classes. Esta
arquitetura em Java usa a palavra extends.
public class Employee {
private String name;
private Date hireDate;
private Date dateOfBirth;
private String jobTitle;
private int grade;
}

public class Manager extends Employee {


private String departament;
private Employee [ ] subordinates;
...........
}
Herança Simples
Em Java não existe herança múltipla.
Em Java os Construtores não são herdados.
Java permite que uma classe extenda uma outra classe, com isso esta classe herda as
características da outra classe.

[Link] (1 of 2) [01/09/2000 19:19:15]


Polimorfismo

A idéia de polimorfismo é a de muitas formas, onde eu posso utilizar uma classe


de diversas maneiras e formas possíveis.
public class Employee extends Object
and
public class Manager extends Employee
Argumentos de Métodos e Coleções Heterogeneas
Usando esta aproximação você pode escrever métodos que aceitam um objeto
genérico. O uso do polimorfismo fornece uma série de facilidades.
public TaxRate findTaxRate( Employee e) {
Manager m = new Manager( );
.......
TaxRate t = findTaxRate(m);
Isto é possível porque um Gerente é um empregado.
Uma coleção heterogênea é uma coleção de coisas diferentes. Em linguagem
orientada a objetos, você pode criar uma coleção de coisas que tem uma classe
de antepassados comuns. Assim nós poderemos fazer isso.
Employee [ ] staff = new Employeee [ 1024 ];
staff[ 0 ] = new Manager ( );
staff[ 1 ] = new Employee ( );
E assim sucessivamente nos podemos escrever um método de tipos que põe
empregados ordenados por idade ou em ordem salarial sem ter que se
preocupar com a ordem de inserção.

[Link] (1 of 2) [01/09/2000 19:19:16]


Outros 01

O Operador instanceof
Fornece o dado que você adquiriu através da passagem de parâmetros.
Caso você receba um object por referência do tipo Employee, esta referência poderia
não ser mostrado para Manager. Se você quiser testar isso use instanceof.
public void method(Employee e) {
if (e instanceof Manager) {
}
else if ( e instanceof Contractor) {
}
else {
}
}
Objetos Lançados
Em circunstâncias onde você recebeu uma referência para uma classe pai, e você
determinou que o objeto é de fato uma subdivisão de classe particular usando o
operador de instanceof, você pode restabelecer a funcionalidade completa do objeto
lançado.
Sobre-escrevendo Métodos
O Java permite que você declare métodos na classe pai e não desenvolva nenhuma
lógica dentro desses métodos, permitindo com isso que o desenvolvimento desses
métodos venha a ser trabalhados dentro das sub-classes posteriores.
Class Funcionario( )
ler( )
Class Motorista( )
ler ( )
[Link]( ) -> Referencia o método da classe pai
Comparando Java com outras Linguagens
Em C++ você pode adquirir este comportamento, desde que você marque o método
como virtual na fonte.
Classes se agrupando - Pacotes
Java provê o mecanismo de pacotes como um modo de se agrupar classes
relacionadas. Tão longe, todos nossos exemplos pertencem à falta ou pacotes não
mencionados.

[Link] (1 of 2) [01/09/2000 19:19:17]


Outros 01

A declaração import
Em Java, quando você quer usar instalações de pacotes, você usa a declaração de
importação para contar para o compilador onde achar as classe que você vai usar.
A declaração de importação (import) deve preceder a declaração de todas as classes.

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] (2 of 2) [01/09/2000 19:19:17]


Exercícios 04

class Prog0501
{
public static void main(String arg[ ])
{
int a, b=10, c=3;
a = func(b,b+c); //chamada de funcao. O retorno é passado para a
variável a
[Link]("valor de a = " + a);
}
// A definicao da funcao esta logo abaixo
public static int func(int x, int y)
{
int ret;
ret = x+y;
return ret;
}
}

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:19:17]


Encapsulamento OO

Encapsulamento é definido como uma técnica para minimizar interdependencias entre


"módulos" através da definição de interfaces externas.
fenômeno da "caixa preta"
A interface (pública) de um objeto declara todas as operações permitidas (métodos)

Todo o acesso aos dados do objeto é feito através da chamada a uma operação
(método) da sua interface Mudanças na implementação de um objeto, que
preservem a sua interface externa, não afetam o resto do sistema.

Benefícios
Segurança
protege os atributos dos objetos de terem seus valores corrompidos por outros
objetos.
Independência
"escondendo" seus atributos, um objeto protege outros objetos de complicações de
dependência de sua estrutura interna.

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:19:19]


Métodos OO

Mensagens
Objetos interagem e comunicam-se através de mensagens...

Métodos
...as mensagens identificam os métodos a serem executados no objeto receptor.

Mensagens e Métodos
Para invocar um método de um objeto, deve-se enviar uma mensagem para este
objeto.
Para enviar uma mensagem deve-se:
● identificar o objeto que receberá a mensagem;

● identificar o método que o objeto deve executar;

● passar os argumentos requeridos pelo método.

Métodos
O que um determinado método pode fazer com os valores dos atributos do objeto?

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:19:19]


Objetos

Um objeto possui:
● um estado (definido pelo conjunto de valores dos seus atributos em determinado
instante)
● um comportamento (definido pelo conjunto de métodos definido na sua interface)

● uma identidade única (!)

Abstração
Focalizar o essencial, ignorar propriedades acidentais.

A abstração deve ser sempre feita com algum objetivo, porque este determina o que é
e o que não é importante.
Classes
Uma classe descreve um conjunto de objetos com:
● propriedades semelhantes;

● comportamentos semelhantes;

● relacionamentos comuns com outros objetos.

[Link] (1 of 2) [01/09/2000 19:19:20]


Objetos

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] (2 of 2) [01/09/2000 19:19:20]


Relacionamento

● Um relacionamento modela uma conexão física ou conceitual entre objetos;


● Relacionamentos são bidirecionais.

Objetos da classe Conta_bancária estão associados a objetos da classe Cliente.


Relacionamentos - Multiplicidade
Exemplos:
Especifica quantas instâncias de uma classe podem, ao mesmo tempo, ser
relacionadas com uma única instância de uma classe associada.

Às vezes, atributos estão mais ligados com relacionamentos


(ou associações) entre classes, do que com qualquer uma das
classes envolvidas.

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600
[Link] [01/09/2000 19:19:21]
Generalização

Generalização é a abstração que permite compartilhar semelhanças, preservando


diferenças.

Generalização entre Classes


Ao relacionamento entre uma classe e uma ou mais versões refinadas dessa
classe, denominamos de generalização.

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:19:22]


Herança

Herança é um mecanismo para derivar novas classes a partir de classes existentes


através de um processo de efinamento.
Uma classe derivada herda a estrutura de dados e métodos de sua classe "base",
mas pode seletivamente:
● adicionar novos métodos;

● estender a estrutura de dados;

● redefinir a implementação de métodos já existentes.

Uma classe "base" proporciona a funcionalidade que é comum a todas as suas


classes derivadas, enquanto que uma classe derivada proporciona a
funcionalidade adicional que especializa seu comportamento.

Hierarquia de Classes de Contas Bancárias

[Link] (1 of 2) [01/09/2000 19:19:23]


Herança

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] (2 of 2) [01/09/2000 19:19:23]


Variáveis OO

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:19:24]


Polimorfismo OO

Uma operação que pode assumir múltiplas formas, de acordo com a implementação:

● . redefinição da operação de desenhar ("overriding");


● . mesmo nome (desenhar) para 3 funções ("overloading").
For x in X do x .desenhar(); // "late binding"

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:19:25]


Atributos

Produzido por: Equipe Consultoria em Internet (c) 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:19:26]


Operadores

Operadores
No Java os operadores são muito similares ao estilo e funcionalidade de
outras linguagens como por exemplo o C e o C++.
Pré-incremento:
x = 10;
x = x + 1;
O valor da variável x é 11
ou
x = 10;
++x
O valor da variável x é 11.
Pós-Incremto:
x = 10;
x = x + 1;
O valor da variável x é 11
ou
x = 10;
x++
O valor da variável x é 11.
Diferença entre o Pré-Incremento e o Pós-Incremento:
x = 10
++x => neste exato momento a variável a vale 11
x =10
x++ => neste exato momento a variável x vale 10
Separadores:
.[]();,
Operadores:

Operadores Descrição
== Igualdade
!= Negação
+-*/ Aritméticos
&& e
|| ou

[Link] (1 of 2) [01/09/2000 19:19:27]


Concatenação

O operador + é utilizado para concatenar objetos do tipo String, produzindo uma nova
String:
String PrimeiroNome = "Antonio";
String SegundoNome = "Carlos";
String Nome = PrimeiroNome + SegundoNome;
Casting ( Conversão de tipos )
A linguagem Java não suporta conversões arbitrárias de tipos de variáveis. Você deve
explicitar a conversão entre tipos de variáveis.
Exemplo:
long bigval = 6; // Operação válida
int smallval = 99L; // Operação inválida porque são de tipos diferentes
float z = 12.414F; // Operação válida
float zp = 12.414; // Operação inválida porque esta tentando atribuir um valor double.
Convertendo
Long bigValue = 99L;
Int squashed = (int)(bigValue);

Produzido por: Equipe Consultoria em Internet © 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:19:28]


Fluxos de Controle

Declarações de Fluxos
If, else
if (expressão) // expressão cujo retorno é um valor do tipo boolean
{ Declarações ou blocos }
else // caso a condição anterior não seja satisfeita
{ Declarações ou blocos }
switch
switch (expressão) // Esta expressão deve ser do tipo int ou char
{
case cond01:
declarações;
break; // usado para sair do case.
case cond02:
declarações;
break;
case cond03:
declarações;
break;
}

for Loops
for (expr_inicial; condição_boolean; incremento)
{
Declarações ou blocos;
}
while Loops
while(condição_boolean)
{
Declarações ou blocos;
}

do Loops
do
{
Declarações ou blocos;
[Link] (1 of 2) [01/09/2000 19:19:28]
Fluxos de Controle

}
while(condição_boolean);

Produzido por: Equipe Consultoria em Internet © 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] (2 of 2) [01/09/2000 19:19:28]


Exercício 02

Exercício 01
public class Prog0301
{
public static void main(String arg[ ])
{
int x = (int)([Link]()*100);
int z ;
int y ;
if (x > 50)
{
y = 9;
}
z = y + x;
}
}
Exercício 02
public class Prog0302
{
public static void main(String arg[ ])

{
int x = (int)([Link]()*100);
int z = 0;
int y = 0;
if (x > 50)
{
y = 9;
}
else
{
[Link]("O valor de x é menor que 50");
y = (int)([Link]() * (3.14));
}
z = y + x;
[Link]("O valor da variável x = " + x);

[Link] (1 of 3) [01/09/2000 19:19:29]


Exercício 02
[Link]("O valor da variável y = " + y);
[Link]("O valor da variável z = " + z);
}
}
Exercício 03
public class Prog0303
{
public static void main(String arg[])
{
int valor = (int)([Link]()*5);
switch(valor)
{
case 0:
[Link]("Primeira Opção (Valor igual a zero)");
break;
case 1:
[Link]("Segunda Opção (Valor igual a um)");
break;
default:
[Link]("Outras Opções (Valor maior que um)");
break;
}
}
}
Exercício 04
public class Prog0304
{
public static void main(String arg[])
{
int valor = (int)([Link]()*5);
while(valor <> 0)
{
valor = (int)([Link]()*5);
[Link]("Valor igual a " + valor);
}
}
}

[Link] (2 of 3) [01/09/2000 19:19:29]


Arrays

Declaração de Arrays
char s [ ];
Point p [ ];
Em Java um Array é uma classe.
Criando um Array
Você pode criar arrays, ligando-o a todos os objetos, usando a palavra new, da
seguinte forma:
s = new char[20];
p = new Point[100];
String names[ ];
names = new String[4];
names[0]= "Georgina";
names[1]="Jen";
names[2]="Simon";
names[3]= "Tom";
ou
String names[ ];
names = new String[4];
String names [ ] = { "Georgina", "Jean", "Simon", "Tom"};

Arrays Multi-dimencionais
Java não possui arrays multi-dimencionais, mas ele permite declarar um array que
é baseado em um outro array.
int twoDim [ ] [ ] = new int [4] [ ] ;
twoDim[0] = new int [5] ;
twoDim[1] = new int [5] ;

[Link] (1 of 2) [01/09/2000 19:19:30]


Exercício 03

classe Prog0401
{
thisArray int;
thatArray int;
public static void main (String args [ ])
{
int[ ] thisArray = {1,2,3,4,5,6,7,8,9,10}
for (int i =0; i < [Link]; i++)
{
[Link]( " Conteúdo do Array " + thisArray[i]);
}
}
}

class Prog0402 {
public static void main(String arg[ ])
{
int A[] = new int[3];
A[0] = 50;
A[1] = 100;
A[2] = 150;
[Link]("Tamanho do vetor = " + [Link]);
int conta;
for(conta = 0; conta< [Link] ; conta++)
{[Link]("indice = " + conta + " valor= " + A[conta] );}
}
}

[Link] (1 of 2) [01/09/2000 19:19:30]


Java Virtual Machine

A JVM é parte do ambiente de Runtime Java é responsável pela interpretação


dos bytecodes (programa compilado em java).
A JVM consiste em conjunto de instruções, conjunto de registradores, a pilha
(stack) e garbage-collected heap e área de memória (armazenamento de
métodos).
Funcões da JVM
● Carregar de forma segura todas as classes do programa (protegendo
contra ataque premeditados, por exemplo, Cavalos de Tróia)
● Verificar se os bytecodes aderem às especificações da JVM e se não
violam a integridade e segurança da plataforma.
● Interpretar o código

Garbage Collection (Libera uma coleção)


O Java não segura áreas de memória que não estão sendo utilizadas, isto
porque ele tem uma alocação dinâmica de memória em tempo de execução.
No C e C++ (e em outras linguagens) o programa desenvolvido é
responsável pela alocação e desalocação da memória.
Durante o ciclo de execução do programa o Java verifica se as variáveis de
memória estão sendo utilizadas, caso não estejam o Java libera
automaticamente esta área, para o uso.
Segurança no Código
Os arquivos do Java são compilados e são convertidos de arquivos texto para
um formato que contém blocos independentes de bytecodes (Código
Intermediário).
Em tempo de execução estes bytecodes são carregados, são verificados
através do Bytecode Verifier (uma espécie de segurança), passam assegurar
para o interpretador e são executados. Caso este código seja acionado
diversas vezes, existe um passo chamado JIT Code Generator, que elimina o
utilização por demasia do tráfego da rede.

[Link] (1 of 2) [01/09/2000 19:19:32]


Java Virtual Machine

Produzido por: Equipe Consultoria em Internet © 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] (2 of 2) [01/09/2000 19:19:32]


Exemplo

class Prog0101
{
public static void main (String arg [])
{ int a = 6, b = 10;
a = a + 1;
[Link](" O valor da variavel a = " + a);
}
}

Após terminar o programa compile-o e execute-o:


javac [Link]
java Prog0101
Comentários
Estes são os três tipos permitidos de comentários nos programas feitos em
Java:
// comentário de uma linha
/* comentário de uma ou mais linhas */
/** comentário de documentação */ (documentação - Javadoc)
Ponto e vírgula, Blocos e o espaço em branco
* No java, os comandos são terminados com o sinal de ponto e vírgula (;)
* Um bloco tem início e tem o seu fim representados pelo uso das chaves
{};
* O uso do espaço em branco permite uma melhor visualização dos
comandos e em consequência facilita a sua manutenção.
Identificadores
Na linguagem Java um identificador é inicializado com uma letra,
sublinhado ( _ ), ou sinal de dólar ($), e existe uma diferenciação entre
letras maiúsculas e minúsculas:
Identificadores válidos:
* identifier
* userName
* User_name
* _sys_var1

[Link] (1 of 2) [01/09/2000 19:19:32]


Exemplo
*$change

Produzido por: Equipe Consultoria em Internet © 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] (2 of 2) [01/09/2000 19:19:32]


Tipos Básicos no Java

No Java existem oitos tipos básicos e um tipo especial.


Tipo Lógico
- boolean: true e false
Tipo Textual
- char e String (String é uma classe)
Um caracter simples usa a representação do tipo char. O tipo char representa
na forma Unicode um caracter de 16-bit.
O literal do tipo char pode ser representado com o uso do (' ').
Exemplo:
A = 'b';
'\n' – nova linha
'\r' – enter
❍ '\u????' – especifica um caracter Unicode o qual é representado na

❍ forma Hexadecimal.

❍ '\t' – tabulação

❍ '\\' - \

❍ '\" "' - ""


Tipo Textual
String (String é uma classe)
O tipo String, como não é primitivo, é usado para representar uma
seqüência de caracteres.
Palavras Reservadas
abstract do implements private throw
boolean double import protected throws
breaak else instanceof public transient
byte extends int return true
case false interface short try
catch final long static void
char finally native super volatile
class float new switch while
continue for null synchronized
default if package this

[Link] (1 of 3) [01/09/2000 19:19:33]


Tipos Básicos no Java
Tipo Integral – byte, short, int e long
Existem quatro tipos de integral:
Tamanho da Integral Nome ou Tipo Espaço
8 bits byte -27 . . . . 27 - 1
16 bits short -215 . . . . 215 - 1
32 bits int -231 . . . . 231 - 1
64 bits long -263 . . . . 263 - 1

Tipo Ponto Flutuante


Uma variável do tipo ponto flutante pode ser declarada usando a
palavar float ou double.
3.14 Um ponto flutuante simples;
6.02E23 Um valor de ponto flutuante largo;
2.718F Um valor de ponto flutuante simples;
123.4E+306D Um valor de ponto flutuante usando o tipo double.
Convenção de Código no Java
Class - Nomes de classes podem ser maiúsculas ou minúsculas ou
misturado (maiúsculas e minúsculas), mas por convenção o
nome das classes começam por letra maiúscalas.;
Interfaces - Nomes de Interfaces suportam nomes iguais aos das
classes;
Métodos - Nomes de métodos podem ser verbos, podendo
misturar entre maiúsculas e minúsculas, sendo entretando a
primeira letra maiúscula;
Constantes - Nomes de constantes podem ser maiúsculas,
minúsculas, misturadas, separadas com underscores.
Variáveis - Todas as instancias, classes e variáveis globais
suportam maiúsculas e minúsculas.
Controles de Estruturas- Convencionou-se o uso de { }
(chaves);
Espaços - Convencionou-se o uso de quatro espaços para
identações;
Comentários - Use os comentários para explicar os segmentos de
código que não são obvios.

[Link] (2 of 3) [01/09/2000 19:19:33]


Exercício 01

Exercício 01
class Prog0201
{
public static void main (String arg [])
{ int a = 5, b = 10;
a = a + 5;
// b = b*2;
[Link]("Valor da variavel a: " + a);
[Link](" Valor da variavel b: " + b);
}
}

Exercício 02
class Prog0202
{
public static void main (String arg [])
{ int a = 5, b = 10;
a = a + 5;
b = b*2;
[Link]("Valor da variavel a: " + a);
[Link](" Valor da variavel b: " + b);
}
}

Produzido por: Equipe Consultoria em Internet © 2000


Este Web Site será melhor visualiazado em monitor com resolução 800 x 600

[Link] [01/09/2000 19:19:33]

Você também pode gostar