You are on page 1of 110

Curso Tcnico em Informtica

Programao Orientada a Objetos II

Robson Braga de Andrade


Presidente da Confederao Nacional da Indstria

Rafael Lucchesi
Diretor do Departamento Nacional do SENAI

Regina Maria de Ftima Torres


Diretora de Operaes do Departamento Nacional do SENAI

Alcantaro Corra
Presidente da Federao da Indstria do Estado de Santa Catarina

Srgio Roberto Arruda


Diretor Regional do SENAI/SC

Antnio Jos Carradore


Diretor de Educao e Tecnologia do SENAI/SC

Marco Antnio Dociatti


Diretor de Desenvolvimento Organizacional do SENAI/SC

Confederao Nacional da Indstria


Servio Nacional de Aprendizagem Industrial

Curso Tcnico em Informtica

Programao Orientada a Objetos II


Diogo Vincius Winck

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/

SENAI/SC Servio Nacional de Aprendizagem Industrial


Rodovia Admar Gonzaga, 2.765 - Itacorubi - Florianpolis/SC
CEP: 88034-001
Fone: (48) 0800 48 12 12
www.sc.senai.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

Seo 6 - Estudo de caso:


sistema de cliente

41

Seo 7 - Javabeans

Java Bsico

43

Seo 1 - String

45

Seo 2 - Array

Seo 1 - O que Java?

47

Seo 3 - Construtor

16

Seo 2 - Tipos de distribuies JAVA

48

Seo 4 - Final e static

50

Seo 5 - Estudo de caso:


relao de clientes

52

Seo 6 - Tratamento de
excees

16

Seo 3 - Al SENAI!

19

Seo 4 - O que aconteceu?

19

Seo 5 - Varivel

21

Seo 6 - Tipos primitivos de


dados

54

Seo 7 - Estudo de caso:


objetos de calcular

22

Seo 7 - Promoo e casting

57

Seo 8 - Utilizando pacotes

25

Seo 8 - Operadores aritmticos

25

Seo 9 - Controle de fluxo

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

Seo 1 - Viso geral

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

Seo 1 - Viso geral

59

Seo 2 - Al SENAI!

63

Seo 3 - Containers e gerenciadores de layout

64

Seo 4 - Eventos

64

Seo 5 - Estudo de caso:


objetos de calcular

JDBC
87

Seo 1 - Viso geral

88

Seo 2 - Interfaces do JDBC

94 Unidade de estudo 8
Apndice 1 Preparando o
Ambiente de
Trabalho
95

Seo 1 - Instalando JDK e


NetBeans

97

Seo 2 - Instalando o
PostgresSQL

100 Unidade de estudo 9


Apndice 2
- Padres de
Codificao
101 Seo 1 - Classes, interfaces
e pacotes

68 Unidade de estudo 5
Arquivos

69

Seo 1 - Viso geral

34

Seo 3 - Os trs pilares da


orientao a objetos

69

Seo 2 - Manipulando
arquivos

34

Seo 4 - Estudo de caso: Tamagotchi com personalidade

76

Seo 3 - Estudo de caso:


editor de texto

37

Seo 5 - Visibilidade

102 Seo 2 - Nomeando


atributos e variveis
103 Seo 3 - Mtodos
103 Seo 4 - Endentao, comentrios, blocos de cdigo,
espaos e linhas brancas

Finalizando

104

Referncias

106

CURSOS TCNICOS SENAI

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.

PROGRAMAO ORIENTADA A OBJETOS II

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

CURSOS TCNICOS SENAI

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!

Diogo Vincius Winck


Bacharel em Cincias da Computao pela Universidade
do Estado de Santa Catarina
(UDESC), especialista em Redes
de Computador e mestre em Cincias da Computao pela Universidade Federal de Santa Catarina (UFSC). Atua como lder
tcnico do time de Framework
na TOTVS (Linha de Produtos
Datasul), Professor Universitrio no SENAI Joinville. Em
conjunto com Vicente Goetten,
foi o autor do livro AspectJ - Programao Orientada a Aspectos com Java -, publicado pela
editora Novatec. Atualmente,
pesquisa e aplica metodologias
geis e Lean Software em projetos WEB/RIA, na criao de frameworks e no desenvolvimento
de ferramentas.

PROGRAMAO ORIENTADA A OBJETOS II

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.

uma linguagem orientada a


objetos;

Javadoc: ferramenta para gerao da documentao em HTML.


Tecnologias de Deployment: Java Web Start e plug-ins para distri-

uma coleo de APIs (classes,

componentes, frameworks) para


o desenvolvimento de aplicaes, distribuda gratuitamente
por meio do site <http://www.
oracle.com/technetwork/java/
index.html> e neutra de plataforma;

O Java uma linguagem de alto-nvel que pode ser caracterizada como:


simples, orientada a objetos, distribuda;

multithreaded, dinmica, portvel;


independente de arquitetura;
de alto desempenho, robusta e segura.
A plataforma Java composta por:

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:

NetBeans: ambiente de desenvolvimento de cdigo aberto para


aplicaes JSE, JME e JEE.

buio de aplicaes.

User Interface Tookits: Java Foundation Classes, formado por Swing e

Java 2D(Awt).

Integration Libraries: bibliotecas de integrao, tais como, Java


IDL, JDBC, JNDI, Java RMI e Java RMI-IIOP.

PROGRAMAO ORIENTADA A OBJETOS II

13

Figura 1: Viso geral da plataforma Java


Fonte: Adaptada de Oracle (2011)

As APIs (Application Programming Interface ou Interface de Programao


de Aplicativos) Java mais conhecidas do JSE so:

java.io manipulao de arquivos;


java.lang classes bsicas do Java;
java.net infraestrutura de software para rede;
java.nio definio de buffers;
java.security classes para segurana;
java.text textos, datas, nmeros, mensagens;
java.util utilitrios, colees, datas etc;
java.util.concurrent programao concorrente.

A estrutura da linguagem mantida por um processo chamado JCP (Java


Community Process). Existem outras implementaes dos padres definidos pelo JCP, alm da disponibilizada pelo Oracle, como:
O JCP um processo no qual, as partes interessadas na definio da
plataforma Java ou de novas funcionalidades podem se envolver,
respondendo aos JSRs (Java Specification Requests), sugerindo, por
exemplo, melhorias.

Outra caracterstica foi o desenvolvimento de uma cultura de partilha


de informaes existem muitos grupos de usurios onde se compartilham informaes. Alm disso, so publicados, diariamente, na internet
informaes, artigos e tutorias.

14

CURSOS TCNICOS SENAI

Neutralidade de plataforma indica que qualquer programa desenvolvido


pode executar sem modificaes em diferentes plataformas de computao (exemplo: Linux, Windows etc.). Esta capacidade deve-se ao fato de
que os programas so compilados para o um formato chamado bytecode.
Este utilizado pela mquina virtual Java, que interpreta as instrues.
A figura a seguir, ilustra o funcionamento da linguagem.

Figura 2: Funcionamento e Distribuio do Java

Durante a execuo, a API e a JVM (Java Virtual Machine ou Mquina


Virtual Java) isolam o programa Java do sistema operacional, esta relao pode ser observado na figura a seguir.

A mquina virtual corresponde a


um computador abstrato e, por
conta desse modelo, possvel a
sua construo por meio de hardware. Quando uma aplicao Java
executada em uma mquina comum, faz-se necessrio uma implementao concreta dessa abstrao e isso se torna disponvel
por meio da instalao e configurao do JRE.
Durante a execuo, cada aplicao Java (o bytecode) executa dentro
da sua prpria instncia da JVM,
permitindo um alto grau de isolamento e segurana. O cdigo
compilado no Java portvel entre verses diferentes da JVM, por
isso, o desenvolvedor no precisa
preocupar-se com detalhes da
JVM no ambiente de execuo.
Uma instncia (runtime) criada
quando a aplicao inicia e destruda quando a aplicao termina, isso implica, por exemplo, que
trs aplicaes ao mesmo tempo,
demandam trs JVMs.
As etapas de execuo de um programa Java so:
1. Class Loader: esta primeira
atividade executada pela JVM,
sendo responsvel por carregar as classes necessrias para
rodar a aplicao. A sequncia
da carga :
a. carrega as classes nativas do
JRE Java Runtime Environment
(Ambiente de Execuo Java
em uma traduo livre).
b. so carregadas as extenses do
JRE, disponveis, por exemplo,
em $JAVA_HOME/jre/lib/
ext
c. so carregadas as classes do
sistema local, a ordem definida
na varivel de classpath define a
precedncia.

Figura 3: Execuo de um programa Java

d. so carregadas as classes do
sistema remotas, disponveis,
por exemplo, em um servidor.

PROGRAMAO ORIENTADA A OBJETOS II

15

2. Bytecode Verifier: nesta etapa os Classes Javas (bytecodes)


carregadas da dinamicamente/
intranet/internet so verificadas antes de serem executadas,
pois o Class Loader considera
as classes remotas potencialmente inseguras. Verifica-se,
por exemplo, se o formato do
arquivo recebido est correto
ou se no h violaes de segurana.
3. Execuo: o programa executado.
4. Garbage Collection: esta a
coleta de lixo. Durante a execuo de um programa objetos so alocados. Quando
estes deixam de ser necessrios, precisam ser eliminados
da memria, disponibilizando
espao que era utilizado por
ele. Em linguagens como C++
e Pascal, o programador deve
realizar essa tarefa. No Java, a
responsabilidade est delegada ao Garbage Collector (coletor
de lixo). Ele deve identificar,
marcar e eliminar da memria
objetos que no so mais referenciados de maneira vlida.

Java Standard Edition (JSE): voltada para desenvolvimento de


aplicaes cliente e composta pelas APIs bsicas do Java. Disponibiliza,
por exemplo, APIs para desenvolvimento de telas.
Java Enterprise Edition (JEE): permite melhor componentizao
das aplicaes. utilizada para desenvolvimento de aplicaes empresariais, como, por exemplo, comrcio eletrnico.
Java Micro Edition (JME): projetado para atender s necessidades
de desenvolvimento para aplicativos mveis, como celulares.
Java Card: fornece um ambiente seguro para que aplicaes rodem

em smart cards e outros dispositivos com grande limitao de memria


e de capacidade de processamento. Isso possibilita o uso de ferramentas de mercado para a criao das aplicaes e as aplicaes desenvolvidas podem ser executadas com segurana em cartes de diferentes
fornecedores.

Java TV: refere-se JSR-927, que trata da especificao para TV


digital.

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:

Figura 4: Novo projeto no NetBeans

16

CURSOS TCNICOS SENAI

Podem-se observar alguns pontos importantes no arquivo apresentando. Na figura 5, esses pontos so detalhados.

