Escolar Documentos
Profissional Documentos
Cultura Documentos
Prog Avancada Java 0405 PDF
Prog Avancada Java 0405 PDF
EM JAVA
F. Mrio Martins
2004/2005
JAVA AVANADO 1
JAVA Avanado 1
CLASSES JAVA DE TIPO PARTICULAR
4 JAVA AVANADO
CLASSES MEMBRO ESTTICAS
Uma classe deste tipo comporta-se como uma classe normal de alto
nvel, excepto no facto de que tem acesso a todos os membros static
da classe que a inclui, ou seja, s variveis e mtodos de classe
desta e, tambm, de outras classes static igualmente includas na
principal. Para alm destes, a classe static pode ainda aceder s
variveis de instncia definidas como private na classe principal,
ainda que no as possa referenciar usando this. O inverso tambm
verdadeiro, isto , a classe principal tem mesmo acesso a todos os
membros da classe esttica.
// variveis de instncia
private Entry header = new Entry(null, null, null);
private int size = 0;
// construtores
public LinkedList() {
header.next = header.previous = header;
}
6 JAVA AVANADO
public LinkedList(Collection c) {
this();
this.addAll(c);
}
JAVA AVANADO 7
private static class Entry {
// variveis de instncia
Object element;
Entry next;
Entry previous;
// construtor
8 JAVA AVANADO
// outros mtodos de instncia sem corpo
JAVA AVANADO 9
Recorrendo aos mtodos desta classe auxiliar, o cdigo dos
mtodos de instncia de LinkedList, tornam-se muito mais simples
e claros, desde que compreendida a definio da classe auxiliar.
10 JAVA AVANADO
relativa da classe Produto que foi anteriormente definida para que
mais facilmente pudssemos definir a classe MaquinaVenda. Ou
seja, Produto, sendo uma classe especfica que no apresenta
qualquer interesse particular para que seja acrescentada ao
ambiente JAVA, poderia ter sido definida como uma inner class da
classe MaquinaVenda.
JAVA AVANADO 11
Consideremos que pretendamos criar uma fila de espera genrica
sob a forma de uma lista ligada de clulas, classe que designaremos
por FilaLigada.
import java.util.*;
12 JAVA AVANADO
Note-se que a classe FilaLigada no declara implementar qualquer
interface. Porm, a interface Ligavel uma declarao interna
prpria classe, pelo que os mtodos de instncia podem usar os dois
mtodos especificados, daSeguinte() e fixaSeguinte(). Tero mesmo
que o fazer j que as variveis de instncia de FilaLigada,
designadas frente e cauda, so do tipo Ligavel.
// variveis de instncia
public FilaLigada() {
frente = null;
cauda = null;
dim = 0;
}
JAVA AVANADO 13
// mtodos de instncia de FilaLigada
// variveis de instncia
private String nome;
private FilaLigada.Ligavel seguinte;
// construtor
public LigavelString(String s) {
this.nome = s; this.seguinte = null;
}
// mtodos de instncia
JAVA AVANADO 17
Assim, tal como se pode verificar atravs da classe exemplo
LigavelString, qualquer classe que pretenda ver as suas clulas
inseridas e manipuladas segundo uma FilaLigada, apenas definir
a estrutura de tais clulas e o cdigo dos dois mtodos que
implementam Ligavel.
import java.lang.*;
public class TstFilaLigada {
18 JAVA AVANADO
// teste de FilaLigada
System.out.println(fila1.size());
fila1.remove();
JAVA AVANADO 19
.......................................
20 JAVA AVANADO
FilaLigada$Ligavel.class que contm a implementao da
interface esttica contida na definio da classe.
JAVA AVANADO 21
Enquanto que static member classes de uma dada classe podem ser
quer classes quer interfaces, apenas classes pode ser member
classes, dado que as interfaces no permitem criar instncias.
22 JAVA AVANADO
Analisado mais em pormenor o cdigo da classe Vector, verifica-se
que a classe VectorEnumerator se encontra, de facto, definida no
mesmo ficheiro fonte da classe Vector, e com atributos que no a
tornam pblica, sendo o seu cdigo o seguinte:
final class VectorEnumerator implements Enumeration {
Vector vector;
int count;
public VectorEnumerator(Vector v) {
vector = v;
count = 0;
}
JAVA AVANADO 23
Trata-se, portanto, de uma inner class do tipo member class da
classe Vector, que se encontra definida no ficheiro fonte Vector.java,
e que serve de auxiliar para a implementao dos mtodos
necessrios transformao de um Vector numa Enumeration.
24 JAVA AVANADO
CLASSES LOCAIS
JAVA AVANADO 25
public Enumeration enumera() {
26 JAVA AVANADO
instncia de que ambos fazem parte, neste caso, uma instncia de
FilaLigada.
CLASSES ANNIMAS
JAVA AVANADO 27
Obedecem a uma estrutura sintctica simples tal como:
28 JAVA AVANADO
CLASSES ESPECIAIS DE JAVA
JAVA AVANADO 29
listas quer conjuntos, bem como correspondncias de 1 para 1 ou 1
para n, designadas por mappings.
Uma applet, donde quer que possa ter sido adquirida, ter sempre
uma execuo segura, pois no tem acesso ao sistema de ficheiros
do utilizador.
Talvez por esta razo, desde JAVA 1.2 que fornecido o package
javax.Swing, que vem, em muito, facilitar a criao de interfaces
JAVA AVANADO 33
grficas com o utilizador, dado que segue o modelo MVC, herdado
de Smalltalk, modelo segundo o qual a ligao da camada interactiva
camada computacional realizada de forma estruturada, ainda
que baseada na troca de eventos. Adicionalmente, aspectos de look
and feel so j contemplados.
34 JAVA AVANADO
SNTESE e OUTROS EXEMPLOS:
INNER CLASSES
// cdigo de Stack
...................................
JAVA AVANADO 35
public Enumeration enumerator() {
return new StackEnum();
}
36 JAVA AVANADO
ANONYMOUS CLASSES
CONTEXTO:
JAVA AVANADO 37
OUTER
CLASS
INNER
CLASS
38 JAVA AVANADO
/** Constructs an empty list. */
public LinkedList() {
header.next = header.previous = header;
}
/** Constructs a list containing the elements of the specified collection, in the
order they are returned by the collection's iterator.
*/
public LinkedList(Collection c) {
this();
this.addAll(c);
}
Object element;
Entry next;
Entry previous;
JAVA AVANADO 39
Entry(Object element, Entry next, Entry previous) {
this.element = element;
this.next = next;
this.previous = previous;
}
}
40 JAVA AVANADO
private class ListItr implements ListIterator {
ListItr(int index) {
if (index < 0 || index > size)
throw new IndexOutOfBoundsException();
if (index < (size >> 1)) { // size/2
next = header.next;
for (nextIndex=0; nextIndex<index;nextIndex++)
next = next.next;
}
else {
next = header;
for (nextIndex=size; nextIndex>index;
nextIndex--)
next = next.previous;
}
}
JAVA AVANADO 41
public boolean hasNext() {
return nextIndex != size;
}
42 JAVA AVANADO
JAVA Avanado 2
JDBC (Java DataBase Connectivity) API
JAVA AVANADO 43
A arquitectura JDBC possui dois conjuntos principais de interfaces:
44 JAVA AVANADO
A R QU IT E C T U R A GE R A L D E A C E S S O A D A D OS C OM J D B C
DRIVERS
GESTOR JDBC API
JDBC
Gateway
Drivers JDBC-ODBC Driver A Driver B
JDBC-Net
Driver ODBC e
Driver SGBD
Protocolos
Clssicos Protocolos Propietrios de Acesso s BDs
JAVA AVANADO 45
JDBC drivers podem ser classificados em 4 categorias, tal como
ilustrado nas figuras seguintes:
46 JAVA AVANADO
2) Drivers puros de tecnologia JDBC ligam a middleware
especfico, traduzindo chamadas JDBC para os protocolos
intermdios, que por sua vez so traduzidos para os protocolos
usados pelos DBMS. O middleware fornece ligao a mltiplas
distintas bases de dados.
JAVA AVANADO 47
3) O acesso bases de dados faz-se atravs de drivers ODBC cujo
cdigo carregado em cada mquina cliente que usa JDBC-ODBC.
A Sun fornece uma bridge JDBC-ODBC que pode ser usada em
casos experimentais quando nenhum driver est disponvel.
48 JAVA AVANADO
4) Driver para API nativa, que converte chamadas JDBC em
chamadas da API de Oracle, Sybase, DB2, Informix, etc.
JAVA AVANADO 49
DATA SOURCE OBJECTS
50 JAVA AVANADO
A JDBC API est includa nas plataformas J2SE e J2EE
Nestas plataformas qualquer aplicao pode aceder a dados
contidos nas mais diversas bases de dados, quer locais quer
remotas, de uma forma quase transparente.
JAVA AVANADO 51
ARQUITECTURAS TPICAS: VISTA DA PROGRAMAO
J D B C - M o d e lo d e 2 c a m a d a s
" T w o - t ie r " M o d e l
Es p a o d a A p lic a o
A p lic a o J A V A
J D B C D R IV E R
SQ L CO M M AND R e s ult S e t
Ba s e de D a d os
52 JAVA AVANADO
J D B C - M o d e lo s d e 3 c a m a d a s
" T h r e e - t ie r " M o d e l
E s p a o d a A p l ic a o
A p l ic a o J A V A
J D B C /O D B C D R I V E R
S Q L C O M M AN D R E S U LT S E T
A P P L IC A T IO N S E R V E R
( M ID D L E W A R E c f . O D B C / J D B C D r iv e r , e t c . )
P r o t o c o l o P r o p r ie t r i o
Ba se de Dados
JAVA AVANADO 53
DESENVOLVIMENTO DE APLICAES COM JDBC
java.sql.DriverManager
java.sql.Connection
java.sql.Statement
java.sql.ResultSet
java.sql.SQLException
java.sql.ResultSetMetaData
54 JAVA AVANADO
TEMPLATES TPICOS
try {
Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);
}
catch(ClassNotFoundException e) {
// tratamento do erro
}
JAVA AVANADO 55
// abrir a ligao atravs de
DriverManager.getConnection(String url);
DriverManager.getConnection(String url, String pass, String user);
DriverManager.getConnection(String url, Properties.info);
Ex:
Connection sessao1;
try {
sessao1 =
DriverManager.getConnection(jdbc:odbc:Catalogo,, );
}
catch(SQLException e) {
// tratamento do erro
}
56 JAVA AVANADO
PASSO 2: Criar e Enviar comandos SQL.
String strSql = SELECT titulo FROM livros WHERE ano > 2000;
Statement instrucao1;
ResultSet result;
try {
instrucao1 = sessao1.createStatement();
result = instrucao1.executeQuery(strSql);
}
catch(SQLException exc) { }
JAVA AVANADO 57
e tambm, cf. java.sql.Statement
// processar resultados
while( result.next() ) { // iterao sobre linhas
System.out.println(Tipo: + result.getInt(type_id)); ........
}
// fechar ligaes
sessao1.close();
58 JAVA AVANADO
JAVA Avanado 3
JAVA AVANADO 59
QUESTES BSICAS ESSENCIAIS:
60 JAVA AVANADO
Para executar uma aplicao web o cliente necessita de ter um
web browser e o servidor necessita de ter software de servio
(servidor) web;
62 JAVA AVANADO
Uma JSP ou java server page HTML com cdigo Java
embebido. Quando uma JSP solicitada, convertida numa
servlet e compilada pela mquina/motor JSP.
Uma servlet uma classe Java cujas instncias so
executadas no servidor. Para aplicaes web, uma servlet
uma subclasse da classe HttpServlet. Curiosamente, para
uma servlet passar HTML ao browser, usa o mtodo
println() para criar a String correcta em geral sobre uma
PrintWriter.
Numa aplicao web de Java, servlets so usados para realizar
os processamentos necessrios e JSPs para criar as pginas
HTML.
JAVA AVANADO 63
ARQUITECTURA JAVA SERVLETS 2.2
HttpServlet
doDelete()
Request
doGet()
doOptions()
Response service()
Cliente - doPost()
WebBrowser doPut()
Servidor Web
doTrace()
64 JAVA AVANADO
CONFIGURAES CONCRETAS
JAVA AVANADO 65
Quando se usa a Internet como meio de comunicao entre
cliente e servidor, necessrio ter um web server para alm
do servidor de JSP e de servlets.
Como em qualquer outra aplicao, uma aplicao web deve
ser divida em trs camadas: apresentao, lgica e dados.
66 JAVA AVANADO
APLICAO TPICA JAVA WEB
JAVA AVANADO 67
JSP JAVA SERVER PAGES vs. ASP
ASP JSP
Plataformas Windows Windows, Mac, Linux
Web Server IIS ou PWS Qualquer
Cross-platform comp. No Beans, Ebeans, JSP+
Segurana - crashes No Sim
Proteco de Memria No Sim
Linguagem de Script. VBScript, JScript JAVA, JScript
Legacy Databases Sim (COM) SIM (JDBC)
Integrao com BDs Via ODBC Via ODBC/JDBC
Componentes COM Beans, Ebeans, JSP+
Ferramentas Sim Sim
68 JAVA AVANADO