Programação Orientada ObjetoII
Programação Orientada ObjetoII
Programação Orientada ObjetoII
Rafael Lucchesi
Diretor do Departamento Nacional do SENAI
Alcantaro Corra
Presidente da Federao da Indstria do Estado de Santa Catarina
Florianpolis/SC
2011
proibida a reproduo total ou parcial deste material por qualquer meio ou sistema sem o prvio consentimento
do editor.
Autor
Diogo Vincius Winck
Fotografias
Banco de Imagens SENAI/SC
http://www.sxc.hu/
http://office.microsoft.com/en-us/ images/
http://www.morguefile.com/
http://www.bancodemidia.cni.org.br/
Prefcio
Voc faz parte da maior instituio de educao profissional do estado.
Uma rede de Educao e Tecnologia, formada por 35 unidades conectadas e estrategicamente instaladas em todas as regies de Santa Catarina.
No SENAI, o conhecimento a mais realidade. A proximidade com as
necessidades da indstria, a infraestrutura de primeira linha e as aulas
tericas, e realmente prticas, so a essncia de um modelo de Educao
por Competncias que possibilita ao aluno adquirir conhecimentos, desenvolver habilidade e garantir seu espao no mercado de trabalho.
Com acesso livre a uma eficiente estrutura laboratorial, com o que existe
de mais moderno no mundo da tecnologia, voc est construindo o seu
futuro profissional em uma instituio que, desde 1954, se preocupa em
oferecer um modelo de educao atual e de qualidade.
Estruturado com o objetivo de atualizar constantemente os mtodos de
ensino-aprendizagem da instituio, o Programa Educao em Movimento promove a discusso, a reviso e o aprimoramento dos processos
de educao do SENAI. Buscando manter o alinhamento com as necessidades do mercado, ampliar as possibilidades do processo educacional,
oferecer recursos didticos de excelncia e consolidar o modelo de Educao por Competncias, em todos os seus cursos.
nesse contexto que este livro foi produzido e chega s suas mos.
Todos os materiais didticos do SENAI Santa Catarina so produes
colaborativas dos professores mais qualificados e experientes, e contam
com ambiente virtual, mini-aulas e apresentaes, muitas com animaes, tornando a aula mais interativa e atraente.
Mais de 1,6 milhes de alunos j escolheram o SENAI. Voc faz parte
deste universo. Seja bem-vindo e aproveite por completo a Indstria
do Conhecimento.
Sumrio
Contedo Formativo
Apresentao
38
41
Seo 7 - Javabeans
Java Bsico
43
Seo 1 - String
45
Seo 2 - Array
47
Seo 3 - Construtor
16
48
50
52
Seo 6 - Tratamento de
excees
16
Seo 3 - Al SENAI!
19
19
Seo 5 - Varivel
21
54
22
57
25
25
29
Seo 10 - Escopo de
varivel
30
Seo 11 - Usando a
documentao do Java
Revendo a
Orientao a
Objetos
Seo 1 - Orientao a
objetos: classes, objetos e
instncias
Seo 2 - Atributos,
mtodos, interface, estados
e comportamento
86 Unidade de estudo 7
13
32 Unidade de estudo 2
83
Avanando no Java
12 Unidade de estudo 1
33
Collections
11
42 Unidade de estudo 3
33
82 Unidade de estudo 6
58 Unidade de estudo 4
AWT e Swing
59
59
Seo 2 - Al SENAI!
63
64
Seo 4 - Eventos
64
JDBC
87
88
94 Unidade de estudo 8
Apndice 1 Preparando o
Ambiente de
Trabalho
95
97
Seo 2 - Instalando o
PostgresSQL
68 Unidade de estudo 5
Arquivos
69
34
69
Seo 2 - Manipulando
arquivos
34
76
37
Seo 5 - Visibilidade
Finalizando
104
Referncias
106
Contedo Formativo
Carga horria da dedicao
Carga horria: 150 horas
Competncias
Analisar e implementar os recursos avanados da programao orientada a objetos para soluo de problemas computacionais.
Conhecimentos
Orientao a objetos: classes, objetos e instncias.
Comentrios.
Composio, agregao.
Construtores.
Encapsulamento.
Herana.
Interface de desenvolvimento (IDE).
Interfaces grficas.
Mtodos e atributos.
Padres de desenvolvimento (frameworks).
Padronizao de cdigo.
Polimorfismo.
Reutilizao de cdigos.
APIs.
Sobrecarga e sobrescrita de mtodos e construtores.
Habilidades
Aplicar os conceitos de orientao a objetos.
Utilizar interfaces de desenvolvimento (IDE) de sistemas orientado a objetos.
Utilizar os padres de projeto em aplicaes computacionais.
Desenvolver aplicaes para desktop.
Atitudes
Organizao e zelo na utilizao de equipamentos.
Foco no contedo trabalhado.
Acesso a stios relacionados ao tema trabalhado.
Organizao e limpeza dos ambientes coletivos.
Dedicao e empenho nas atividades curriculares e extracurriculares.
Capacidade de abstrao.
Trabalho em equipe.
Apresentao de novas solues para situaes problemas.
Cumprimento de prazos.
Anlise crtica de suas produes.
10
Apresentao
Bem-vindo disciplina de Programao Orientada a Objeto II. Este material foi elaborado para facilitar o seu aperfeioamento neste importante paradigma de desenvolvimento de software. A Programao Orientada
a Objetos tornou-se um padro amplamente utilizado, principalmente
por limitar a complexidade e permitir solues elegantes para problemas
complexos, caractersticas que voc verificar no decorrer desta unidade
curricular.
O grande objetivo deste material apresentar os conceitos de orientao
a objetos na prtica. Para isto, sero explorados detalhes da linguagem de
programao Java. Esta linguagem consolidou-se e continua expandido
o seu uso nos mais diversos projetos. Pela frente h grandes desafios
que contribuiro no seu desenvolvimento profissional, e este material o
ajudar nesta tarefa, portanto, dedique-se e supere-os!
Agora com voc. Bons Estudos!
11
Unidade de
estudo 1
Sees de estudo
Seo 1 - O que Java?
Seo 2 - Tipos de distribuies JAVA
Seo 3 - Al Senai!
Seo 4 - O que aconteceu?
Seo 5 - Variveis
Seo 6 - Tipos primitivos de dados
Seo 7 - Casting e promoo
Seo 8 - Operadores aritmticos
Seo 9 - Controle de fluxo
Seo 10 - Escopo de varivel
Seo 11 - Usando a documentao do Java
Java Bsico
SEO 1
O que Java
Em 1995, a Sun lanou uma linguagem de programao chamada
Java. Ela foi fruto de um projeto
iniciado em 1992 que no deu
certo comercialmente. O sucesso
inicial aconteceu com os applets,
que eram brinquedos para web
que, naquela poca, era esttica.
Em 2009, a Sun foi adquirida pela
Oracle.
O Java se consolidou e, hoje,
est presente nas mais variadas
empresas, como IBM, Oracle e
NASA. Mas por que esse sucesso? Porque o Java consegue lidar
bem com problemas comuns das
demais linguagens: portabilidade, gerenciamento de memria,
custo de ferramenta. Alm disso,
atualmente, possvel encontrar
configuraes para o uso dessa
linguagem, por exemplo: em servidores web, desktops ou dispositivos mveis.
Afinal de contas, o que o Java?
O Java :
um framework/ambiente de execuo presente em browsers, mainframes, sistemas operacionais (SOs), celulares, palmtops, cartes inteligentes, eletrodomsticos.
JVM: Java Virtual Machine ou Mquina Virtual Java, que responsvel pela execuo dos programas.
JRE: Java Runtime Environment ou Ambiente de Execuo a Java, que
o pacote necessrio para executar programas Java, composto pelas
bibliotecas e JVM.
JDK: Java Development Kit ou Kit de Desenvolvimento Java, que o
kit necessrio para desenvolver aplicaes, contendo a JRE e ferramentas, como, por exemplo, o compilador Java.
Tambm compem a plataforma, recursos como:
buio de aplicaes.
Java 2D(Awt).
13
14
d. so carregadas as classes do
sistema remotas, disponveis,
por exemplo, em um servidor.
15
SEO 3
Al Senai!
A realizao desta seo, e das prximas, depende de preparao do ambiente de trabalho, segundo a unidade de estudo 8 (Apndice 1).
A melhor forma de iniciar o entendimento, ou a relembrar como funciona uma linguagem, por meio de exemplos simples. Nesta seo, ser
elaborado um primeiro programa: Al Senai!, que ir imprimir uma
linha simples no console: Al Senai!.
A realizao dessa tarefa ser feita no Netbeans. Estando ele aberto, deve-se criar um novo projeto chamado JavaBasico. Na figura a seguir, so
detalhados os passos para fazer isso.
SEO 2
Tipos de distribuies
JAVA
A partir de 2009, a tecnologia Java
passou por um amplo processo
segmentao de sua atuao, principalmente, aps a aquisio da
Sun pela Oracle. Vrias plataformas foram derivadas para necessidades especficas. Destacam-se
algumas:
16
Podem-se observar alguns pontos importantes no arquivo apresentando. Na figura 5, esses pontos so detalhados.
System.out.println(Alo Senai!);
17
// e /* */ so comentrios.
void o valor de retorno do mtodo. Quando um mtodo no
retorna nenhum valor, uma espcie de valor vazio tem que ser especificado.
String args [ ] um vetor de strings que formado quando so passados ou no argumentos por meio da linha de comando.
System.out.println apresentada no console, a mensagem passada
como parmetro e entre aspas. Se for utilizado o System.out.print no
ser feita a quebra de linha no final da mensagem.
O Netbeans torna a execuo dos projetos criados de maneira bem simples. Na figura a seguir, pode-se observar como executar esse primeiro
exemplo. Pode-se tambm ver o resultado da execuo. Confira.
Alguns erros podem acontecer na execuo, por descuido do desenvolvedor. importante considerar algumas caractersticas da linguagem
Java:
correspondente.
18
SEO 4
O que aconteceu?
Quando foi acionado o boto executar projeto, o NetBeans compilou o cdigo Java, gerando um ByteCode. Alm disto, iniciou a mquina virtual
Java (JVM), indicando para ela onde estava o cdigo recm gerado.
A Mquina Virtual Java procurou no ByteCode por um mtodo main. Este
utilizado como ponto de entrada das aplicaes Java Desktop. Um
esquema dessa execuo j foi detalhado na figura 3.
Durante a execuo, a JVM identificou a chamada para o mtodo println,
presente no atributo out da classe System. O mtodo println imprime, na
sada padro, a String passada por parmetro. Nesse exemplo, a sada padro era o console de execuo e a String passada era Al Senai!.
Altere o exemplo adicionando \n ao final de mensagem. Ele um caractere especial de sada que informa ao sistema se a sada em tela ter
alguma caracterstica diferente, nesse caso ser uma quebra de linha.
Confira alguns caracteres especiais de sada que podem ser testados:
\n
\t
\r
\\
\
nova linha;
tabulao;
retorno do carro (impressora);
barra inversa;
aspas duplas.
Essa mesma operao poderia ser feita por meio do console do sistema
operacional. Portanto, seria preciso utilizar o comando javac para compilar o programa. E o comando java instanciar a mquina virtual e executar
o bytecode. No ambiente, o Windows ficaria da seguinte maneira:
C:\<caminho>\javac AloSenai.java
C:\<caminho>\java AloSenai
SEO 5
Varivel
19
20
sinal de sublinhado -;
abstract
continue
for
New
switch
assert
default
goto
package
synchronized
boolean
do
if
private
this
break
double
implements
protected
throw
byte
else
import
public
throws
case
enum
instanceof
return
transient
catch
extends
int
short
try
char
final
interface
static
void
class
finally
long
strictfp
volatile
const
float
native
super
while
Alm dessas regras, existe uma conveno amplamente aceita pelos desenvolvedores da comunidade Java, que pode ser observada na unidade
de estudo 9 (apndice 2).
SEO 6
real com 8 bytes de tamanho, definido segundo a norma IEEE754. Pode armazenar valores
entre 4.94065645841246544e-324
a 1.79769313486231570e+308.
O valor padro para o double
0.0d.
Exemplo: double estrelas =
1e40;
double preco = 119.99;
Nenhuma varivel pode ser usada antes de ser inicializada. Mais
exemplos de uso de variveis podem ser observados na figura 9.
21
boolean
Boolean
byte
Byte
Byte.parseBype(String vl)
char
Character
String.charAt(int pos)
double
Double
Double.parseDouble(String vl)
float
Float
Float.partFloat(String vl)
int
Integer
Integer.parseInt(String vl)
long
Long
Long.parseLong(String vl)
short
Short
Short.parseShort(String vl)
do no objeto.
22
SEO 7
Promoo e casting
Na seo anterior, pde-se observar que cada tipo de varivel possui um tamanho e um formato: algumas suportam caractere, outras
suportam nmeros inteiros ou
reais. Por conta destas diferenas,
deve-se tomar um pouco de cuidado ao atribuir variveis de tipos
diferentes.
Quando se atribui uma varivel,
com tipos de dados mais restritos,
para outra com tipo de dado mais
amplo, isso chamado de promoo. Nesses casos, no h preocupaes: a JVM faz converso
automtica. Por exemplo, atribuir,
uma varivel do tipo short (menor) para outra varivel do tipo int
(maior): no h problema! Alguns
exemplos de promoo podem
ser observados a seguir:
byte
short
int
long
float
double
var0 = 10;
var1 = var0;
var2 = var1;
var3 = var2;
var4 = var3;
var5 = var4;
A mensagem de erro por incompatibilidade entre tipos de classes apresentada da seguinte maneira:
Exception in thread main java.lang.RuntimeException: Uncompilable source code - possible loss of precision
required: int
found: double
at Arredondamento.main(Arredondamento.java:13)
Nesse caso, e em situaes similares, faz-se necessrio, realizar um casting, indicando, explicitamente para a JVM, a converso que deve ser
feita. O tipo desejado colocado entre parnteses e usado como um
prefixo para a expresso que deve ser modificada. Na figura 11, pode-se
observar o exemplo anterior corrigido de modo a utilizar o cast. Observe o formato padro do casting.
23
PARA
byte
short
char
int
long
float
double
byte
----
promo
(char)
promo
promo
promo
promo
short
(byte)
---
(char)
promo
promo
promo
promo
char
(byte)
(short)
---
promo
promo
promo
promo
int
(byte)
(short)
(char)
---
promo
promo
promo
long
(byte)
(short)
(char)
(int)
---
promo
promo
float
(byte)
(short)
(char)
(int)
(long)
----
promo
double
(byte)
(short)
(char)
(int)
(long)
(float)
----
DE
24
SEO 8
Operadores aritmticos
Voc sabe quais so os operadores aritmticos disponibilizados pelo
Java? No? Ento confira:
Adio +. Exemplo: total = a + b;
Subtrao . Exemplo: total = a b;
Multiplicao *. Exemplo: total = a * b;
Diviso /. Exemplo: total = a / b;
Mdulo (resto de diviso inteira) %. Exemplo: total = a % b;
Este operador pode ser usado, somente, quando ambos operandos
so inteiros.
SEO 9
Controle de fluxo
Agora que voc j sabe quais so os operadores aritmticos, confira algumas informaes sobre o controle de fluxo.
O entendimento sobre a estrutura de execuo de programas em Java
est ligado compreenso do conceito de bloco de cdigo.
Blocos de cdigo delimitam conjuntos de comando, possibilitando tratar escopo de variveis, sincronia entre processos e controlar excees.
Um bloco delimitado por chaves { }.Observe um trecho de cdigo,
onde h dois blocos de cdigo:
if-els;
while;
do-while;
for;
switch.
PROGRAMAO ORIENTADA A OBJETOS II
25
If-else a estrutura de testes. Dependendo da satisfao da condio declarada, executa um determinado bloco de cdigo, seno, caso exista,
executado o bloco complementar. A sintaxe geral do if-else pode ser
observada no quadro 1.10.
Uma condio booleana uma expresso que utiliza um conjunto de
operadores relacionais (tabela 4) e/ou operadores lgicos (tabela 5). O
seu resultado um valor booleano. Os operadores relacionais so:
Tabela 4: Operadores relacionais
Operador
Smbolo
Exemplo
Resultado
maior
>
A>B
menor
<
A<B
maior ou igual
>=
A >= B
menor ou igual
<=
A <= B
igual
==
A == B
diferente
!=
A != B
Operador
Smbolo
Exemplo
Resultado
&&
A && B
OU
||
A || B
Negao
!A
26
Operador
ps-fixado
unrio
multiplicao
adio/subtrao
descolamento
relacional
igualdade
bitwise AND
bitwise exclusive OR
bitwise inclusive OR
lgico AND
lgico OR
ternrio
atribuio
Precedncia
expr++ expr-++expr --expr +expr -expr ~ !
*/%
+<< >> >>>
< > <= >= instanceof
== !=
&
^
|
&&
||
?:
= += -= *= /= %= &= ^= |= <<= >>= >>>=
Maior precedncia
Menor precedncia
27
Outra estrutura de repetio amplamente utilizada o for. Essa estrutura deve ser usada, quando se deseja controlar a quantidade de vezes que
sero executados um determinado bloco de cdigo.
O fluxo de um programa desviado, de modo que repita um bloco de
cdigo, enquanto uma determinada condio booleana for verdadeira. A
sintaxe geral do for pode ser observada a seguir.
Na figura 14, pode-se observar um programa que calcula os 10 primeiros nmeros da srie de Fibonacchi, dessa vez, utilizando um for.
28
break interrompe a execuo do lao, o fluxo continuar executando o prximo comando, aps a estrutura. O break no consegue
sair de todas as estruturas encadeadas, sendo necessrio o uso de mltiplos breaks nesses casos;
continue faz com que seja interrompida a execuo do bloco de
SEO 10
Escopo de varivel
O escopo de uma varivel o alcance que uma varivel possui, permitindo o seu acesso ou mesmo a sua existncia. O escopo definido pelos blocos de cdigo, onde essa varivel foi declarada, existe e pode ser
acessada. Na figura 15, pode-se observar um exemplo de um problema
relacionado a escopo.
Nesse trecho de cdigo declarada uma varivel em um bloco de cdigo
e o desenvolvedor tenta acess-la em outro, ocasionando o problema.
Duas variveis so criadas: contaLacoInterno e contaLacoExterno.
29
SEO 11
30
a hierarquia da classe;
uma descrio da classe e seu propsito geral;
uma lista de variveis associadas;
uma lista de construtores;
de cada varivel;
31
Unidade de
estudo 2
Sees de estudo
Seo 1 Orientao a objetos: classes,
objetos e instncias
Seo 2 Atributos, mtodos, interface,
estados e comportamento
Seo 3 Os trs pilares da orientao a
objetos
Seo 4 Estudo de caso: Tamagotchi com
personalidade
Seo 5 Visibilidade
Seo 6 Estudo de caso: sistema de cliente
Seo 7 Javabeans
SEO 2
Atributos, mtodos,
interface, estados e
comportamento
Os atributos so caractersticas
relevantes de uma classe de objetos para a soluo de um problema, sobre os quais podem ser
executadas aes. O estado de
um objeto determinado pelo
conjunto dos valores dos atributos. Para evitar estados invlidos
ou inconsistentes e acessos indevidos, os atributos devem ser apenas manipulveis por operaes
do prprio objeto.
Um comportamento uma ao
executada por um objeto em resposta a alguma mensagem ou
mudana de estado. Ele acionado pela execuo de algum mtodo. Entretanto, essa relao no
explcita, j que um mesmo comportamento pode ser realizado
por vrios mtodos.
Os mtodos so operaes
(aes) explicitamente detalhadas
e codificadas nas classes. O conjunto das operaes pblicas de
um objeto forma a lista de servios disponibilizados. A esse servio dado o nome de interface do
objeto.
Uma interface um contrato
com o mundo exterior, informando o que um objeto pode fazer,
mas no sua implementao. Uma
interface no possui implementao e no pode ser instanciada.
33
O polimorfismo a capacidade
de uma mesma referncia, como,
por exemplo, um ponteiro para
objetos, representar implementaes diferentes, sendo que a implementao selecionada por
algum mecanismo automtico,
assim, permite-se que um nico
nome expresse comportamentos
diferentes, possibilitando a utilizao de um mesmo nome de
mtodo em mais de uma classe
e, ainda, assuma implementaes
diferentes em cada classe.
SEO 4
Estudo de caso:
Tamagotchi com
personalidade
SEO 3
34
A classe Animal est associada classe personalidade, que, por sua vez,
possui quatro especializaes: Agitado, Alegre, Bravo e Triste.
No exemplo, a classe Animal no sabe detalhes (encapsulamento) sobre
as classes especializadas de humor. Essa classe sabe que ao solicitar a
operao toString (sobreposio/polimorfismo) da classe humor, receber o texto correto.
35
Na figura 19 voc pde ver o uso dessas classes. Os cdigos das demais
classes voc confere a seguir.
36
SEO 5
Visibilidade
37
SEO 6
A classe Cliente possuir os seguintes atributos: nome, telefone, endereco e limite de compras. Deve possuir um mtodo que avalia se uma
determinada compra pode ser feita. Observe o cdigo da classe Cliente:
38
package org.senai.cliente;
public class Cliente {
private String nome;
private String telefone;
private String endereco;
private double limiteCompras;
public Cliente() {
}
public Cliente(String nome) {
this.nome = nome;
}
public void setNome(String nome) {
this.nome= nome;
}
public String getNome() {
return nome;
}
public String getEndereco() {
return endereco;
}
public void setEndereco(String endereo) {
this.endereco = endereo;
}
public double getLimiteCompras() {
return limiteCompras;
}
public void setLimiteCompras(double limiteCompras) {
this.limiteCompras = limiteCompras;
}
public String getTelefone() {
return telefone;
}
public void setTelefone(String telefone) {
this.telefone = telefone;
}
public boolean liberarCompra(double value){
return value <= limiteCompras;
}
public String toString() {
return Cliente:+ nome + Telefone= + telefone + Endereo= +
endereco + Limite de Compras= + limiteCompras;
}
}
39
package org.senai.cliente;
public class ClienteEspecial extends Cliente {
private String nomeContato;
private String telefoneContato;
public ClienteEspecial() {
super();
}
public ClienteEspecial(String nome) {
super(nome);
}
public boolean liberarCompra(double value) {
return true;
}
public String getNomeContato() {
return nomeContato;
}
public void setNomeContato(String nomeContato) {
this.nomeContato = nomeContato;
}
public String getTelefoneContato() {
return telefoneContato;
}
public void setTelefoneContato(String telefoneContato) {
this.telefoneContato = telefoneContato;
}
public String toString() {
return Cliente Especial \tnome:+getNome() + Telefone: +
getTelefone()+ Endereco: + getEndereco() + Contato:
+nomeContato+ Telefone Contato:+telefoneContato +
Limite de Compras: sem limite ;
}
}
Por conta da lgica do negcio, foram redefinidas a construtora e o mtodo liberarCompra um cliente especial possui compras sempre liberadas. Observe, tambm, a criao de dois novos atributos: nomeContato
e telefoneContato, e os respectivos mtodos get/set. Na construtora,
pode-se ver a aplicao do operador super. Aqui, ele indica que est sendo chamada a construtora da classe pai.
No exemplo a seguir, pode-se observar o cdigo da classe cliente devedor. Assim como, cliente especial, ela uma especializao da classe
Cliente e, por isso, no necessrio redefinir os atributos: nome, telefone, endereo e limite de crdito. Foram redefinidas a construtora e o
mtodo liberarCompra, por conta, da lgica de negcio e, agora, um
cliente devedor no pode fazer compras.
40
package org.senai.cliente;
public class ClienteDevedor extends Cliente {
public ClienteDevedor() {
}
public ClienteDevedor(String nome) {
super(nome);
}
public boolean liberarCompra(double value) {
return false;
}
public String toString() {
return Cliente Devedor \tnome: + getNome() + Telefone: +
getTelefone() + Endereco: + getEndereco() +
Limite de Compras: BLOQUEADO;
SEO 7
Javabeans
Javabeans so componentes de software, projetados para serem reutilizados. Eles possuem, como premissa, garantir o encapsulamento.
Por isso, so classes que possuem
construtores sem argumentos e as
suas propriedades so acessadas
externamente, apenas por meio
de mtodos get/set. Nos exemplos anteriores, as classes podem
ser consideradas Javabeans.Cuidado para no confundir Javabeans
com Enterprise Javabeans. Enterprise
Javabeans um dos componentes
da plataforma Entreprise (Java Enterprise Edition), que so executados nos servidores, sendo acessados por meio do uso interfaces
locais/remotas e um protocolo,
como, por exemplo, RMI-IIOP.
Nessa unidade de estudos voc
acompanhou uma breve reviso
sobre a orientao a objetos, alm
de acompanhar dois estudos de
caso: o Tamagotchi com personalidade e um sistema de cliente. Na
prxima unidade, voc comear
a avanar no Java, ento, prepare-se. Todas as informaes so importantes para o seu aprendizado
na rea.
41
Unidade de
estudo 3
Sees de estudo
Seo 1 String
Seo 2 Array
Seo 3 Construtor
Seo 4 Final e static
Seo 5 Estudo de caso: relao
de clientes
Seo 6 Tratamento de excees
Seo 7 Estudo de caso: objetos
de calcular
Seo 8 Utilizando pacotes
Avanando no Java
SEO 1
String
String a classe de objetos destinada a representar uma cadeia de caracteres. Diferentes dos tipos primitivos, as variveis do tipo String guardam referncias aos objetos, e no um valor.
Veja um exemplo de como criar uma String.
Uma vez criada uma varivel do tipo String, ela imutvel. As Strings
so adicionadas a um pool de Strings e, sendo preciso, so reutilizadas.
Pode-se observar, na figura a seguir, um exemplo das implicaes do uso
do operador new e do pool de Strings.
43
Nessa demonstrao, o desenvolvedor pode ter a impresso de ter criado apenas uma String, mas na verdade, foram criadas trs: parte 1,
parte 2 e parte 1 parte 2. Pode-se concatenar string com qualquer
objeto ou tipos primitivos. Veja:
44
SEO 2
Array
Um array um container de objetos de um determinado tipo que possibilita tratar um nmero fixo de elementos, definidos no momento da
sua instanciao. Tambm conhecido por vetor (unidimensional) ou
matriz (multidimensional). Podem-se criar vetores de qualquer tipo primitivo ou classe.
Os elementos de um array so acessados por meio de um ndice inteiro.
O ndice do primeiro elemento igual a zero (0), e ndice do ltimo
igual ao tamanho do vetor -1.
Um array pode ter vrios nveis e seu tamanho definido no momento
da criao. No Java, a declarao no cria o objeto propriamente dito. Ao
invs disso, a declarao de um array cria uma referncia que pode ser
usada para percorrer um array. Observe um exemplo:
45
importante observar que no se deve determinar o tamanho desejado do vetor na sua declarao. Isso deve ser feito no momento da
instanciao, por meio do uso do operador new.
String [ ] matrizStrings;
matrizStrings= new String[3];
matrizStrings[0] = new String(Santa Catarina);
matrizStrings[1] = new String(Joinville);
matrizStrings[2] = new String(Senai);
46
SEO 3
Construtor
47
SEO 4
Final e static
O Java disponibiliza duas palavras-chave, que modificam o comportamento da linguagem sobre classes, atributos, argumentos, variveis e
mtodos: static e final.
O final pode ser aplicado classe, mtodos, atributos, variveis e argumentos. Quando aplicada, na declarao de uma classe, indicada que a
classe no pode ser extendida. Isso permite, ao desenvolvedor da classe,
garantir que o comportamento da classe no ser alterado por uma questo de segurana, por exemplo:
Assim, como uma classe final, um mtodo final de uma classe no pode
ser sobrescrito nas suas subclasses.
Quando aplicado a uma varivel, argumento ou atributo, o operador
final impede que o contedo seja alterado aps a sua declarao, ou, no
caso dos atributos de uma classe, na sua costrutora. Qualquer tentativa
de mudana de valor, aps a sua declarao, causa um erro de compilao. Por conta dessa restrio escrita, a VM pode aperfeioar o acesso
a esta varivel, reduzindo o tempo despendido para operao, algo que
pode ser positivo dependendo da situao. Veja um exemplo de tentativa
de derivar uma classe fina.
48
public Carro(int anoFabricacao)
{
this.anoFabricacao = anoFabricacao;
}
public void adulteraCarro(int novoAnoFabricacao){
{
this.anoFabricacao = novoAnoFabricacao;
//<<o compilador ir indicar um erro na linha acima.
}
}
49
public static void log(int type, String msg){
//... cdigo do log ..
}
}
SEO 5
50
package com.senai.main;
import org.senai.cliente.Cliente;
import org.senai.cliente.ClienteDevedor;
import org.senai.cliente.ClienteEspecial;
public class RelacaoCliente {
public static void main(String args[]){
Cliente[] clientes = new Cliente[3];
Cliente joao = new Cliente(Loja do Joao);
joao.setEndereco(Rua dos programadores, 100);
joao.setLimiteCompras(150);
joao.setTelefone(2235-0813);
ClienteEspecial maria = new ClienteEspecial(Loja da Maria);
maria.setEndereco(Rua dos desenvolvedores, 101);
maria.setLimiteCompras(150);
maria.setTelefone(2235-0813);
maria.setNomeContato(Maria);
maria.setTelefoneContato(2357-1113);
ClienteDevedor juka = new ClienteDevedor(Loja da juka);
juka.setEndereco(Rua dos analistas, 110);
juka.setLimiteCompras(150);
juka.setTelefone(2235-0813);
clientes[0] = joao;
clientes[1] = maria;
clientes[2] = juka;
listarClientes(clientes);
}
public static void listarclientes(Cliente[] clientes){
System.out.println(Listagem de Clientes);
for(Cliente cliente : clientes){
System.out.println(cliente);
}
}
}
51
SEO 6
Tratamento de excees
O tratamento de excees o mecanismo para tratar erros durante
a execuo de um programa. Ele
representa uma parte significativa
do esforo em projetos desenvolvidos em Java. Entretanto, esse
esforo no agrega valor ao produto e, normalmente, implica em
problemas quando no adequadamente codificado.
As excees so classes que representam erros durante a execuo
de um programa Java. Os objetos
que representam as excees podem ser lanados, capturados
e manipulados. So considerados
condies de erro:
rede interrompida;
no est no classpath.
52
A linguagem Java exige que toda exceo, que possa ser lanada, deve ser
tratada. No exemplo anterior de cdigo, o desenvolvedor, que disparar
o mtodo loadData, precisar tratar a exceo do tipo IOException, caso
contrrio, o compilador indicar que h um problema no cdigo. Essa
situao no aplicada, caso as excees lanadas, envolvam instncias
da classe Error, RuntimeException e das classes delas derivadas.
Ainda no cdigo mostrado, anteriormente, caso o mtodo verificarArquivo retornar falso, ser criado um objeto do tipo IOException. O fluxo de
controle ser interrompido, e retornar para o mtodo chamador, um
objeto de exceo. Observe, a seguir, o cdigo que dispara o mtodo verificarArquivo. Ele est envolvido com um conjunto de try/catch/finally.
53
SEO 7
54
55
56
SEO 8
Utilizando pacotes
Projetos de softwares exigem uma forma prtica de organizar os arquivos envolvidos. No Java, esse mecanismo package. Ele permite agrupar
classes relacionadas, utilizando a hierarquia de diretrios nesta organizao, possibilitando a criao de mltiplos nveis de classes.
Deve-se utilizar a declarao de pacote package para relacionar uma determinada classe a um pacote a estrutura de diretrios explicitada
nessa declarao. As classes que estiverem no mesmo diretrio e possurem a mesma declarao de package, comporo um pacote. Voc pode
observar essa organizao na figura a seguir.
57
Unidade de
estudo 4
Sees de estudo
Seo 1 Viso geral
Seo 2 Al Senai!
Seo 3 Containers e gerenciadores
de layout
Seo 4 Eventos
Seo 5 Estudo de caso: objetos de
calcular
AWT e Swing
SEO 1
Viso geral
O desenvolvedor possui uma variedade grande de APIs para desenvolver interfaces com o usurio no Java. Duas se destacam: o
AWT e o Swing.
O AWT Abstract Window Toolkit- o antigo conjunto de ferramentas para interfaces grficas
do Java. Serve para oferecer infraestrutura mnima de interface
grfica (nivela por baixo).
Os componentes do Abstract Window Toolkit esto no pacote java.
awt.*. Ele contm todas as classes
para criao de interfaces, entretanto apresenta alguns problemas:
dependente de plataforma na
qual a aplicao ser executada;
plataformas.
JTextField;
JTextArea;
JRadioButton;
ButtonGroup;
JCheckBox;
JComboBox;
JPanel;
JScrollPane.
nente;
Java 2D API;
Look-and-Feel;
Internationalization;
Accessibility API.
SEO 2
Al Senai!
a borda,
o ttulo;
os botes para maximizar,
59
60
rtulo (JLabel);
campo de texto (JTextField);
boto (JButton).
O prximo passo configurar os componentes, para isso, preciso clicar sobre o formulrio. No canto inferior esquerdo, sero apresentadas
as propriedades do formulrio. Altere, se for preciso, as seguintes propriedades:
Machine deve tratar o formulrio aps ele ter sido fechado. O valor deve
ser: EXIT_ON_CLOSE;
61
62
SEO 3
Containers e
gerenciadores
de Layout
63
FlowLayout: no restringe o
tamanho dos componentes que
administra, e lhes permite ter o
tamanho desejado. Permite alinhar os componentes esquerda,
direita ou ao centro. Layout
padro do JPanel.
CardLayout: permite tratar a
interface como uma srie de cartes, os quais voc pode ver um
por vez. O mtodo add( ) usado para adicionar cartes a um
CardLayout, e recebe um JPanel
e uma String como argumento,
que identifica o panel. O mtodo
show( ) mostra o carto que foi
solicitado.
BorderLayout: o gerenciador padro do JPanel. Divide o
container em cinco reas.
GridLayout: o gerenciador
GridLayout prov flexibilidade
para colocar componentes. Ele
criado com vrias linhas e colunas. GridLayout sempre ignora
o tamanho dos componentes. A
largura de todas as clulas idntica e determinada, dividindo a
largura disponvel pelo nmero
de colunas. O mesmo feito para
a altura.
SpringLayout : um ge-
64
SEO 4
Eventos
SEO 5
No exemplo do estudo de caso, desta unidade, ser utilizada uma forma simplificada de MVC para ilustrar o seu uso. Como primeira tarefa,
deve-se abrir o projeto da calculadora desenvolvido na seo 3. No ser
preciso criar um Model, visto que na seo 3, h a classe ParserOperacao, que j representa toda a lgica de negcio envolvida.
Feito isso, a prxima tarefa criar um novo pacote chamado com.senai.
calculadora.mvc. Em projetos mais elaborados, seria importante separar os
trs elementos em trs pacotes distintos: com.senai.calculadora.model, com.
senai.calculadora.view e com.senai.calculadora.control.
No pacote criado, deve-se criar um novo JFrame, chamado, por exemplo, CalculadoraView. A propriedade title precisa ser definida como Calculadora.
Nesse JFrame deve conter:
A prxima etapa ser criar uma nova classe no pacote com.senai.calculadora.mvc. Ela dever se chamar CalculadoraController. Nela existiro
referncias tanto View, quanto classe ParserOperacao. O cdigo da
classe CalculadoraController pode ser visto a seguir. Durante a codificao dessa classe, o Netbeans poder indicar alguns erros, pois, sero
utilizados mtodos que ainda no foram implementados na View.
65
package com.senai.calculadora.mvc;
import com.senai.calculadora.ParserOperacao;
import javax.swing.JOptionPane;
public class CalculadoraController {
private ParserOperacao parserOperacao;
CalculadoraView calculadoraView;
public CalculadoraController() {
parserOperacao = new ParserOperacao();
calculadoraView = new CalculadoraView();
calculadoraView. setCalculadoraController (this);
}
public void show (){
calculadoraView.setVisible(true);
}
public void calcular(String expressao){
try{
double resultado = parserOperacao.processar(expressao);
calculadoraView.setResultado(resultado);
}catch(Exception e){
JOptionPane.showMessageDialog(calculadoraView,
Erro ao processar expresso!\n+e.getMessage(),
Erro, JOptionPane.ERROR_MESSAGE);
}
}
}
Nesse ponto, deve-se modificar o JFrame CalculadoraView para suportar as novas operaes. Observe a seguir o cdigo que deve ser adicionado classe. Tambm deve-se adicionar, no evento, a chamada para o
CalculadoraController. O cdigo para isso o que aciona o evento do
boto. Confira.
Cdigo adicional na CalculadoraView
// cdigo continua ...
public class CalculadoraView extends javax.swing.JFrame {
private CalculadoraController calculadoraController;
public void setCalculadoraController(
CalculadoraController calculadoraController){
this.calculadoraController = calculadoraController;
}
public void setResultado(double resultado){
String vl = String.valueOf(resultado);
jtfExpressao.setText(vl);
}
// cdigo continua ...
66
Por fim, deve-se modificar a classe principal (main) do projeto, para que
ela exiba e utilize a CalculadoraController. Veja a modificao necessria,
no cdigo, a seguir, e a execuo da aplicao na figura 36.
package com.senai.calculadora;
import com.senai.calculadora.mvc.CalculadoraController;
public class Main {
public static void main(String[] args) {
CalculadoraController calculadoraController = new CalculadoraController();
calculadoraController.show();
}
}
67
Unidade de
estudo 5
Sees de estudo
Seo 1 Viso geral
Seo 2 Manipulando arquivos
Seo 3 Estudo de caso: editor de
texto
Entrada e Sada
SEO 1
SEO 2
Viso Geral
File;
InputStream e OutputStream;
Reader e Writer;
BufferedReader e BufferedWriter;
DataInput e DataOutput;
ObjectInput e Object Output.
Manipulando arquivos
de arquivos;
69
import java.io.File;
public class ListandoArquivos {
public static void main(String args[]){
for(File root : File.listRoots()){ //lista os diretrios raizes
System.out.println(Raiz: +root.getAbsolutePath());
if(root.listFiles() == null){ // se no possui lista de arqivos
continue; //continua no prximo lao
}
for(File arq : root.listFiles()){ //lista os diretrios raizes
System.out.print( +arq.getAbsolutePath());
if(arq.isHidden()){ //se for oculto, exibe (o)
System.out.print( (o));
}
if(arq.isDirectory()){
System.out.print( (d)); //se for dir, exibe (d)
}else{
//seno, exibe o tamanho
System.out.print( tam:+arq.length());
}
System.out.println();
}
//verifica se tem diretrio temp no raiz, se no tiver tenta criar
File temp = new File(root.getAbsoluteFile()+Temp\\);
if(temp.exists() == true){
System.out.print(Criando diretrio temporrio...);
try{
temp.mkdir();
}catch(SecurityException e){
System.out.print( Permisso negada!);
}
finally{
System.out.println();
}
}
else{
System.out.println(J possui diretorio temporrio!);
}
}
}
}
70
A interface FilenameFilter tem um mtodo abstrato accept( ), que, quando implementado, retorna um array de File. O contedo do array so
Strings, que representam arquivos e diretrios. O mtodo accept( ) filtra
o retorno dos dois mtodos (list( ) e listFiles( )), por exemplo, pode-se
definir um filtro para que sejam retornados somente arquivos .exe e .com.
Observe um exemplo de como criar um novo tipo de execuo:
import java.io.File;
public class ListandoArquivos {
public static void main(String args[]){
for(File root : File.listRoots()){ //lista os diretrios raizes
System.out.println(Raiz: +root.getAbsolutePath());
if(root.listFiles() == null){ // se no possui lista de arqivos
continue; //continua no prximo lao
}
for(File arq : root.listFiles()){ //lista os diretrios raizes
System.out.print( +arq.getAbsolutePath());
if(arq.isHidden()){ //se for oculto, exibe (o)
System.out.print( (o));
}
if(arq.isDirectory()){
System.out.print( (d)); //se for dir, exibe (d)
}else{
//seno, exibe o tamanho
System.out.print( tam:+arq.length());
}
System.out.println();
}
//verifica se tem diretrio temp no raiz, se no tiver tenta criar
File temp = new File(root.getAbsoluteFile()+Temp\\);
if(temp.exists() == true){
System.out.print(Criando diretrio temporrio...);
try{
temp.mkdir();
}catch(SecurityException e){
System.out.print( Permisso negada!);
}
finally{
System.out.println();
}
}
else{
System.out.println(J possui diretorio temporrio!);
}
}
}
}
71
package com.senai.file;
import java.io.File;
import java.io.FilenameFilter;
class FiltroExe implements FilenameFilter {
public boolean accept(File dir, String arq) {
return arq.endsWith(.exe);
}
}
A operao de leitura deve ser feita por meio do uso de classes derivadas da classe abstrata InputStream. Os mtodos bsicos do
InputStream so:
int read()
int read(byte[])
int read(byte[ ], int ini, int tam)
void close()
int available()
void skip(long tam)
72
Uma das classes concretas, derivadas da InputStream, FileInputStream. Ela permite realizar operaes sobre arquivos,
como, ler um byte do arquivo, por
exemplo. Na instanciao de um
FileInputStream, deve-se passar
o caminho do arquivo que ser
lido. A leitura de arquivos-texto
realizada pelas classes FileInputStream, InputStreamReader e BufferedReader. Um exemplo de leitura de arquivo pode ser visto na
figura a seguir.
try {
Reader inputStreamReader = new InputStreamReader(System.in);
BufferedReader bufferedReader =
new BufferedReader(inputStreamReader);
System.out.println(Lendo do teclado);
for (String linha = ;
linha != null && linha.equals(fim)!=true;
linha = bufferedReader.readLine()) {
System.out.println(linha lida: + linha);
}
} catch (FileNotFoundException ex) {
System.out.println(Ocorreram problemas ao abrir arquivo);
} catch (IOException ex) {
System.out.println(Ocorreram problemas ao abrir arquivo);
}
73
Similar leitura, a operao de gravao deve ser feita por meio do uso
de classes derivadas da classe abstrata OutputStream. Os mtodos bsicos do OutputStream so:
void write(int a)
void write(byte[])
void write(byte[], int ini, int tam)
void close()
void flush()
A gravao de arquivos-texto um trabalho em conjunto, entre as classes FileOutputStream, OutputStreamWriter e BufferedWriter. FileOutputSream permite gravar um byte. O OutputStreamWriter grava um
char, e o BufferedWriter, grava Strings. Um exemplo de gravao de
arquivo pode ser visto na figura 38.
74
Outra forma de ler/gravar arquivo, empregando uma implementao disponvel no Java, de mais alto nvel, utilizando as classes: java.io.FileWriter/java.io.PrintWriter e java.io.FileReader e java.
io.BufferedReader. Observe, agora, um exemplo do uso dessas classes
no cdigo a seguir.
package com.senai.file;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import javax.swing.JOptionPane;
public class FileReaderWriter {
public static void main(String[] args) {
//Gravando o arquivo
try {
FileWriter writer = null;
writer = new FileWriter(c:\\temp\\alice.txt);
PrintWriter saida = new PrintWriter(writer);
saida.println(- Nesta direo, disse o Gato, girando a pata direita,
+ mora um Chapeleiro. );
saida.println(E nesta direo, apontando com a pata esquerda,
+mora uma Lebre de Maro.);
saida.close();
writer.close();
} catch (IOException ex) {
System.out.println(Ocorreram problemas ao gravar arquivo);
}
// Lendo gravando
try {
FileReader reader = new FileReader(c:\\temp\\alice.txt);
BufferedReader leitor = new BufferedReader(reader);
String linha = null;
while ((linha = leitor.readLine())!=null) {
JOptionPane.showMessageDialog(null, linha);
}
} catch (IOException ex) {
System.out.println(Ocorreram problemas ao abrir arquivo);
}
}
}
75
SEO 3
O prximo passo ser criar a classe com a lgica do editor. Ela ser chamada de EditorModel. Veja o cdigo da Classe EditorModel.
76
package com.senai.texto;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class EditorModel {
private File arquivo;
public void setArquivo(File arqivo) {
this.arquivo = arqivo;
}
public String carregar() throws IOException {
FileReader reader = new FileReader(arquivo);
BufferedReader leitor = new BufferedReader(reader);
StringBuilder conteudo = new StringBuilder();
String linha = ;
String novaLinha =;
while ((linha = leitor.readLine()) != null) {
conteudo.append(novaLinha);
conteudo.append(linha);
novaLinha = \n;
}
leitor.close();
reader.close();
return conteudo.toString();
}
public void gravar(String conteudo) throws IOException {
FileWriter writer = new FileWriter(arquivo);
PrintWriter saida = new PrintWriter(writer);
saida.print(conteudo);
saida.close();
writer.close();
}
}
77
package com.senai.texto;
import java.io.IOException;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
public class EditorController {
// o padro singleton precisa que a classe possua uma instancia dela mesmo
private static EditorController instance;
private EditorModel editorModel;
private EditorView editorView;
//que a construtora seja privada, de modo que no se possa instanciar de fora
private EditorControl() {
initEditor();
}
78
79
Falta, agora, modificar a view para que possa chamar o controle, quando
o usurio, a ttulo de exemplo, interagir com o menu. Deve-se adicionar
eventos nos dois itens de menu, e modificar o cdigo da seguinte maneira:
A ltima coisa, que precisa ser feita, criar uma classe, que contenha um
mtodo main, para disparar a execuo do editor de texto. Veja o cdigo
da classe main e, na figura 41, o editor rodando.
package editortexto;
import com.senai.texto.EditorControl;
public class Main {
public static void main(String[] args) {
EditorController EditorController = EditorControl.getInstance();
editorControl.show();
}
}
80
81
Unidade de
estudo 6
Sees de estudo
Seo 1 Viso geral
Collections
SEO 1
Viso geral
As arrays so limitadas: uma vez
criadas no podem ter seu tamanho modificado, no disponibilizam mecanismos para procura de
elementos e no disponibilizam
para saber quanto dos seus itens
j foram utilizados. A soluo
para essas questes o uso de colees ou como conhecido no
Java, Collections.
Uma collection um tipo de objeto que permite agrupar mltiplos
elementos num s, sendo usado
para armazenar, consultar e manipular dados. Alguns exemplos cotidianos de colees so: uma fila
de banco, uma lista de compras,
uma pilha de livros, um conjunto
de elementos etc.
Boa parte das linguagens de programao orientadas a objetos
oferecem frameworks para representar e manipular colees. Tais
frameworks so formados por:
As colees fornecem operaes bsicas para manipular o seu contedo. Essas operaes esto sujeitas s caractersticas de cada coleo. As
operaes bsicas ao usar as colees so:
adicionar objetos;
remover objetos;
verificar se existe um objeto;
recuperar um objeto;
percorrer os objetos um a um.
O Java oferece um excelente framework de colees, que inclui listas, conjuntos e mapas. As abstraes (interfaces) de colees do Framework
Java esto distribudas de forma hierrquica.
implementaes: classes
concretas que implementam as
interfaces;
algoritmos: mtodos para
83
A interface Set abstrai um conjunto matemtico e no pode conter elementos duplicados. O SortedSet, como pde ser observado na figura
42, define um conjunto que mantm os elementos em ordem ascendente. So adequados para conjuntos ordenados naturalmente como, por
exemplo, uma lista de palavras.
A interface List define uma coleo ordenada e pode conter elementos
duplicados. Permite inserir um elemento, numa posio especfica da
lista, e permite acessar os elementos por meio de um ndice. o que permite manter vrios elementos antes de process-los. Alm dos mtodos
de Collection, tambm oferece mtodos a mais para insero, extrao
e operaes de inspeo. Utiliza FIFO (First In First Out) como mecanismo de ordenao. Pode operar como uma pilha, possibilitando o uso
do poll, para remover o seu primeiro. Os elementos so adicionados no
fim da fila.
O Map representa uma lista de pares chave/valor. No pode conter chaves duplicadas. Cada chave mapeia um valor. SortedMap, uma especializao de Map, representa uma lista de pares chave/valor ordenados com
ordem ascendente pela chave. adequado para conjuntos ordenados
naturalmente como, por exemplo, um dicionrio, uma lista telefnica
etc.
No exemplo, a seguir, confira um dos usos do Collection e Arraylist.
package com.senai.collection;
import java.util.ArrayList;
import java.util.Collection;
public class Main {
public static void main(String[] args) {
/* na declarao abaixo pode-se observar o uso do mecanismo chamado
* generic.
*/
Collection<String> alunos = new ArrayList<String>();
alunos.add(Joo);
alunos.add(Maria);
alunos.add(Ana);
alunos.add(Marcelo);
for (String aluno : alunos) {
System.out.println(aluno);
}
}
}
84
Na declarao da coleo alunos, pode-se observar o uso do mecanismo chamado generic. Uma coleo pode conter qualquer tipo de objeto,
entretanto, importante para o compilador Java, identificar que tipo de
dado ser utilizado e assim promover algumas validaes. Por exemplo,
se a coleo est definida para receber String, o compilador emitir um
erro se o desenvolvedor tentar adicionar um objeto do tipo Long.
Nesta aunidade de estudos voc teve uma viso geral sobre as Collections. Na prxima unidade, voc conhecer o JDBC e sua interface. Para
aprofundar mais o seu estudo, faa pesquisas e procure por literaturas na
rea. Isso ajudar a fortalecer o seu aprendizado.
85
Unidade de
estudo 7
Sees de estudo
Seo 1 Viso geral
Seo 2 Interfaces do JDBC
JDBC
SEO 1
Viso geral
Java
Database
Connectivity
(JDBC) uma API na qual definido um conjunto de classes e
interfaces, que viabilizam a conexo entre uma aplicao Java e
um banco de dados. Essas classes
e interfaces ficam agrupadas no
pacote java.sql.
O JDBC possibilita que as aplicaes possam:
banco de dados;
Middleware: So sistemas
de software que intermedeiam e/ou integram outros sistemas de software.
87
SEO 2
Interfaces do JDBC
Um driver de banco de dados tem que prover uma classe que implementa a interface java.sql.Driver. Essa classe , ento, registrada pela
classe java.sql.DriverManager para se conectar a um banco de dados.
O DriverManager, por meio do mtodo getConnection, recebe como
parmetro uma String de conexo JDBC e retorna um objeto do tipo
Connection.
Connection uma conexo com um banco de dados especfico. Dentro
do contexto de uma conexo, so executadas declaraes SQL e devolvidos resultados.
Observe um exemplo de conexo.
public class TesteConexaoBanco {
public static void main(String[] args) throws SQLException {
Connection conexao = DriverManager.getConnection(
jdbc:postgresql://localhost:5432/ControleClientes,user,user);
System.out.println(Conectado!);
conexao.close();
}
}
O Driver JDBC precisa estar carregado na JVM no momento da execuo. O Driver deve ser adicionado ao projeto,caso contrrio, durante a
execuo desse cdigo ser gerado um erro do tipo java.sql.SQLException: No suitable driver found.... Na figura, a seguir, pode-se ver
o local onde o driver deve ser adicionado. Observe.
88
Durante a carga das classes presente no classpath, o Driver ir registrar-se, possibilitando o seu uso. O desenvolvedor pode fazer isso, explicitamente, observe o exemplo a seguir.
SQL.
89
package com.senai.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
public class TesteInsert {
public static void main(String[] args) throws SQLException {
Connection conexao = DriverManager.getConnection(
jdbc:postgresql://localhost:5432/ControleClientes, postgres, 123);
System.out.println(Conectado!);
//insere registros com statement
Statement stmt = conexao.createStatement();
stmt.executeUpdate(INSERT INTO \Cliente\ values(0,Alan Turing,
+ Rua dos Cientistas, n. 85,1597-2584, , ,0));
stmt.close();
//insere registros com preperadStateme
PreparedStatement preStmt = conexao.prepareStatement(
INSERT INTO \Cliente\ values(?,?,?,?,?,?,?));
preStmt.setLong(1, 2);
preStmt.setString(2, Diogo);
preStmt.setString(3, Rua dos Desenvolvedores, 21);
preStmt.setString(4, 2357-1113);
preStmt.setString(5, Joao);
preStmt.setString(6, 7532-2357);
preStmt.setLong(7, 2);
preStmt.execute();
preStmt.close();
onexo.close();
}
}
90
package com.senai.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class TesteSelect {
public static void main(String[] args) throws SQLException {
Connection conexao = DriverManager.getConnection(
jdbc:postgresql://localhost:5432/ControleClientes, postgres, 123);
System.out.println(Conectado!);
Statement stmt = conexao.createStatement();
ResultSet rs = stmt.executeQuery(Select * from \Cliente\);
System.out.println(* Imprimindo contatos *);
while(rs.next()){
System.out.print(rs.getInt(uid)+, );
System.out.print(rs.getString(nome)+, );
System.out.print(rs.getString(endereco)+, );
System.out.print(rs.getString(telefone)+, );
System.out.print(rs.getString(nome_contato)+, );
System.out.print(rs.getString(telefone_contato)+, );
System.out.println(rs.getInt(tipo));
}
stmt.close();
conexao.close();
}
}
91
package com.senai.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class TesteSelectPreparedStatement {
public static void main(String[] args) throws SQLException {
Connection conexao = DriverManager.getConnection(
jdbc:postgresql://localhost:5432/ControleClientes, postgres, 123);
System.out.println(Conectado!);
PreparedStatement preStmt = conexao.prepareStatement(
Select * from \Cliente\ where nome=?);
preStmt.setString(1, Diogo);
ResultSet rs = preStmt.executeQuery();
System.out.println(* Imprimindo contatos *);
while(rs.next()){
System.out.print(rs.getInt(uid)+ );
System.out.print(rs.getString(nome)+ );
System.out.print(rs.getString(endereco)+ );
System.out.print(rs.getString(telefone)+ );
System.out.print(rs.getString(nome_contato)+ );
System.out.print(rs.getString(telefone_contato)+ );
System.out.println(rs.getInt(tipo));
}
preStmt.close();
conexao.close();
}
}
92
Est vendo quanta coisa importante ainda vem pela frente? Ento, prepare-se, pois na prxima unidade de estudos, voc aprender a preparar
o ambiente de trabalho, instalando JDK, NetBeans e PostgressSQL. At
mais!
93
Unidade de
estudo 8
Sees de estudo
Seo 1 Instalando JDK e NetBeans
Seo 2 Instalando o PostgresSQL
Preparando o Ambiente
de Trabalho
SEO 1
Instalando JDK
e NetBeans
Todas as ferramentas utilizadas, nos exemplos, so ferramentas gratuitas
e disponveis para download. Elas possuem tanto verses Java, quanto
Linux, alm de verses para outros sistemas operacionais. Neste material, ser detalhada apenas a verso para Windows
O primeiro passo instalar o JDK. Para isso, necessrio baixar o instalador do site da Oracle, disponvel em <http://www.oracle.com/
technetwork/java/javase/downloads/index.html>. Uma das opes
JDK+NetBeans Bundle.
Em seguida, deve-se aceitar a o termo e optar por baixar a verso Windows. Terminado o download, o instalador deve ser executado.
No instalador, necessrio aceitar o termo de licena. Aps isso, ser
solicitado o local de instalao.
Finalizada a instalao, deve-se configurar duas variveis de ambiente.
Com elas, possvel, utilizar o Java via console em qualquer diretrio.
Esse processo feito no painel de controle, opo sistema e boto variveis de ambiente.
PROGRAMAO ORIENTADA A OBJETOS II
95
96
SEO 2
Instalando o PostgresSQL
O banco de dados, utilizado no exerccio, foi o PostgresSQL. Para instal-lo necessrio baix-lo do site <http://www.postgresql.org/download/windows>.
97
98
Nesta unidade de estudos, voc aprendeu como instalar o JDK, o NetBeans e o PostgresSQL. Porm, no basta apenas instalar, preciso fazer
a codificao. isso que voc aprender na prxima unidade. Ento,
prepare-se!
99
Unidade de
estudo 9
Sees de estudo
Seo 1 Classes, interfaces e pacotes
Seo 2 Nomeando atributos e variveis
Seo 3 Mtodos
Seo 4 Endentao, comentrios, blocos
de cdigo, espaos e linhas brancas
Padres de Codificao
SEO 1
Classes, interfaces e
pacotes
Existe um conjunto de prticas e
padres, adotados pela comunidade Java, que devem ser seguidos.
Uma vez seguidos esses padres,
fica fcil compreender exemplos,
tutoriais e projetos disponveis na
internet.
Uma classe deve atender apenas
uma responsabilidade, que deve
ser descrita em um javadoc. Cada
classe/interface de um projeto
deve estar em seu prprio arquivo
com o mesmo nome da classe/
interface.
Classes extensas de em ser
evitadas. Entretanto, no h
um nmero determinado
- cada caso exige avaliao
apropriada. A ttulo de exemplo, se for preciso, desenvolver uma classe com mais de
500 linhas, deve ser considerado um forte indcio que esta
classe est tratando de mais
de uma responsabilidade.
101
SEO 2
o uso de sublinhado;
o cifro ($) porque este caracter tem significado especial a classes
internas;
SEO 3
Mtodos
Existem algumas recomendaes gerais. Fique atento! Deve-se utilizar uma (e somente
uma) linha em branco antes
de cada bloco de cdigo.
Deve-se colocar um espao
(e somente um) em branco
entre cada operador em expresses.
Deve-se utilizar em todas as
estruturas as chaves {}. Isto se
aplica mesmo nos casos referentes a declaraes simples
(com apenas uma linha).
SEO 4
Esta deve estar a quatro espaos (ou uma tabulao do incio do bloco
de cdigo).
Os trechos, que no so bvios, devem ser comentados, mas evite comentrios desnecessrios. .. Use o comentrio de linha // para comentrios curtos (//) e, para os comentrios mais longos, utilize o bloco
(/*...*/).. O comentrio de documentao (/** ... */) deve ser utilizado para fornecer uma API de documentao para o seu programa, por
meio do javadoc.
PROGRAMAO ORIENTADA A OBJETOS II
103
Finalizando
Parabns, voc chegou ao final deste curso. Esta unidade curricular buscou complementar
seus conhecimentos em orientao a objetos. Foram abordados os principais assuntos que
envolvem a aplicao da orientao a objetos no JAVA, as principais APIs e padres de desenvolvimento.
Com o domnio dos assuntos, aqui, apresentados, voc no encontrar dificuldades em aprender, alm do que foi apresentado para voc, utilizando referncias em livros ou na internet.
Lembre-se que na rea de informtica e tecnologia muito importante estar sempre atualizado. Sucesso na sua carreira e at uma prxima!
105
Referncias
BOOCH, Grady; RUMBAUGH, James; JACOBSON, Ivar. UML Guia do Usurio. 2. ed.
Rio de Janeiro: Campus, 2006.
BLOCK, Joshua. Java Efetivo. 2. ed. So Paulo, SP: Editora Alta Books, 2008
CAELUM. FJ-16 Laboratrio Java com Testes, XML e Design Patterns. Disponvel
em: <http://aluno.caelum.com.br/downloads>. Acesso em: 01 abr. 2011.
CAELUM. FJ-21 Java para Desenvolvimento Web. Disponvel em: <http://www.caelum.com.br/download/caelum-java-web-fj21.pdf>. Acesso em: 01 abr. 2011.
DEITEL, Paul J. Java: como programar. 6. ed. So Paulo, SP: Editora Pearson, 2005.
LUCKOW, Decio Heinzelmann; MELO, Alexandre Altair de. Programao Java Para a
Web Aprenda a desenvolver uma aplicao financeira pessoal com as ferramentas mais
modernas da plataforma Java. So Paulo: Novatec, 2010.
SIERRA, Kathy; BATES, Bert. Use a cabea! Java. Traduo da segunda edio. Rio de
Janeiro, RJ: Editora Alta Books, 2005.
107
Design Educacional
Evelin Lediani Bao
Capa, Ilustraes, Tratamento de Imagens
Dimitre Camargo Martins
Diego Fernandes
Luiz Eduardo Meneghel
Diagramao
Carlos Filip Lehmkuhl Loccioni
Reviso e Fechamento de Arquivos
Daniela de Oliveira Costa
Juliana Vieira de Lima
Reviso Ortogrfica e Normatizao
SENAI/SC em Jaragu do Sul
109