Figura 5: Exemplo de arquivo Java

O prximo passo adicionar ao main, o seguinte trecho de cdigo de


modo, ento o projeto ficar como na figura 6.

System.out.println(Alo Senai!);

Figura 6: Cdigo fonte do programa AloSenai

PROGRAMAO ORIENTADA A OBJETOS II

17

Alguns pontos sobre este exemplo merecem destaque.

O mtodo main indica que a classe um ponto de entrada de aplicao.

public um modificador de acesso (ser visto na seo de Orientao a objetos).


static um modificador que indica que o mtodo pertence a classe
e no a uma instncia.

System uma classe padro e possui vrios mtodos teis sobre a


plataforma que est sendo executada, como E/S.

// 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.

Figura 7: Resultado da execuo

Alguns erros podem acontecer na execuo, por descuido do desenvolvedor. importante considerar algumas caractersticas da linguagem
Java:

ela diferencia letras maisculas de minsculas (case-sensitive). Se o


desenvolvedor escrever SYSTEM ao invs de System um erro ser
acusado;

as linhas de comando finalizam com ; (ponto-e-vrgula);


todo sinal de abre chaves deve possuir um sinal de fecha chaves

correspondente.

18

CURSOS TCNICOS SENAI

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

Uma varivel uma regio de memria capaz de reter e representar um


valor ou expresso. Ela possui um identificador e um tipo de dado. O
identificador o nome dado a uma varivel, mtodo, atributo, interface
ou classe.
Na linguagem Java, as variveis so fortemente tipadas. Isso indica que
toda declarao de uma varivel deve explicitar o tipo de dado que a
varivel poder tratar.

PROGRAMAO ORIENTADA A OBJETOS II

19

O tipo de dado especifica as operaes que uma varivel pode executar,


os valores que pode conter, por exemplo, uma varivel para armazenar
a idade de um aluno pode ser do tipo inteira. Sendo inteira, ela armazena
apenas nmeros inteiros.
A forma geral de declarao de varivel :
tipoVarivel identificadorVarivel;

O desenvolvedor, que deseja declarar uma varivel para armazenar os


juros de um emprstimo, poderia fazer da seguinte forma:
double juros;

So permitidas algumas variaes. Veja:


double juros = 0.05; //declarao com atribuio do valor
double vlParcela, vlEmprestimo; //declarao de mltiplas variveis

Na figura 8, um exemplo de onde o desenvolvedor gostaria de calcular


o valor de um emprstimo, utilizando juros simples, e exibir, no console,
o resultado.

Figura 8: Clculo da parcela de um emprstimo

20

CURSOS TCNICOS SENAI

O Java impe regras na criao de identificadores (nome de variveis).


So elas:

deve-se ter ateno quanto ao uso de letras maisculas e minsculas;


deve-se iniciar com: uma letra, o sinal de cifro $ ou com um

sinal de sublinhado -;

pode-se utilizar caracteres Unicode e ter qualquer tamanho. No

deve conter espaos;

No se deve utilizar as palavras reservadas, contidas na tabela a


seguir.
Tabela 1: Palavras reservadas do Java

byte representa um valor


inteiro. Seu tamanho 1 byte.
Pode armazenar os valores de
-128 a 127. O valor padro para
o byte 0.
Exemplo: byte semana = 0;
short representa um valor
inteiro com 2 bytes de tamanho.
Pode armazenar os valores de
-32.768 a 32.768. O valor padro
para o short 0.
Exemplo: short dia = 0;

abstract

continue

for

New

switch

assert

default

goto

package

synchronized

boolean

do

if

private

this

break

double

implements

protected

throw

int representa um valor


inteiro com 4 bytes de tamanho.
Pode armazenar os valores de
-2.147.483.648 a 2.147.483.647.
O valor padro para o int 0.
Exemplo: int idade = 30;

byte

else

import

public

throws

long representa um valor

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

Tipos primitivos de dados


Existem oito tipos de dados primitivos. Eles so chamados de primitivos, pois correspondem diretamente a regies de memria e no ponteiros para objetos na memria. Confira:

boolean representa um valor lgico. Pode armazenar os valores

true ou false. O valor padro para o boolean false.


Exemplo: boolean cancelou = false;

char representa qualquer caractere (Unicode) entre aspas simples.

Seu tamanho 2 bytes. Pode armazenar valores entre \u0000 a \


uFFFF. O valor padro para o char \u0000.
Exemplo: char sexo = M;

inteiro com 8 bytes de tamanho.


Pode armazenar os valores de
-9.223.372.036.854.775.808 a
9.223.372.036.854.775.807. O
valor padro para o long 0L.
Exemplo: long inteiroGrande =
9.223.372.036.854.775.807L;

float representa um valor


real com 4 bytes de tamanho, definido segundo a norma IEEE754. Pode armazenar valores
entre 1.40129846432481707e-45
a 3.40282346638528860e+38. O
valor padro para o float 0.0f.
Exemplo: float pi = 3.14f;
double representa um valor

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.

PROGRAMAO ORIENTADA A OBJETOS II

21

Os tipos primitivos, por no serem objetos, no possuem operaes que


permitam realizar manipulaes elaboradas, como, por exemplo, converso para Strings. Essa deficincia foi suprida pela criao dos objetos
Wrappers. Os objetos Wrapper correspondem ao objeto do tipo primitivo. Para cada tipo primitivo existe um wrapper. Confira na tabela a
seguir.
Tabela 2: Objetos Wrappers

Tipo primitivo Classe wrapper

Mtodos de converso String -> tipo

boolean

Boolean

Boolean.parseBoolean (String vl)

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)

Os objetos wapper disponibilizam operaes, como:

ValueOf(): retorna o objeto wrapper criado;


parseInt(), parseDouble() ou parseX() de acordo com o wrapper

em questo: retorna o tipo primitivo nomeado;

toString(): retorna a String com o valor do tipo primitivo encapsula-

do no objeto.

Figura 9: Exemplos de declarao e uso de variveis

22

CURSOS TCNICOS SENAI

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;

H dois casos especiais: float,


mesmo sendo menor em tamanho na memria que o long, pode
receber valores de long, por conta
do padro que ele utiliza para armazenar. O segundo caso o da
promoo de char, que s pode
ser feita para int (e superiores).
Uma caracterstica da promoo
que no h risco de perda de
preciso, e, por isso, a JVM faz
automaticamente. Entretanto, h
casos onde necessrio igualar
valores, mesmo que haja risco de
perda de preciso. Nesses casos, a
JVM no pode decidir pelo desenvolvedor e necessrio realizar
um cast, caso ilustrado na figura
10. Pode-se, tambm, observar a
mensagem dada pelo compilador.

Figura 10: Problemas de converso

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.

tipoDado variavelDestino = (tipoDado) variavelOrigem;

PROGRAMAO ORIENTADA A OBJETOS II

23

Figura 11: Converso utilizando cast

Na tabela a seguir, podem ser observados todos os possveis casos de


casts/promoes, presentes na linguagem Java. Nos casos em que aparece promo, significa que a converso automtica. Nos demais, apresentado o cast que deve ser utilizado.
Tabela 3: Tabela de converso

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

Fonte: adaptado de Caelum (2010)

24

CURSOS TCNICOS SENAI

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( condio booleana ) {


//cdigo do if
}
else{
/* cdigo do else. Importante observar que o bloco do
else pode ser suprimido */
}

Os dois blocos de cdigos do trecho apresentado, so:

o primeiro vinculado ao if.


o segundo vinculado ao else.
O Java disponibiliza as seguintes estruturas de controle de fluxo:

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

Verdadeiro se A maior que B, seno, falso

menor

<

A<B

Verdadeiro se A menor que B, seno, falso

maior ou igual

>=

A >= B

Verdadeiro se A maior ou igual a B, seno, falso

menor ou igual

<=

A <= B

Verdadeiro se A menor ou igual a B, seno, falso

igual

==

A == B

Verdadeiro se A igual B, seno, falso

diferente

!=

A != B

Verdadeiro se A diferente B, seno, falso

Tabela 5: Operadores lgicos

Operador

Smbolo

Exemplo

Resultado

&&

A && B

Verdadeiro se A e B forem verdadeiros, seno, falso.

OU

||

A || B

Verdadeiro A, B ou A e B forem verdadeiros, seno, falso

Negao

!A

Verdadeiro se A for falso, seno, falso

Na figura a seguir, pode-se ver um programa que avalia se um cliente


pode entrar em um determinado show.

Figura 12: Exemplos de If-else

26

CURSOS TCNICOS SENAI

O uso de vrios operadores mediado, segundo regras de precedncia.


Essas regras podem ser observadas na tabela 6.
Tabela 6: Operadores lgicos

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

O while a estrutura de repetio, desviando o fluxo de um programa,


de modo que repita um bloco de cdigo, enquanto uma determinada
condio booleana for verdadeira. A sintaxe geral do if-else pode ser
observada a seguir.

while( condio booleana ) {


//cdigo
}

Observe na figura a seguir, um programa que calcula os nmeros da


srie de Fibonacchi menores que 100, sendo eles: { 1, 1, 2, 3, 5, 8, 13,
21, 34, 55 e 89}.

PROGRAMAO ORIENTADA A OBJETOS II

27

Figura 13: Exemplo de while srie de Fibonacci

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.

for(inicializao, condio booleana, incremeto ) {


//cdigo
}

Na figura 14, pode-se observar um programa que calcula os 10 primeiros nmeros da srie de Fibonacchi, dessa vez, utilizando um for.

28

CURSOS TCNICOS SENAI

Figura 14: Exemplo de for srie de Fibonacci

A linguagem Java permite controlar o fluxo de execuo dos laos de


repetio, utilizando as palavras-chave:

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

cdigo, passando para prximo ciclo do lao. A estrutura de repetio


continua sendo executada a partir do seu incio.

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.

PROGRAMAO ORIENTADA A OBJETOS II

29

A varivel contaLacoExterno possui o escopo mais amplo, sendo declarada


no main. Ela pode ser utilizada em qualquer lugar no mtodo aps a sua
criao.A varivel contaLacoInterno possui seu escopo restrito ao bloco
de cdigo do while. Aps o fechamento desse bloco, ela deixa de existir,
sendo eliminada pelo Garbage Collector. Tentativas de acesso ela, geram
um erro de compilao.

Figura 15: Escopo de varivel

SEO 11

Usando a documentao do Java


