Escolar Documentos
Profissional Documentos
Cultura Documentos
1213 Java
1213 Java
Objectivos
Aprender a desenvolver programas em linguagem Java:
utilizar os principais utilitrios do kit de desenvolvimento para Java (JDK) verso 1.4.2. desenvolver interfaces grficas em linguagem Java recorrendo aos packages AWT e Swing. conhecer e utilizar as principais funcionalidades disponveis nos packages de coleces, entrada e sada de dados, acesso a dados de bases de dados e acesso a dados remotos.
Utilizar o Eclipse como ambiente de desenvolvimento (IDE). Consolidao dos conhecimentos transmitidos atravs da sua aplicao na resoluo de exerccios prticos.
Contedos
Parte 1: Introduo ao Java e Classes fundamentais Parte 2: Collections e Entrada/sada de dados Parte 3: Interfaces grficas com Swing Parte 4: Acesso a dados remotos por JDBC e HTTP
Bibliografia
Object-oriented Design With Applications", Grady Booch,, The Benjamin/cummings Publishing Company Inc., 2nd Edition, Redwood City, California, 1995. The Java Programming Language", K. Arnold, J. Gosling, Adisson-Wesley, 2nd Edition, 1998, ISBN 0-201-31006-6. "Java in a Nutshell", Flanagan, David, O'Reilly & Associates, 2004. "Java Examples in a Nutshell", Flanagan, David, 3rd edition, O'Reilly & Associates, 2004. Eclipse: Eclipse Rich Client Platform: Designing, Coding, and Packaging Java Applications, Jeff McAffer, JeanMichel Lemieux, Eclipse series, Addison-Wesley, 2005.
FEUP Ademar Aguiar Java: linguagem, APIs, boas prticas e Eclipse 4
Parte 1
Introduo ao Java
Objectivos
Identificar os elementos principais do Java Descrever a Java Virtual Machine (JVM) Comparar a utilizao do Java para a construo de applets e de aplicaes Identificar os componentes principais do Java Development Kit (JDK) Descrever as opes de instalao do Java (deployment)
O que o Java?
Concebido pela Sun para a electrnica de consumo, mas rapidamente alcanou a WWW. Uma linguagem orientada por objectos e um conjunto de bibliotecas de classes (frameworks). Utiliza uma mquina virtual para a execuo de programas.
Independente da Plataforma
O cdigo Java armazenado num ficheiro .java Um programa .java compilado para ficheiros .class Bytecodes so interpretados em tempo de execuo
Linguagem e Compilador
Verificador de Bytecode
Carregador de Classes
Interfaces especficas
11
Applets Java
A forma mais comum de utilizao do Java, inicialmente Vocacionada para utilizao em pginas HTML Pode incluir contedos activos (forms, udio, imagens, vdeo) Aparece num browser e pode comunicar com o servidor
12
Aplicaes Java
Instalao no lado do cliente
JVM corre em aplicaes autnomas No necessita de carregar classes pela rede
13
Operating system
Browser
JVM
JVM
Application
Applet
14
15
16
Client
Application server
Data server
17
Resumo
O cdigo Java compilado para bytecodes independentes da plataforma. Os bytecodes so interpretados por uma JVM. As applets correm num browser no cliente. As aplicaes Java so executadas de forma autnoma tanto no cliente como no servidor.
18
19
Objectivos
Conhecer os elementos principais do Java Conhecer a sntaxe bsica do Java Descrever ficheiros .java e .class
20
Tpicos
Componentes Java Convenes Classes, objectos e mtodos Utilizao de Javadoc Compilar e executar programas Java
21
22
23
24
Convenes de Nomes
As convenes incluem: Nomes de ficheiros (Palavras capitalizadas)
Customer.java, RentalItem.java
25
Convenes de Nomes...
Standard para variveis
customerName, customerCreditLimit
26
Definio de Classes
A definio de classes normalmente inclui:
Modificador de acesso: public, private A palavra-chave class Campos das instncias Construtores Mtodos das instncias Campos da classe Mtodos da classe
27
Definio de Classes...
public class Customer { // Instance variveis String customerName; String customerPostalCode; float customerAmountDue; // Instance mtodos float getAmountDue (String cust) { } }
Declarao
Varivel de Instncia
Mtodo da Instncia
28
Definio de Mtodos
Sempre dentro de uma classe Especificam:
Modificador de acesso Palavra-chave static Argumentos Tipo de retorno
29
Definio de Mtodos
float getAmountDue (String cust) { // mtodo variveis int numberOfDays; float due; float lateCharge = 1.50; String customerName; // mtodo body numberOfDays = this.getOverDueDays(); due = numberOfDays * lateCharge; customerName = getCustomerName(cust); return due; } Declarao
Variveis de mtodo
30
Variveis e Constantes
Devem ser declaradas antes de ser utilizadas Uma declarao por linha No incio de um bloco de cdigo O bloco de cdigo define o mbito A inicializao imediata opcional
31
Variveis e Constantes
float getAmountDue (String cust) { float due = 0; int numberOfDays = 0; float lateFee = 1.50; {int tempCount = 1; // new code block due = numberOfDays * lateFee; tempCount++; } // end code block return due; }
Variveis de mtodo
Variveis temporrias
32
public class SayHello { public static void main(String[] args) { System.out.println("Hello world"); } }
33
Criao de instrues
As instrues terminam sempre com um ponto-e-vrgula (;) Instrues compostas so definidas dentro de chavetas { }. Utilizar chavetas para instrues de controlo.
34
35
Resumo
O JDK fornece as ferramentas Java essenciais. O JDK fornece um conjunto valioso de classes e mtodos pr-definidos. Os programas Java so constitudos por classes, objectos, e mtodos. A adopo de normas de programao facilita a leitura e reutilizao de cdigo.
36
Exerccios
Ex1. Instalar JDK 1.4.2_05 Ex2. HelloWorld Ex3. Instalar Eclipse 3.1.1 Ex4. FizzBuzz Ex5. Echo Ex6. Reverse Echo Ex7. Factorial
37
38
Objectivos
Descrever os tipos de dados primitivos Declarar e inicializar variveis primitivas Utilizar operadores para manipular o valor de uma varivel primitiva
39
Tpicos
O Java oferece primitivas para os tipos de dados bsicos. As primitivas so a fundao para armazenar e utilizar informao. Declarar e inicializar primitivas a base da construo de tipos definidos pelo utilizador. Os operadores manipulam dados e objectos. Aceitam um ou mais argumentos e produzem um valor. Java oferece 44 operadores diferentes. Alguns operadores alteram o valor do operando.
40
Variveis
A varivel a unidade bsica de armazenamento. As variveis devem ser declaradas explicitamente. Cada varivel tem um tipo, um identificador, e um mbito. As variveis podem ser inicializadas.
41
Nomes de Variveis
Os nomes das variveis devem comear por uma letra do alfabeto, um underscore, ou um $. Os outros caracteres podem incluir digitos. Deve-se utilizar nomes elucidativos para as variveis; por exemplo, customerFirstName, ageNextBirthday.
9
a itemCost item$Cost item_Cost _itemCost itemCost2 item#Cost item*Cost 2itemCost
8
item-Cost abstract
42
Palavras Reservadas
boolean byte char double float int long short void false null true
abstract final native private protected public static synchronized transient volatile
break case catch continue default do else finally for if return switch throw try while
class extends implements interface throws import package instanceof new super this
43
Tipos de Variveis
Oito tipos de dados primitivos:
Seis tipos numricos Tipo char, para caracteres Tipo Booleano, para valores verdadeiro ou falso
44
char
true false
45
Declarao de Variveis
A forma bsica de declarao de uma varivel: tipo identifier [ = valor]
public static void main(String[] args) { int itemsRented; float itemCost; int i, j, k; double interestRate; }
46
Declarao de Variveis
As variveis locais esto contidas apenas num mtodo ou bloco de cdigo. As variveis locais devem ser inicializadas antes de ser usadas.
class Rental { private int instVar; // instance varivel public void addItem() { float itemCost = 3.50; // local varivel int numOfDays = 3; // local varivel } }
47
Literais Nmericos
0 1 42 -23795 02 077 0123 Literais Inteiros 0x0 0x2a 0X1FF 365L 077L 0x1000L 1.0 4.2 .47 1.22e19 4.61E-9 6.2f 6.21F
Literais Floating-point
48
Literais no-Nmericos
true
"Hello, world\n"
49
50
Operadores
Cinco tipos de operadores: Atribuio Aritmticos Manipulao de bits Relacionais Booleanos
51
Operador de Atribuio
A expresso da direita atribuda varivel da esquerda:
int var1 = 0, var2 = 0; var1 = 50; // var1 now equals 50 var2 = var1 + 10; // var2 now equals 60
A expresso da direita sempre avaliada antes da atribuio. As atribuies podem ser agrupadas:
var1 = var2 = var3 = 50;
52
Operadores Aritmticos
Realizam operaes aritmticas bsicas Operam sobre variveis e literais nmericos
int a = b = c = d = e =
53
Operadores Aritmticos...
A maioria das operaes resultam num int ou long:
byte b1 = 1, b2 = 2, b3; b3 = b1 + b2; // error: result is an int // b3 is byte
Valores byte, char, e short so promovidos a int antes da operao. Se algum argumento for long, o outro promovido a long, e o resultado long.
54
Converses e Casts
O Java converte automaticamente valores de um tipo numrico para outro tipo maior.
byte
byte
short
int
long
55
Incrementar e Decrementar
O operador ++ incrementa 1 unidade:
int var1 = 3; var1++;
Comparaes
Operadores relacionais e de igualdade:
> >= < <= == != greater than greater than or equal to less than less than or equal to equal to not equal to
int var1 = 7, var2 = 13; boolean res = true; res = (var1 == var2); res = (var2 > var1);
57
Operadores Lgicos
Os resultados de expresses Booleanas podem ser combinados usando operadores lgicos:
&& || ^ ! & | e (with / without short-circuit evaluation) or (with / without short-circuit evaluation) exclusive or not
int var0 = 0, var1 = 1, var2 = 2; boolean res = true; res = (var2 > var1) & (var0 == 3); res = !res;
58
Atribuio Composta
O operador de atribuio pode ser combinado com qualquer operador binrio convencional:
double total=0, num = 1; double percentage = .50; total = total + num; total += num; total -= num; total *= percentage;
// // // //
is is is is
59
Precedncia de Operadores
Order 1 2 3 4 5 6 7 8 9 10 11 12 13 Operators ++ -- + - ~ !(type) * / % + - + << >> >>> < > <= >= instanceof == != & ^ | && || ?: = op= Comments Unary operadores Multiply, divide, remainder Add, subtract, add string Shift (>>> is zero-fill shift) Relational, tipo compare Equality Bit/logical e Bit/logical exclusive OR Bit/logical inclusive OR Logical e Logical OR Conditional operador Assignment operadores Assoc. R L L L L L L L L L L R R
60
Precedncias
A precedncia de um operador determina a ordem pela qual os operadores so executados:
int var1 = 0; var1 = 2 + 3 * 4;
Operadores com a mesma precedncia so executados da esquerda para a direita (ver nota):
int var1 = 0; var1 = 12 - 6 + 3; // var1 now equals 9
61
Concatenao de Strings
O operador + cria e concatena strings:
name = "Jane "; lastName = "Hathaway"; fullName; name + lastName; // name is now //"Jane Hathaway" // OR name += lastName ; // same result fullName = name;
62
Resumo
O Java tem oito tipos de dados primitivos. Uma varivel deve ser declarada antes de ser usada. O Java dispe de um bom conjunto de operadores. Casting explcitos podem ser necessrios se utilizar tipos de dados menores do que int. Os operadores + e += podem ser usados para criar e concatenar strings.
63
Exerccios...
64
65
Objectivos
Ser capaz de: Utilizar construes para tomar decises Realizar ciclos de operaes
66
Tpicos
O cdigo por defeito executa sequencialmente. Cdigo mais complexo exige uma execuo condicional. Existem instrues que necessitam de ser executadas repetidamente. O Java dispe de mecanismos de controlo standard.
67
Sequencial
Seleco
Iterao
Transferncia
68
69
if ... else
if ( boolean_expr ) statement1; [else] statement2; if (i % 2 == 0) System.out.println("Even"); else System.out.println("Odd"); if (i % 2 == 0) { System.out.println(i); System.out.println(" is even"); }
FEUP Ademar Aguiar Java: linguagem, APIs, boas prticas e Eclipse 70
Forma geral:
Exemplos:
if...if...if...else if...else
if (speed >= 25) if (speed > 65) System.out.println("Speed over 65"); else System.out.println("Speed over 25"); else System.out.println("Speed under 25"); if (speed > 65) System.out.println("Speed over 65"); else if (speed >= 25) System.out.println("Speed over 25"); else System.out.println("Speed under 25");
71
Operador Condicional ( ? : )
( boolean_expr ? expr1 : expr2)
boolean_expr ? expr1 : expr2
uma alternativa til ao ifelse: Se boolean_expr=true, o resultado expr1, seno o resultado expr2:
int val1 = 120, val2 = 0; int highest; highest = (val1 > val2) ? 100 : 200; System.out.println("Highest value is " + highest);
72
73
switch...case
til para seleccionar um entre vrios valores inteiros alternativos
switch ( integer_expr ) { case constant_expr1: statement1; break; case constant_expr2: statement2; break; [default: statement3; break;] }
FEUP Ademar Aguiar Java: linguagem, APIs, boas prticas e Eclipse 74
switch...case
As etiquetas de case devem ser constantes. Utilizar break para saltar fora do switch. Dar sempre uma alternativa default.
switch (choice) { case 37: System.out.println("Coffee?"); break; case 45: System.out.println("Tea?"); break; default: System.out.println("???"); break; }
75
Ciclos
Em Java existem trs tipos de ciclos:
while dowhile for
76
while...
O while o mais simples de todos os ciclos: Exemplo:
77
dowhile
Os ciclos dowhile tm o teste no fim do ciclo: Exemplo:
do statement; while ( termination );
78
for...
Os ciclos for so os mais comuns:
for ( initialization; termination; iteration ) statement;
Exemplo:
for (i = 0; i < 10; i++) System.out.println(i);
79
for...
Podem ser declaradas variveis na parte de inicializao do ciclo for:
for (int i = 0; i < 10; i++) System.out.println("i = " + i);
As partes de inicializao e iterao podem consistir de uma lista de expresses separadas por vrgulas:
for (int i = 0, j = 10; i < j; i++, j--) { System.out.println("i = " + i); System.out.println("j = " + j); }
80
81
break
Interrompe um ciclo ou uma instruo switch: Transfere o controlo para a primeira instruo depois do corpo do ciclo ou instruo switch Pode simplificar o cdigo
while (age <= 65) { balance = (balance+payment) * (1 + interest)); if (balance >= 250000) break; age++; }
82
continue
Apenas pode ser usado em ciclos Abandona a iterao em curso e salta para a prxima iterao do ciclo
for (int year = 2000; year < 2099; year++) { if ((year % 100 == 0) && (year % 400 != 0)) continue; if (year % 4 == 0) System.out.println(year); }
83
84
Resumo
A intruo if...else a forma principal de implementar decises. Java tambm dispe de instruo switch. Java oferece trs instrues de ciclos:
while dowhile for
85
Exerccios...
86
87
Tpicos
Objectos: estado, comportamento Classes Encapsulamento Agregao: hierarquia de objectos Herana: hierarquia de classes Polimorfismo
88
89
O que um Objecto?
Definio filosfica: uma entidade que pode ser identificada Na terminologia
OO: uma abstraco de um objecto real empresarial: uma entidade relevante para o domnio de aplicao software: uma estrutura de dados e as funes associadas
90
Operao: escrever
Operao: levantamento
FEUP Ademar Aguiar Java: linguagem, APIs, boas prticas e Eclipse 91
Os Objectos so Abstraces
No modelo de um objecto, apenas necessrio incluir operaes e atributos que so importantes para o problema em questo.
Exemplo de uma operao que no interessa incluir: apontar-a Exemplos de atributos que no interessam incluir: comprimento do bico fabricante da tinta idade
93
Encapsulamento
O encapsulamento permite ocultar como as coisas funcionam e o que se sabe para alm da interfaceas operaes de um objecto. Uma caixa Multibanco um objecto que entrega dinheiro aos seus utilizadores:
A caixa MB encapsula isto para os seus utilizadores. Violar o encapsulamento considerado um roubo ao banco.
94
Hierarquias de objectos
Os objectos so compostos por outros objectos. Os objectos podem fazer parte de outros objectos. Esta relao entre objectos conhecida por agregao.
Um banco pode ser um objecto. Uma caixa MB pode ter um teclado, leitor de cartes, dispensador de notas, todos podendo ser objectos.
Um banco pode ter uma caixa MB que tambm pode ser um objecto.
95
Quando se cria a minha caneta azul, no necessrio especificar as suas operaes e atributos. Basta simplesmente indicar a classe a que pertence.
96
97
98
Herana
Podem existir semelhanas entre classes distintas. Deve-se definir as propriedades comuns (atributos, operaes) entre classes numa superclasse comum.
Conta
Conta Poupana
99
Relao Is-a-Kind-of
Um objecto de uma subclasse -um-tipo-de objecto de uma superclasse. Uma subclasse deve ter todo o comportamento da superclasse.
Conta
Caneta
Conta Poupana
Lpis
FEUP Ademar Aguiar Java: linguagem, APIs, boas prticas e Eclipse 100
Polimorfismo
O polimorfismo a capacidade de um nico nome poder referir objectos de classes diferentes, se relacionadas por uma superclasse comum O polimorfismo surge quando a linguagem de programao simultaneamente suporta herana e a associao dinmica de tipos (late binding)
101
Polimorfismo...
O polimorfismo permite que uma operao possa existir em diferentes classes. Cada operao tem um mesmo significado mas executada de forma particular.
Transportar passageiros
102
Resumo
Um objecto uma abstraco de objecto real. Uma classe um molde ou frma de objectos. As classes formam rvores de herana; as operaes definidas numa classe so herdadas por todas as suas subclasses. O polimorfismo liberta quem invoca uma operao de conhecer a classe exacta do objecto que a ir receber.
103
104
Objectivos
Utilizar packages para agrupar classes relacionadas Definir variveis e mtodos de instncias Criar objectos e invocar mtodos Utilizar as palavras public, private e protected Redefinir mtodos de uma classe (overloading) Escrever construtores Utilizar variveis e mtodos de classes
105
Tpicos
As classes definem as caractersticas, atributos e comportamento dos objectos. Todo o cdigo Java reside em classes. Toda a informao dos objectos armazenada em variveis. Os packages auxiliam a controlar o acesso a classes. O overloading permite ter interfaces simples. Os construtores garantem consistncia na criao de objectos.
106
Classes Java
Objectos Mtodos
Package
107
Packages
AcmeVideo
Copy
Title Rental
AcmeVideo
108
Controlo de Acesso
AcmeVideo AcmeTools
protected private
public
public
109
Classes e Objectos
Movie Cada objecto uma instncia de uma classe. public void displayDetails() public void setRating() private String title; private String rating;
110
Criao de Objectos
Os objectos so criados pelo operador new:
objectRef = new ClassName();
111
new
O operador new realiza o seguinte:
Aloca memria para o novo objecto Invoca um mtodo especial da classe para inicializao de objectos, um constructor Retorna uma referncia para o novo objecto
mov1
112
int i;
Movie mov1;
i
int j = 3;
mov1 null
Movie mov1 = new Movie();
mov1
113
A referncia null
As referncias para objectos tm o valor null at serem inicializadas. possvel comparar referncias de objectos a null. Pode-se eliminar um objecto pela atribuio do valor null a uma referncia.
Movie mov1 = null; //Declare object reference if (mov1 == null) //Ref not initialized? mov1 = new Movie(); //Create a Movie object mov1 = null; //Forget the Movie object
FEUP Ademar Aguiar Java: linguagem, APIs, boas prticas e Eclipse 114
Atribuio de Referncias
A atribuio de uma referncia a outra resulta em duas referncias para o mesmo objecto:
mov1
Movie mov2 = mov1; title: Gone ... rating: PG
mov2
115
Variveis de instncia
As variveis de instncia so declaradas na classe:
public class Movie { public String title; public String rating; }
mov1
mov2
116
); );
118
Mtodos
Um mtodo equivalente a uma funo ou subrotina de outras linguagens:
modifier returnType methodName (argumentList) { // method body }
119
Argumentos de Mtodos
120
public class Movie { private String rating; public String getRating () { return rating; } public void setRating (String r) { this.rating = r; } }
121
122
Encapsulamento
As variveis de instncia devem ser declaradas private. Apenas mtodos de instncia podem ter acesso a variveis de instncia. O encapsulamento permite isolar a interface d uma classe da sua implementao interna.
Movie mov1 = new Movie(); if ( mov1.rating.equals("PG") ) mov1.setRating("PG");
// Error // OK
123
num 150
anObj.aMethod(num); System.out.println("num: " + num); public void aMethod(int arg) { arg if (arg < 0 || arg > 100) 150 arg = 0; System.out.println("arg: " + arg); }
124
mov1
ref2
public void aMethod(Movie ref2) { ref2.setRating("R"); }
125
Overloading de mtodos
Diversos mtodos de uma classe podem ter o mesmo nome. Os mtodos devem ter diferentes assinaturas.
public class Movie { public void setPrice() { price = 3.50; } public void setPrice(float newPrice) { price = newPrice; Movie mov1 = new Movie(); } mov1.setPrice(); } mov1.setPrice(3.25);
126
Inicializao de atributos
As variveis de instncia podem ser inicializadas na sua declarao.
public class Movie { private String title; private String rating = "G"; private int numOfOscars = 0;
A inicializao feita na criao do objecto. Inicializaes mais complexas devem ser colocadas num mtodo construtor.
127
Construtores
Para uma inicializao adequada, a classe deve fornecer construtores. O construtor invocado automaticamente quando o objecto criado:
Normalmente declarado public Tem o mesmo nome da classe No especifica nenhum tipo de retorno
128
Definio de Construtores
public class Movie { private String title; private String rating = "PG"; public Movie() { title = "Last Action "; } public Movie(String newTitle) { title = newTitle; } Movie mov1 = new Movie(); } A classe Movie fornece dois construtores
Movie mov2 = new Movie("Gone "); Movie mov3 = new Movie("The Good ");
129
A referncia this
Os mtodos de instncia recebem um argumento com o nome this, que refere para o objecto corrente.
public class Movie { public void setRating(String newRating) { this.rating = newRating; this } title : null rating: PG title: null rating: null
void anyMethod() { Movie mov1 = new Movie(); Movie mov2 = new Movie(); mov1.setRating("PG");
mov1
mov2
130
public class Movie { private String title; private String rating; public Movie() { this("G"); } public Movie(String newRating) { rating = newRating; } }
131
Variveis de Classe
As variveis de classe pertencem a uma classe e so comuns a todas as instncias dessa classe. As variveis de classe so declaradas como static na definio da classe.
public class Movie { private static double minPrice; private String title, rating; title rating title rating
minPrice
classe Movie
objectos Movie
FEUP Ademar Aguiar Java: linguagem, APIs, boas prticas e Eclipse 132
public class Movie { private static double minPrice = 1.29; private String title, rating; private int length = 0;
133
Mtodos de Classe
Os mtodos de classe so partilhados por todas as instncias. So teis para manipular variveis de classe:
public static void increaseMinPrice(double inc) { minPrice += inc; }
Um mtodo de classe pode ser invocado utilizando o nome da classe ou uma referncia para um objecto.
Movie.increaseMinPrice(.50); mov1.increaseMinPrice(.50);
134
135
Exemplos de Java
Exemplos de mtodos e variveis static:
main() Math.sqrt() System.out.println()
public class MyClass { public static void main(String[] args) { double num, root; root = Math.sqrt(num); System.out.println("Root is " + root); }
136
Variveis final
Uma varivel declarada final uma constante. Uma varivel final no pode ser modificada. Uma varivel final deve ser inicializada. Uma varivel final normalmente pblica para permitir acesso externo.
public final class Color { public final static Color black=new Color(0,0,0); }
137
Garbage Collection
Quando todas as referncia para um objecto so eliminadas, o objecto marcado para ser destrudo.
Garbage collection liberta a memria utilizada pelo objecto.
138
O mtodo finalize()
Se um objecto utilizar um outro recurso (p.e. Um ficheiro), o objecto deve libert-lo. Pode ser fornecido um mtodo finalize(). O mtodo finalize() invocado antes do objecto ser destrudo.
public class Movie { public void finalize() { System.out.println("Goodbye"); } }
139
Resumo
A definio de uma classe especifica as caractersticas comuns de um conjunto de objectos. Um objecto uma instncia de uma classe particular:
Criam-se objectos atravs do operador new. Manipula-se um objecto atravs da invocao de mtodos pblicos de instncia.
Os mtodos de instncia recebem a referncia this Os mtodos podem ter diferentes implementaes As classes fornecem um ou mais construtores para inicializar objectos. Podem ser definidos variveis e mtodos para implementar comportamentos globais classe.
140
Exerccios...
141
Parte 2
142
143
144
145
Framework de Collections
Interoperabilidade entre APIs diferentes Reduz o esforo de aprendizagem de APIs Reduz o esforo de desenho e implementaao de APIs Promove reutilizao de software
146
Ter como base as coleces do Java (Vector, Hashtable) Permitir converso para arrays Java
147
Disponibilidade da JCF
Includa desde o JDK 1.2 http://java.sun.com/docs/books/tutorial/collections/
148
149
Interfaces principais
Collection Set List Map SortedSet SortedMap
150
Classes
Collections Arrays
151
Collection
Um grupo de objectos Principais mtodos:
int size(); boolean isEmpty(); boolean contains(Object); Iterator iterator(); Object[] toArray(); boolean add(Object); boolean remove(Object); void clear();
152
Set
Set herda de Collection Uma coleco de objectos no ordenados No permite elementos duplicados Os mesmos mtodos de Collection
A semntica diferente; obriga a utilizar uma interface diferente.
153
List
List herda de Collection Uma coleco de objectos no ordenados Permite elementos duplicados Principais mtodos:
Object get(int); Object set(int, Object); int indexOf(Object); int lastIndexOf(Object); void add(int, Object); Object remove(int); List subList(int, int); add() inserts remove() deletes
Map
Map no herda de Collection Um objecto que mapeia chaves para valores Cada chave pode ter um valor associado Veio substituir a interface java.util.Dictionary Ordenao pode ser fornecida por classes de implementao Principais mtodos:
int size(); boolean isEmpty(); boolean containsKey(Object); boolean containsValue(Object); Object get(Object); Object put(Object, Object); Object remove(Object); void putAll(Map); void clear();
Map.Entry
Objecto que contm o par chave-valor
- getKey(), getValue()
Thread safety
As coleces retornadas so criadas pelo map
- Quando o map alterado, a coleco tambm alterada.
156
Iterator
Representa um iterador para um ciclo Criado por Collection.iterator() Similar Enumeration
Nomes melhorados Permite a operao remove() no item corrente.
Principais mtodos:
- boolean hasNext() devolve true se a iterao tem mais elementos - Object next() devolve o prximo elemento na iterao - void remove() remove o elemento corrente da coleco
157
ListIterator
A interface ListIterator herda de Iterator Criado por List.listIterator() Adiciona mtodos para
Visitar uma List em qualquer direco Modificar a List durante a iterao
Mtodos adicionados:
hasPrevious(), previous() nextIndex(), previousIndex() set(Object), add(Object)
158
Set: Implementaes
HashSet
Um Set baseado numa hash table
TreeSet
Uma implementao baseada numa rvore binria balanceada Impe ordenao dos elementos
159
List: Implementaes
ArrayList
Uma implementao unsynchronized, sem mtodos legados, baseada num array de tamanho dinmico, tal como Vector
LinkedList
Uma implementao baseada numa lista duplamente ligada Pode ter melhor performance do que a ArrayList se os elementos forem frequentemente inseridos/apagados no meio da lista til para queues e double-ended queues (deques)
Vector
Uma implementao synchronized baseada num array de tamanho dinmico e com mtodos legados adicionais.
160
Map: Implementaes
HashMap
Um Map implementado com base numa tabela de hash Idntico a Hashtable, mas suporta chaves e valores com null.
TreeMap
Uma implementao baseada numa rvore binria balanceada Impe ordenao dos elementos
Hashtable
Uma implementao synchronized baseada numa tabela de hash, com mtodos "legados adicionais.
161
Ordenao
Disponibilizado por Collections.sort() Arrays.sort(Object[]) permite ordenar Arrays SortedSet, SortedMap interfaces
Collections que permitem manter os seus elementos ordenados Os iterators garantem uma visita ordenada
162
Ordenao
Comparable interface
Deve ser implementado por todos os elementos de SortedSet Deve ser implementado por todos as chaves SortedMap int compareTo(Object o) Define uma ordem natural para os objectos de uma classe
Comparator interface
Define uma funo que compara dois objectos Permite esquemas de ordenao diversos int compare(Object o1, Object o2)
163
Operaes no suportadas
Uma classe de implementao pode decidir no suportar um determinado mtodo da interface reportando ento uma excepo em tempo de execuo do tipo UnsupportedOperationException.
164
Modificao de Coleces
Modifiable/Unmodifiable
Modifiable: coleces que suportam operaes de modificao: add(), remove(), clear() Unmodifiable: coleces que no suportam operaes de modificao
Mutable/Immutable
Immutable: coleces que garantem que nenhuma modificao poder ser efectuada por operaes de interrogao: iterator(), size(), contains() Mutable: coleces que no garantem serem imutveis.
165
Thread safety
As Collections, por omisso, NO so thread-safe, por motivos de performance e simplicidade. Solues:
Encapsulated Collections Synchronized Collections
- List list = Collections.synchronizedList(new ArrayList(...));
Unmodifiable Collections
- List list = Collections.unmodifiableList(new ArrayList(...));
Fail-fast iterators
166
Classes Utilitrias
Collections
sort(List) binarySearch(List, Object) reverse(List) shuffle(List) fill(List, Object) copy(List dest, List src) min(Collection) max(Collection) synchronizedX, unmodifiableX factory methods
167
Classes Utilitrias
Arrays (mtodos aplicveis a arrays)
sort binarySearch equals fill asList retorna um ArrayList com os contedos do array
168
Exerccios...
169
Tratamento de Excepes
170
Excepes
Permitem tratar (catch) de forma agradvel os erros que podem acontecer durante a execuo de um programa. Permitem especificam diferentes formas de tratamento de excepes distintas. Oferecem uma forma standard de gerar (throw) erros. Permitem representar como objectos os erros de um programa que podem ser recuperados (exceptions). Permitem criar uma hierarquia extensvel de classes de excepes para um tratamento de erros preciso.
171
Tipos de Excepes/Erros
Excepes (podem ser resolvidos pelo programa):
Erros de I/O (teclado/ floppy / disco / entrada de dados) Erros de rede (internet, LAN) Casting ilegal, desreferenciao de objectos (null), matemtica ndice de array / coleco fora dos limites
172
Exception
AWTException IOException
FileNotFoundException MalformedURLException RemoteException SocketException
RuntimeException
ArithmeticException ClassCastException IllegalArgumentException IndexOutOfBoundsException NullPointerException UnsupportedOperationException
173
unchecked (runtime):
So culpa nossa! (provavelmente) poderiam ter sido evitadas se fossem devidamente analisadas e tratadas no cdigo (verificar situaes de erro). No precisam de ser tratadas, mas faro com que o programa crash no caso de ocorrerem em runtime.
174
175
176
Sntaxe
try { codeThatMightCrash(); } catch (KindOfException exceptionVarName) { // code to deal with index exception
} // optional! finally { // code to execute after the try code, // or exceptions catch code has finished running }
177
178
Try/Catch: Exemplo 1
try { readFile(hardcode.txt); } catch (IOException ioe) {
// code could throw compile-time IOException; must catch. // Ill handle it by printing an error message to the user
closeFile(); }
179
Try/Catch: Exemplo 2
while (true) { int index = kb.readInt(); try { Object element = myCollection.get(index); break; // if I get here, it must have worked!
} catch (IndexOutOfBoundsException ioobe) { // wouldnt have to catch this runtime exception... System.out.print(Bad index; try again.); } }
180
181
182
183
Algumas observaes
No se conseguem tratar alguns erros: porqu? As excepes podem ocorrer em diversas reas:
I/O rede / internet Invocao remota de cdigo Cdigo com reflexo (reflection)
184
Preveno / Debugging
Obrigar os mtodos a lanar checked exceptions obrigaos a serem usados de forma mais cuidadosa. Tcnica de debug interessante: new RuntimeException().printStackTrace(); Asseres (J2SE v1.4): testes booleanos
public void deposit(double amount) { assert amount >= 0.0;
185
Referncias
The Java Tutorial: Exception-Handling.
http://java.sun.com/docs/books/tutorial/java/ nutsandbolts/exception.html
186
Entrada/Sada de dados
187
Objectivos
Aprender a ler dados de ficheiros. Compreender o modelo unificado do Java para I/O. Aprender a serializar objectos. Compreender a base de acesso a recursos em rede, web, wireless, etc.
188
Streams
stream: uma abstraco para uma origem ou destino de dados Os bytes fluem de (input) para (output) streams Podem representar mltiplas fontes de dados:
Ficheiros em disco Outros computadores em rede Pginas web Dispositivos de entrada (teclado, rato, etc.)
189
Hierarquia de Streams
java.io.InputStream
AudioInputStream FileInputStream ObjectInputStream
java.io.OutputStream
ByteArrayOutputStream FileOutputStream ObjectOutputStream
190
Input Streams
Mtodos comuns a todas as input streams:
int read() throws IOException l um byte (caracter) de dados void reset() throws IOException inicia a stream para que os seus bytes possam ser lidos novamente void close() throws IOException notifica a stream de que ela vai deixar de ser usada
191
Output Streams
Mtodos comuns a todas as input streams:
void write(int n) throws IOException escreve um byte (caracter) de dados void flush() throws IOException escreve os bytes que estavam espera para ser escritos void close() throws IOException notifica a stream de que de que ela vai deixar de ser usada
192
// write each letter of string to file for (int ii = 0; ii < str.length(); ii++)
out.write(str.charAt(ii));
193
Filtered Streams
Uma stream que obtm os seus dados de outra stream. Pode-se criar cadeias de streams para combinar as suas capacidades/caractersticas. A stream exterior pode adicionar funcionalidade stream interior, ou melhorar a sua funcionalidade Exemplo do Decorator pattern
InputStream in = new FileInputStream(file.txt); DataInputStream dis = new DataInputStream(in); double number = dis.readDouble();
194
Readers e Writers
Classes utilitrias para ajudar a utilizar streams Colmatam falhas de mtodos em streams e tornam-nas mais robustas. Outro exemplo do Decorator pattern. Os readers so mais comuns do que os writers.
195
java.io.InputStreamReader
public InputStreamReader(InputStream in)
java.io.FileReader
public FileReader(String fileName)
java.io.BufferedReader
public BufferedReader(Reader r) public String readLine() throws IOException
196
Mais funcionalidade
InputStream in = new FileInputStream(hardcode.txt); InputStreamReader isr = new InputStreamReader(in); BufferedReader br = new BufferedReader(isr); String wholeLine = br.readLine();
// or, shorter syntax for reading files... BufferedReader br2 = new BufferedReader( new FileReader(hardcode.txt)); String anotherLine = br2.readLine();
197
198
Serializao
Ler e escrever objectos e o seu estado exacto usando streams. Permitem aos prprios objectos se escreverem em ficheiros, atravs da rede, web, etc. Evita a converso do estado do objecto para um formato textual arbitrrio.
199
java.io.ObjectOutputStream
public ObjectOutputStream(OutputStream out) public void writeObject(Object o) throws IOException
200
201
202
Garantir que todas as variveis de instncia da classe so igualmente serializveis ou temporrias (transient).
203
Variveis temporrias
As variveis de instncia que no precisam de ser guardadas (ou no podem ser serializadas) devem ser declaradas com o modificador transient private transient TextReader in;
204
205
Referncia
The Java Tutorial: I/O. http://java.sun.com/docs/books/tutorial/ essential/io/index.html
206
Exerccios...
207
208
Parte 3
209
Multithreading
210
Objectivos
Explicar os conceitos bsicos de multithreading Criar threads mltiplos Aplicar a palavra reservada synchronized Descrever o ciclo de vida de um thread Usar wait() e notifyAll()
211
212
O que um Thread?
Um thread uma execuo sequencial de um programa. Cada programa tem pelo menos um thread. Cada thread tem a sua prpria pilha, prioridade e conjunto de registos virtuais. Os threads subdividem o comportamento de um programa em subtarefas independentes.
213
214
215
216
A Classe Thread
Mantm o estado de um thread Fornece diversos construtores Fornece diversos mtodos
Thread.currentThread() Thread.sleep() Thread.setName() Thread.isAlive()
217
public static void main (args[] s) { System.out.println("I am thread " + Thread.currentThread().getName()); try {Thread.sleep(5000)} catch (InterruptedException e){} }
218
219
Criar a Classe
public class SleepingThread extends Thread { public void run () { Date startTime = new Date(); try {Thread.currentThread().sleep ((int) (1000 * Math.random()));} catch (Exception es) {} long elapsedTime = new Date().getTime() - startTime.getTime(); System.out.println( Thread.currentThread().getName() + ": I slept for " + elapsedTime + "milliseconds"); }}
220
Instanciar e Executar
public static void main(String[] args) { new SleepingThread().start(); new SleepingThread().start(); System.out.println("Started two threads"); }
Started two threads Thread-1: I slept for 78 milliseconds Thread-2: I slept for 428 milliseconds
221
222
start()
New thread
sleep()
Ready to run
wait() other
notify()
Dead
Running
Blocked
I/O block
223
Bloquear um Thread
Utilizar wait() para bloquear o thread actual. O thread deve conter o monitor do objecto, ie, ser sincronizado (synchronized). O monitor ser desbloqueado quando o wait() for invocado. O thread pode esperar indefinidamente ou por um perodo fixo de tempo. notifyAll() acorda todos os threads bloqueados.
224
Mtodos synchronized
Se um thread invoca um mtodo synchronized, nenhum outro thread pode executar um mtodo sincronizado no mesmo objecto at o primeiro thread completar a sua tarefa.
public class CheckOutFrame extends JFrame { public synchronized void updateElapsedTime() { } public synchronized void computeAverageTime(Date old) { }
225
Mtodos synchronized
public class BankAccount { private double balance; public synchronized void withdraw(double amt) { balance -= amt; } public synchronized void deposit(double amt) { balance += amt; }
226
227
228
229
Escalonamento e Prioridades
Cada thread tem uma prioridade (1 to 10). O escalonamento dependente do sistema operativo.
Um thread de alta prioridade pode interromper um de baixaprioridade. Threads de alta prioridade podem dominar o processador. Threads de prioridade idntica podem ser escalonados de forma circular.
230
Exerccios...
231
Introduo ao Swing
232
233
Objectivos
Aprender a criar interfaces grficas com o utilizador usando Java e Swing Conhecer a hierarquia de componentes grficos do Java Aprender o modelo de eventos do Java
234
235
JOptionPane
Um conjunto de caixas de dilogo para simples entrada/sada de dados
public static void showMessageDialog(Component parent, Object message) Mostra uma mensagem numa caixa de dilogo com um boto OK.
public static void showConfirmDialog(Component parent, Object message) Mostra uma mensagem e uma lista de opes Yes No Cancel
public static String showInputDialog(Component parent, Object message) Mostra uma mensagem e um campo de texto, e retorna o valor introduzido como uma String.
236
Elementos Principais
Components: coisas desenhadas no cran.
Exemplos: boto, caixa de texto, etiqueta.
237
Swing e AWT
Ambas existem no Java actual So fceis de misturar; por vezes ainda se tm que usar ambas.
238
239
240
JFrame
Uma frame uma janela grfica que pode ser usada para conter outros componentes public void setTitle(String title)
define o ttulo da barra da janela.
241
JButton
O componente mais comum
Uma regio de cran que o utilizador pressiona para invocar a execuo de um comando.
242
JLabel
Uma etiqueta de texto uma simples string de texto visualizada no cran de forma grfica para fornecer informao sobre outros componentes. public JLabel(String text)
Cria uma nova etiqueta com o texto dado.
243
JTextField
Um campo de texto como uma etiqueta, mas o texto pode ser editado pelo utilizador. public JTextField(int columns)
Cria um novo campo de texto com um dado nmero de colunas.
244
245
Layout Management!
246
Container
Um contentor um objecto que agrega outros componentes; faz a gesto do seu posicionamento, tamanhos e critrios de redimensionamento. public void add(Component comp) public void add(Component comp, Object info)
Adiciona um componente ao contentor, eventualmente dando informao sobre onde o posicionar.
247
JPanel
Um painel o contentor mais usado. public JPanel()
Constri um novo JPanel com um flow layout manager por omisso.
248
BorderLayout
Divide o contentor em cinco regies: NORTH, SOUTH, WEST, EAST, CENTER. NORTH e SOUTH expandem para preencher a regio na horizontal e utilizam a dimenso vertical preferida. WEST e EAST expandem para preencher a regio na vertical e utilizam a dimenso horizontal preferida. CENTER utiliza todo o espao no ocupado pelos restantes componentes.
249
FlowLayout
Trata o contentor como uma pgina ou pargrafo preenchido da esquerda para a direita ou de cima para baixo. Os componentes assumem as dimenses verticais e horizontais preferidas. Os componentes so posicionados pela ordem que so adicionados. Quando necessrio, os componentes passam para a linha seguinte.
250
GridLayout
Trata o contentor como uma grelha de linhas e colunas de tamanhos iguais. Os componentes so dimensionados igualmente (horizontal/verticalmente), independentemente das suas dimenses preferidas. Pode-se especificar 0 linhas/colunas para indicar a expanso numa direco desejada.
251
BoxLayout
Alinha os componentes no contentor numa nica linha ou coluna. Os componentes usam as suas dimenses preferidas e so alinhados de acordo com o seu alinhamento preferido. A forma preferida de construir um contentor com um box layout :
Box.createHorizontalBox() ou Box.createVerticalBox().
252
Outros Layouts
CardLayout: camadas de cartas empilhadas; apenas uma visvel em cada instante.
Custom / null layout: permite definir posies absolutas utilizando setSize e setLocation.
253
254
255
256
257
Referncias
The Java Tutorial: Visual Index to the Swing Components.
http://java.sun.com/docs/books/tutorial/ uiswing/components/components.html
258
Mecanismo de eventos
259
260
261
262
263
Exemplo de um ActionListener
// part of Java; you dont write this public interface ActionListener { void actionPerformed(ActionEvent event); } // Prints a message when the button is clicked. public class MyActionListener implements ActionListener { public void actionPerformed(ActionEvent event) { System.out.println(Event occurred!); } }
264
Adicionar um ActionListener
JButton button = new JButton(button 1); MyActionListener listener = new MyActionListener(); button.addActionListener(listener);
// now button will print Event occurred! when clicked // addActionListener method is in many components
265
266
267
268
270
Referncias
The Java Tutorial: How to Write Action Listeners.
http://java.sun.com/docs/books/tutorial/ uiswing/events/actionlistener.html
271
Applets
272
273
javax.swing.JApplet
275
javax.swing.JApplet
Diferenas entre JApplet and JFrame:
No necessrio o mtodo main No necessrio invocar show() ( automtico!) No necessrio definir a setDefaultCloseOperation(...) No necessrio setSize(...) / pack(); o tamanho determinado pela pgina web No necessrio setTitle(String); o ttulo dado pela pgina web
276
JApplet: restries
No se consegue abrir ficheiros do disco do utilizador. No se consegue estabelecer ligaes em rede com outros computadores para alm do servidor da pgina da applet. No possvel executar programas. No se consegue saber muita informao sobre o sistema cliente. Qualquer janela aberta por uma applet ter um aviso no fundo.
277
278
279
280
281
JApplet Workarounds
No se pode usar: Toolkit's getImage(String) Usar antes: JApplet's getImage(URL) ou getImage(URL, String) mtodos (depois de colocar imagem na web)
No se pode usar: FileInputStream para ler um ficheiro Usar antes: new URL(file).openStream(); (depois de colocar ficheiro na web)
282
Referncias
The Java Tutorial: Writing Applets.
http://java.sun.com/docs/books/tutorial/applet/
283
Exerccios...
284
Model-View-Controller
285
Arquitectura MVC
Arquitectura para construo de aplicaes OO em que se separam trs dimenses
Modelo: mantm dados usando os algoritmos apropriados e fornece mtodos de acesso Vista: constroi uma representao visual de parte ou todos os dados do modelo Controlador: trata os eventos
Quando o modelo altera os seus dados, gera eventos que fazem com que a vista actualize a sua representao, segundo as ordens do controlador Podem existir vrias vistas e controladores para o mesmo modelo, o qual pode permancer inalterado quando este evolui.
286
Comunicao MVC
Uma alterao no modelo provoca um evento de alterao que difundido para todos os objectos que esto escuta desse evento e desencadeia as alteraes
Facilita manter o sincronismo entre vistas diferentes de um mesmo modelo Actuar numa vista pode provocar alteraes no modelo que so reflectidas nas outras vistas
actualiza
Modelo
actualiza
Vista 1
v dados
v dados
Vista 2
altera
altera
Controlador
altera
Evento
287
288
Modelo
actualiza
actualiza
Delegado IU
v dados
Listeners do delegado IU
Tanto escutam o modelo como o componente Pedem informao ao modelo Alteram o prprio delegado
Listeners
alter a
altera actualiza
Componente
altera
Evento
289
Exerccios...
290
Parte 4
291
292
Tpicos
Introduo ao JDBC e JDBC Drivers Seis Passos para usar JDBC Exemplo 1: Definir tabelas por JDBC Exemplo 2: Inserir dados por JDBC Exemplo 3: Interrogaes por JDBC Tratamento de Excepes em JDBC
293
Introduo ao JDBC
JDBC uma API simples para acesso a mltiplas bases de dados a partir de aplicaes Java. Permite uma integrao simples entre o mundo das bases de dados e o mundo das aplicaes Java. A ideia a de uma API para acesso universal a bases de dados, inspirada no Open Database Connectivity (ODBC) desenvolvido para criar um standard para o acesso a bases de dados em Windows. A JDBC API (java.sql.* e javax.sql.*) pretende ser o mais simples possvel e simultaneamente oferecer a mxima flexibilidade aos programadores.
294
JDBC Drivers
Para ligar a uma base de dados necessrio primeiro ter um driver JDBC. JDBC Driver: conjunto de classes que fazem interface com um motor especfico de bases de dados. Existem drivers JDBC para a maioria das bases de dados: Oracle, SQL Server, Sybase, and MySQL.
Java Application
JDBC Driver Manager JDBCODBC Bridge Vendor Specific ODBC Driver Database Vendor Specific JDBC Driver
Database
Para usar o driver MySQL Connector/J, necessrio descarregar a distribuio completa. Adicionar o respectivo JAR CLASSPATH:
mysql-connector-java-3.0.11-stable-bin.jar
296
297
298
299
300
A nica dificuldade especificar o URL correcto. O URL tem normalmente o seguinte formato: jdbc:subprotocol:subname.
jdbc indica que uma JDBC Connection O subprotocol identifica o driver que se pretende usar. O subname identifica o nome da base de dados e sua localizao.
301
302
Neste caso, est-se a usar um driver MySQL JDBC Driver para ligar base de dados feup, na mquina localhost. Se este cdigo executar correctamente teremos um objecto Connection para comunicar directamente com a base de dados.
303
Com um objecto Statement, pode-se enviar chamadas SQL directamente base de dados.
304
executeUpdate()
Utilizado para executar instrues SQL INSERT, UPDATE, ou DELETE. O resultado o nmero de linhas que foram afectadas na base de dados. Suporta instrues Data Definition Language (DDL) tipo:
- CREATE TABLE - DROP TABLE - ALTER TABLE
305
getQueryTimeout/setQueryTimeout
Especifica o tempo que um driver deve esperar pela execuo de um STATEMENT antes de lanar a excepo SQLException
306
5. Processar os Resultados
A ResultSet contm os resultados da query SQL. Mtodos teis
Todos os mtodos podem lanar uma SQLException close
- Liberta os recursos alocados pelo JDBC - O conjunto de resultados automaticamente fechado sempre que o Statement associado executa uma nova query. - Retorna um objecto ResultSetMetaData que contm informao sobre as colunas do ResultSet
getMetaDataObject
next - Tenta mover para prxima linha do ResultSet - Se bem sucedido devolvido true; seno, false - A primeira invocao de next posiciona o cursor na primeira linha
307
getXxx
- Retorna o valor da coluna especificada pelo nome ou ndice como um tipo Xxx do Java - Retorna 0 ou null, se o valor SQL for NULL - Tipos usados em getXxx so:
308
6. Fechar a ligao
Para fechar a ligao:
stmt.close(); connection.close();
309
310
As tabelas do exemplo
Instrues SQL:
CREATE TABLE COFFEES (COF_NAME VARCHAR(32), SUP_ID INTEGER, PRICE FLOAT, SALES INTEGER, TOTAL INTEGER);
311
A tabela Coffee
Pode-se criar uma tabela directamente na base de dados (MySQL), mas pode-se tambm criar por JDBC. Observaes sobre a tabela:
A coluna SUP_ID contm um valor inteiro para indicar o ID do fornecedor (Supplier ID).
- Os fornecedores sero guardados numa tabela separada. - SUP_ID uma foreign key.
A coluna SALES armazena valores do tipo SQL INTEGER e indica o total em euros de caf vendido durante a semana corrente. A coluna TOTAL contm um SQL INTEGER que indica o total em euros de caf vendido desde sempre.
312
import java.sql.*; public class CreateCoffees { public static void main(String args[]) { String url = "jdbc:mysql://localhost/feup"; Connection con; String createString; createString = "create table COFFEES " + "(COF_NAME VARCHAR(32), " + "SUP_ID INTEGER, " + "PRICE FLOAT, " + "SALES INTEGER, " + "TOTAL INTEGER)"; Statement stmt;
313
try { Class.forName("com.mysql.jdbc.Driver"); } catch(java.lang.ClassNotFoundException e) { System.err.print("ClassNotFoundException: "); System.err.println(e.getMessage()); } try { con = DriverManager.getConnection(url); stmt = con.createStatement(); stmt.executeUpdate(createString); stmt.close(); con.close();
3 4 6
315
import java.sql.*; public class InsertCoffees { public static void main(String args[]) throws SQLException { System.out.println ("Adding Coffee Data"); ResultSet rs = null; PreparedStatement ps = null; String url = "jdbc:mysql://localhost/feup"; Connection con; Statement stmt; try { Class.forName("org.gjt.mm.mysql.Driver"); 1 } catch(java.lang.ClassNotFoundException e) { System.err.print("ClassNotFoundException: "); System.err.println(e.getMessage()); }
FEUP Ademar Aguiar Java: linguagem, APIs, boas prticas e Eclipse 316
try {
stmt = con.createStatement(); stmt.executeUpdate ("INSERT INTO COFFEES " + "VALUES(So Jorge', 49, 9.99, 0, 0)"); 4 stmt.executeUpdate ("INSERT INTO COFFEES " + "VALUES(Arbicas', 49, 9.99, 0, 0)"); stmt.executeUpdate ("INSERT INTO COFFEES " + "VALUES(SICAL', 49, 10.99, 0, 0)"); stmt.executeUpdate ("INSERT INTO COFFEES " + "VALUES(SICAL decaffe', 49, 10.99, 0, 0)"); 6 stmt.close(); con.close(); System.out.println ("Done"); } catch(SQLException ex) { System.err.println("-----SQLException-----"); System.err.println("SQLState: " + ex.getSQLState()); System.err.println("Message: " + ex.getMessage()); System.err.println("Vendor: " + ex.getErrorCode()); } } }
FEUP Ademar Aguiar Java: linguagem, APIs, boas prticas e Eclipse 317
con = DriverManager.getConnection(url);
318
import java.sql.*; public class SelectCoffees { public static void main(String args[]) throws SQLException { ResultSet rs = null; PreparedStatement ps = null; String url = "jdbc:mysql://localhost/feup"; Connection con; Statement stmt; try { Class.forName("org.gjt.mm.mysql.Driver"); 1 } catch(java.lang.ClassNotFoundException e) { System.err.print("ClassNotFoundException: "); System.err.println(e.getMessage()); } try {
2
FEUP Ademar Aguiar Java: linguagem, APIs, boas prticas e Eclipse 319
4 5
ResultSet uprs = stmt.executeQuery("SELECT * FROM COFFEES"); System.out.println("Table COFFEES:"); while (uprs.next()) { String name = uprs.getString("COF_NAME"); int id = uprs.getInt("SUP_ID"); float price = uprs.getFloat("PRICE"); int sales = uprs.getInt("SALES"); int total = uprs.getInt("TOTAL"); System.out.print(name + " " + id + " " + price); System.out.println(" " + sales + " " + total); } uprs.close(); stmt.close(); con.close();
} catch(SQLException ex) { System.err.println("-----SQLException-----"); System.err.println("SQLState: " + ex.getSQLState()); System.err.println("Message: " + ex.getMessage()); System.err.println("Vendor: " + ex.getErrorCode()); } } }
FEUP Ademar Aguiar Java: linguagem, APIs, boas prticas e Eclipse 320
321
Excepes SQL
Quase todos os mtodos JDBC podem originar uma SQLException em resposta a um erro de acesso a dados Se mais do que um erro ocorrer, eles so encadeados. As excepes SQL contm:
Descrio do erro, getMessage O SQLState (Open Group SQL specification) identificado a excepo, getSQLState Um cdigo de erro especfico do vendedor da base de dados, getErrorCode Uma referncia para a prxima SQLException, getNextException
322
SQLException: Exemplo
try { ... // JDBC statement. } catch (SQLException sqle) { while (sqle != null) { System.out.println("Message: " + sqle.getMessage()); System.out.println("SQLState: " + sqle.getSQLState()); System.out.println("Vendor Error: " + sqle.getErrorCode()); sqle.printStrackTrace(System.out); sqle = sqle.getNextException(); } }
323
Resumo
Um Driver JDBC liga uma aplicao Java a uma base de dados especfica. Seis passos para usar JDBC:
Carregar o Driver Estabelecer uma Connection Criar um objecto Statement Executar uma Query Processar o Result Set Fechar a Connection
324
Referncias
Sun JDBC Tutorial
http://java.sun.com/docs/books/tutorial/ jdbc/TOC.html
George Reese, Database Programming with JDBC and Java (OReilly & Associates.)
325
Exerccios...
326
327
Package java.net
Java dispe de diversas classes para manipular e processar informao em rede So suportados dois mecanismos bsicos:
Sockets - troca de pacotes de informao URL - mecanismo alto-nvel para troca de informao
328
Package java.net
O package contm as seguintes classes:
URL encapsula um endereo WWW URLconnection uma ligao WWW InetAddress um endereo IP com nome de host Socket lado do cliente, liga a um porto, utiliza TCP ServerSocket ausculta um determinado porto por ligaes de clientes (a ligao implica TCP) DatagramSocket um socket UDP, para clientes e servidores DatagramPacket empacota informao num pacote UDP com informao de encaminhamento IP
329
Sockets
Um socket um mecanismo que permite que programas troquem pacotes de bytes entre si. A implementao Java baseada na da BSD Unix. Quando um socket envia um pacote, este acompanhado por duas componentes de informao:
Um endereo de rede que especifica o destinatrio do pacote Um nmero de porto que indica ao destinatrio qual o socket usar para enviar informao
330
Sockets e Protocolos
Protocolos Connection-Oriented
O socket cliente estabelece uma ligao para o socket servidor, assim que criado Os pacotes so trocados de forma fivel
Protocolos Connectionless
Melhor performance, mas menos fiabilidade Exemplos de utilizao: envio de um pacote, audio em tempo-real
Comparao
TCP/IP utiliza sete pacotes para enviar apenas um (1/7). UDP utiliza apenas um pacote (1/1).
331
Sockets/Protocolos em Java
332
333
334
335
336
Exemplo: TimeServer
337
Objectos URL
A classe URL fornece um acesso a dados a um mais altonvel do que os sockets Um objecto URL encapsula um Uniform Resource Locator (URL) que uma vez criado pode ser usado para aceder a dados de um endereo especificado pelo URL O acesso aos dados no necessita de se preocupar com o protocolo utilizado Para alguns tipos de dados, um objecto URL sabe devolver os contedos. Por exemplo, dados JPEG num objecto ImageProducer, ou texto numa String
338
URLs relativos
try { URL jdk = new URL(js,"java.sun.com/products/JDK/index.html"); }catch (MalformedURLException e) { return; }
Mtodos de acesso
getProtocol(), getHost(), getFile(), getPort(), getRef(), sameFile(URL), getContent(), openStream()
339
Exerccios...
340
Reflection
341
342
343
344
345
System.out.println(methods[ii]); }
346
Constructor
public Object newInstance(Object[] args)
Method
public Object invoke(Object obj, Object[] args)
347
348
Exemplo
Class cl = Class.forName(java.awt.Rectangle); Class[] paramTypes = new Class[] { Integer.TYPE, Integer.TYPE}; Constructor ctor = cl.getConstructor(paramTypes);
Object[] ctArgs = new Object[] { new Integer(20), new Integer(40)}; Object rect = ctor.newInstance(ctArgs);
349
Reflection e Factory
public static Shape getFactoryShape (String s) { Shape temp = null; if (s.equals (Circle)) temp = new Circle (); else if (s.equals (Square)) temp = new Square (); else if (s.equals (Triangle) temp = new Triangle (); else // // continues for each kind of shape return temp; }
public static Shape getFactoryShape (String s) { Shape temp = null; try { temp = (Shape) Class.forName (s).newInstance (); } ( )
350
Reflection e ActionListener
public void actionPerformed(ActionEvent e) { String command = event.getActionCommand(); if (command.equals(play)) play(); else if (command.equals(save)) save(); else ...
public void actionPerformed(ActionEvent e) { String command = event.getActionCommand(); Method meth = getClass().getMethod(command, null); meth.invoke(this, null); }
351
352
Referncias
Java Tutorial: Reflection API.
http://java.sun.com/docs/books/tutorial/reflect/
353
Exerccios...
354