Curso Java Atual 4 Pag
Curso Java Atual 4 Pag
1 2
4 5
1
Objetivos Qualidade do Software
! Discutir aspectos de qualidade e
modularidade de software
! Impacto Econômico e Social
» Segurança de pessoas
! Introduzir conceitos de POO e Java
» Disponibilidade de serviços essenciais
! Indicar como programas em Java podem
» Competitividade: produtores/consumidores
ser adequadamente escritos e
estruturados » Melhores produtos a um menor custo
! Utilizar ambientes de programação em
Java
! Desenvolver uma aplicação de médio
porte
6 7
8 9
2
Objeto Conta Bancária
Estados do Objeto Conta
Crédito
Crédito
Crédito Crédito(20) Crédito
Crédito
Débito Débito
Débito Débito
Débito
10 11
12 13
3
Java é Simples Java Eliminou...
14 15
16 17
4
Java é Portável Java é Distribuída
18 19
20 21
5
Compilando e Executando Compilando e Executando
22 23
abstract, boolean, break, byte, case, catch, ! Nomear variáveis, métodos, classes e
char, class, const, continue, defalt, do , labels.
double, else, extends, false, final, finally, float,
for, goto, if, implements, import, intanceof, int, ! Não pode ser palavra reservada e deve
interface, long, native, new, null, package, iniciar com letra, $ ou _.
private, protected, public, return, short, static, » louco // válido
super, switch, syncronized, this, throw, » intGrande // válido
throws, transient, true, try, void, volatile, while
» $valor1 // válido
» 3_variavel // inválido
» !verdade // inválido
24 25
6
Tipos de Dados Primitivos Tipos de Dados Primitivos
26 27
28 29
7
Operadores Matemáticos Operadores Comparativos
»+ a=a+1 adição » == if (a==3) {...} Igual
»- b=b-1 subtração » != if (a!=5) {...} não igual
»* c=c*2 multiplicação »< t = a < b; menor
»/ d=d/4 divisão »> x = a > b; maior
»% e=e%2 resto » <= if (a<=b) {...} menor igual
»- f=-f negação » >= j = ~a >= b; maior igual
» ++ a++ incremento » && if (a=0 && b=2) AND
» -- b-- decremento » || if (a<3 || c>=5) OR
30 31
32 33
8
O Operador Ternário (?) Fluxo de Controle (if .. else)
! O Operador Ternário (?) class TernarioComIf {
» a = x ? b : c; public static void main(String args[]) {
class Ternario { short v1 = 10, short v2 = 5, menor=0;
public static void main(String args[]) { if(v1<v2)
short v1 = 10; menor=v1;
short v2 = 5; else
short menor; menor=v2;
menor = (v1 < v2)? v1 : v2;
System.out.println(menor);
System.out.println(menor);
}
}
} }
34 35
36 37
9
Faça .. Enquanto (Do .. While) Para (For)
class DoWhileApp {
public static void main(String args[]) class testeArgs {
throws Exception { public static void main(String args[]) {
char lt; int i;
do {
System.out.println(args.length);
System.out.println(“Tecle uma letra:”);
lt = (char)System.in.read(); for(i=0;i<args.length;i++)
} while ( c != ‘f’); System.out.println(args[i]);
System.out.println(“Acertou!!!!”); }
}
} }
38 39
40 41
10
Classe de Contas Classe de Contas: Assinaturas
class Conta {
Crédito
void credito (double valor) {}
Crédito
void debito (double valor) {}
Saldo
Saldo
Número
Número
875,32 21.342-7
String numero() {}
875,32 21.342-7
double saldo() {}
Débito Conta (int n) {}
Débito
}
42 43
44 45
11
Descrições de Classes Encapsulamento
46 47
Encapsulamento Encapsulamento
public class Conta { void credito(double val) {
private int numero; saldo = saldo + val;
private double saldo; extrato = extrato + "\n Credito: " + val +
private String extrato = ""; ". Saldo: " + saldo;}
48 49
12
Encapsulamento Modelando o mundo real
50 51
52 53
13
Modelando o mundo real Tarefa de Casa
54 55
56 57
14
Classe de Bancos: Assinatura Classe de Bancos: Descrição
58 59
60 61
15
Classe de Bancos: Descrição Classe de Bancos: Descrição
62 63
64 65
16
Tarefa de Casa Tarefa de Casa
! Crie a classe Estoque. Ela deve ter ! A venda deve ser feita pelo preço de
uma estrutura de dados de Produtos. venda, retornando o valor e
! As operações em Estoque devem decrementando a quantidade de
prever compra e venda de itens. A itens do produto.
compra incrementa a quantidade de ! Deve ser possível criar produtos no
itens do produto e atualiza o preço Estoque, passando seus dados:
de compra. código, descrição, preço de compra,
preço de venda, estoque mínimo.
66 67
68 69
17
Testes Automatizados Testes Automatizados
70 71
72 73
18
Testes Automatizados Testes Automatizados
74 75
76 77
19
Tarefa de Casa Lista de Contas
! Crie um método adicional para a
classe Estoque:
» O método
listarProdutosAbaixoDoMinimo(), que
devolve uma estrutura de dados de
produtos cujo quantidade está abaixo
do estoque mínimo para o produto.
» Crie testes para esse método e para os
outros métodos da classe.
» Meta: cobertura de 100% das linhas!
78 79
80 81
20
Lista de Contas Lista de Contas: Assinatura
No lista = new No() -> 9854;
Conta c1 = new Conta(1); ! Quais são os métodos necessários?
lista.inserir(c1);
Conta c2 = new Conta(2);
lista.inserir(c2); Class No
prox Conta c;
No prox;
class ListaDeContas {
C1 1256
c Void Inserir(Conta c)
void inserir (Conta c) {}
prox
1256 c2 8567
void retirar (Conta c) {}
Conta Pesquisar (int num)
c Conta procurar (String num) {}
8567 null null }
c
82 83
84 85
21
Listas de Contas: Descrição Banco: Descrição Modular
86 87
88 89
22
Dever de Casa 1 Dever de Casa 2
! Desenvolva um sistema simples para ! Defina em Java uma classe Pilha, de
controle de estoque, contendo pelo menos as pilhas de inteiros, tendo métodos para
classes Produto e Estoque, e as seguintes realizar as seguintes operações:
operações: alterar as propriedades dos
produtos (nome, preço, quantidade em » push, insere um dado elemento no topo da
pilha;
estoque, quantidade mínima), comprar e
vender produtos do estoque, e verificar que » top, dá como resultado o elemento que
produtos precisam ser repostos (quantidade está no topo da pilha;
menor que a mínima). » pop, retira o elemento que está no topo da
pilha..
90 91
92 93
23
Nomeando Pacotes Modificadores de Acesso
94 95
96 97
24
Importação de Pacotes: Detalhes Pacotes da Biblioteca Java
98 99
! Final ! Static
» Classes, Métodos e Variáveis » Métodos e Variáveis
» Construções Finais não podem ser » Construções Estáticas são associadas a
mudadas uma classe e não a instâncias da classe
• Variáveis: Constantes
• Classes: Não podem ser estendidas
class Estatica {
• Métodos: Não podem ser redefinidos static int x=0;
Estatica() { x++;}
}
100 101
25
Outros Modificadores de Acesso Outros Modificadores de Acesso
! Static ! Static
» Variáveis estáticas podem ser » Toda aplicação deve conter um método
referenciadas através de qualquer estático.
instância da classe ou através do nome • Métodos estáticos só podem acessar
da classe. Ex: variáveis estáticas e outros métodos
1. Estatica e1 = new Estatica(); estáticos.
2. Estatica e2 = new Estatica(); • Para acessar variáveis não estáticas ou
3. e1.x = 100; métodos não estáticos deve-se instanciar
4. e2.x = 200; uma classe.
5. Int OutroX = Estatica.x;
102 103
Coleções Coleções
104 105
26
Coleções Coleções
! Collection ! ArrayList
» Interface raiz de SET, Queue e LIST » Implementação muito utilizada em problemas práticos
» Implementa polimorfismo durante a disciplina
» Métodos da Interface » Classe genérica, que permite uma especialização
• Add
• Size
• Get
• Contains
106 107
Exercicio Coleções
108 109
27
Coleções Coleções
implementação de SET.
110 111
Exercício Datas
112 113
28
Datas Datas
114 115
Datas Datas
29
Dever de Casa Dever de Casa 3
! Estruture o sistema de controle de
estoque usando pacotes
! Implemente a classe Estoque usando a
classe ArrayList (ambas do pacote
“java.util”).
» OBS: Verifique no help quais são os
construtores da classe e os métodos a
serem utilizados !
118 119
Crédito Crédito(20)
Crédito Crédito Crédito
Crédito Crédito
Débito
Débito Débito
Débito
Débito
Débito
120 121
30
Estados do Objeto Poupança Classe de Poupanças: Descrição
class PoupancaSemHerança {
R.Juros(0.01) private String numero;
Crédito
Crédito
Crédito
Crédito private double saldo;
void credito (double valor) {saldo = saldo +
Saldo Número Saldo Número
Saldo Número
875,32 21.342-7 R. Juros
Saldo Número
884,07 21.342-7 R. Juros valor;}
875,32 21.342-7 875,32 21.342-7
String numero() {return numero;}
Débito
Débito Débito
Débito
...
void rende_juros (double t)
{this.credito(saldo * t);}
}
122 123
class BancoComPoupanca {
void cadastro_conta(Conta c) {} class BancoComPoupanca {
void cadastro_poupanca(PoupancaD p) {}
private Conta[] contas;
void credito_conta(String num, double val) {}
private PoupancaD[] poupancas;
void credito_poupanca(String num, double
val) {} private int indicep, indicec = 0;
...
BancoD () {}
}
124 125
31
Classe de Bancos: Descrição Classe de Bancos: Descrição
126 127
128 129
32
Subclasses Herança
130 131
132 133
33
Extends Extends: Restrições
134 135
... ...
Poupanca poup; Conta conta;
poup = new Poupanca(¨21.342-7¨); conta = new Poupanca(¨21.342-7¨);
poup.credito(500.87); conta.credito(500.87);
poup.debito(45.00); conta.debito(45.00);
System.out.println(poup.saldo()); System.out.println(conta.saldo());
... ...
136 137
34
Subtipos: Verificação Dinâmica
Substituição e Casts
com Casts
... ! Nos contextos onde contas são usadas
Conta conta; pode-se usar poupanças
! Nos contextos onde poupanças são
conta = new Poupanca(¨21.342-7¨); usadas pode-se usar contas com o uso
... explícito de casts
((Poupanca) conta).rende_juros(0.01); ! Casts correspondem a verificação
conta.imprime_saldo(); dinâmica de tipos e podem gerar
exceções (Cuidado!)
...
! Casts não fazem conversão de tipos
138 139
35
Subtipos: Verificação Dinâmica
Exercício em Sala
com instanceof
! Modifique a classe Banco para que seja ...
possível render juros de uma poupança. Conta c = this.procura(¨123.45-8¨);
Isto é, adicione um novo método que
rende os juros da poupança cujo
número é parâmetro deste método; a if (c instanceof Poupanca)
taxa de juros corrente deve ser um ((Poupanca) c).rende_juros(0.01);
atributo de Banco. else System.out.print(¨Poupança
inexistente!¨)
...
142 143
! Casts e instanceof:
» ((Tipo) variável) Crédito
144 145
36
Estados de uma Conta Especial Estados de uma Conta Especial
Crédito(20) Debito(900)
Débito Crédito
Crédito Débito Crédito
Crédito
Débito Crédito
Crédito Débito Crédito
Crédito
Saldo Número
Saldo Limite
Número Saldo Número
Saldo Limite
Número
Saldo Número
Saldo Limite
Número Saldo Número
Saldo Limite
Número
875,32 21.342-7 100 875,00 21.342-7 100
875,32 21.342-7 895,32 21.342-7 100 875,32 21.342-7 -25,00 21.342-7 100
875,32 21.342-7 875,32 21.342-7
146 147
148 149
37
Redefinição de Métodos Usando Contas Especiais
150 151
152 153
38
Dever de Casa Dever de Casa 4
! Modifique o sistema de controle de
estoque requisitado como exercício
para poder também armazenar
produtos perecíveis; isto é, produtos
que têm um prazo de validade.
! Modifique o sistema de controle de
estoque para manter um histórico de
vendas de determinados produtos.
154 155
Débito Débito
Débito
156 157
39
Conta Imposto: Assinatura Conta Imposto: Assinatura
158 159
160 161
40
Subclasses e Evolução de
Subclasses e Comportamento
Software
! Objetos da subclasse comportam-se ! Deveria ser possível raciocinar sobre o
como os objetos da superclasse código usando-se apenas a definição
! Redefinições de métodos devem dos tipos das variáveis envolvidas
preservar o comportamento (semântica) (Conta)
do método original ! O comportamento do código deveria ser
! Grande impacto sobre independente do tipo do objeto (Conta,
manutenção/evolução de software... ContaEspecial, Conta Imposto)
associado a uma dada variável em
tempo de execução
162 163
ContaAbstrata
Conta
Conta ContaImposto
Poupança ContaImpostoM
ContaEspecial
Poupanca ContaEspecial
164 165
41
Definindo Classes Abstratas Classes Abstratas
abstract class ContaAbstrata {
! Possibilita herança de código preservando
protected String numero; comportamento (semântica)
protected double saldo;
! Métodos abstratos:
void credito (double valor) {
» Geralmente existe pelo menos um
saldo = saldo + valor;
» São implementados nas subclasses
}
abstract void debito (double valor); ! Não cria-se objetos:
String numero() {return numero;} » Mas podem ter construtores, para reuso
double saldo() {return saldo;} » Atributos qualificados como protected
} para serem acessados nas subclasses
166 167
168 169
42
Conta Especial: Descrição
Conta Imposto: Descrição
Original
class ContaEspecial extends Conta { class ContaImposto
extends ContaAbstrata {
170 171
172 173
43
Exercício em Sala Dever de Casa
174 175
176 177
44
Auditor de Banco Modular Problema
178 179
class Auditor {
private String nome;
interface QQBanco {
void investiga_banco(QQBanco b) { double saldo_total();
if ((b.saldo_total() / b.num_contas()) > 500) int num_contas();
System.out.print ("Aprovado!"); }
else System.out.print ("Não aprovado!");
}
}
180 181
45
Interfaces Subtipos sem Herança
! Caso especial de classes abstratas... class Banco
! Definem tipo de forma abstrata, apenas implements QQBanco {
indicando o nome e o tipo dos métodos ...
suportados pelos objetos do tipo }
! Os métodos são implementados pelos
subtipos (subclasses) class BancoModular
implements QQBanco {
! Não têm construtores: não pode-se ...
criar objetos já que métodos não são }
definidos
182 183
184 185
46
Definição de Classes:
Interfaces e Reusabilidade
Forma Geral
! Evita duplicação de código através da class C’
definição de um tipo genérico, tendo como
subtipos várias classes não relacionadas extends C
! Tipo genérico pode agrupar objetos de implements I1, I2, ..., In {...}
várias classes definidas
C
independentemente, sem compartilhar
código via herança, tendo implementações
totalmente diferentes
I1 I2 I3 ... In
! Classes podem até ter mesma
C’
semântica...
186 187
188 189
47
Bancos: Parametrização Bancos:Construtor
class BancoIndependente {
BancoIndependente
private RepositorioDeContas contas;
(RepositorioDeContas rep) {
void cadastro(Conta c) {contas.inserir(c);}
void debito(String num, double val) { contas = rep;
Conta c; }
c = contas.procurar(num);
if (c != null) c.debito(val); A estrutura para armazenamento das contas é
fornecida na inicialização do banco,
else System.out.println("Conta e pode depois ser trocada!
inexistente!");
}...
190 191
class ConjuntoDeContas
implements RepositorioDeContas {...}
interface RepositorioDeContas {
class ListaDeContas
void inserir(Conta c);
implements RepositorioDeContas {...}
Conta procurar(String num);
class ArrayDeContas
}
implements RepositorioDeContas {...}
class VectorDeContas
implements RepositorioDeContas {...}
192 193
48
Exercício em Sala Dever de casa
! Modifique a classe Banco para utilizar o ! Modifique a classe Estoque para utilizar
Repositório de Contas, implementando o Repositório de Produtos,
a classe Lista de Contas e Array de implementando a classe Lista de
Contas Produtos, Array de Produtos, Vector de
Produtos e ArrayList de Produtos.
194 195
196 197
49
Mostrar Mensagem de Erro Retornar Código de Erro
class Conta { class Conta {
private String numero; private String numero;
private double saldo; private double saldo;
void debito (double valor) { boolean debito (double valor) {
if (valor <= saldo) if (valor <= saldo) {
saldo = saldo - valor; saldo = saldo - valor;
else System.out.print(“Saldo return true;
Insuficiente!”); } else return false;
}... }...
} }
198 199
200 201
50
Código de Erro: Problemas Exceções
class Banco { ... ! Ao invés de códigos, teremos exceções...
int debito(String num, double v) {
! São objetos comuns, portanto têm que ter
Conta c = this.procura(num);
uma classe associada
if (c != null) {
! Classes representando exceções herdam e
boolean b = c.debito(v); são subclasses de Exception (pré-definida)
if (b) return 0;
! Define-se subclasses de Exception para
else return 2;
} else return 1; » oferecer informações extras sobre a
falha, ou
}
} » distinguir os vários tipos de falhas
202 203
204 205
51
Definindo e Levantando
Usando Métodos com Exceções
Exceções
! Res metodo(Args) throws E1, ..., EN {...} class Conta { ...
! Todos os tipos de exceções levantadas no void transfere(Conta conta, double v)
corpo de um método devem ser throws SIException {
declaradas na sua assinatura conta.debito(v);
! Levantando exceções: throw obj-exceção this.credito(v);
! Fluxo de controle e exceção são passados }
para a chamada do código contendo o
}
comando throw, e assim por diante... Exceções levantadas indiretamente também
devem ser declaradas!
206 207
208 209
52
Tratando Exceções Exceções em Banco
! A execução do try termina assim que
uma exceção é levantada class Banco {
! O primeiro catch de um (super) tipo da private Conta[] contas;
exceção é executado e o fluxo de private int indice = 0;
controle passa para o código seguinte
ao último catch
! Se não houver nenhum catch void cadastro(Conta c) {
compátivel, a exceção e o fluxo de contas[indice] = c;
controle são passados para a chamada indice = indice + 1;
do código com o try/catch
}
210 211
212 213
53
Exercício em Sala Dever de Casa
214 215
216 217
54
Containers Ex: Hierarquia de Componentes
Frame
! São componentes que podem conter Panel
outros componentes Panel Panel Panel
! Subregiões são implementadas Label Label Label
utilizando Panels Scrollbar Scrollbar Scrollbar
218 219
220 221
55
Ex: Hierarquia de Componentes Políticas de Layout: FlowLayout
222 223
224 225
56
Políticas de Layout: GridLayout Políticas de Layout: GridLayout
226 227
228 229
57
Políticas de Layout: BorderLayout Dever de Casa
import java.awt.*;
import java.applet.*;
public class TesteBorder extends Applet {
public void init() {
setLayout(new BorderLayout());
add(new Button("North"),BorderLayout.NORTH);
add(new Button("South"),BorderLayout.SOUTH);
add(new Button("East"),BorderLayout.EAST);
add(new Button("West"),BorderLayout.WEST);
Panel p = new Panel();
p.setBackground(Color.blue);
add(p,BorderLayout.CENTER);
}
}
230 231
232 233
58
Threads em Java: Exemplo Threads em Java: Exemplo
import java.io.*; class PseudoIOSemThread {
public class SemThread {
static long tempobase=System.currentTimeMillis(); PseudoIOSemThread() {
public static void main(String args[]) throws Exception { SemThread.mostraTempo("PseudoIO Criada");
PseudoIOSemThread pseudo=new PseudoIOSemThread(); }
pseudo.run(); public void run(){
mostraTempo("Outra Tarefa Inicia"); SemThread.mostraTempo("PseudoIO Iniciado");
System.in.read();
} try {
static void mostraTempo(String mens){ Thread.sleep(10000);
long tempogasto=System.currentTimeMillis()-tempobase; SemThread.mostraTempo("PseudoIO Termina");
System.out.println(mens+" em "+(tempogasto/1000.0)+"
segundos"); } catch (InterruptedException e) {}
} }
} }
234 235
236 237
59
Threads em Java: Exemplo Threads em Java: Exemplo
! Saída para o programa SemThreads ! Programa SemThread
» PseudoIO Criada em 0.11 segundos » Durante o bloqueio, nada é executado
» PseudoIO Iniciado em 0.22 segundos » Ineficiência na utilização do processador
» PseudoIO Termina em 10.27 segundos ! Programa ComThread
» Outra Tarefa Inicia em 10.27 segundos » Outras atividades executam durante o
! Saída para o programa ComThreads bloqueio de um Thread
» PseudoIO Criada em 0.11 segundos » Utilização mais eficiente do processador
» Outra Tarefa Inicia em 0.22 segundos
» PseudoIO Iniciado em 0.22 segundos
» PseudoIO Termina em 10.21 segundos
238 239
240 241
60
Métodos para controle de Métodos para controle de
Threads Threads: Exemplo
import java.io.*;
! Static void sleep(long sleepTimeInMillis) public class TesteThreads {
public static void main (String args[]) throws Exception {
throws InterruptedException FirstThread first=new FirstThread();
SecondThread second=new SecondThread();
» Coloca o Thread para dormir por um tempo first.start();
second.start();
especificado como parâmetro try {
System.out.println("Esperando pelo primeiro Thread Terminar...");
! void join() throws InterruptedException first.join();
System.out.println("Foi uma longa espera !");
» O Thread chamador bloqueia esperando este System.out.println("Acordando o segundo Thread...");
synchronized(second){
Thread morrer second.notify();
! static void yield() }
System.out.println("Esperando pelo termino do segundo Thread...");
» Bloqueia o chamador e o coloca no fim da fila de second.join();
} catch (InterruptedException e){ }
escalonamento System.out.println("Estou terminando tambem ...");
System.in.read();
}
}
242 243
244 245
61
Métodos para controle de
Ciclo de Vida de um Thread
Threads: Exemplo
! Saída do programa TesteThreads
Runnable suspend(), sleep(),
» Esperando pelo primeiro Thread Terminar. new()
wait() ou I/O
• Inicio do Primeiro Thread
t()
ar
• Inicio do Segundo Thread resume(),
st
stop(), ou notify(),
• Segundo Thread chama wait() Recentemente timeout, IO
Criada fim do run() Bloqueada
• Fim do Primeiro Thread
» Foi uma longa espera !
stop(), ou stop(), ou
» Acordando o segundo Thread... fim do run() Morta fim do run()
» Esperando pelo termino do segundo Thread...
• Segundo Thread volta a executar e termina
» Estou terminando tambem ...
246 247
248 249
62
O Programa Exemplo: Conta O Programa Exemplo: Conta
class Conta {
int getSaldo(){
void deposito(int v, String nome){
try {
int saldo;
Thread.sleep(5000);
System.out.println(nome+" tentando depositar "+v);
} catch(InterruptedException e) {}
System.out.println(nome+" obtendo saldo...");
return Deposito.balanco;
saldo=getSaldo();
}
System.out.println(nome+" saldo obtido "+saldo);
void setSaldo(int saldo){
saldo+=v;
try {
System.out.println(nome+" ajustando saldo para "+saldo);
Thread.sleep(5000);
setSaldo(saldo);
} catch(InterruptedException e) {}
System.out.println(nome+" saldo ajustado para "+
Deposito.balanco=saldo;
Deposito.balanco);
}
}
}
250 251
O Programa Exemplo:
O Programa Exemplo: Resultado
ThreadDeposito
class ThreadDeposito extends Thread {
Conta conta; ! Atribuição de um valor incorreto ao
int valor; saldo
String mens;
» Saldo = 2000
ThreadDeposito(Conta conta, int valor, String mens) {
this.mens=mens; ! Como resolver este problema?
this.conta=conta;
» Utilizando Monitores
this.valor=valor;
} • Semelhante a um local fechado aonde existe
public void run(){ apenas uma chave para se entrar
conta.deposito(valor, mens);
}
}
252 253
63
Monitores Monitores
Monitor
! Como sincronizar o programa anterior?
Método 1 » Basta incluir a palavra reservada
chave
“synchronized” na definição do método
depósito
Método 2
» É criado um monitor no método depósito
» Apenas 1 programa pode acessar a
Threads Método 3 execução de depósito
Método 4
254 255
256 257
64
Applets com Threads O Caminho para JDBC
void pause(int time) {
try {Thread.sleep(time); }
catch(InterruptedException e) {}
! Grande desenvolvimento da linguagem
} Java
public void paint(Graphics g) {
}
g.drawImage(pedros[currentimg],0,0,this); ! Necessidade de uma API puramente
} JAVA para acesso a bancos de dados
! Sucesso do modelo de API ODBC da
Microsoft
! Em 1996 é lançado o kit JDBC
258 259
! Drivers se ocupam
da interface com o Banco Banco
banco
260 261
65
Instalando o JDBC A linguagem SQL
262 263
264 265
66
A linguagem SQL A linguagem SQL
» Update » Select
• Altera registros em uma tabela • Recupera registros de uma ou mais tabelas
• Forma: update <tabela> set • Forma: select <campo1>,<campo 2> ,...from
<campo1>=<valor1>, <campo2>= valor2> <tabela 1>,<tabela 2>,... [where <condição>]
[where <condição>] • Exemplo: select * from cliente,pedido where
• Exemplo: Update cliente set pedido.cd_cliente=cliente.cd_cliente
cd_cliente=cd_cliente+1; • Exemplo: select cd_cliente,nm_cliente from
• update fazenda set numero=numero+10 cliente
Exemplo: Update cliente set cd_cliente=1,
nm_cliente=‘Carlos’ where cd_cliente=0;
266 267
268 269
67
Conectando a uma base de dados Conectando a uma base de dados
270 271
272 273
68
Executando Statements Executando Statements
274 275
276 277
69
Exemplos: Consulta Exemplos: Consulta
import java.net.URL; while (rs.next()) {
import java.sql.*; System.out.println("Nome: "+rs.getString(1)+" Fone:
import java.io.*; "+rs.getString(2));
public class Consulta{ }
public static void main(String args[]) throws IOException{ st.close();
String comando="SELECT * FROM FONES" ; con.close();
try{ }
Connection con; catch(Exception e){
Class.forName("com.mysql.jdbc.Driver"); e.printStackTrace();
con=DriverManager.getConnection("jdbc:mysql://localhost/banco", return;
}
”usuario",”senha"); System.in.read();
System.out.println("Conectado OK"); }
Statement st = con.createStatement(); }
ResultSet rs = st.executeQuery(comando);
278 279
280 281
70
Statements Especiais Statements Especiais
282 283
284 285
71
Transações Transações (Exemplo)
286 287
288 289
72
Java Web Java Web
! Java EE ! Java EE
» Deve ser executado em um servidor que » Preparando o ambiente
implemente os serviços relacionados a essa • Baixe um Apache Tomcat
plataforma – Basta baixar o arquivo compactado e extrair para uma
pasta do seu computador
• Jboss
• Glassfish • Configure um servidor no seu Eclipse
– Basta usar uma versão do eclipse para Java EE
• Apache developers
– Tomcat: implementa parte da especificação – Procure a perspectiva de servidores e crie um novo
servidor ligado ao Tomcat que você baixou
290 291
! Projetos Web
» New Dynamic Web Project
» Configurar servidor Web associado
• Na aba servidores (servers) clique com o botão
direito no Tomcat e selecione add/remove.
! Estrutura
» Webcontent
» Web-Inf
• Web.xml: configurações do projeto web
292 293
73
Java Web Java Web
294 295
Mas
culi
no
<br
298 299
300 301
75
Java Web Java Web
302 303
! JSP <html><body>
<%-- comentário em JSP --%>
» Toda página JSP possui uma variável
<% String mensagem = "Bem vindo!; %>
JSPWriter (para escrever na saída),
denominada out <% out.println(mensagem); %><br/>
<% String desenvolvido = "Desenvolvido por voce"; %>
»
<%= desenvolvido %><br /> <%
System.out.println("Tudo foi executado!"); %>
</body> </html>
304 305
76
Java Web Java Web
Listando elementos de um BD ! JSP
<%@ page import="modelo.academico.*, java.util.*" %>
» Embora JSP tenha sido uma evolução em
<ul> relação a Servlets, ainda temos código
<% ControlePessoa control = new ControlePessoa(); Java misturado no HTML
List<Pessoa> todos = control.recuperarTodos(); • Dificulta vida do designer!
for (Pessoa p : todos ) { %>
<li><%=p.getRg()%>, <%=p.getNome()%></li>
» Solução:
<%} • Usar elementos associados à lógica HTML
</ul> para exibir dados dinâmicos
306 307
! TagLibs ! JSTL
» Elementos HTML para programação Web » JavaServer Pages Standard Tag Library
» Exemplo: Trabalhando com POJO » Tags mais comuns para programação Web
• Construtor sem parâmetros e métodos get e com Java
set para atributos » Existem 4 grupos comuns de bibliotecas:
• <jsp:useBean id=”p"
• Core
class=“modelo.academico.Pessoa"/>
• Formatação
• ${p.nome}: invoca getNome no objeto p
• Internacionalização
• Manipulação de XML
308 309
77
Java Web Java Web
! Declarando a TagLib ! Principais tags: forEach
» <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
310 311
312 313
78
Java Web Java Web
314 315
ChatBots ChatBots
316 317
79
ChatBots ChatBots
! API Telegram
» Use o BotFather para criar seu bot
318 319
ChatBots ChatBots
320 321
80
ChatBots ChatBots
322 323
81