A documentao da linguagem, ferramentas e API podem ser acessadas
online no site da Oracle <http://download.oracle.com/javase/6/docs/
index.html> ou pode ser feito um download separado do SDK. Ela
composta por uma coleo de arquivos HTML, com as classes e mtodos da linguagem Java.
A documentao hierrquica, de forma que a pgina inicial lista todos
os pacotes como hyperlinks. Na figura 16, pode-se observar um exemplo
de documento. Todo projeto pode ter sua documentao, gerada, automaticamente, nesse formato, por meio do uso da ferramenta javadoc.
As pginas so estruturadas nos seguintes tpicos:

30

CURSOS TCNICOS SENAI

a hierarquia da classe;
uma descrio da classe e seu propsito geral;
uma lista de variveis associadas;
uma lista de construtores;

uma lista de mtodos;


uma lista detalhada de variveis, com descries do propsito e uso

de cada varivel;

uma lista detalhada de construtores, com descries.


uma lista detalhada de mtodos, com descries.

Figura 16: Exemplo de documentao

Nessa primeira unidade de estudos, voc conheceu um pouco sobre


Java, na prxima unidade, voc ir revisar os conceitos de orientao
a objetos e conhecer um estudo de caso. Prepare-se, vem muita coisa
interessante pela frente!

PROGRAMAO ORIENTADA A OBJETOS II

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

Revendo a orientao a objetos


SEO 1

Orientao a objetos: classes, objetos e


instncias
Aplicar o paradigma de desenvolvimento orientado a objeto exige o pleno conhecimento dos conceitos que envolvem a orientao a objetos
(OO), por isso, importante revisar os conceitos que a compem.
O termo orientao a objetos remete tentativa de simular nos computadores, aquilo que o desenvolvedor percebe no mundo real. Procura-se trazer para o desenvolvimento da soluo, os elementos presentes no
problema, que se procura resolver na forma de abstraes.
Uma abstrao uma simplificao concentrada nas caractersticas relevantes do elemento avaliado. Pode-se simplificar o esforo presente
no Paradigma Orientado a Objeto (POO), no esforo realizado pelo
desenvolvedor na procura por identificar as caractersticas de um problema, decompondo a soluo em um conjunto de objetos definidos
por classes.
Um objeto uma construo de software, que encapsula estado e comportamento, permitindo que se modele software em termos reais e abstratos. Podem ser de vrios tipos, como entidades fsicas: nota-fiscal,
cliente, aluno etc.; abstratas: listas, pilhas, vetores, conexes etc.
No seria produtivo durante o desenvolvimento, codificar cada objeto
isoladamente. Imagine, o desenvolvedor precisa criar um cdigo para
cada aluno de uma escola, ou funcionrio de uma empresa. Por conta
disso, os objetos so agrupados pelos seus mtodos e atributos comuns,
formando uma classe de objetos.
As classes implementam as responsabilidades de um sistema. Nelas so
definidos atributos e mtodos. Elas so como formas, utilizadas para
modelar os biscoitos. So utilizadas para definir a forma inicial, mas a
partir do momento em que os biscoitos so retirados, passam a se diferenciar uns dos outros.
Cada soluo teria a necessidade de classes diferentes, por exemplo:

um sistema de gerenciamento escolar teria classes como: Aluno,


Professor, Contrato, Sala etc.;
tratando-se de um sistema para controle de locadoras poderiam exis-

tir as classes: Cliente, Filme, Mdia etc.;

no caso de um sistema de controle empresarial seriam necessrias


classes como Funcionrio, Gerente, Cliente, Setor, Item etc.

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.

PROGRAMAO ORIENTADA A OBJETOS II

33

Cada classe de soluo teria a necessidade atributos diferente, por exemplo:

em um sistema de gerenciamento escolar, a classe Aluno precisaria

de atributos como: nome, endereo, telefone, nmero da matrcula etc.

num sistema para controle de locadoras, a classe Filme necessitaria


de atributos como: nome, gnero, ano de lanamento etc.
no caso de um sistema de controle empresarial, a classe funcionrio
precisaria de atributos como: nome, endereo, setor e etc.
Na figura a seguir, voc pode observar um diagrama que rene todas as
informaes aprendidas at agora.

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

Figura 17: Diagrama dos conceitos da orientao a objetos


Fonte: Adaptado de Winck e Goetten (2006)

Tamagotchi um brinquedo, lanado pela empresa Bandai(1996).


O seu objetivo era criar um animal de estimao virtual. Normalmente, esse brinquedo era apresentado como um chaveiro.

SEO 3

Os trs pilares da orientao a objetos


A orientao a objetos est apoiada em trs pilares essenciais: encapculamento, herana e polimorfismo. Veja um pouco mais sobre cada um
deles.
O encapsulamento uma caracterstica desejvel na implementao
de sistemas OO. Ele permite conhecer o que feito, mas ignora-se o
modo como feito. Na OO, o encapsulamento o pacote formado
pelas operaes e pelo conjunto de atributos de um objeto. Ele protege
a estrutura interna de cada objeto contra a utilizao arbitrria, que fuja
dos objetivos propostos pelo projeto da classe.
A herana um mecanismo para reuso de cdigo que possibilita a
criao de uma classe baseada em outra previamente existente. A nova
classe ir receber as caractersticas da classe-base, utilizando as partes
comuns e especializando os pontos onde a classe derivada necessita de
um comportamento mais especfico.

34

CURSOS TCNICOS SENAI

Figura 18: Tamagotchi

Nele, eram reproduzidos vrios


comportamentos de um bicho de
estimao real. O proprietrio era
obrigado, por exemplo, a alimentar, passear, medicar, brincar com
seu companheiro virtual etc., caso
no fosse cuidado, adequadamente, o bichinho poderia morrer.
Inspirado nos Tamagotchi, este
estudo de caso simular apenas o
humor de um animal de estimao.

Observe na figura a seguir, um diagrama de classes desse estudo de caso.

Figura 19: Figura 19: Diagrama de classes

Esse exerccio depende da criao de novas entidades: Animal, Humor,


Alegre, Agitado, Triste e Bravo.
Como o desejo tratar apenas o humor do animal de estimao, este,
quando solicitado, ir se apresentar e indicar o seu humor. Tal comportamento ser implementado por meio de um mtodo, no caso, falar().
Veja o cdigo da classe Animal:

public class Animal {


private String nome = ;
private Humor humor;
Animal(String nome){
this.nome = nome;
}
public Humor getHumor() {
return humor;
}
public void setHumor(Humor humor) {
this.humor = humor;
}
public String getNome() {
return nome;
}
public void falar(){
System.out.println(Oi! Meu nome +nome);
System.out.println(Hoje eu estou +humor.toString());
}
}

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.

PROGRAMAO ORIENTADA A OBJETOS II

35

Na figura 19 voc pde ver o uso dessas classes. Os cdigos das demais
classes voc confere a seguir.

Cdigo fonte da classe Humor


public class Humor {
public String toString() {
return Normal;
}
}

Cdigo fonte da classe Agitado


public class Agitado extends Humor{
public String toString() {
return Agitado;
}
}

Cdigo fonte da classe Alegre


public class Alegre extends Humor{
public String toString() {
return Alegre;
}
}

Cdigo fonte da classe Bravo


public class Bravo extends Humor{
public String toString() {
return Bravo;
}
}

Cdigo fonte da classe Triste


public class Triste extends Humor{
public String toString() {
return Triste;
}
}

36

CURSOS TCNICOS SENAI

Figura 20: Programao dos cdigos e classes

SEO 5
Visibilidade

O encapsulamento s garantido se a classe restringir o acesso direto a


seus elementos. Um bom exemplo uma classe que representa um carro. A velocidade do carro resultado dos mtodos acelerar/frear e no
da alterao direta da propriedade velocidade.Na implementao, feita
no Java da orientao a objetos, foram disponibilizados quatros tipos de
visibilidade ou controles de acesso:

public (pblico) - permite o acesso a todos os objetos;


protected (protegido) garante acesso instncia, ou seja, para

aquele objeto e para todas as subclasses;

private (privado) garante acesso apenas para a instncia.


default (pacote) no uma visibilidade padro da orientao a ob-

jetos. Est disponvel no Java e permite acesso a instncias do mesmo


pacote da classe.

PROGRAMAO ORIENTADA A OBJETOS II

37

Nenhum atributo de uma classe deve ser declarado como pblico, e


acessado diretamente por um objeto externo, a menos que haja uma
grande justificativa.

Os atributos devem possuir mtodos de acesso get/set, possibilitando a


sua manipulao controlada. Isto pode ser observado na classe Animal
nos atributos nome e humor.

SEO 6

Estudo de caso: sistema de cliente


Uma empresa necessita controlar seus clientes. O diretor comercial dessa empresa deseja ter acesso ao nome do cliente, telefone e endereo.
Os clientes possuem um valor mximo para compra, se tentar comprar
alm do que o valor permitido, o sistema no deve impedir. Um cliente
pode ser considerado especial, pois, ele no possui limite no valor de
compras. Nesses casos, tambm, se deseja saber o nome da pessoa de
contato e o telefone dela. Se um cliente estiver devendo, importante
que seja informado qual cliente est devendo. Um cliente devedor no
pode fazer novas compras.
Analisando o problema, modelou-se o digrama. Confira na figura a seguir.

Figura 21: Diagrama de classes para um sistema de controle de clientes

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

CURSOS TCNICOS SENAI

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;
}
}

importante observar que todos os atributos so privados. O acesso a


eles s pode ser feito via mtodos get/set. A seguir voc pode observar
o cdigo da classe cliente especial. Ela uma especializao da classe
Cliente e, por isso, no necessrio redefinir os atributos nome, telefone, endereo e limite de crdito.

PROGRAMAO ORIENTADA A OBJETOS II

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

CURSOS TCNICOS SENAI

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;

Veja na figura o cdigo para executar esse programa.

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.

Figura 22: Testes das classes Cliente, ClienteEspecial e ClienteDevedor

PROGRAMAO ORIENTADA A OBJETOS II

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.

String x = Criando uma String utilizando literal;


String y = new String(Criando uma String utlizando operador new );
/* Existem mtodos que retornam que retornam Strings
String z = String.valueOf(30);

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.

Na declarao e criao das variveis x e y, a VM utilizar os mesmos objetos presentes no cache de


Strings. Entretanto, para z, o uso
do operador new fora a criao
de uma nova String no pool.
Pode-se observar que foram utilizadas duas estratgias diferentes
para a comparao de Strings:

quando foi utilizado o operador == (comparao booleana),


a VM compara as referncias
para as quais as duas variveis
apontam, e no o seu contedo. No caso de x, comparando
com y, poder dar certo, pois as
variveis apontam para mesma
referncia.
nos casos onde foi utilizado o

mtodo equals, a VM ir comparar o contedo das referncias,


que de fato o desejo neste caso.
Por isso, a comparao de Strings
deve ser feita sempre utilizando
equals.
O operador + executa uma concatenao de objetos de Strings,
gerando uma nova String. Veja, a
seguir, a demonstrao de concatenao de Strings, usando o operador + as implicaes da imutabilidade das Strings.

Figura 23: Comparao a String

PROGRAMAO ORIENTADA A OBJETOS II

43

String exemplo = parte1 + parte 2;

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:

double peso = 79.4;


System.out.println(O seu peso : + peso);

A classe possui alguns mtodos importantes que devem ser estudados


com ateno. Segue uma lista deles:

split: divide uma String em um vetor de Strings. Exemplo:

String frase = Al Senai!;


String lista = frase. split( ); //o resultado um vetor com 2 posies

compareTo: compara duas String. Esse mtodo retorna um nmero

negativo, se a primeira for menor, zero se forem iguais, e um nmero


positivo se a segunda for menor. Esse mtodo diferencia letras maisculas e minsculas, por isso, deve-se ter ateno ao us-lo. Exemplo:
String primeira = Diogo;
String segunda = Vincius;
int compara = primeira.comparaTo(segunda);
//compara ser menor que, pois D considerado menor que V

toUpperCase / toLowerCase: converte uma String de maiscula


para minscula ou vice-versa. Exemplo:
String texto = eu estudando muito.;
String novoTexto = texto.toUpperCase();
replace: substitui em uma string, uma ocorrncia por outro valor.
Exemplo:
String frase = Estudando Java;
frase = frase.replace(Java,Orientao a Objetos);
Outros mtodos importantes da classe String so:

charAt indica qual caractere ocupa o ndice informado. Exemplo:


String vl =JAVA Senai;
char c = vl.charAt(1);//c ser igual a J

substring permite obter apenas parte de uma String. Exemplo:


String vl =JAVA Senai;
String subVl = vl.substring(5,10); //subVl ser igual a Senai
length retorna o tamanho da String. Exemplo:
String vl =JAVA Senai;
int tamanho = vl. length(); // tamanho igual a 10

indexOf retorna o ndice de uma determinada ocorrncia Exemplo:


String vl =JAVA Senai;
int pos = vl. indexOf (Senai); //pos ser 5

44

CURSOS TCNICOS SENAI

trim retorna uma nova string sem caracteres brancos do incio e


do fim de uma string Exemplo:
String vl =JAVA Senai ;
String vlTrim = vl.trim(); // vlTrim ser igual a Java Senai
isEmpty retorna true se a string estiver vazia. Exemplo:

String vl = JAVA Senai;


boolean vazia = vl.isEmpty(); //vazia = false

Dependendo da aplicao, o fato da imutabilidade dos objetos do tipo


String pode gerar uma grande carga, por exemplo, na gerao de arquivos textos. Um opo o uso das classes StringBuffer e StringBuidler.
Essas classes disponibilizam o mtodo append, que permite concatenar Strings, modificando seu contedo, ao invs de criar novos objetos.
Observe um exemplo, o uso do StringBuffer.

StringBuffer palavra = new StringBuffer();


palavra.append(primeiro);
palavra.append(\nsegundo);
palavra.append(\nterceiro);
palavra.append(\nquarto);
palavra.append(\nquinto);
System.out.println(palavra);

A instanciao de classes do tipo StringBuffer (ou StringBuilder) deve


ser feita por meio do operador new. Outros mtodos importantes das
classes StringBuffer e StringBuilder so: insert, reverse, replace.
As classes StringBuffer e StringBuilder possuem os mesmos mtodos, a
diferena que a classe StringBuilder no threadsafe. Threadsafe uma
caracterstica desejvel em programas multitarefa, onde o trecho de cdigo funciona corretamente em situaes de concorrncia.

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:

PROGRAMAO ORIENTADA A OBJETOS II

45

char vetorChars[ ]; //esta forma desencorajada.


int [ ] vetorInts;
String [ ][ ] matrizStrings;

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.

Os objetos do vetor no so criados instantaneamente, sendo necessrio, cri-los separadamente.

String [ ] matrizStrings;
matrizStrings= new String[3];
matrizStrings[0] = new String(Santa Catarina);
matrizStrings[1] = new String(Joinville);
matrizStrings[2] = new String(Senai);

Veja mais exemplos de criao de vetores e matrizes.

String [ ] matrizStrings2 = {Santa Catarina, Joinville, Senai};


// exemplo de matriz de inteiros 4x3
int [ ] [ ] notas = new int[4][ ];
notas[0] = new int[3];
notas[1] = new int[3];
notas[2] = new int[3];
notas[3] = new int[3];
// exemplo de matriz de inteiros 3x3
int [ ] [ ]frequencia = {{7,5,4} , {7,7,7}, {9,8,7}};

Uma questo interessante, sobre matrizes no Java, que a linguagem


permite que a matriz possua linhas de tamanhos diferentes. Veja, a seguir, um exemplo de matrizes com linhas de tamanhos diferentes.

/* Exemplo de matriz de inteiros com linhas de tamanhos diferentes


*/
int [ ] [ ] notasProvas = new int[6][ ];
notasProvas [0] = new int[3];
notasProvas [1] = new int[2];
notasProvas [2] = new int[2];
notasProvas [3] = new int[5];
notasProvas[4] = new int[4];
notasProvas[5] = new int[12];

46

CURSOS TCNICOS SENAI

O tamanho de um array est no seu atributo length. Esse atributo no


pode ser alterado - ele imutvel aps a sua criao -, entretanto,
possvel atribuir varivel, que referencia o array um novo vetor com
tamanho diferente.
Na listagem, a seguir, pode-se observar alguns mtodos importantes
para manipulao de Arrays.

arrayCopy da classe System: permite copiar o contedo de um vetor

para outro vetor. Exemplo:


char[] origem = { d, e, c, a, f , e, i, n, a, t, e, d };
char[] destino = new char[7];
System.arraycopy(origem, 2, destino, 0, 7);
//o contedo de destino ser c, a, f , e, i, n, a,

sort da classe java.util.Arrays. Oderna um vetor. Exemplo:


int[] valores = { 10, 5, 6, 1, 2, 8};
java.util.Arrays.sort(valores);
//o contedo do vetor valores ser ordenado crescentemente

SEO 3
Construtor

O construtor o mtodo chamado no momento que uma nova instncia


do objeto criada. Ele possibilita inicializar a instncia e suas variveis,
alocando os recursos necessrios ao funcionamento do objeto.
O construtor deve possuir o mesmo nome da classe e no deve ser definido um tipo de retorno.
Toda classe possui um construtor. Se o desenvolvedor no definir um construtor, a classe recebe um construtor padro sem argumentos. Um construtor pode ser sobrecarregado, permitindo que uma mesma classe possua
vrios construtores.

Observe, a seguir, um exemplo de classe com construtor sobrecarregado.


public class Empregado {

private String nome;

private int salario;

public Empregado(String n, int s) {

nome = n;

salario = s;
}

public Empregado(String n) {

this(n, 0);
}

public Empregado( ) {
this(No definido);

}
}

PROGRAMAO ORIENTADA A OBJETOS II

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:

public final class ValidadorSenha{



public boolean isSenhaValida(String user, String senha){

{

// cdigo de validao...
}
}

Um desenvolvedor que queira burlar a segurana, derivando a classe,


como, no exemplo a seguir, receberia um erro no momento da compilao, indicando que a operao ilegal.

public class ValidadorSenhaNovo extends ValidadorSenha {


//<<o compilador ir indicar um erro na linha acima.

public boolean isSenhaValida (String user, String senha){

{
return true;
}
}

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

CURSOS TCNICOS SENAI

public class Carro{


private final int anoFabricacao;


public Carro(int anoFabricacao)

{
this.anoFabricacao = anoFabricacao;

}


public void adulteraCarro(int novoAnoFabricacao){
{
this.anoFabricacao = novoAnoFabricacao;
//<<o compilador ir indicar um erro na linha acima.

}
}

O static permite que um atributo ou um mtodo fique vinculado classe


e no s instncias. No caso das variveis, o seu valor compartilhado
entre todas as instncias de uma classe. O resultado semelhante a uma
varivel global em outras linguagens. O acesso varivel, se no for
privada, utiliza a referncia da classe, conforme pode ser observado a
seguir.

public class Servidor{



public static String url;

// cdigo ...
}
public class Cliente{

public void conectar(){

/*
para acessar o atributo static, basta usar

*
a forma classe.atributo
*/

String url = Servidor.url;
}
}

Um uso comum do static e final a definio de constantes, permitindo


criar atributos acessveis pelas instncias, sem permitir que seus valores
possam ser alterados. As constantes so criadas para melhorar a legibilidade do cdigo, possibilitando evitar o uso de valores fixos no cdigo,
prtica conhecida como Magic Number.
O exemplo, a seguir, define uma classe para fazer Log de operaes.
Nessa classe so definidas quatro constantes, utilizadas no momento de
registrar, definindo o tipo de operao: ERROR, WARNING, INFO,
DEBUG.

PROGRAMAO ORIENTADA A OBJETOS II

49

public class Log{





public static final int ERROR = 3;


public static final int WARNING = 2;
public static final int INFO = 1;
public static final int DEBUG = 0;


public static void log(int type, String msg){

//... cdigo do log ..
}
}

SEO 5

Estudo de caso: relao de clientes


Voc se lembra que, nas sees anteriores, foram definidas as classes
Cliente, ClienteEspecial e ClienteDevedor? Elas compem uma mesma
hierarquia de classes, possibilitando tratar qualquer instncia especializada por meio e uma referncia de Cliente.
Por conta disso, para criar uma lista de clientes, pode-se usar um array
do tipo cliente. No exemplo de cdigo, a seguir, voc pode observar a
implementao So criados trs objetos, inicializados, apropriadamente,
e feita a referncia, as posies e o array para os objetos. Confira:

50

CURSOS TCNICOS SENAI

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);
}
}
}

No trecho de cdigo, onde so exibidas as informaes dos clientes, o


compilador no sabe dos detalhes dos objetos, s valida se a referncias
permitida. Na execuo, por polimorfismo, os mtodos so executados
de acordo com a instncia presente na memria.
importante, tambm, observar o uso do for-each. No mtodo listarClientes, foi utilizado um interator, que varre o array, igualando a posio atual com a varivel cliente.

PROGRAMAO ORIENTADA A OBJETOS II

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:

de Throwable. Das diversas derivaes de Throwable, duas merecem


uma ateno especial: Error e RuntimeException.
O tratamento de excees expresso por meio de dois grupos de palavras reservadas, que trabalham em conjunto:

um grupo para o lanamento de excees: throw/throws, onde as


excees so originadas ou passadas para frente;
outro para a captura de excees lanadas e/ou garantia de execu-

o: try-catch-finally, com as quais, de fato, se trata as excees.

tentar abrir um arquivo que


no existe;
tentar usar uma conexo de

rede interrompida;

tentar acessar posio de


arrays fora da faixa;
tentar carregar uma classe que

no est no classpath.

Na figura 23, voc pde observar


a execuo de um cdigo que gera
uma exceo. criada uma referncia classe String. Ela inicializada com null. Antes que seja
instanciado um objeto do tipo
String para esta referncia, tenta-se utilizar o mtodo isEmpty(),
que ainda no existe. A exceo
gerada uma do tipo NullPointerException.
As excees no Java derivam da
classe Throwable. Ela a nica,
cujas instncias, diretas ou indiretas, podem ser usadas para serem
lanadas. Existe um grande nmero de classes presentes na linguagem para tratar todas as categorias de erro. Tambm possvel
criar novas excees, derivando
de Exception, um tipo derivado

52

CURSOS TCNICOS SENAI

Figura 24: Gerando exceo NullPointerException

O desenvolvedor, durante a criao de uma aplicao, pode identificar


situaes no cdigo onde o fluxo deva ser interrompido, por exemplo,
pela inconsistncia de uma informao. Tambm pode ocorrer que o
desenvolvedor no deseja tratar uma determinada situao, como, por
exemplo, a falta de um arquivo. Nessas situaes, ele pode lanar uma
exceo. O desenvolvedor, para lanar uma exceo, usa as palavras reservadas throw e throws. Veja, a seguir, um exemplo dessa utilizao.

//... cdigo da classe


public void loadData(String caminho) throws IOException{
if(verificarArquivo(caminho) == false){
throw new IOException(Erro a verificar arquivo);
}
//cdigo de carga dos dados
}

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.

//... cdigo da classe


String arquivo = data.txt;
try{
loadData(arquivo);
otimizarData();
}
catch(IOException ioex){
System.out.println(Problemas ao importar arquivo:+arquivo);
ioex. printStackTrace(); //imprime todo a pilha de execuo
}
finally{
System.out.println(Processo Encerrado);
}
//... cdigo da classe

Caso o mtodo loadData, ou qualquer outro mtodo dentro de um bloco


try-catch, lance uma exceo de um tipo previsto por uma clusula catch, o fluxo desviado para uma clusula catch apropriada.
Isso permite uma considerao sobre os mtodos, que podem terminar
por uma das condies abaixo:

o fluxo de controle atingiu o final do mtodo;


o fluxo de controle atingiu um comando return;
ocorreu um problema grave, impedindo o fluxo normal, foi exe-

cutado um throw implcito ou explcito, que no foi apanhado por


um comando try-catch daquele mtodo. No existindo a execuo do
programa, ser finalizada, com mensagem de erro provida pela JVM,
dizendo que uma exceo foi lanada sem que fosse apanhada.
Considerando apenas o encerramento, por conta de problemas, importante observar que a linguagem Java classifica os erros e excees em
dois grupos:

checked: a verificao obrigatria;


unchecked: a verificao no obrigatria.

O desenvolvedor, para lanar as


excees checked, deve marcar o
mtodo com o tipo de exceo a
ser lanado. Isso feito, por meio
do uso da palavra reservada throws. Isso pode ser observado na
declarao de mtodo presente
no exemplo try/catch/finally (cdigo anterior). Toda a chamada ao
mtodo calcular precisar tratar
ou lanar excees do tipo Exception.
Ainda nesse exemplo, pode-se
observar a existncia de um bloco
finally. O finally define um bloco
de cdigo que sempre ser executado, mesmo que uma exceo
seja lanada ou no.Isso permite
ao desenvolvedor, garantir que
um determinado bloco de cdigo
sempre ser executado, mesmo
que algum problema ocorra quando, por exemplo, se trabalha da
abertura de arquivos ou conexes
com bancos.
Um bloco try pode conter: try-catch-finally, try-catch ou try-finally.
A seleo pela forma mais apropriada cabe ao desenvolvedor.
O tratamento de excees permite ao desenvolvedor, decidir entre
tratar uma exceo ou lan-la
para o mtodo invocador. Isso
leva seguinte questo: quando se
utiliza uma forma ou outra?
A deciso deve levar em conta a
lgica envolvida e relao com
usurio. Se o problema necessita
de uma ao do usurio e ocorre
em uma camada muito interna da
aplicao, deve-se lanar exceo
at um ponto no qual haja interao com usurio.
Alm de contar com ampla biblioteca de excees disponveis
na linguagem, o desenvolvedor
pode optar por criar uma nova exceo. No exemplo, a seguir, voc
pode observar a criao de exceo que trata da ocorrncia de
timeout em um servidor.

PROGRAMAO ORIENTADA A OBJETOS II

53

public class ServerTimedOutException extends Exception {


private int port;
public ServerTimedOutException(String motivo, int porta){
super(motivo); // chama construtor da classe pai
this.porta = porta;
}
public int getPorta( ) {
return porta;
}
}

SEO 7

Estudo de caso: objetos de calcular


Nessa seo, voc acompanhar o desenvolvimento de uma aplicao,
capaz de receber uma operao e execut-la. Observe na figura, a seguir,
um diagrama de classes representando o problema.

Figura 25: Diagrama UML

A classe ParserOperacao recebe uma String, contendo a operao a ser


executada. Ela interpreta essa operao e encaminha para o objeto de
calculadora efetivar a operao.
Na figura 26, pode ser visto o cdigo da classe Calculadora. Essa classe
possui o mtodo calcular com duas implementaes distintas. Uma que
recebe duas variveis do tipo double e realiza a operao; outra que recebe duas variveis do tipo String, converte-as, e chama a outra operao
de calcular. Isso caracteriza polimorfismo de sobrecarga a Mquina
Virtual Java selecionar, no momento de execuo, a implementao
apropriada.

54

CURSOS TCNICOS SENAI

Figura 26: Cdigo-fonte calculadora

Na figura 25, voc pde ver o cdigo da classe ParserOperacao, que


possui, associada a ela, uma referncia classe Calculadora. A operao
principal processar, que fragmenta a expresso e repassa para a calculadora executar a operao de fato.
importante observar que a anlise da operao bastante restrita:
ela apenas conseguir interpretar uma operao, se entre os elementos, existir um espao em branco e o formato for: Nmero Operador
Nmero.

PROGRAMAO ORIENTADA A OBJETOS II

55

Figura 27: Cdigo-fonte ParserExpressao

Na figura a seguir, voc ver o cdigo da classe Main. nessa classe,


que inicia a execuo da aplicao. Ela utiliza uma classe do Swing: o
JOptionPane, que ser detalhada na prxima sesso. Por meio do JOptionPane, exibida uma mensagem para que o usurio informe a expresso desejada.

Figura 28: Cdigo-fonte Classe Principal

56

CURSOS TCNICOS SENAI

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.

Todas essas informaes so importantes para a sua formao


na rea, e aperfeioamento no
mercado de trabalho, portanto,
mantenha-se atento para que nenhuma informao passe despercebida. Na prxima unidade, vem
mais novidade. At l!

Figura 29: Criao de um pacote

Uma classe armazenada em um pacote pode ser utilizada por outras


classes, mas para isso deve estar marcada como uma classe pblica, e o
pacote acessvel no classpath da aplicao. Devem-se importar os pacotes e classes que sero utilizados em um determinado ponto (classe) do
projeto. Isso feito por meio do uso da declarao de importao import
para indicar ao compilador onde achar as classes. Nos exemplos anteriores, pde-se observar o uso, tanto da declarao de pacotes, quanto
de imports.
Java Archive (JAR) um arquivo compactado, usado para distribuir um
conjunto de classes Java. Ele usado para armazenar classes compiladas
e metadados associados, que compe uma hierarquia de pacotes. Os arquivos JAR so criados por meio da ferramenta jar. No NetBeans, pode
ser criado, por meio do uso da opo Construir (Build) ou Limpar e
Construir (Clean and Build), um diretrio dist contendo os JARs.
Nessa unidade de estudo, voc estudou as Strings, arrays, os construtores e o final e static, que so palavras-chave que modificam o comportamento da linguagem sobre classes, atributos, argumentos, variveis e
mtodos. Nos dois estudos de caso, voc teve informaes importantes
e exemplos prticos, tanto de relao com o cliente, quanto de calculadora.
PROGRAMAO ORIENTADA A OBJETOS II

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:

a aparncia dos componentes

dependente de plataforma na
qual a aplicao ser executada;

limitada em recursos por

depender de suporte de cada


plataforma para os componentes
oferecidos;

bugs e incompatibilidades entre

plataformas.

A resposta a essas limitaes foi


o desenvolvimento do Swing. O
Swing um conjunto de componentes grficos, que do suporte
construo de aplicaes Java
com interface grfica e interatividade. Ele faz parte da Java Foundation Classes (JFC).
Os componentes de Swing fazem
parte do pacote javax.swing.*. Os
componentes tm como objetivo,
prover o mesmo comportamento,
independente do sistema operacional. Esto disponveis componentes, tais como:

JTextField;
JTextArea;
JRadioButton;
ButtonGroup;
JCheckBox;
JComboBox;
JPanel;
JScrollPane.

Confira algumas caractersticas do


Swing:

grande variedade de compo-

nente;

Java 2D API;
Look-and-Feel;
Internationalization;
Accessibility API.

SEO 2
Al Senai!

Al, SENAI! um exemplo, bem


bsico, para criao de um programa com interface grfica. O
objetivo criar uma janela simples, que possuir um rtulo, um
campo de edio e um boto. No
campo de edio, o usurio poder escrever um texto, nesse caso,
o seu nome. Ao clicar sobre o boto, a aplicao exibir uma mensagem, cumprimentando o usurio, utilizando o texto informado.
Os elementos que compe uma
interface grfica so:

n (janela, painel): local onde


so adicionados os componentes
ou outros containers;
componentes: botes, labels,
listbox, menus etc.
gerenciador de layout: objeto responsvel pelo posicionamento dos componentes inseridos num determinado container.
O componente Swing, que representa telas no sistema operacional, o JFrame. As janelas criadas,
pelos desenvolvedores, derivam
dela. Pode-se criar aplicaes
Swing inteiras, usando apenas um
editor de texto e um compilador
Java, mas, para facilitar o trabalho,
melhor utilizar o NetBeans.
Uma aplicao Swing usa, normalmente, pelo menos um JFrame. Um objeto derivado JFrame
implementa uma nica janela. Ele
possui elementos chamados decoraes, que so:

a borda,
o ttulo;
os botes para maximizar,

minimizar e fechar a janela.

Alm do JFrame, pode ser utilizado, como componente base para


aplicaes, o JDialog ou o JApplet. Estes possuem um content
pane. O content pane um container
sobre o qual sero adicionados os
componentes grficos que iro
compor a aplicao.

PROGRAMAO ORIENTADA A OBJETOS II

59

O primeiro passo criar um novo projeto no NetBeans. Nesse exemplo,


ser criado um projeto chamado AloSenaiSwing. Para isso, foi criado o
pacote com.senai.alosenai e, nesse pacote, deve-se criar um novo formulrio JFrame, conforme as figuras 30 e 31.

Figura 30: Criando um JFrame

Figura 31: Nomeando um JFrame criado

O resultado dessa operao ser a apresentao de um formulrio em


branco, onde possvel adicionar os demais componentes.
O NetBeans controlar todo o cdigo destinado criao das janelas,
inclusive quando uma classe derivada de JFrame for salva.O NetBeans
cria um arquivo auxiliar para tratar dos componentes presentes na tela,
e demais informaes, necessrias, no momento ao qual est se desenvolvendo um formulrio na IDE. Esse arquivo possui a extenso .form.

60

CURSOS TCNICOS SENAI

Na figura 32, voc pode ver o resultado dessa operao, e um pouco da


forma como o Netbeans trata aplicaes Swing.

Figura 32: Editor NetBeans

preciso adicionar os componentes necessrios ao JFrame, indicando


o local que se deseja incluir o componente no formulrio. O NetBeans apresentar rguas para auxiliar no processo de posicionamento dos
componentes. Os componentes a serem adicionados so:

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:

defaultCloseOperation: esta propriedade define como a Virtual

Machine deve tratar o formulrio aps ele ter sido fechado. O valor deve
ser: EXIT_ON_CLOSE;

title: essa a propriedade que trata do ttulo da janela. Altere para:


Alo SENAI!.
Os componentes, no swing, mantm um mesmo padro para nome das
propriedades, por isso, praticamente, todos os componentes possuem
propriedades como text e enable. Isto se deve ao fato da rvore de heranas dos componentes do Swing. Veja detalhes na figura seguinte.

PROGRAMAO ORIENTADA A OBJETOS II

61

Figura 33: rvore de componentes Swing

Deve-se alterar a propriedade Text dos componentes a seguir.

rtulo (JLabel): altere o texto para Nome


campo de texto (JTextField): altere o texto para Senai
boto (JButton): altere o Texto para Clique Aqui!
Neste momento, a aplicao j pode ser executada, entretanto, o boto
ainda no realiza nenhuma ao. O cdigo das aes que um componente realiza, em resposta a uma ao do usurio ou do sistema, chama-se Evento. Os eventos, da mesma forma que as propriedades, seguem
um mesmo padro entre os diversos componentes. Para adicionar uma
ao a um boto, h duas opes: por meio da paleta de propriedades,
selecionando na listagem de eventos o enveto actionPerformed, ou dando
um duplo clique sobre o componente, dessa forma, adicionado, automaticamente, um evento do tipo actionPerformed. Ao se realizar essa ao,
aparecer no editor o mtodo jButton1ActionPerformed. Deve-se adicionar
o cdigo para que fique similar s informaes a seguir. O cdigo executado desse projeto pode ser observado na figura 34.

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {


JOptionPane.showMessageDialog(this.getRootPane(),
Alo +jTextField1.getText()+!,Mensagem de Al!,
JOptionPane.INFORMATION_MESSAGE);
}

62

CURSOS TCNICOS SENAI

SEO 3

Containers e
gerenciadores
de Layout

Figura 34: Execuo do projeto

O JOptionPane permite exibir mensagens, que permitem a interao


com o usurio. Existem diversos tipos de mensagens. Veja!

MessageDialog: utilizado apenas para emitir uma mensagem,


possibilitando que ela tenha um tipo. No exemplo, o tipo de mensagem
foi definido como information. Alm desse, h Error, Warning, Question . etc.
InputDialog: exibe uma mensagem com uma caixa de edio, permitindo que o usurio informe um valor. Exemplo:
String pessoa = JOptionPane.showInputDialog(Quem voc?);
ConfirmDialog: apresenta uma mensagem, onde o usurio pode
selecionar entre opes. Exemplo:
int opSelecionada = JOptionPane.showConfirmDialog(null, Confirma
excluso?);
Alm dos componentes, que foram utilizados nesse exemplo, existem
outros importantes. Junto com o JDK enviado um demo do Swing,
onde se pode observar todo o potencial da biblioteca, disponvel em
{diretrio de instalao do JDK}\Demo\JFC\SwingSet2}.
Entre os diversos componentes disponveis vale destacar mais alguns.

JPasswordField: caixa de texto com possibilidade de formatao.


JCheckBox: boto de checagem.
JRadioButton: boto mutuamente exclusivo.
JComboBox: caixa de edio com lista de seleo.
Jlist: lista de elementos.

JMenuBar; JMenuItem; JMenu; JCheckBoxMenuItem e JRadioButtonMenuItem: elementos para menu.

Entre os diversos tipos de componentes, h uma classe de componentes descendentes de java.


awt.Container, chamados de
Containers, que so componentes
criados para conter outros componentes, permitindo agrup-los
e definir layouts em camadas.
Existe um grupo especial de containers, chamado de top-level. Fazem parte desse grupo: JFrame,
JDialog e JApplet. Esses containers so base para os componentes numa aplicao Swing.
Um componente, para ser exibido na tela, deve fazer parte de um
container. Alm de componentes
de tela, um container pode conter
uma barra de menu.
O JPanel se destaca entre os containers e so usados para organizar um grupo ou mais grupos de
componentes filhos, permitindo
separar uma tela em sees lgicas e permitindo que componentes relacionados, sejam agrupados
com mais facilidade. Outro uso
dessa classe substituir o componente Canvas, quando for necessrio uma rea de desenho. O seu
gerenciador de layout padro o
FlowLayout.
Os gerenciadores de layouts so
componentes que controlam tanto a disposio, quanto a dimenso dos componentes em um
container. O NetBeans facilita o
desenvolvimento de aplicaes
Swing por gerenciar o Layout de
uma maneira eficiente, criando dinamicamente GroupLayout.
Confira os gerenciadores de
layout disponveis.

PROGRAMAO ORIENTADA A OBJETOS II

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-

renciador de layout flexvel e


ideal para criar interfaces grficas
elaboradas. Permite configurar
relacionamento entre as bordas
dos controles, por exemplo,
configurar que a borda esquerda
est a 5 pixels da borda direita de
outro componente. Os componentes so arranjados de acordo
com as restries.

GroupLayout: um gerenciador de layouts que organiza grupos de componentes de maneira


hierrquica de modo a viabilizar
o posicionamento deles em um
determinado container.

64

CURSOS TCNICOS SENAI

SEO 4
Eventos

A interao entre o usurio e um


componente ou entre componentes de uma interface grfica
ocorre por meio de eventos. Os
eventos utilizam dois elementos
distintos: manipuladores de eventos e objetos de eventos.
Um manipulador de evento um
mtodo que recebe um objeto de
evento, decifra, e processa a interao do usurio. Com o modelo
de delegao, os eventos so enviados ao componente, mas cada
componente registra um manipulador de eventos para trat-los.
Os manipuladores de eventos so
chamados Listeners.
Os Listeners so classes que implementam a interface de EventListener ou uma das suas derivaes. Listeners podem receber e
processar o evento, desse modo, o
manipulador de evento pode estar
em um objeto separado do componente. Todo evento tem uma
interface de listeners correspondentes, que define mtodos em
uma classe designada a receber
aquele tipo de evento.
A classe que implementa a interface define esses mtodos, e pode
ser registrada como um listener.
Importante notar que no so
propagados eventos de componentes, que no possui nenhum
listener registrado.

SEO 5

Estudo de caso: objetos


de calcular
O objetivo desse estudo de caso
criar interface grfica para calculadora, j desenvolvida, na seo3.
Sero utilizados alguns princpios
de um padro de arquitetura chamado MVC (Model, View, Control).
O MVC procura separar a camada
de lgica de negcio, da camada
de lgica de apresentao. Isso
possibilita desenvolver, manutenir
e testar cada camada isoladamente. Outra caracterstica da adoo
desse modelo a independncia
entre apresentao da aplicao,
dos dados e das operaes sobre
os dados.
O Model (modelo) a lgica de
negcio. Ele possui a representao detalhada das informaes da
aplicao. O Model, por exemplo,
implementa as entidades envolvidas na soluo do problema proposto.
A View (viso) a camada de interface com o usurio e onde o
usurio interage com a aplicao.
Nela so apresentadas as informaes para o usurio, possibilitando a ele responder a uma
condio. Essa camada no deve
acessar diretamente ao banco de
dados, e, normalmente, tambm
no solicita diretamente operaes ao Model.
O Controller intermedia a View e
o Model controlando todo o processo. Ele transforma eventos gerados na View em operaes no
Model. Cada iterao do usurio
com a View , primeiramente, interpretada pelo Controller, para,
ento, acessar o Model.

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:

rtulo (JLabel): altere o texto para Operaco e o seu nome para


jlOperacao;
campo de Texto (JTextField): limpe o contedo e altere o seu nome
para jtfExpressao;
boto (JButton): altere o seu texto para Calcular e o seu nome
para jbCalcular.

O formulrio ficar conforme a figura a seguir.

Figura 35: Classe CalculadoraView

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.

PROGRAMAO ORIENTADA A OBJETOS II

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

CURSOS TCNICOS SENAI

Cdigo Evento do boto


// cdigo continua ...
private void jbCalcularActionPerformed(java.awt.event.ActionEvent evt) {
calculadoraController.calcular(jtfExpressao.getText());
}
// cdigo continua ...

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();
}
}

Figura 36: Classe CalculadoraView

Nesta unidade voc acompanhou o estudo de caso de um objeto de


calcular. Na prxima unidade de estudo voc ter uma viso geral sobre
entradas e sadas, aprender a manipular dados e acompanhar um estudo de caso. Bons estudos!

PROGRAMAO ORIENTADA A OBJETOS II

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

O Java disponibiliza uma grande


variedade de formas para criar,
manipular e gerir operaes de
Entrada/Sada, destinadas a tratar arquivos, conexes de rede ou
blocos de memria. possvel
tratar arquivos formatados, no
formatados, compactados etc, em
diferentes nveis de complexidade
e abstrao e de diferentes maneiras.
As operaes de entrada e sada,
no Java, so feitas por meio de
Streams. Stream uma sequncia
de ordenada de dados, que possuem uma fonte ou destino. Os
pacotes responsveis por essas
operaes so java.io e Java.nio.
Nesse material, ser apresentado
somente o pacote java.io., que define Entradas/Sadas como:

O Java disponibiliza uma classe, que representa tanto arquivos, quanto


diretrios. Essa classe o File, que permite um gerenciamento, como,
verificar se um arquivo/diretrio existe, exclui arquivos/diretrios ou
mesmo ler informaes.
Veja alguns mtodos importantes da classe File:

Viso Geral

File;
InputStream e OutputStream;
Reader e Writer;
BufferedReader e BufferedWriter;
DataInput e DataOutput;
ObjectInput e Object Output.

Manipulando arquivos

boolean canRead(): verifica se tem permisso para leitura;


boolean canWrite(): verifica se tem permisso para escrita;
boolean compareTo(File outroArquivo): compara dois caminhos

de arquivos;

boolean delete: exclui o arquivo. No caso de diretrio, ele precisa


estar vazio;

boolean exists(): verifica se o caminho passado existe;

long lastModified(): retorna a ltima modificao do arquivo;

boolean isAbsolute(): verifica se o caminho passado absoluto;


boolean isDirectory(): verifica se o caminho um diretrio;
boolean isHidden (): verifica se oculto;
boolean mkdir(): cria um diretrio com o caminho do File;
boolean renameTo(Filedest): renomeia o arquivo/diretrio;

File[] listFiles: lista os arquivos contidos em um diretrio. Caso,


no seja um diretrio, retorna null;
long length(): retorna o tamanho do arquivo;
String getAbsolutePath(): retorna o caminho absoluto;
String getName(): retorna o nome do arquivo ou diretrio;

String[] list: lista os nomes dos arquivos contidos de um diretrio.


Caso, no seja um diretrio, retorna null;

void setReadOnly(boolean readable): modifica o atributo do


arquivo para apenas leitura.

PROGRAMAO ORIENTADA A OBJETOS II

69

Veja um exemplo de uso da classe File:

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!);
}
}
}
}

Quando a instncia que a classe File se referencia um diretrio, existem


dois mtodos para retornar o seu contedo (arquivos que possuem):
list( ) e o listFiles( ). Esses mtodos possuem, alm da implementeo
que no recebe argumentos, uma construtora que permite passar como
parmetro um objeto da interface FilenameFilter.

70

CURSOS TCNICOS SENAI

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!);
}
}
}
}

PROGRAMAO ORIENTADA A OBJETOS II

71

Agora, veja um exemplo de lista de arquivos com uso de filtro.

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)

public class ListandoFileFiltro {


public static void main(String args[]) {
//lista os diretrios raizes
for (File root : File.listRoots()) {
// se no possui lista de arqivos
if (root.listFiles() == null) {
//continua no prximo lao
continue;
}
//lista os aquivos exe e com
for (File arq : root.listFiles(new FiltroExe())) {
System.out.print( arq.getAbsolutePath());
//se for oculto, exibe (o)
if (arq.isHidden()) {
System.out.print( (o));
}
System.out.println( tam: + arq.length());
}
}
}
}

72

CURSOS TCNICOS SENAI

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.

Figura 37: Leitura de arquivo texto

O FileInputStream l bytes. O InputStreamReader, uma derivada da


classe Reader, l caracteres, o que facilita a manipulao de arquivos-texto. A classe BufferedReader permite ler linhas inteiras por meio do
mtodo readLine.
Alm de ser possvel ler de arquivos, pode-se ler as entradas, feitas pelo
usurio, em um console. Essa operao pode feita, substituindo a instanciao do objeto FileInputStream e passado como parmetro o System.ini para o InputStreamReader. O cdigo, desse exemplo, pode ser
visto 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);
}

PROGRAMAO ORIENTADA A OBJETOS II

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.

Figura 38: Gravao de arquivo-texto

74

CURSOS TCNICOS SENAI

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);
}
}
}

PROGRAMAO ORIENTADA A OBJETOS II

75

SEO 3

Estudo de caso: editor de texto


Voc vai conferir, agora, os passos para criar um editor de textos simples, utilizando Java. Ser empregada uma simplificao do MVC.
1. Criar e preparar um novo projeto.
2. Criar uma classe que represente a lgica do editor de texto.
3. Criar uma tela swing para consumir a classe da lgica.
4. Criar uma classe que orquestre as outras duas classes.
Deve-se criar um novo projeto no eclipse, nomeado EditorTexto. Nesse
projeto, deve-se adicionar um pacote chamado com.senai.texto. O projeto estar conforme figura a seguir.

Figura 39: Projeto editor de texto

O prximo passo ser criar a classe com a lgica do editor. Ela ser chamada de EditorModel. Veja o cdigo da Classe EditorModel.

76

CURSOS TCNICOS SENAI

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();
}
}

Dois mtodos merecem destaque, nessa classe: carregar e gravar. Ambos


manipulam arquivos e, por conta dos mtodos que utilizam, podem dar
origem a excees do tipo IOException.
Essa classe no interage com o usurio, por isso, optou-se por no trat-las por ora.. Foram utilizadas as palavras reservadas throws para, no
caso da ocorrncia de uma exceo do tipo IOException, lan-la para o
mtodo chamado, evitando que seja preciso tratar nesse local.
Prximo passo: adicionar um JFrame. Ele deve se chamar EditorView.
Ser utilizada uma barra de menus, na parte superior, onde o nome do
menu principal ser arquivo. Deve-se adicionar dois itens de menu a
ele, sendo um para salvar e outro para carregar. importante renomear
esses dois itens para jmCarregar e jmSalvar.

PROGRAMAO ORIENTADA A OBJETOS II

77

Ser adicionado, tambm, ao formulrio uma rea de texto. O Netbeans


adicionar, automaticamente, sob a rea de texto, um JScrollPane, para
que sejam criadas barras de rolagem em textos muito longos. O formulrio dever ficar similar ao que pode ser observado na figura a seguir.

Figura 40: Formulrio editor

A prxima etapa ser criar o objeto, que controlar a aplicao. Ser


preciso adicionar uma nova classe chamada EditorControl. Uma melhoria,
adicionada a esse estudo de caso, o uso de um padro de projeto chamado Singleton. Tal padro, garante que dada uma JVM, somente uma
instncia da classe existir na memria, evitando, assim, a existncia de
mais de um Controller. Confira o cdigo dessa classe.

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

CURSOS TCNICOS SENAI

// E um mtodo que possibilite s seja criada uma instncia da classe


public synchronized static EditorController getInstance() {
if (instance == null) {
instance = new EditorControl();
}
return instance;
}
private void initEditor() {
editorView = new EditorView();
editorView.setControl(this);
editorView.setTitle(Editor de Texto);
}
public void show() {
editorView.setVisible(true);
}
{
JFileChooser fc = new JFileChooser();
int res = fc.showOpenDialog(editorView);
if (res == JFileChooser.APPROVE_OPTION) {
editorModel = new EditorModel(fc.getSelectedFile());
try {
editorView.setText(editorModel.carregar());
editorView.setTitle(Editor de Texto: +
fc.getSelectedFile().getAbsolutePath());
} catch (IOException io) {
JOptionPane.showMessageDialog(editorView, Problema ao carregar arquivo,
Editor, JOptionPane.ERROR_MESSAGE);
}
}
}
public void gravar() {
JFileChooser fc = new JFileChooser();
int res = fc.showSaveDialog(editorView);
if (res == JFileChooser.APPROVE_OPTION) {
editorModel = new EditorModel();
editorModel .setArquivo(fc.getSelectedFile());
try {
editorModel.gravar(editorView.getText());
editorView.setTitle(Editor de Texto: +
fc.getSelectedFile().getAbsolutePath());
} catch (IOException io) {
JOptionPane.showMessageDialog(editorView, Problema ao carregar arquivo,
Editor, JOptionPane.ERROR_MESSAGE);
}
}
}
}

PROGRAMAO ORIENTADA A OBJETOS II

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:

public class EditorView extends javax.swing.JFrame {


private EditorController editorControl;
public void setControl(EditorController editorControl){
this.EditorController = editorControl;
}
public String getText(){
return jTextArea1.getText();
}
public void setText(String text){
jTextArea1.setText(text);
}
//... continua o cdigo...
private void jmCarregarActionPerformed(java.awt.event.ActionEvent evt) {
editorControl.carregar();
}
private void jmSalvarActionPerformed(java.awt.event.ActionEvent evt) {
editorControl.gravar();
}
//... continua o cdigo

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

CURSOS TCNICOS SENAI

Figura 41: Editor de texto executando

Nesta unidade de estudos, voc aprendeu a manipular arquivos e, ainda,


viu como se cria um editor de texto. Na prxima unidade, voc conhecer os JDBC e ver como unir todas as informaes estudadas at agora.

PROGRAMAO ORIENTADA A OBJETOS II

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.

interfaces: abstraes que


representam as colees;

implementaes: classes
concretas que implementam as
interfaces;
algoritmos: mtodos para

pesquisa e ordenao, que so


oferecidos pelas classes; que
implementam as interfaces, e so
polimrficos e reutilizveis.

Figura 42: Editor de texto executando

Collection a raiz da hierarquia das colees bsicas. Essa interface


implementada por todas as colees e usada quando se deseja com
uma generalizao das colees. Algumas colees permitem inserir e/
ou duplicar elementos, outras no. Algumas so ordenadas, outras no.
O Java no fornece classe, que implemente esta interface diretamente,
mas fornece de colees especficas, tais, como, Set e List

PROGRAMAO ORIENTADA A OBJETOS II

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

CURSOS TCNICOS SENAI

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.

PROGRAMAO ORIENTADA A OBJETOS II

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:

fazer uma conexo com um


banco de dados;
criar uma instruo usando
SQL;
executar um consulta SQL no

banco de dados;

recuperar e manipular o resultado de um consulta;


executar Stored Procedures.
Dada a diversidade de bancos de
dados existentes e as especificidades de cada um, os fornecedores
precisam desenvolver o driver
JDBC, implementando as interfaces da API. As aplicaes ficam
livres dos detalhes de cada banco,
permitindo uma certa independncia de plataforma.
Um JDBC Driver um conjunto de classes, que implementam as interfaces de JDBC. Esse
conjunto de classes concretas
quem far a ponte entre o cdigo
cliente, que usa a API JDBC, e o
banco de dados. So essas classes
que sabem se comunicar por meio
do protocolo proprietrio do banco de dados.

Confira os tipos de drivers JDBC.

Ponte JDBC-ODBC: prov


acesso por um ou mais drivers de
ODBC.

Middleware: So sistemas
de software que intermedeiam e/ou integram outros sistemas de software.

Native-API: converte chamadas JDBC em chamadas no


programa cliente para Oracle,
Sybase, Informix, DB2, ou outro
DBMS. Essa classe de Driver
requer que algum cdigo binrio
esteja carregado em cada mquina do cliente.
Net-Protocol: traduz JDBC
API para um protocolo DBMS
independente, que traduzido,
ento, a um protocolo de DBMS
por algum server. Esse middleware de servidor de rede pode
conectar Java aos clientes, baseado em muitos bancos de dados
diferentes.
Native-Protocol: converte
um JDBC em um protocolo de
rede usado diretamente por um
DBMS. Faz com que o Java seja
a prpria ponte entre a base, tornando-se um programa cliente.

PROGRAMAO ORIENTADA A OBJETOS II

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.

Figura 43: Editor de texto executando

88

CURSOS TCNICOS SENAI

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.

//algum cdigo ...


//registrando a classe do driver
Class.forName(com.progress.sql.jdbc.JdbcProgressDriver);
Connection conexao = DriverManager.getConnection(
jdbc:postgresql://localhost:5432/ControleClientes,user,user);
//algum cdigo...

Confira, a seguir, as interfaces relevantes do JDBC.

Statement: a interface utilizada para executar uma declarao SQL


e obter o seu resultado.
PreparedStatement: a interface utilizada para representar uma
declarao pr-compilada de SQL.
CallableStatement: uma interface que executa procedimentos

SQL.

ResultSet: um ResultSet prov acesso a um conjunto de dados. Um


objeto ResultSet, normalmente, gerado executando uma Statement.
ResultSetMetaData: a interface utilizada para ter acesso aos tipos
e propriedades das colunas de um ResultSet.
DatabaseMetaData: retorna informaes sobre o banco de dados
como um todo.
A insero de valores em uma tabela pode ser feita por meio do uso de
Statement e PreparedStatement. A seguir, voc poder ver um exemplo de
insero de valores, utilizando as duas opes, e, logo aps, uma figura
com um exemplo contendo o contedo inserido.

PROGRAMAO ORIENTADA A OBJETOS II

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();
}
}

Figura 44: Registros inseridos

90

CURSOS TCNICOS SENAI

Utilizando o Statement possvel retornar os valores de uma consulta.


O mtodo que realiza esta operao o executeQuery. O retorno da
sua execuo um ResultSet. Voc pode observar isso, no exemplo de
cdigo, a seguir.

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();
}
}

Outra forma possvel por meio de um objeto PreparedStatement.


Confira esse detalhamento, no exemplo, a seguir.

PROGRAMAO ORIENTADA A OBJETOS II

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

CURSOS TCNICOS SENAI

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!

PROGRAMAO ORIENTADA A OBJETOS II

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.

Figura 45: JDK + NetBeans

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

Figura 46: Adicionando variveis de ambiente

hora de criar as variveis.

JAVA_HOME: indica onde a verso do Java est instalada. O


contedo deve ser o caminho para instalao. Exemplo: C:\Arquivos de
Programas\Java\jdk1.6.0_07
PATH: possivelmente, j deve existir esta variviel. Portanto,
deve-se acrescentar ao contedo, o caminho completo para se chegar pasta bin do Java. Por exemplo: C:\Arquivos de Programas\Java\
jdk1.6.0_07\bin\.
possvel utilizar a varivel JAVA_HOME como parte do caminho
na varivel PATH. Utilizando o mesmo exemplo, ficaria desta forma:
%JAVA_HOME%\bin\

96

CURSOS TCNICOS SENAI

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>.

Figura 47: PostgreSQL

A instalao um processo simples, mas preciso ateno com a senha


de administrao do PostgreSQL informada .
Feita a instalao, deve-se criar um banco de dados chamado ControleClientes. Crie um usurio senai (senha senai) e atribua permisso total a
esse usurio. Veja o script detalhado de criao da tabela Cliente, utilizada nos exemplos.

CREATE TABLE Cliente


(
uid integer NOT NULL,
nome character varying(50) NOT NULL,
endereco character varying(200) NOT NULL,
telefone character varying(25),
nome_contato character varying(50),
telefone_contato character varying(25),
tipo integer NOT NULL DEFAULT 0,
CONSTRAINT pk_cliente PRIMARY KEY (uid)
)

PROGRAMAO ORIENTADA A OBJETOS II

97

O driver JDBC para PostgresSQL pode ser obtido em <http://jdbc.


postgresql.org/download.html#current>. Nos exemplos, foi utilizado
o driver tipo 4. No preciso instalar o driver, basta copi-lo para algum
diretrio do sistema. Nos exemplos, considerou-se que o driver foi copiado para uma pasta jar no diretrio de instalao do postgress.

Figura 48: Driver JDBC PostgreSQL

98

CURSOS TCNICOS SENAI

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!

PROGRAMAO ORIENTADA A OBJETOS II

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.

evitar caracteres no ASCII (caracteres de lngua de origem latina,


como caracteres acentuados, cedilha etc.), caracteres especiais (@, #, $,
%, &, *, _ etc.) ou nmeros;
se o nome de uma classe seja composto por mais de uma palavra, a

primeira letra de cada palavra deve ser maiscula;

nomes pluralizados devem ser evitados.


A diferena entre os nomes das classes e os nomes das interfaces se
refere ao tipo de palavra utilizado. As classes devem ser nomeadas, utilizando substantivos e as interfaces devem ser nomeadas para que passem
a ideia de uma qualidade ou caracterstica.
Veja alguns exemplos de nomes de classes e interfaces.
public class Pedido
public class ClienteEspecial
public class Boleto
public interface Distribuido
public interface OperacaoRemota

Os pacotes (package) devem-se ser nomeados, utilizando apenas letras


minsculas. O nome do pacote reflete a estrutura dos diretrios. Por
exemplo, o pacote nomeado como com.senai.aulajava ter os arquivos que o compem na pasta: <caminho do projeto>\com\senai\
aulajava.

Os nomes de classes e interfaces


devem seguir o seguinte padro:

a primeira letra de cada palavra


deve ser maiscula e as abreviaes devem ser evitadas;

PROGRAMAO ORIENTADA A OBJETOS II

101

SEO 2

Nomeando atributos e variveis


Os nomes dos atributos e das variveis devem ser escritos com letras
minsculas. Nos casos de nomes compostos, a primeira letra de cada
palavra deve ser grafada com letra maiscula.
Deve-se evitar:

o uso de sublinhado;
o cifro ($) porque este caracter tem significado especial a classes

internas;

caracteres no ASCII e nmeros.


Veja alguns exemplos:
String clienteAtual;
int valorTotal;
float totalizador;

Nos atributos de classe no se deve acrescentar o nome da classe, evitando,


assim, situaes como: classe Conta possuir o atributo saldoConta. Aqui, o
correto seria chamar o atributo de saldo.

Deve-se nomear as constantes com todas as letras maisculas e com as


palavras separadas por sublinhado. Exemplo:
public final int NUM_DIAS_SEMANA;
public final short VELOCIDADE_MAXIMA;

Nome de atributos e variveis, que representam colees, vetores ou


matrizes devem ser nomeados no plural.
List <Livro> livros;
public Aluno []alunos;

102 CURSOS TCNICOS SENAI

SEO 3
Mtodos

Os mtodos devem executar apenas uma tarefa. A operao deve ser


descrita em javadoc, onde tambm devem ser detalhados os parmetros
recebidos pelo mtodo.
Deve-se evitar mtodos muito extensos.

Assim, como as variveis e os atributos, os nomes de mtodos devem


ser escritos com letras minsculas. Nos casos de nome compostos, , a
primeira letra de cada palavra deve ser grafada com letra maiscula. No
se deve utilizar o caractere sublinhado (underscore) e deve ser evitado o
uso de caracteres no ASCII e nmeros.
Os mtodos, normalmente, devem utilizar verbos ou frases verbais. Mtodos que retornem um tipo booleano devem usar prefixo is, seguido
de um substantivo ou adjetivo. Os mtodos que retornam o valor de
um atributo do objeto so nomeados com substantivos com o prefixo
get. J os mtodos que alteram o valor de um atributo do objeto so
nomeados com substantivos com o prefixo set. Confira os exemplos:
public boolean isAtiva()
public void setQuantidade(long quantidade){
public double getSaldo(){
public void sacar(double value)
public transferirValor(...)

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).

Com as informaes sobre os padres de codificao, com certeza,


ficar muito mais fcil entender
todos os cdigos vistos, at agora,
e no restar dvida na hora que
voc for escrever algum. Agora
voc j est apto a desenvolver
aplicaes Java!

SEO 4

Endentao, comentrios, blocos de cdigo,


espaos e linhas brancas
A endentao (indentao ou recuo) trata da organizao do cdigo fonte de um programa, de modo, a indicar as relaes hierrquicas entre os
elementos. Todos os elementos no mesmo nvel ficam alinhados com o
mesmo espaamento da margem esquerda. No Java, seu papel esttico,
melhorando a legibilidade do cdigo fonte.
Deve-se colocar apenas uma declarao por linha.

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!

PROGRAMAO ORIENTADA A OBJETOS II

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

CADENHEAD, Rogers; LEMAY, Laura. Aprenda em 21 Dias Java 2. 4. ed. So Paulo,


SP: Campus, 2005.

CAELUM. FJ-11 Java e Orientao a Objetos. Disponvel em: <http://www.caelum.


com.br/download/caelum-java-objetos-fj11.pdf>. Acesso em: 01 abr. 2011.

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.

ORACLE, Java at Glance. Disponvel em: <http://download.oracle.com/javase/1.5.0/


docs/>. Acesso em: 01 abr. 2011

SIERRA, Kathy; BATES, Bert. Use a cabea! Java. Traduo da segunda edio. Rio de
Janeiro, RJ: Editora Alta Books, 2005.

SINTES, Anthony. Aprenda Programao Orientada a Objetos em 21 dias. So Paulo,


SP: Makron Books, 2002.

SOMMERVILLE, Ian. Engenharia de Software. 8. ed. So Paulo: Pearson, 2007.

WINCK, Diogo; GOETTEN, Vicente. AspectJ - Programao orientada a aspectos com


Java. So Paulo: Novatec, 2006.

PROGRAMAO ORIENTADA A OBJETOS II

107

Equipe de Desenvolvimento de Recursos Didticos


Coordenao de Educao a Distncia
Beth Schirmer
Coordenao Projetos EaD
Maristela de Lourdes Alves
Coordenao de Desenvolvimento de Recursos
Didticos
Gisele Umbelino
Projeto Educacional
Angela Maria Mendes
Israel Braglia
Projeto Grfico
Daniela de Oliveira Costa
Jordana Paula Schulka
Juliana Vieira de Lima

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

PROGRAMAO ORIENTADA A OBJETOS II

109

You might also like