Você está na página 1de 136

Curso Tcnico em Informtica

Programao
Orientada a Objetos
Victorio Albani de Carvalho
Giovany Frossard Teixeira
Programao
Orientada a Objetos
Victorio Albani de Carvalho
Giovany Frossard Teixeira
2012
Colatina - ES
Presidncia da Repblica Federativa do Brasil
Ministrio da Educao
Secretaria de Educao a Distncia
Equipe de Elaborao
Instituto Federal de Educao, Cincia e Tecno-
logia do Esprito Santo IFES
Coordenao Institucional
Guilherme Augusto de Morais Pinto/IFES
Joo Henrique Caminhas Ferreira/IFES
Coordenao Curso
Allan Francisco Forzza Amaral/IFES
Professor-autor
Victorio Albani de Carvalho/IFES
Giovany Frossard Teixeira/IFES
Comisso de Acompanhamento e Validao
Universidade Federal de Santa Catarina UFSC
Coordenao Institucional
Araci Hack Catapan/UFSC
Coordenao do Projeto
Silvia Modesto Nassar/UFSC
Coordenao de Design Instrucional
Beatriz Helena Dal Molin/UNIOESTE e UFSC
Coordenao de Design Grco
Andr Rodrigues/UFSC
Design Instrucional
Gustavo Pereira Mateus/UFSC
Web Master
Rafaela Lunardi Comarella/UFSC
Web Design
Beatriz Wilges/UFSC
Mnica Nassar Machuca/UFSC
Diagramao
Andr Rodrigues da Silva/UFSC
Brbara Zardo/UFSC
Juliana Tonietto/UFSC
Marlia C. Hermoso/USFC
Nathalia Takeuchi/UFSC
Reviso
Jlio Csar Ramos/UFSC
Projeto Grco
e-Tec/MEC
Instituto Federal de Educao, Cincia e Tecnologia do Esprito Santo
Este Caderno foi elaborado em parceria entre o Instituto Federal de Educao,
Cincia e Tecnologia do Esprito Santo e a Universidade Federal de Santa Catarina
para a Rede e-Tec Brasil.
C331p Carvalho, Victorio Albani de

Programao orientada a objetos : Curso tcnico de inform
tica / Victorio Albani de Carvalho, Giovany Frossard Teixeira.
Colatina: IFES, 2012.
134 p. : il.
Inclui bibliograa
ISBN: 978-85-62934-38-4
1. Java (Linguagem de programao de computador).
2. Programao orientada a objetos (Computao).
3. Banco de dados. I. Carvalho, Victorio Albani de.
II. Teixeira, Giovany Frossard . III. Instituto Federal do Esprito
Santo. IV. Ttulo.
CDD: 005.133
e-Tec Brasil 33
Apresentao e-Tec Brasil
Prezado estudante,
Bem-vindo ao e-Tec Brasil!
Voc faz parte de uma rede nacional pblica de ensino, a Escola Tcnica
Aberta do Brasil, instituda pelo Decreto n 6.301, de 12 de dezembro 2007,
com o objetivo de democratizar o acesso ao ensino tcnico pblico, na mo-
dalidade a distncia. O programa resultado de uma parceria entre o Minis-
trio da Educao, por meio das Secretarias de Educao a Distancia (SEED)
e de Educao Prossional e Tecnolgica (SETEC), as universidades e escolas
tcnicas estaduais e federais.
A educao a distncia no nosso pas, de dimenses continentais e grande
diversidade regional e cultural, longe de distanciar, aproxima as pessoas ao
garantir acesso educao de qualidade, e promover o fortalecimento da
formao de jovens moradores de regies distantes, geogracamente ou
economicamente, dos grandes centros.
O e-Tec Brasil leva os cursos tcnicos a locais distantes das instituies de en-
sino e para a periferia das grandes cidades, incentivando os jovens a concluir
o ensino mdio. Os cursos so ofertados pelas instituies pblicas de ensino
e o atendimento ao estudante realizado em escolas-polo integrantes das
redes pblicas municipais e estaduais.
O Ministrio da Educao, as instituies pblicas de ensino tcnico, seus
servidores tcnicos e professores acreditam que uma educao prossional
qualicada integradora do ensino mdio e educao tcnica, capaz de
promover o cidado com capacidades para produzir, mas tambm com auto-
nomia diante das diferentes dimenses da realidade: cultural, social, familiar,
esportiva, poltica e tica.
Ns acreditamos em voc!
Desejamos sucesso na sua formao prossional!
Ministrio da Educao
Janeiro de 2010
Nosso contato
etecbrasil@mec.gov.br
e-Tec Brasil 5
Indicao de cones
Os cones so elementos grcos utilizados para ampliar as formas de
linguagem e facilitar a organizao e a leitura hipertextual.
Ateno: indica pontos de maior relevncia no texto.
Saiba mais: oferece novas informaes que enriquecem o
assunto ou curiosidades e notcias recentes relacionadas ao
tema estudado.
Glossrio: indica a denio de um termo, palavra ou expresso
utilizada no texto.
Mdias integradas: sempre que se desejar que os estudantes
desenvolvam atividades empregando diferentes mdias: vdeos,
lmes, jornais, ambiente AVEA e outras.
Atividades de aprendizagem: apresenta atividades em
diferentes nveis de aprendizagem para que o estudante possa
realiz-las e conferir o seu domnio do tema estudado.
e-Tec Brasil 7
Sumrio
Apresentao da disciplina 13
Projeto instrucional 15
Aula 1 Introduo plataforma Java 17
1.1 Introduo 17
1.2 A plataforma Java 18
1.3 Ambientes de desenvolvimento Java 19
1.4 Primeiro exemplo de programa em Java 20
1.5 Variveis e constantes 22
1.6 Converses entre tipos primitivos 23
1.7 Comentrios 25
1.8 Atribuio, entrada e sada de dados 26
1.9 Operadores 27
1.10 Comandos de deciso ou seleo 28
1.11 Comandos de repetio 30
1.12 Escopo de variveis 31
1.13 Vetores e matrizes 31
Aula 2 Introduo Orientao a Objetos 35
2.1 Conceitos bsicos 35
2.2 Classes em Java 36
2.3 Declarao de atributos e mtodos 38
2.4 Utilizao de objetos 41
2.5 Atributos e mtodos estticos 43
2.6 A classe String 44
2.7 Listas 45
Aula 3 Construtores, destrutores e encapsulamento 49
3.1 Construtores 49
3.2 Destrutores 50
3.3 Encapsulamento 51
Aula 4 Herana e polimorfismo 55
4.1 Herana 55
4.2 Utilizao de atributos protected 57
4.3 Polimorsmo 58
4.4 Sobrescrita 59
4.5 Sobrecarga 62
4.6 Classe Object 64
Aula 5 Classes abstratas e associaes 69
5.1 Classes abstratas 69
5.2 Mtodos abstratos 72
5.3 Associaes 73
Aula 6 Herana mltipla e interfaces 77
6.1 Herana mltipla 77
6.2 Interfaces 78
Aula 7 Interfaces grficas em Java Parte I 83
7.1 Java Swing 83
7.2 JFrame 84
7.3 JLabel e ImageIcon 86
7.4 JOptionPane 88
7.5 Tratamento de eventos e JButton 91
7.6 JTextField e JPasswordField 93
Aula 8 Interfaces grficas em Java parte II 99
8.1 Padres de layout 99
8.2 JComboBox e tratamento de eventos 102
8.3 JCheckBox 105
8.4 JRadioButton e ButtonGroup 106
8.5 JMenuBar, JMenu e JMenuItem 109
Nome da disciplina e-Tec Brasil 8
Aula 9 Integrao com Banco de Dados parte I 115
9.1 Programao cliente-servidor 115
9.2 Acesso a Bancos de Dados em Java 116
9.3 Fontes de dados ODBC 117
9.4 Conectando com o Banco de Dados 119
9.5 Consultando dados no banco 122
Aula 10 Integrao com Banco de Dados parte II 127
10.1 Introduo 127
10.2 Insero de dados 129
10.3 Atualizao de dados 130
10.4 Excluso de dados 131
Referncias 133
Currculo dos professores-autores 134
e-Tec Brasil 9
Palavra do professor-autor
e-Tec Brasil 11
Caro estudante!
Somos Victorio Albani de Carvalho e Giovany Frossard Teixeira, responsveis pela
elaborao deste material para a disciplina de Programao Orientada a Objetos.
Ao se deparar com mais uma disciplina voltada programao, voc pode se
questionar sobre o motivo de termos mais uma disciplina com esse foco. De fato,
nesta disciplina daremos continuidade aos assuntos das outras disciplinas, mas
estudaremos a programao sob um novo paradigma: a orientao a objetos.
Nessa nova forma de programar, modelaremos o universo do nosso pro-
blema como um conjunto de objetos que tm determinadas caractersticas
e agruparemos esses objetos em categorias chamadas classes. Ento, em
ltima instncia, nossos programas sero um conjunto de classes.
Alm disso, teremos outras duas novidades nos programas desenvolvidos
nesta disciplina: interfaces grcas com tratamento de eventos e acesso a
banco de dados. Esse ltimo assunto vem para fazer a ligao entre os pro-
gramas que desenvolvemos nas disciplinas de programao e os conceitos
estudados na disciplina de banco de dados.
Ou seja, ser necessrio relembrar diversos conceitos estudados em vrias outras
disciplinas e ainda estudar vrios conceitos totalmente novos. Assim, trata-se de
uma disciplina com contedo muito denso e que demanda muita dedicao.
Lembre-se: a melhor forma de aprender praticando! Essa frase ainda mais
verdadeira para a programao. Assim, organize seu tempo, dedique-se ao
curso e aproveite: voc dever divertir-se durante o processo de aprendizagem.
Um abrao!
Prof. Victorio Albani de Carvalho e Prof. Giovany Frossard Teixeira
e-Tec Brasil 13
Apresentao da disciplina
Nesta disciplina estudaremos os conceitos do paradigma de orientao a
objetos utilizando a linguagem de programao Java para aplicar tais con-
ceitos. Alm disso, desenvolveremos programas com interface grca e com
acesso a bancos de dados.
Ao programar seguindo o paradigma de orientao a objetos, usamos uma
maneira de pensar diferente do que fazamos nas disciplinas de programa-
o anteriores, mas todos os conceitos aprendidos nas outras disciplinas se-
ro utilizados nesta. Assim, fundamental revisar conceitos como: variveis,
operadores, estruturas de lao e de deciso, vetores etc. A primeira aula
desta disciplina visa revisar esses conceitos e apresentar a sintaxe de Java.
De fato fazemos uma reviso geral da linguagem, pois consideramos que
o aluno j utilizou a linguagem Java em alguma disciplina anterior sem se
aprofundar nos conceitos de orientao a objetos ou vem estudando lingua-
gem C, cuja sintaxe muito parecida com a sintaxe de Java.
Aps essa reviso inicial, focaremos nos conceitos de orientao a objetos e
em sua aplicao na programao em Java. Em seguida focaremos na cons-
truo de programas com interface grcas e no tratamento de eventos.
Nesse contexto estudaremos as classes de Java voltadas construo de
interfaces grcas. Por m, aprenderemos a construir programas Java que
acessem bancos de dados com capacidade para inserir, consultar, excluir e
alterar dados. Assim, para essa ltima parte da disciplina sero fundamentais
os conhecimentos assimilados na disciplina de Banco de Dados.
Este material se prope a ser um guia didtico dos conceitos a serem estudados.
Entretanto, impossvel esgotar tantos assuntos em um nico material. Assim,
importante ressaltar que estudos das bibliograas recomendadas podem ser
necessrios para um melhor aprendizado e desenvolvimento de capacitaes
complementares imprescindveis formao direcionada para este curso.
Bons estudos e sucesso!
Prof. Victorio Albani de Carvalho e Prof. Giovany Frossard Teixeira
e-Tec Brasil 15
Disciplina: Programao Orientada a Objetos (carga horria: 90 hs).
Ementa: Parte 1: Paradigmas de programao orientada a objetos. Lingua-
gem de programao orientada a objetos.
Parte 2: Programao de interfaces grcas e tratamento de eventos. Progra-
mao cliente-servidor, compilao em separado. Bibliotecas dinmicas (DLL).
Integrao com Banco de Dados.
AULA
OBJETIVOS DE
APRENDIZAGEM
MATERIAIS
CARGA
HORRIA
(horas)
1. Introduo
plataforma Java
Entender o funcionamento da plataforma
Java.
Entender o que so os ambientes de desen-
volvimento Java.
Conhecer ou revisar as principais caracte-
rsticas e recursos da linguagem Java: vari-
veis, comentrios, operadores, comandos de
deciso e de repetio, vetores e matrizes.
Softwares: DK e NetBeans.
Artigo sobre o que Java em:
http://javafree.uol.com.br/
artigo/871498/Tutorial-Java-O-
-que-e-Java.html
Artigo sobre as caractersticas
bsicas de Java em http://java-
free.uol.com.br/artigo/871496/
Tutorial-Java-2-Caracteristicas-
-Basicasindex
10
2. Introduo
a orientao a
objetos
Conhecer os conceitos fundamentais de
orientao a objetos: objetos, classes, mto-
dos, atributos e pacotes. Aprender a criar e a
utilizar classes e objetos em Java.
Conhecer e aprender a utilizar a classe
String e a classe ArrayList.
Softwares: JDK e NetBeans.
Documentao ocial da Oracle
sobre a classe ArrayList em
http://download.oracle.com/
javase/6/docs/api/java/util/
ArrayList.html
Documentao ocial da Oracle
sobre a classe LinkedList em
http://download.oracle.com/
javase/6/docs/api/java/util/
LinkedList.html
10
3. Construtores,
destrutores e
encapsulamento
Entender os conceitos de construtores e
destrutores. Entender o conceito de encap-
sulamento e sua importncia.
Criar programas com maior manutenibili-
dade e extensibilidade pela utilizao do
conceito de encapsulamento.
Softwares: JDK e NetBeans. 08
(continua)
Projeto instrucional
AULA
OBJETIVOS DE
APRENDIZAGEM
MATERIAIS
CARGA
HORRIA
(horas)
4. Herana e
polimorsmo
Conhecer o conceito de herana e aprender
a implementar esse conceito em Java. Com-
preender o conceito de polimorsmo.
Conhecer os conceitos de sobrecarga e
sobrescrita de mtodos.
Aprender a utilizar polimorsmo pela aplica-
o dos conceitos de herana, sobrecarga e
sobrescrita de mtodos.
Softwares: JDK e NetBeans.
Documentao ocial da Oracle
sobre a classe Object em
http://download.oracle.com/
javase/6/docs/api/java/lang/
Object.html.
10
5. Classes
abstratas e
associaes
Conhecer os conceitos de classes e mtodos
abstratos.
Aprender a utilizar classes abstratas em
hierarquias de classes.
Conhecer o conceito de associao entre
classes.
Aprender a implementar associaes entre
classes em Java.
Softwares: JDK e NetBeans. 08
6. Herana
mltipla e
interfaces
Entender o conceito de herana mltipla.
Conhecer o conceito de interface.
Aprender a aplicar o conceito de interface
em Java.
Entender como o conceito de interface pode
ser utilizado para simular uma herana
mltipla em Java.
Softwares: JDK e NetBeans. 04
7. Interfaces
grcas em Java
parte I
Construir as primeiras interfaces grcas
em Java.
Conhecer algumas classes para construo
de interfaces grcas em Java: JFrame,
JLabel, ImageIcon, JOptionPane, JTextField
e JPassword.
Aprender a fazer tratamento de eventos
sobre interface grca em Java.
Softwares: JDK e NetBeans.
Documentao ocial da Oracle
sobre a classe JTextArea em
http://download.oracle.com/
javase/6/docs/api/javax/swing/
JTextArea.html
10
8. Interfaces
grcas em Java
parte II
Aprender o conceito de padres de layout.
Conhecer alguns padres de layout de Java.
Conhecer mais classes para construo de
interfaces grcas em Java: JComboBox, JChe-
ckBox, JRadioButton, ButtonGroup, JMenuBar,
JMenu e JMenuItem.
Desenvolver novos exemplos de tratamento de
eventos sobre interface grca em Java.
Softwares: JDK e NetBeans. 10
9. Integrao
com Bancos de
Dados parte I
Compreender o conceito de Programao
cliente-servidor.
Aprender a acessar bancos de dados em
Java utilizando drivers nativos e ODBC.
Aprender a construir aplicaes em Java capa-
zes de consultar dados de bancos de dados.
Softwares: JDK, NetBeans,
MySQL Server e driver nativo do
MySQL.
10
10. Integrao
com Bancos de
Dados parte II
Aprender a construir aplicaes em Java
capazes de inserir, alterar e excluir dados de
bancos de dados.
Softwares: JDK, NetBeans,
MySQL Server e driver nativo do
MySQL.
10
(concluso)
e-Tec Brasil
Aula 1 Introduo plataforma Java
Objetivos
Entender o funcionamento da plataforma Java.
Entender o que so os ambientes de desenvolvimento Java.
Conhecer ou revisar as principais caractersticas e recursos da lin-
guagem Java: variveis, comentrios, operadores, comandos de
deciso e de repetio, vetores e matrizes.
1.1 Introduo
Nesta disciplina estudaremos os conceitos de programao orientada a ob-
jetos. Para isso, precisaremos aprender a programar em uma linguagem de
programao que siga esses conceitos: a linguagem Java.
A linguagem Java apresenta uma sintaxe muito semelhante s linguagens
C e C++.
Nesta disciplina consideramos que o aluno j utilizou a linguagem Java no
semestre anterior sem se aprofundar nos conceitos de orientao a objetos,
ou o aluno vem estudando linguagem C nos perodos anteriores, j tendo
assim familiaridade com a sintaxe dessa linguagem. Nesse contexto, essa pri-
meira aula traz uma viso geral da plataforma e da linguagem Java apenas
para solidicar conhecimentos prvios do aluno.
Dentre as caractersticas da linguagem Java destacam-se:
Orientao a objetos: suporte ao paradigma de programao orientada
a objetos.
Portabilidade: possvel rodar um software feito em Java em qualquer
mquina que disponha de mquina virtual implementada para ela.
e-Tec Brasil Aula 1 Introduo plataforma Java 17
Multithreading: possibilidade de desenvolvimento utilizando threads.
Suporte programao para internet: Java foi concebida originalmente
para ser usada no ambiente da World Wide Web, diferentemente de
outras linguagens que foram adaptadas para o desenvolvimento web.
Suporte comunicao: classes para programao em rede.
Acesso remoto a banco de dados dados recuperados e/ou armazena-
dos de qualquer ponto da internet.
Segurana: mecanismos de segurana que a linguagem oferece para re-
alizao de processos pela internet.
Sintaxe baseada na sintaxe da linguagem C.
1.2 A plataforma Java
Plataformas podem ser descritas como a combinao do sistema operacional
e o hardware em que rodam. Nesse contexto, a maioria das plataformas de
desenvolvimento existentes possui uma restrio marcante: cada programa
produzido para uma plataforma (Sistema Operacional + hardware) espec-
ca. A plataforma Java difere dessas plataformas pelo fato de desagregar o
hardware de si, ou seja, trata-se de uma plataforma de software que roda
em cima de outras plataformas baseadas em hardware.
Essa independncia de hardware obtida pela plataforma Java deve-se utili-
zao do conceito de mquina virtual: a Java Virtual Machine (JVM). A JVM
um software que funciona sobre o sistema operacional, sendo responsvel
pelo processo de traduo de um programa Java para uma plataforma es-
pecca. Assim, um programa feito em Java pode rodar em qualquer SO de
qualquer arquitetura, desde que exista uma JVM implementada para ele. A
Figura 1.1 ilustra o processo de execuo de um aplicativo Java.
Plataforma
o ambiente de software ou
hardware no qual um programa
executado.
Programao Orientada a Objetos e-Tec Brasil 18
Aplicativo Java Aplicativo Java
JVM
JVM
Windows Linux
Mquina Mquina
Figura 1.1: Execuo de um aplicativo Java
Fonte: Elaborada pelos autores
1.3 Ambientes de desenvolvimento Java
Um programa Java precisa passar por um processo de compilao para ser
analisada a existncia de erros de sintaxe. Esse processo de compilao tra-
duz o cdigo-fonte escrito pelo programador para uma linguagem inter-
mediria chamada Java bytecodes. Esse processo de traduo dos cdigos
fontes para Java bytecodes feito por um programa chamado compilador.
Ento, necessrio que outra ferramenta chamada interpretador se res-
ponsabilize por interpretar esses bytecodes para o sistema operacional. Essa
ferramenta que interpreta bytecodes a mquina virtual Java (JVM).
O conjunto de ferramentas necessrias para desenvolver, compilar e rodar apli-
cativos Java disponibilizado em um kit conhecido como Java Development Kit
(JDK). Assim, para comear a programar em Java voc deve realizar o download
do JDK e instal-lo.
Ao realizar o download do JDK, escolha a verso correta para seu sistema
operacional.
Com o JDK instalado, voc pode comear a programar em Java utilizando
um simples editor de texto para editar seus programas, como, por exemplo,
o bloco de notas. Assim, voc teria de editar seus programas, salv-los com
extenso .Java, compil-los e ento execut-los.
A plataforma Java consiste
em trs partes principais: a
linguagem de programao Java,
a mquina virtual Java (JVM) e
diversas APIs Java. O projeto da
plataforma Java controlado
pela Sun e por sua comunidade
de usurios.
e-Tec Brasil Aula 1 Introduo plataforma Java 19
Para facilitar e agilizar esse processo, existem disponveis vrios Ambientes
de Desenvolvimento Integrated Development Environment (IDE), que do
suporte linguagem Java. Um IDE um programa de computador que re-
ne ferramentas de apoio ao desenvolvimento de software com o objetivo
principal de agilizar o processo de codicao.
H vrios IDEs para programao Java. Os dois mais amplamente utilizados
so o NetBeans e o Eclipse. Nessa disciplina utilizaremos o NetBeans.
O NetBeans IDE um ambiente de desenvolvimento integrado gratuito e
de cdigo aberto. Esse IDE executado em muitas plataformas, como Win-
dows, Linux, Solaris e MacOS, sendo fcil de instalar e usar. O NetBeans
IDE oferece aos desenvolvedores todas as ferramentas necessrias para criar
aplicativos prossionais de desktop, empresariais, web e mveis multipla-
taformas. Assim, todo o processo de edio, compilao e execuo dos
programas ser feito dentro do NetBeans.
1.4 Primeiro exemplo de programa em Java
Nesta aula ainda no estudaremos os conceitos de orientao a objeto,
que uma das principais caractersticas da linguagem Java. Por enquanto,
vamos nos focar na criao de programas em Java semelhantes aos que
crivamos em linguagem C.
Para ilustrar as semelhanas entre a linguagem C e Java, utilizaremos um
exemplo simples de programa que apenas imprime na tela a mensagem
Primeiro Exemplo!. A Figura 1.2 exibe no lado esquerdo o cdigo do pro-
grama em linguagem C e, no lado direito, o cdigo equivalente em Java.
Exemplo em JAVA Exemplo em C
Figura 1.2: Programa simples em Java e em C
Fonte: Elaborada pelos autores
Assim como a linguagem C, Java case sensitive, ou seja, o compilador dife-
rencia letras minsculas de maisculas. Logo, tenha muita ateno ao digitar!
Acesse o site http://www.
netbeans.org/index_pt_BR.html
e baixe a verso mais recente
do NetBeans (a verso utilizada
neste material a 7.0). Note que
voc pode baixar diretamente o
JDK com o NetBeans IDE Java
SE j embutido. Nesse caso,
no ser necessrio executar o
download e instalao do JDK.
Baixe a verso mais recente do
NetBeans com JDK embutido
e instale em seu computador.
A instalao muito simples!
Basta seguir as mensagens
informadas nas janelas exibidas
pelo assistente de instalao.
Programao Orientada a Objetos e-Tec Brasil 20
A principal diferena que podemos notar j de incio que todo programa
em Java inicia-se com a denio de uma classe. Uma classe denida pela
palavra reservada class, seguida pelo nome da classe (neste caso, o nome
da classe Exemplo01). Por conveno, todo nome de classe inicia-se
com uma letra maiscula. Um programa Java formado por uma ou mais
classes. No se preocupe agora com a denio de classe. Estudaremos esse
conceito mais frente.
Assim como em C todo programa Java tem sua execuo iniciada pelo m-
todo main, alguma das classes do programa Java dever conter um mtodo
main. Essa classe chamada de classe principal.
As palavras public e static que aparecem na denio do mtodo main
sero explicadas em aulas futuras. J a palavra void, assim como em C,
indica que o mtodo no possui retorno. O argumento String args[ ] um
vetor de Strings formado por todos os argumentos passados ao programa
na linha de comando quando o programa invocado. O comando System.
out.println ( ) utilizado para imprimir algo na tela. Ele equivalente ao
printf() da linguagem C.
Voc poderia editar esse programa no bloco de notas e salv-lo com o nome
Exemplo01.java e, em uma mquina com o Java Development Kit (JDK)
instalado, compil-lo digitando no prompt comando: javac Exemplo01.java.
Esse comando geraria o arquivo bytecode com o nome Exemplo01.class.
Ento, para executar o programa, deveria ser digitado no prompt comando:
java Exemplo01.class.
Em Java, o nome do arquivo deve ser sempre igual ao nome da classe, se-
guida da extenso .java. No caso do nosso exemplo, o nome do arquivo
precisa ser Exemplo01.java porque o nome da classe Exemplo01.
Mas, vamos utilizar o NetBeans, pois nos poupa bastante trabalho e seu
editor oferece alguns recursos que facilitam a edio do cdigo. O primeiro
passo abrirmos o NetBeans e criarmos um novo projeto. Para isso, realize
os passos a seguir:
1. Clique em Arquivo > Novo Projeto.
2. Dentre as opes Categorias da janela aberta, escolha Java. Dentro
de Projetos, escolha Aplicativo Java. Clique em Prximo.
e-Tec Brasil Aula 1 Introduo plataforma Java 21
3. Escolha um nome para o projeto (por exemplo, Exemplos) e deixe marca-
das as opes Criar classe principal (dena o nome da classe principal como
Exemplo01) e Denir como projeto principal. Clique em Finalizar.
Aps criarmos o projeto, ele passa a ser exibido na aba Projetos, que ca no
canto esquerdo do NetBeans. Na rea de edio principal ser exibida a classe
Exemplo01 criada. Ela j ir possuir um mtodo main. Nesse caso, apenas
insira no mtodo o comando System.out.println (Primeiro exemplo!).
Para compilar e executar o programa basta acessar o menu Executar>
Executar Projeto Principal ou pressione a tecla F6 ou, ainda, clique
no boto Executar da barra de ferramentas (um tringulo verde). Ento,
a sada do programa ser exibida na aba Sada, localizada abaixo da rea
de exibio de cdigo do NetBeans. A Figura 1.3 exibe a tela do NetBeans
destacando a aba de sada e o boto Executar.
Figura 1.3: Resultado da execuo do exemplo da Figura 1.2
Fonte: NetBeans IDE 7.0.1
1.5 Variveis e constantes
Assim como em linguagem C, programas feitos em Java devem ter suas
variveis declaradas e inicializadas antes de serem utilizados. Em Java toda
varivel identicada por um nome e tem um tipo denido no ato da de-
clarao, que no pode ser alterado.
A sintaxe para declarao de variveis em Java idntica que utilizamos em C.
Leia mais sobre Java em
http://javafree.uol.com.br/
artigo/871498/Tutorial-Java-O-
que-e-Java.html.
Com base no texto lido, descreva
as trs edies de Java (J2SE,
J2ME e J2EE).
Varivel
um lugar onde as informaes
podem ser armazenadas
enquanto um programa est
sendo executado. O valor pode
ser alterado em qualquer ponto
do programa da o nome
(CADENHEAD; LEMAY, 2005, p. 22).
Programao Orientada a Objetos e-Tec Brasil 22
Sintaxe: <tipo_da_varivel> <nome_da_varivel>;
Exemplos: double salario_liquido, salario_bruto;
O tipo da varivel dene, alm do tipo de dado que ela pode armazenar, o
tamanho do espao de memria que deve ser alocado para ela. O Quadro
1.1 apresenta os tipos primitivos da linguagem Java. So os mesmos tipos de
C, com o acrscimo do tipo boolean.
Quadro 1.1: Tipos primitivos da linguagem Java
Tipo primitivo Valores a serem armazenados Tamanho em bits
char Permite armazenar um caractere. Exemplo: a. 16
byte Permite armazenar um nmero inteiro de -128 at +127. Exemplo: 10. 8
short Permite armazenar um nmero inteiro de -32.768 at +32.767. Exemplo: 10. 16
int
Permite armazenar um nmero inteiro de -2.147.483.648 at
+2.147.483.647. Exemplo: 10.
32
long
Permite armazenar um nmero inteiro de -9.223.372.036.854.775.808 at
+9.223.372.036.854.775.807. Exemplo: 10.
64
oat
Permite armazenar um ponto utuante de -3,40292347E+38 at
+3,40292347E+38. Exemplo: 3.1416.
32
double
Permite armazenar um ponto utuante de -1,79769313486231570E+308
at +1,79769313486231570E+308. Exemplo: 3.1416.
64
boolean Permite armazenar apenas o valor true ou o valor false. 8
Fonte: Elaborado pelos autores
Em Java no h a denio de constantes. Quando queremos denir vari-
veis com valores constantes em Java utilizamos a palavra reservada nal.
Sintaxe: nal <tipo_da_varivel> <nome_da_varivel> = <valor_constante>;
Exemplo: nal oat PI = 3.1416;
1.6 Converses entre tipos primitivos
A converso de tipos consiste em utilizar uma varivel ou valor de um tipo
para gerar um novo valor de outro tipo. Em alguns casos essa converso
feita de forma direta, como, por exemplo, quando atribumos um valor intei-
ro a uma varivel do tipo double. Nesse caso a converso direta (tambm
chamada de converso implcita) porque bvio que um nmero inteiro
pode ser representado como um nmero real.
Ponto utuante
um formato de representao de
nmeros reais em computadores.
e-Tec Brasil Aula 1 Introduo plataforma Java 23
Mas, alguns tipos de variveis apresentam valores incompatveis entre si.
Assim, nesses casos no possvel fazer uma atribuio direta. Por exemplo,
se tentarmos atribuir a uma varivel inteira o valor de uma varivel double,
teremos um erro de compilao; veja a Figura 1.4.
Figura 1.4: Atribuio entre valores incompatveis
Fonte: Elaborada pelos autores
Para que atribuies como esta sejam possveis, precisamos solicitar explici-
tamente que o nmero real seja moldado (casted) como um nmero inteiro.
Essa operao de converso entre tipos tambm chamada de casting. Para
realizar a converso explcita, coloca-se, antes da expresso a ser convertida,
o tipo destino da transformao entre parnteses (Figura 1.5).
Figura 1.5: Converso correta
Fonte: Elaborada pelos autores
No primeiro caso do exemplo apresentado na Figura 1.5, o valor da varivel
p foi convertido para caber em uma varivel inteira. Assim, a varivel i assu-
miu o valor 23. Logo depois, a varivel i assumiu o valor 2.
Ao fazer o casting para forar a atribuio de um valor a uma varivel,
deve-se prestar ateno aos limites de valores de cada tipo primitivo. Esses
limites foram apresentados no Quadro 1.1. Por exemplo, se atribumos o
valor 200 a uma varivel inteira e depois utilizamos um casting para atri-
buir esse valor a uma varivel byte cujos possveis valores so de -128 a 127
no teremos erro de compilao, mas, como 200 estoura o valor mximo
para uma varivel byte, ocorrer uma falha conhecida como overow e o
valor armazenado na varivel byte ser -56 (Figura 1.6).
Figura 1.6: Converso com overow
Fonte: Elaborada pelos autores
As converses entre tipos primitivos podem ainda ser necessrias em expresses
aritmticas quando so utilizados operandos com tipos divergentes (Figura 1.7).
Programao Orientada a Objetos e-Tec Brasil 24
Figura 1.7: Converses necessrias em expresses aritmticas
Fonte: Elaborada pelos autores
Note que no exemplo da Figura 1.7 foi necessrio fazer a converso da
varivel l que do tipo long para o tipo int, pois quando realizada uma
operao entre operadores de tipos distintos o Java faz as contas utilizando
o maior tipo que aparece nas operaes, no caso, long. No entanto, na l-
tima linha do exemplo, mesmo fazendo a converso da varivel i1 que do
tipo int para o tipo byte continuou no compilando. Isso aconteceu porque
o Java armazena o resultado de expresses em, no mnimo, um int. Assim,
para que o trecho de cdigo apresentado pela Figura 1.7 seja compilado sem
erros, as duas linhas marcadas devem ser retiradas ou comentadas.
O Quadro 1.2 exibe alguns exemplos de converses entre tipos.
Quadro 1.2: Converso entre tipos
Tipo de Origem Tipo de Destino Exemplo
int double
int a = 20;
double b = a; //nesse caso a converso implcita
double int
double a = 20.1;
int b = (int) a; //converso explcita
double oat
double a = 20.1;
oat b = (oat) a; //converso explcita
long int
long a = 20;
int b = (long) a; //converso explcita
Fonte: Elaborado pelos autores
Valores do tipo boolean no podem ser convertidos para nenhum outro tipo.
1.7 Comentrios
Comentrios so indicaes que colocamos no cdigo para facilitar que ou-
tros programadores o entendam. Java aceita trs tipos de comentrios:
Quando queremos fazer um comentrio de uma nica linha, basta utili-
zar // para iniciar o comentrio (assim como em linguagem C).
Quando queremos fazer comentrios de vrias linhas, iniciamos o co-
mentrio com /* e nalizamos com */ (assim como em linguagem C).
e-Tec Brasil Aula 1 Introduo plataforma Java 25
Quando queremos fazer comentrios de vrias linhas e gerar documen-
tao Javadoc, iniciamos o comentrio com /** e nalizamos com */ .
Figura 1.8: Exemplo de utilizaes de comentrios e de declarao
de variveis e constantes.
Fonte: Elaborada pelos autores
1.8 Atribuio, entrada e sada de dados
Em Java, quando queremos atribuir um determinado valor a uma varivel,
utilizamos o operador =exatamente como fazemos na linguagem C.
Para obter entradas de dados digitados pelo usurio, em linguagem C ns
utilizamos o comando scanf. Em Java utilizaremos a classe Scanner. O uso
dessa classe bastante simples e poderemos entender melhor no exemplo
apresentado pela Figura 1.9 a seguir.
Figura 1.9: Utilizao da classe Scanner para entrada de dados
Fonte: Elaborada pelos autores
Javadoc um programa
que gera automaticamente
documentao em HTML de
programas Java a partir de
comentrios que seguem um
determinado formato. O Javadoc
fornecido junto com o kit de
desenvolvimento Java.
Programao Orientada a Objetos e-Tec Brasil 26
Ainda no aprendemos o conceito de classe, mas utilizaremos algumas clas-
ses bsicas, como a classe Scanner.
O primeiro passo criarmos um objeto do tipo Scanner, conforme a linha:
Scanner scan = new Scanner(System.in);
Para lermos valores do tipo int utilizando o objeto scan, utilizamos o mtodo
nextInt(). J para valores do tipo double, utilizamos o mtodo nextDouble().
No podemos esquecer de fechar o objeto quando ndamos seu uso pelo
mtodo close().
Para exibir mensagens e dados na tela, utilizamos em linguagem C o coman-
do printf. Em Java utilizaremos os mtodos System.out.print e System.out.
println. A nica diferena entre eles que o primeiro imprime a mensagem
na mesma linha em que a mensagem anterior foi impressa, enquanto o
segundo imprime a mensagem em uma nova linha. Note que os dois foram
utilizados no exemplo da Figura 1.9.
Note que os comandos System.out.print e System.out.println no utilizam
os cdigos de formatao (%c, %d, %f...) que nos acostumamos a utilizar
com a funo printf da linguagem C. Em Java basta indicar os dados que se
deseja imprimir na tela e o compilador se encarrega de fazer a transforma-
o desses dados para String.
1.9 Operadores
Os operadores aritmticos so smbolos que representam operaes aritm-
ticas, ou seja, as operaes matemticas bsicas. Os operadores aritmticos
da linguagem Java so os mesmos da linguagem C, como pode ser visto no
Quadro 1.3 a seguir.
Quadro 1.3: Operadores aritmticos da linguagem Java
Operador Descrio da operao matemtica
+ Soma (inteira e ponto utuante)
- Subtrao (inteira e ponto utuante)
* Multiplicao (inteira e ponto utuante)
/ Diviso (inteira e ponto utuante)
-- Decremento unrio (inteiro e ponto utuante)
++ Incremento unrio (inteiro e ponto utuante)
% Resto da diviso de inteiros
Fonte: Elaborado pelos autores
Em Java, podemos utilizar
bibliotecas denidas em pacotes
da linguagem. Para isso,
utilizamos o comando import
<caminho do pacote>.<classe>;
O comando import de Java
parecido com o include que
utilizamos em linguagem C. Veja
na segunda linha do exemplo
apresentado na Figura 1.9 que
a classe Scanner foi importada
para o nosso programa para que
pudssemos utiliz-la.
Quando o NetBeans identica
que uma classe foi utilizada e
no foi feita sua importao, ele
sugere a sua incluso, facilitando
o trabalho do programador.
No exemplo da Figura 1.9,
existe uma linha comentada
que basicamente seria a criao
de uma varivel do tipo File
(arquivo). Para que o nosso
exemplo lesse de arquivo em vez
do teclado, descomentaramos
essa linha, na linha seguinte,
trocaramos System.in por l e
pronto. Agora os dados viriam
do arquivo C:/arquivo.txt.
Quando a linha comentada for
descomentada, ser necessrio
acrescentar a linha; no
cdigo-fonte ou permitir que o
NetBeans o faa.
e-Tec Brasil Aula 1 Introduo plataforma Java 27
Os operadores relacionais so utilizados para realizar comparaes entre
dois valores de um mesmo tipo, retornando como resultado sempre um va-
lor lgico, ou seja, verdadeiro ou falso. A exemplo do que ocorre com os
aritmticos, os operadores relacionais de Java tambm so os mesmos que
aprendemos em linguagem C, como exibido no Quadro 1.4 a seguir.
Quadro 1.4: Operadores relacionais de Java
Descrio Operador
igual a == (dois sinais de igual)
maior que >
menor que <
maior ou igual a >=
menor ou igual a <=
diferente de !=
Fonte: Elaborado pelos autores
Os operadores lgicos so utilizados para formar novas proposies lgicas
a partir da juno de duas outras. Os operadores lgicos de Java tambm
foram obtidos da linguagem C, como mostra o Quadro 1.5 a seguir.
Quadro 1.5: Operadores lgicos de Java
Descrio Operador
E &&
OU || (duas barras verticais)
NO ! (exclamao)
Fonte: Elaborado pelos autores
Revise a teoria sobre operadores lgicos, operadores relacionais e tabelas-ver-
dade, que foi estudada na disciplina de Lgica de Programao e aplicada em
todas as disciplinas de programao do curso; por isso, no ser repetida aqui.
1.10 Comandos de deciso ou seleo
O Java fornece trs tipos de instrues de seleo. A instruo if realiza uma
ao se uma condio for verdadeira ou pula a ao se ela for falsa. A instruo
if...else realiza uma ao se uma condio for verdadeira ou realiza uma ao di-
ferente se a condio for falsa. A instruo switch realiza uma de muitas aes,
dependendo do valor de uma expresso (DEITEL; DEITEL, 2010, p. 84).
Os comandos de deciso existentes em Java so os mesmos aprendidos na
linguagem C, at mesmo a sintaxe.
Programao Orientada a Objetos e-Tec Brasil 28
O exemplo apresentado na Figura 1.10 ilustra a utilizao do comando if...
else. Nesse exemplo, lemos uma nota e vericamos se ela est entre 0 e 100:
se estiver, a nota considerada vlida; caso contrrio, invlida.
Figura 1.10: Exemplo de utilizao do comando de deciso if...else
Fonte: Elaborada pelos autores
No exemplo apresentado na Figura 1.11, faremos uso do comando switch-case.
Nesse exemplo, dado um nmero de ms, temos a impresso do nome do ms
no prompt de comando.
Figura 1.11: Exemplo de utilizao do comando de deciso switch...case
Fonte: Elaborada pelos autores
e-Tec Brasil Aula 1 Introduo plataforma Java 29
1.11 Comandos de repetio
O Java fornece trs instrues de repetio que permitem que programas
executem instrues repetidamente, contanto que uma condio permane-
a verdadeira. As instrues de repetio so while, do...while e for (DEITEL;
DEITEL, 2010, p. 84).
Os comandos de repetio de Java funcionam exatamente como os da
linguagem C.
Na Figura 1.12, temos um exemplo de uso do comando for que imprime
nmeros de 0 a 10 na tela.
Figura 1.12: Exemplo de utilizao do comando de repetio for
Fonte: Elaborada pelos autores
A Figura 1.13 apresenta duas novas verses do mesmo exemplo; porm,
nessas novas verses utilizamos os comandos while e do-while em lugar do
comando for.
Figura 1.13: Exemplos de utilizao dos comandos de repetio while e do-while
Fonte: Elaborada pelos autores
Assim como nos comandos de repetio e de deciso da linguagem C, o uso
das chaves em Java s obrigatrio quando temos mais de uma linha dentro
do bloco. Em casos de blocos compostos por apenas uma linha, as chaves
podem ser omitidas.
Programao Orientada a Objetos e-Tec Brasil 30
1.12 Escopo de variveis
Em Java, assim como em linguagem C, podemos declarar variveis a qual-
quer momento. Entretanto, o trecho de cdigo em que a varivel ser vlida
depender de onde ela foi declarada.
Quando abrimos um novo bloco com as chaves, as variveis declaradas ali
dentro s existiro at o m daquele bloco, ou seja, at o ponto onde se
fecham as chaves do bloco.
public static void main(String [] args){
// Aqui a varivel x ainda no existe
int x = 1;
// Aqui a varivel x j existe
while ( <condio> ) {
// Aqui a varivel x continua existindo e y ainda no existe
int y = 0;
// Aqui a varivel y j existe
}
// Aqui a varivel j no existe mais. O x continua existindo.
}
Tenha cuidado! Se criar uma varivel dentro de um bloco e tentar utiliz-la
fora desse bloco, haver um erro de compilao.
1.13 Vetores e matrizes
Como j aprendemos nas disciplinas anteriores, vetor (array) uma estrutura
de dados utilizada para representar certa quantidade de variveis de valores
homogneos, ou seja, um conjunto de variveis, todas do mesmo tipo. Em
Java podemos criar vetores de tipos primitivos ou de objetos.
Declarao: <tipo_do_dado> <nome_do_vetor> [] = new <tipo_do_
dado>[quantidade];
Exemplo: int notas[] = new int[30];
No exemplo acima, ser criado um vetor de 30 inteiros (inicializados com o
valor 0). Tambm possvel inicializar um vetor com um conjunto de valores
ao mesmo tempo em que o declaramos.
Escopo da varivel
o nome dado ao trecho de
cdigo em que a varivel existe e
no qual possvel acess-la.
e-Tec Brasil Aula 1 Introduo plataforma Java 31
int notas[] = { 1,2,3};
Uma vez que o vetor j foi devidamente criado, sua utilizao idntica
utilizao de vetores em linguagem C, ou seja, acessamos cada elemento
pelo seu ndice (os ndices de um vetor se iniciam do zero). Por exemplo:
i.nt numeros[] = new int[3];
numeros[0] = 57;
numeros[1] = 51;
numeros[3] = 37; // Esta linha gera um erro de execuo!
A ltima linha do trecho de cdigo acima causa um erro de compilao, pois
o ndice 3 no existe em um vetor com apenas trs elementos.
Para sabermos o tamanho de um vetor, podemos utilizar o atributo length.
A Figura 1.14 exibe um exemplo de utilizao desse atributo.
Figura 1.14: Utilizao de vetores e do atributo length
Fonte: Elaborada pelos autores
Programao Orientada a Objetos e-Tec Brasil 32
Vetores podem ter mais de uma dimenso, sendo conhecidos como vetores
multidimensionais ou matrizes. As sintaxes para declarao e uso de matri-
zes so idnticas s de vetores acrescentando valores para cada uma de suas
dimenses. Abaixo apresentado um exemplo:
int matriz[][] = new int[10][10];
matriz[9][9] = -3;
matriz[2][10]=5;//Erro de compilao!! A segunda dimenso est acima do
mximo!
A partir do momento em que um vetor ou matriz foi criado, ele no pode
mudar de tamanho. Se voc precisar de mais espao, ser necessrio criar
um novo e copiar os elementos do vetor antigo para o novo.
Resumo
Consideramos que o aluno desta disciplina j estudou linguagem C ou a
prpria linguagem Java em disciplinas anteriores. Assim, nesta aula zemos
uma rpida apresentao sobre a plataforma Java e uma reviso geral sobre
a linguagem Java, destacando que a sintaxe dessa linguagem idntica
da linguagem C. Nesse contexto, vimos como declarar variveis, constantes
e vetores e como fazer comentrios em Java. Apresentamos os operadores
aritmticos, lgicos e relacionais da linguagem e conhecemos os comandos
de deciso e repetio da linguagem. Enm, nesta aula relembramos vrios
conceitos e comeamos a esquentar as turbinas para nossa viagem ao
mundo da programao orientada a objetos
Leia mais sobre as
caractersticas bsicas de Java
em http://javafree.uol.com.br/
artigo/871496/Tutorial-Java-2-
Caracteristicas-Basicasindex
Segundo o texto acima, Java
possui 49 palavras-chave. Mas,
o que vem a ser palavra- chave
no contexto de linguagens de
programao? O que acontece
se eu denir uma varivel que
tenha nome igual ao de alguma
palavra-chave?
e-Tec Brasil Aula 1 Introduo plataforma Java 33
Atividades de aprendizagem
1. Faa um programa que dada a idade de uma pessoa verique sua classe
eleitoral:
menor que 16 anos no pode votar;
com 16 ou 17 anos ou mais que 65 anos, votar facultativo;
entre 18 e 65 anos (inclusive), votar obrigatrio.
2. Faa um programa que imprima os trinta primeiros elementos da srie
de Fibonacci. A srie a seguinte: 1, 1, 2, 3, 5, 8,13 etc. Para calcul-la,
o primeiro e segundo elementos valem 1; da por diante, cada elemento
vale a soma dos dois elementos anteriores.
3. Crie um programa que armazene um vetor com as notas de dez alunos,
calcule e imprima a mdia dessas notas e depois informe a quantidade
de notas acima e abaixo da mdia calculada.
4. Faa um programa que que em lao solicitando a digitao de nmeros
inteiros maiores ou iguais a zero. Quando o usurio digitar um nmero
menor que zero, o programa deve exibir a quantidade de nmeros digi-
tados e a mdia desses nmeros.
Programao Orientada a Objetos e-Tec Brasil 34
e-Tec Brasil
Aula 2 Introduo Orientao
a Objetos
Objetivos
Conhecer os conceitos fundamentais de orientao a objetos: ob-
jetos, classes, mtodos, atributos e pacotes.
Aprender a criar e a utilizar classes e objetos em Java.
Conhecer e aprender a utilizar a classe String e a classe ArrayList.
2.1 Conceitos bsicos
Todos os sistemas de computao, dos mais complexos aos mais simples
programas de computadores, so desenvolvidos para auxiliar na soluo de
problemas do mundo real. Mas, de fato, o mundo real extremamente
complexo. Nesse contexto, a orientao a objetos tenta gerenciar a comple-
xidade inerente aos problemas do mundo real abstraindo o conhecimento
relevante e encapsulando-o dentro de objetos.
Na programao orientada a objetos um programa de computador conceitua-
do como um conjunto de objetos que trabalham juntos para realizar uma tarefa.
Cada objeto uma parte do programa, interagindo com as outras partes de
maneira especca e totalmente controlada (CADENHEAD; LEMAY,2005, p. 6).
Na viso da orientao a objetos, o mundo composto por diversos objetos
que possuem um conjunto de caractersticas e um comportamento bem de-
nido. Assim, quando programamos seguindo o paradigma de orientao a
objetos, denimos abstraes dos objetos reais existentes. Todo objeto possui
as seguintes caractersticas:
Estado: conjunto de propriedades de um objeto (valores dos atributos).
Comportamento: conjunto de aes possveis sobre o objeto (mtodos
da classe).
Unicidade: todo objeto nico (possui um endereo de memria ).
e-Tec Brasil Aula 2 Introduo Orientao a Objetos 35
Quando voc escreve um programa em uma linguagem orientada a objetos,
no dene objetos individuais. Em vez disso dene as classes utilizadas para
criar esses objetos (CADENHEAD; LEMAY, 2005, p. 7).
Assim, podemos entender uma classe como um modelo ou como uma es-
pecicao para um conjunto de objetos, ou seja, a descrio genrica dos
objetos individuais pertencentes a um dado conjunto. A partir de uma classe
possvel criar quantos objetos forem desejados.
Uma classe dene as caractersticas e o comportamento de um conjunto de
objetos. Assim, a criao de uma classe implica denir um tipo de objeto em
termos de seus atributos (variveis que contero os dados) e seus mtodos
(funes que manipulam tais dados).
Fazendo um paralelo com a linguagem C, podemos visualizar os mtodos das
classes como funes e os atributos de uma classe como campos de uma struct.
J um objeto uma instncia de uma classe. Ele capaz de armazenar es-
tados por meio de seus atributos e reagir a mensagens enviadas a ele, assim
como se relacionar e enviar mensagens a outros objetos.
Joo, Jos e Maria, por exemplo, podem ser considerados objetos de uma
classe Pessoa que tem como atributos nome, CPF, data de nascimento,
entre outros, e mtodos como calcularIdade.
Quando desenvolvemos um sistema orientado a objetos, denimos um con-
junto de classes. Para organizar essas classes surge o conceito de pacote.
Pacote um envoltrio de classes, ou seja, guarda classes e outros pacotes
logicamente semelhantes ao pacote que os contm. Podemos visualizar os
pacotes como diretrios ou pastas, nos quais podemos guardar arquivos
(classes) e outros diretrios (pacotes) que tenham contedo relacionado com
o pacote que os contm.
2.2 Classes em Java
Sabemos que para desenvolver programa orientado a objetos precisamos
criar classes. Uma classe como um tipo de objeto que pode ser denido
pelo programador para descrever uma entidade real ou abstrata. Mas, como
denir classes em Java?
Classe
um componente de programa
que descreve a estrutura e o
comportamento de um grupo
de objetos semelhantes isto ,
as informaes que caracterizam
o estado desses objetos e as
aes (ou operaes) que eles
podem realizar.
Objeto
a criao de uma instncia da
classe. Quando instanciamos um
objeto, criamos sicamente uma
representao concreta de sua classe.
Ser Humano uma classe, um
molde, j Roberto uma instncia
de Ser Humano. Apesar de carregar
todas as caractersticas do molde
Ser Humano, ele completamente
diferente (independente) das outras
instncias de Ser Humano.
Pacotes
Em Java so uma maneira de
agrupar classes e interfaces
relacionadas. Pacotes permitem
que grupos de classes estejam
disponveis apenas se forem
necessrios e eliminam possveis
conitos entre nomes de classes
em diferentes grupos de classes
(CADENHEAD; LEMAY, 2005, p. 17).
Um sistema bem elaborado
organiza suas classes
em pacotes logicamente
consistentes, facilitando,
assim, sua manutenibilidade,
extensibilidade e exibilidade.
Programao Orientada a Objetos e-Tec Brasil 36
Sintaxe:
<qualicador> class <nome_da_classe>{
<declarao dos atributos da classe>
<declarao dos mtodos da classe>
}
Como funciona?
<qualicador>: O qualicador de acesso determinar a visibilidade da classe.
Pode ser public (classe pblica) ou private (classe privada). Classes privadas
s podero ser visualizadas dentro de seu prprio pacote enquanto as pbli-
cas sero acessveis por qualquer classe de qualquer pacote. Se o qualica-
dor for omitido, a classe ser privada por padro.
<nome>: nome que identica a classe. H um padro entre os programa-
dores de sempre iniciarem os nomes de classes com letras maisculas. Mas,
apesar de ser uma boa prtica, seguir esse padro no uma obrigao.
Como exemplo, a Figura 2.1 ilustra a criao de uma classe Conta para re-
presentar os dados de uma conta bancria. Nesse exemplo denimos trs
atributos para a classe Conta, mas no denimos mtodos.
Figura 2.1: Criao de classe em Java
Fonte: Elaborada pelos autores
Para ilustrar a utilizao do qualicador de acesso, veja o exemplo apresen-
tado nas Figuras 2.2 e 2.3 a seguir.
Para criar uma nova classe
em um projeto do NetBeans
j existente, siga os seguintes
passos:
1. Clique em Arquivo> Novo
Arquivo.
2. Dentre as opes
Categorias da janela aberta,
escolha Java e dentre as
opes Tipos de Arquivo,
escolha Classe Java. Clique
em Prximo.
3. D um nome para a classe e
indique o nome do pacote no
qual a classe ser criada. Clique
em Finalizar.
e-Tec Brasil Aula 2 Introduo Orientao a Objetos 37
Figura 2.2: Criao de classes pblicas e privadas
Fonte: Elaborada pelos autores
A Figura 2.2 ilustra a criao de duas classes que diferem apenas por um
detalhe: uma delas pblica e a outra privada. Note que ambas esto no
pacote1(primeira linha do cdigo).
A Figura 2.3 exibe o cdigo de uma classe que est em um outro pacote
(pacote2), mas tenta utilizar as classes criadas na Figura 2.2.
Figura 2.3: Tentativa de acessar classes pblicas e privadas
Fonte: Elaborada pelos autores
As linhas sublinhadas em vermelho indicam erro no NetBeans. Os erros ocor-
reram exatamente nas linhas em que tentamos utilizar a classe privada em
um pacote externo ao pacote no qual ela foi criada. Mas, note que, como a
classe ClasseOutroPacote est em um pacote diferente das classes que de-
nimos no exemplo da Figura 2.2, precisamos importar as classes antes de
utiliz-las (segunda e terceira linha do cdigo).
2.3 Declarao de atributos e mtodos
J vimos que quando criamos uma classe em Java precisamos declarar os
atributos e mtodos da classe.
Para declarar um atributo, utilizamos a seguinte sintaxe:
Para criar um novo pacote em
um projeto do NetBeans j
existente, faa os seguintes
passos:
1. Clique em Arquivo >
Novo Arquivo.
2. Dentre as opes
Categorias da janela aberta,
escolha Java e dentre as
opes Tipos de Arquivo,
escolha Pacote Java. Clique
em Prximo.
Programao Orientada a Objetos e-Tec Brasil 38
Sintaxe:
<qualicador> <tipo_do_atributo> <nome_do_atributo>;
Como funciona?
<qualicador>: O qualicador de acesso determinar a visibilidade do atri-
buto. opcional e, se no for informado, por padro o atributo ser prote-
gido (protected). No se preocupe com isso agora. Voltaremos a falar sobre
os qualicadores quando estudarmos encapsulamento.
<tipo_do_atributo>: um tipo primitivo ou classe que dene o atributo.
<nome_do_atributo>: nome que identica o atributo. H um padro entre
os programadores de sempre iniciarem os nomes de atributos com letras mi-
nsculas. Mas, apesar de ser uma boa prtica, seguir esse padro no uma
obrigao. Caso queiramos denir vrios atributos de mesmo tipo podemos
colocar os vrios nomes separados por vrgula.
Exemplos:
private double saldo;
String nome, endereo;
Para declararmos um mtodo, utilizamos a seguinte sintaxe:
Sintaxe:
<qualicador> <tipo_de_retorno> <nome_do_metodo> (<lista_de_argu-
mentos>){
<corpo_ do_ mtodo>
}
Como Funciona?
<qualicador>: Mesmo conceito usado no caso de atributos.
<tipo_do_retorno>: um tipo primitivo ou classe que dene o retorno a ser
dado pelo mtodo.
e-Tec Brasil Aula 2 Introduo Orientao a Objetos 39
<nome_do_mtodo>: nome que identica o mtodo.
<corpo_do_mtodo>: cdigo que dene o que o mtodo faz.
Exemplo:
public double getSaldo(){
return saldo;
}
A Figura 2.4 exibe uma nova verso da classe Conta, agora com um mtodo
depositar.
Figura 2.4: Classe Conta com mtodo depositar
Fonte: Elaborada pelos autores
O mtodo depositar recebe como argumento o valor a ser depositado na
conta e soma esse valor ao saldo da conta. Note que no lugar do tipo de
retorno do mtodo foi utilizada a palavra void, que indica que nenhum valor
ser retornado pelo mtodo. O uso da palavra void em Java o mesmo que
feito na linguagem C.
Programao Orientada a Objetos e-Tec Brasil 40
Outro detalhe interessante no exemplo da Figura 2.4 o uso da palavra this.
A palavra this utilizada para acessar atributos do objeto corrente. A palavra
this obrigatria apenas quando temos um argumento ou varivel local de
mesmo nome que um atributo. Entretanto, recomendvel sua utilizao,
mesmo quando no obrigatrio, por uma questo de padronizao.
A Figura 2.5 exibe um novo mtodo para a classe Conta: o mtodo sacar.
Figura 2.5: Mtodo sacar
Fonte: Elaborada pelos autores
O mtodo sacar recebe como argumento o valor a ser sacado. Ento, o mto-
do verica se a conta tem saldo suciente para permitir o saque. Se o saldo for
maior ou igual ao valor do saque, o valor do saque descontado do saldo e
o mtodo retorna o valor true informando que o saque ocorreu com sucesso.
Caso contrrio, o mtodo apenas retorna o valor false, indicando que o saque
no pde ser efetuado. Por isso, o tipo de retorno do mtodo boolean.
2.4 Utilizao de objetos
Para utilizar um objeto em Java, precisamos executar dois passos, a saber:
Declarar uma varivel que referenciar o objeto: assim como faze-
mos com tipos primitivos, necessrio declarar o objeto.
Instanciar o objeto: alocar o objeto em memria. Para isso utilizamos o
comando new e um construtor.
A Figura 2.6 exibe o exemplo de uma classe de um programa que utiliza a
classe Conta apresentada em exemplo anterior.
e-Tec Brasil Aula 2 Introduo Orientao a Objetos 41
Figura 2.6: Criao de instncias da classe Conta
Fonte: Elaborada pelos autores
A classe Conta tem por objetivo mapear os dados e comportamentos de
uma conta bancria. Assim, ela no ter um mtodo main. Esse mtodo
estar na classe principal do nosso programa. A classe Programa exibida
na Figura 2.6 que representa esse nosso programa principal e nela que
utilizaremos a classe Conta.
Note que na linha 6 do exemplo 2.6 declarada uma varivel de nome c
que referenciar um objeto da classe Conta enquanto na linha 7 o objeto
instanciado em memria. Para instanciar um objeto em memria utilizamos
o operador new (o mesmo que utilizamos para alocar vetores) acompanha-
do pelo construtor Conta(). Logo estudaremos mais sobre construtores. No
momento encare como um mtodo que tem nome igual ao da classe e no
recebe argumento nenhum. Na linha 8 atribudo o valor Z ao atributo
nome_titular da conta instanciada e, na linha 9, h uma chamada ao mtodo
depositar (j exibido em exemplo anterior) passando como argumento o valor
100. Preste ateno ao ponto que foi utilizado nas linhas 8 (c.nome_titular)
e 9 (c.depositar(100)). assim que acessamos mtodos e atributos de um
objeto em Java. Nas linhas 10 e 11 do cdigo apresentado pela Figura 2.6 h
dois comandos de sadas de dados que imprimiro na tela o nome do titular
e o saldo atual da conta, respectivamente.
Note que em nosso exemplo da Figura 2.6 foi possvel acessar o atributo
nome_titular e o mtodo depositar() da classe Conta. Esse acesso foi possvel,
pois na denio dessa classe Conta (feita na Figura 2.4) no denimos um
qualicador de acesso para o atributo e nem para o mtodo. Logo, tanto o m-
todo quanto o atributo so, por padro, protegidos (protected).Alm disso, a
classe Conta (Figura 2.4) est no mesmo pacote que a classe Programa (Figura
2.5). Em breve estudaremos o conceito de encapsulamento e veremos que essa
no uma boa estratgia para controlar os acessos a atributos de uma classe.
Programao Orientada a Objetos e-Tec Brasil 42
O mtodo depositar no retorna nenhum valor para a classe que o chamou
(note na Figura 2.4 que o retorno dele void). J o mtodo sacar (denido na
Figura 2.5), por exemplo, retorna um boolean que indica se o saque pde ser
efetuado com sucesso ou no. Mas, ento, como utilizar o valor retornado
por um mtodo? A Figura 2.7 mostra um exemplo em que o mtodo sacar()
chamado pelo programa principal e seu retorno utilizado para exibir uma
mensagem informando se o saque foi realizado com sucesso ou no.
Figura 2.7: Utilizao do valor retornado por um mtodo
Fonte: Elaborada pelo autor
Note que na linha 9 do exemplo apresentado criada uma varivel booleana
com o nome saque_efetuado, que receber o valor retornado pela chamada ao
mtodo sacar(). Depois, o valor dessa varivel utilizado para decidir entre exibir
a mensagem de Saque Efetuado com Sucesso ou a de Saque no efetuado.
2.5 Atributos e mtodos estticos
Atributos estticos so atributos que contm informaes inerentes a uma
classe e no a um objeto em especco. Por isso so tambm conhecidos
como atributos ou variveis de classe.
Por exemplo, suponha que quisssemos ter um atributo que indicasse a
quantidade de contas criadas. Esse atributo no seria inerente a uma conta
em especco, mas a todas as contas. Assim, seria denido como um atribu-
to esttico. Para denir um atributo esttico em Java, basta colocar a palavra
static entre o qualicador e o tipo do atributo.
O mesmo conceito vlido para mtodos. Mtodos estticos so inerentes
classe e, por isso, no nos obrigam a instanciar um objeto para que possa-
mos utiliz-los. Para denir um mtodo como esttico, basta utilizar a palavra
static, a exemplo do que acontece com atributos. Para utilizar um mtodo
esttico devo utilizar o nome da classe acompanhado pelo nome do mtodo.
Varivel de classe
Dene um atributo de uma classe
inteira. A varivel se aplica
prpria classe e a todas as suas
instncias, de modo que somente
um valor armazenado, no
importando quantos objetos dessa
classe tenham sido criados
(CADENHEAD; LEMAY, 2005, p. 9).
e-Tec Brasil Aula 2 Introduo Orientao a Objetos 43
Mtodos estticos so muito utilizados em classes do Java que proveem de-
terminados servios. Por exemplo, Java fornece na classe Math uma srie de
mtodos estticos que fazem operaes matemticas como: raiz quadrada
(sqrt), valor absoluto (abs), seno (sin) entre outros. A Figura 2.8 apresenta
exemplos de uso dos mtodos da classe Math a m de ilustrar a utilizao
de mtodos estticos.

Figura 2.8: Utilizao de mtodos estticos da classe Math
Fonte: Elaborada pelos autores
Note no exemplo da Figura 2.8 que no instanciamos objetos da classe Math
para utilizar seus mtodos e constantes, pois so estticos.
Um mtodo criado como esttico s poder acessar atributos que tambm
sejam estticos, alm dos seus argumentos e variveis locais.
2.6 A classe String
J estudamos que Java no conta com um tipo primitivo para trabalhar com
cadeia de caracteres. Para isso temos em Java a classe String.
Para criar uma instncia de String, no precisamos utilizar o operador new,
como acontece com as outras classes. Para instanciar um objeto do tipo
String, basta declarar uma varivel desse tipo e inici-la com um valor.
importante saber tambm que objetos da classe String podem ser concate-
nados utilizando o operador +.
Para comparar se os valores de duas Strings so iguais, utilizamos o mtodo
equals e no o operador == que utilizado para tipos primitivos.
A classe String conta ainda com diversos mtodos muito teis, dentre os
quais podemos destacar:
length: retorna o tamanho ( tipo int ) de uma String.
charAt: retorna o caracter (char) da String que se localiza no ndice passado como
parmetro. Vale ressalta que o primeiro ndice de uma String o ndice zero.
toUppperCase: retorna uma String com todas as letras maisculas a partir
da String que chamou o mtodo.
String
uma classe de Java utilizada
para representarmos uma
cadeia de caracteres, que
oferece diversos mtodos para
manipularmos essa cadeia.
Programao Orientada a Objetos e-Tec Brasil 44
toLowerCase: retorna uma String com todas as letras minsculas a partir da
String que chamou o mtodo.
trim: retorna uma String sem espaos em branco no incio e no nal dela, a
partir da String que chamou o mtodo.
replace: Retorna uma String com substrings trocadas, a partir da Stringque
chamou o mtodo. As trocas so feitas de acordo com os parmetros do
mtodo: em que aparecer a substring1 ser substituda pela substring 2.
valueOf: retorna uma String a partir de um valor de outro tipo, como um
nmero por exemplo.
A Figura 2.9 apresenta um exemplo de programa que utiliza esses mtodos da
classe String e, a Figura 2.10 exibe o resultado da execuo de tal programa.
Figura 2.9: Exemplos de utilizao dos mtodos de String
Fonte: Elaborada pelos autores
Figura 2.10: Sada gerada pelo exemplo da Figura 2.9
Fonte: Elaborada pelos autores
2.7 Listas
A estrutura de dados lista utilizada para armazenar conjuntos de elemen-
tos. A vantagem em utilizar listas em lugar de vetores o fato de as listas
serem alocadas dinamicamente de forma que no precisamos prever seu ta-
manho mximo. Java fornece classes que implementam o conceito de lista.
Nesse aula utilizaremos uma dessas classes: o ArrayList. Para trabalharmos com
a classe ArrayList precisamos conhecer seus mtodos. Seguem os principais:
e-Tec Brasil Aula 2 Introduo Orientao a Objetos 45
public ArrayList(): cria um ArrayList vazio.
public boolean add(<elemento>): adiciona um elemento no nal da lista.
public void add(index, <elemento>): adiciona um elemento na posio index.
public <elemento> get(int index): obtm o elemento de ndice index.
public <elemento> remove(int index): retorna o elemento de ndice in-
dex e o elimina da lista.
public boolean isEmpty(): verica se a lista est vazia.
Para navegarmos em uma lista, utilizaremos a interface Iterator. Seguem os
principais mtodos de Iterator:
boolean hasNext(): verica se existe prximo elemento na lista;
next(): obtm o elemento sob o Iterator e avana para o prximo elemento;
void remove(): remove o elemento sob o Iterator.
A Figura 2.11 exibe um exemplo no qual criamos duas instncias da classe
Conta, inserindo-as em uma lista; depois navegamos na lista exibindo os
nmeros das contas da lista.
Figura 2.11: Exemplo de utilizao de ArrayList
Fonte: Elaborada pelos autores
Programao Orientada a Objetos e-Tec Brasil 46
O ArrayList pode armazenar objetos de quaisquer tipo. Assim, quando obte-
mos um objeto ele retorna uma instncia do tipo Object. Por isso, no exem-
plo foi necessrio fazer a converso explcita para o tipo Conta.
Resumo
Nessa aula iniciamos nossos estudos sobre orientao a objetos. Conhece-
mos os conceitos fundamentais da orientao a objetos e aprendemos a
implement-los em Java. Por m, conhecemos duas classes muito teis de
Java: String e ArrayList.
Atividades de aprendizagem
1. Implementar uma classe Conta tendo como atributos o nome do titular,
nmero e saldo e os mtodos sacar e depositar (seguindo os exemplos
das Figuras 2.4 e 2.5).
2. Criar um programa principal que instancie uma Conta (exerccio anterior).
Solicite ao usurio os dados da conta atribuindo os valores informados aos
seus atributos. Depois o sistema deve entrar em lao exibindo as seguin-
tes opes para o usurio: digitar 1 para depositar, 2 para sacar ou outro
nmero para terminar a execuo. Se o usurio digitar 1, o sistema deve
solicitar o valor a ser depositado, chamar o mtodo depositar, exibir o sal-
do atualizado e voltar a exibir as opes. Se o usurio digitar 2, o sistema
deve solicitar o valor a ser sacado, chamar o mtodo sacar vericando o
retorno. Se o retorno for true, exibir uma mensagem de saque efetuado
com sucesso; caso contrrio, uma mensagem de saque no efetuado e
voltar a exibir as opes.
3. Vamos avanar o exerccio anterior. Agora o programa principal ter uma
lista de instncias de Conta. A lista iniciar vazia. O programa entrar em
um lao que exibir as seguintes opes para o usurio: digitar 1 para
criar uma conta, 2 para ver o saldo de uma conta, 3 para sacar, 4 para
depositar e outro nmero para nalizar. Se o usurio escolher a opo 1,
o sistema deve instanciar uma nova conta, solicitar o nome do titular e
o saldo inicial atribuindo esses valores conta criada. O nmero da con-
ta ser sequencial, atribudo pelo prprio programa. Ento o programa
exibir o nmero da conta criada, adicionar a conta lista e exibir as
opes novamente. Se o usurio digitar opo 2, 3 ou 4, perguntar o n-
mero da conta que o usurio deseja e localizar essa conta na lista. Depois
Uma outra classe fornecida
por Java para implementar
o conceito de listas a
classe LinkedList. Acesse as
documentaes ociais da
Oracle sobre as classes ArrayList
e LinkedList respectivamente em
http://download.oracle.
com/javase/6/docs/api/java/
util/ArrayList.html e http://
download.oracle.com/javase/6/
docs/api/java/util/LinkedList.
html.
Utilizando as informaes dessas
documentaes, reimplemente o
exemplo apresentado na Figura
2.11 utilizando a classe LinkList
em lugar da classe ArrayList.
e-Tec Brasil Aula 2 Introduo Orientao a Objetos 47
de localizar a conta, se a opo tiver sido 2, o sistema apenas exibe uma
mensagem informando o saldo da conta solicitada. Se for 3, o sistema
deve efetuar um saque na conta seguindo o mesmo procedimento do
exerccio 2. Se for 4, o sistema deve efetuar um saque na conta seguindo
o mesmo procedimento do exerccio 2.
Programao Orientada a Objetos e-Tec Brasil 48
e-Tec Brasil
Aula 3 Construtores, destrutores
e encapsulamento
Objetivos
Entender os conceitos de construtores e destrutores.
Entender o conceito de encapsulamento e sua importncia.
Criar programas com maior manutenibilidade e extensibilidade
pela utilizao do conceito de encapsulamento
3.1 Construtores
Como estudamos, sempre que queremos criar um novo objeto de uma de-
terminada classe utilizamos a palavra new acompanhada por um construtor.
O construtor de uma classe tem, por denio, o mesmo nome que a classe.
A Figura 3.1 exibe dois exemplos de construtores para a classe Conta que
utilizamos em exemplos da aula anterior.
Figura 3.1: Mtodos construtores para a classe Conta
Fonte: Elaborada pelos autores
possvel denir diversos construtores para a mesma classe, tendo os tipos
ou a quantidade de parmetros diferentes para cada um deles.
O primeiro construtor do exemplo da Figura 3.1 cria objetos j atribuindo
aos mesmos valores passados como parmetros para os atributos numero,
nome_titular e saldo. J o segundo construtor recebe como parmetros va-
lores apenas para os atributos numero e nome_titular e atribui o valor zero
ao saldo. Note a utilizao da palavra reservada this para diferenciar os atri-
butos dos parmetros de mesmo nome.
Construtor
um mtodo especial para a
criao e inicializao de uma
nova instncia de uma classe. Um
construtor inicializa o novo objeto
e suas variveis, cria quaisquer
outros objetos de que ele precise
e realiza quaisquer outras op-
eraes de que o objeto precise
para inicializar-se (CADENHEAD;
LEMAY, 2005, p. 41).
e-Tec Brasil Aula 3 Construtores, destrutores e encapsulamento 49
A Figura 3.2 exibe o cdigo de um programa que cria dois objetos da classe
Conta, utilizando cada um dos construtores apresentados no exemplo da
Figura 3.1.
Figura 3.2: Criao de instncias da classe Conta
Fonte: Elaborada pelos autores
Note que na criao do objeto c1 foi chamado o construtor que recebe trs
parmetros enquanto na criao do objeto c2 foi chamado o outro construtor
que recebe apenas dois parmetros. A conta referenciada por c1 ter como
o valor 1 para o atributo numero, o valor Z para o atributo nome_titular e o
valor 0 para o saldo.
O Java dene um construtor padro para classes que no tem nenhum constru-
tor denido. O construtor padro no recebe nenhum argumento. No exemplo
apresentado na Figura 2.4 (aula anterior), como a classe Conta no tinha cons-
trutores denidos, Java utilizou o construtor padro para instanciar os objetos.
Porm, a partir do momento em que voc declara um construtor, o construtor
padro deixa de existir. Assim, agora que criamos esses dois construtores im-
possvel criar uma nova instncia de Conta sem utilizar um dos dois.
3.2 Destrutores
Em C, aprendemos que sempre devamos desalocar (comando free) tudo o
que alocssemos dinamicamente em memria. Em Java isso no necess-
rio, pois essa linguagem possui um Coletor Automtico de Lixo (Garbage
Collector), o qual responsvel por desalocar tudo aquilo que no mais
utilizado. Assim, os objetos que no so mais referenciados por um progra-
ma so automaticamente desalocados por esse coletor, liberando memria.
Em Java, o mtodo destrutor de uma classe o mtodo nalize. Quando
no denido um mtodo destrutor para uma classe, Java utiliza um mto-
do destrutor padro que no faz nada.
Mtodo destrutor
um mtodo acionado
imediatamente antes de o objeto
ser desalocado.
Programao Orientada a Objetos e-Tec Brasil 50
O mtodo finalize raramente utilizado porque pode causar problemas
de desempenho e h uma incerteza sobre se ele ser chamado (DEITEL;
DEITEL, 2010, p. 258).
3.3 Encapsulamento
Encapsulamento uma tcnica utilizada para restringir o acesso a variveis
(atributos), mtodos ou at prpria classe. Os detalhes da implementao
cam ocultos ao usurio da classe, ou seja, o usurio passa a utilizar os m-
todos de uma classe sem se preocupar com detalhes sobre como o mtodo
foi implementado internamente.
Para facilitar o entendimento, faamos uma analogia com um carro. Para
dirigir um carro uma pessoa no precisa conhecer os detalhes sobre como
funciona o motor ou os demais componentes dele. Um motorista no pre-
cisa saber o que acontece internamente no carro quando ele acelera ou
quando troca de marcha. Para dirigir ele precisa apenas saber como dirigir o
carro utilizando pedais de acelerador, freio e embreagem, volante e alavanca
de cmbio. Esses componentes encapsulam toda a complexidade existente
no carro sob a tica do motorista que o utiliza.
A ideia do encapsulamento na programao orientada a objetos que no
seja permitido acessarmos diretamente as propriedades de um objeto. Nesse
caso, precisamos operar sempre por meio dos mtodos pertencentes a ele. A
complexidade de um objeto escondida, portanto, pela abstrao de dados
que esto por trs de suas operaes.
Quando aprendemos a criar classes, vimos que na denio de cada mtodo
e atributo poderamos denir um qualicador de acesso, mas foi falado que
ainda no era hora de nos preocuparmos com tais detalhes e que podera-
mos omitir o qualicador. Pois bem, so exatamente esses qualicadores que
nos permitem implementar o encapsulamento.
Esses qualicadores nos permitem modicar o nvel de acesso aos atributos,
aos mtodos e at mesmo s classes. So trs os possveis qualicadores de
acesso em Java:
Encapsulamento
Consiste na separao entre os
aspectos externos de um objeto,
acessveis por outros objetos.
e-Tec Brasil Aula 3 Construtores, destrutores e encapsulamento 51
public ( pblico ): indica que o mtodo ou o atributo so acessveis por qual-
quer classe, ou seja, que podem ser usados por qualquer classe, indepen-
dentemente de estarem no mesmo pacote ou estarem na mesma hierarquia;
private ( privado ): indica que o mtodo ou o atributo so acessveis ape-
nas pela prpria classe, ou seja, s podem ser utilizados por mtodos da
prpria classe;
protected ( protegido ): indica que o atributo ou o mtodo so acessveis
pela prpria classe, por classes do mesmo pacote ou classes da mesma hie-
rarquia (estudaremos hierarquia de classes quando tratarmos de herana).
Quando omitimos o qualicador de acesso, o atributo ou mtodo so consi-
derados protected por padro.
Agora que entendemos o conceito de encapsulamento e conhecemos os
trs qualicadores de acesso, vem a pergunta: por que restringir o acesso
aos atributos de uma classe?
Para responder a essa pergunta, utilizaremos como exemplo a classe Conta
criada em aula anterior. Quando o mtodo sacar() daquela classe foi cria-
do, tomamos o cuidado de no permitir saques maiores que o saldo, a m
de que este nunca casse negativo. Mas, como no nos preocupamos em
restringir o acesso aos atributos daquela classe, um problema que poderia
acontecer seria de algum alterar o saldo, atribuindo um nmero negativo
diretamente ao atributo, como no exemplo da Figura 3.3:
Figura 3.3: Alterando o valor do atributo saldo diretamente
Fonte: Elaborada pelos autores
Assim, o melhor que teramos a fazer seria impossibilitar o acesso ao atribu-
to saldo, obrigando que as alteraes a ele fossem obrigatoriamente feitas
pelos mtodos depositar() e sacar().
De forma geral, a ideia do encapsulamento a de que cada classe respon-
svel por controlar seus atributos; portanto, ela deve julgar se aquele novo
valor vlido ou no. Essa validao no deve ser controlada por quem est
Programao Orientada a Objetos e-Tec Brasil 52
utilizando a classe, e sim pela prpria classe, centralizando essa responsabi-
lidade e facilitando futuras mudanas no sistema. Assim, em geral, os atri-
butos de uma classe devem ser privados e deve haver mtodos pblicos que
permitam o acesso a eles. A Figura 3.4 apresenta uma nova verso da classe
Conta seguindo essa ideia (os construtores no so exibidos na gura).
Figura 3.4: Classe Conta com atributos encapsulados
Fonte: Elaborada pelos autores
Os atributos private de uma classe s podem ser manipulados pelos mtodos
da classe. Portanto, um cliente de um objeto isto , qualquer classe que
utilize o objeto dever chamar os mtodos public da classe para manipular
os campos private de um objeto da classe (DEITEL; DEITEL, 2010, p. 66).
Por padro, os atributos encapsulados devem ter um mtodo que obte-
nha o valor atual do atributo (mtodo get) e um mtodo que altere o valor
do atributo (mtodo set). Por exemplo, note que na nova verso da classe
Conta h um mtodo getNomeTitular() que retorna o nome do titular da
conta e um mtodo setNomeTitular(String) que atribui um novo nome ao ti-
e-Tec Brasil Aula 3 Construtores, destrutores e encapsulamento 53
tular da conta. Mas, como consideramos que o nmero da conta atribudo
em sua criao (note que os dois construtores da classe exigem o nmero)
e nunca pode ser alterado, criamos apenas o mtodo getNumero(). No caso
do saldo, como ele s pode ser alterado por saques e depsitos, no faria
sentido criar um mtodo setSaldo. Assim, os mtodos depositar e sacar ser-
vem para alterar o saldo e o getSaldo() nos retorna o valor atual do saldo.
Vale ressaltar que o qualicador private tambm pode ser usado para modi-
car o acesso a um mtodo quando este existe apenas para auxiliar a prpria
classe e no queremos que outras pessoas o utilizem.
Entenderemos melhor o uso do qualicador protected na prxima aula,
quando abordarmos os conceitos de herana e de hierarquias de classes.
Resumo
Nesta aula aprendemos dois conceitos importantssimos de programao
orientada a objetos: construtores e encapsulamentos. Vimos que os constru-
tores so utilizados sempre que um objeto instanciado e que ao encapsular
os atributos de uma classe conseguimos esconder a complexidade de um
objeto pela denio de mtodos. Com a utilizao desses conceitos, cria-
remos sistemas mais modulares e com maior manutenibilidade e segurana.
Atividades de aprendizagem
1. Partindo do cdigo da classe Conta que voc criou no exerccio 1 da aula
2, crie dois construtores como os apresentados na Figura 3.1 e encapsule
os atributos como na Figura 3.3.
2. Agora altere o cdigo do programa que voc desenvolveu no exerccio
3 da aula 2, de forma que ele utilize a nova classe Conta gerada no
exerccio anterior.
O NetBeans oferece uma
funcionalidade que gera
automaticamente os mtodos
get e set para os atributos. Para
utilizar essa funcionalidade,
basta clicar com o boto direito
do mouse sobre o nome da
classe e escolher as opes
Refatorar > Encapsular
Campos. Depois, na nova
tela que exibida, escolha
os mtodos que deseja que
sejam criados e clique no boto
Refatorar.
Programao Orientada a Objetos e-Tec Brasil 54
e-Tec Brasil
Aula 4 Herana e polimorfismo
Objetivos
Conhecer o conceito de herana e aprender a implementar esse
conceito em Java.
Compreender o conceito de poliformismo.
Conhecer os conceitos de sobrecarga e sobrescrita de mtodos.
Aprender a utilizar poliformismo pela aplicao dos conceitos de
herana, sobrecarga e sobrescrita de mtodos.
4.1 Herana
Uma das vantagens das linguagens orientadas a objeto a possibilidade de se
reutilizar cdigo. Mas, quando falamos em reutilizao de cdigo, precisamos de
recursos muito mais poderosos do que simplesmente copiar e alterar o cdigo.
Um dos conceitos de orientao a objetos que possibilita a reutilizao de
cdigo o conceito de herana. Pelo conceito de herana possvel criar
uma nova classe a partir de outra classe j existente.
Para ilustrar o conceito de herana vamos criar uma classe para representar
as contas especiais de um banco. Em nosso exemplo, uma conta especial
um tipo de conta que permite que o cliente efetue saques acima de seu
saldo at um limite, ou seja, permite que o cliente que com saldo negativo
at um dado limite. Assim, criaremos uma classe ContaEspecial que herdar
da classe Conta que criamos em aulas anteriores.
Adotaremos essa estratgia, j que uma ContaEspecial um tipo de Conta que
tem, alm de todos os atributos comuns a todas as contas, o atributo limite.
Sendo assim, deve-se utilizar a palavra reservada extends para que ContaEspe-
cial herde de Conta suas caractersticas. A Figura 4.1 exibe o cdigo da classe da
classe ContaEspecial. Note na denio da classe a utilizao da palavra extends.
Herana
um mecanismo que permite
que uma classe herde todo o
comportamento e os atributos
de outra classe (CADENHEAD;
LEMAY, 2005, p. 13)
Em uma herana, a classe da
qual outras classes herdam
chamada de classe pai, classe
base ou superclasse. J a classe
que herda de uma outra
chamada de classe lha, classe
derivada ou subclasse.
e-Tec Brasil Aula 4 Herana e polimorsmo 55
Figura 4.1: Cdigo da classe ContaEspecial que herda da classe Conta
Fonte: Elaborada pelos autores
Nesse caso dizemos que ContaEspecial uma subclasse ou classe lha
de Conta. Podemos tambm dizer que Conta ancestral ou classe pai de
ContaEspecial. Note que ContaEspecial dene um tipo mais especializado
de conta. Assim, ao mecanismo de criar novas classes herdando de outras
dado o nome de especializao.
Agora suponha que tenhamos um outro tipo de conta: a ContaPoupanca. A
ContaPoupanca tem tudo o que a Conta tem com um mtodo a mais que
permite atribuir um reajuste percentual ao saldo. Agora teramos duas clas-
ses herdando da classe Conta Nesse contexto podemos dizer que a classe
Conta generaliza os conceitos de ContaEspecial e ContaPoupanca.
A Figura 4.2 exibe o cdigo da classe ContaPoupanca. Note que ela herda as
caractersticas da classe Conta e apenas implementa um novo mtodo: reajustar.
Figura 4.2: Cdigo da classe ContaPoupanca que herda da classe Conta
Fonte: Elaborada pelos autores
Quando visualizamos uma hierarquia partindo da classe pai para lhas, dize-
mos que houve uma especializao da superclasse. Quando visualizamos
partindo das classes lhas para as classes ancestrais, dizemos que houve
uma generalizao das subclasses.
Aps denir as classes ContaPoupanca e ContaEspecial, conforme ilustrado
nas Figuras 4.1 e 4.2, o NetBeans nos sinalizar com erros nas duas classes
pois, na aula anterior denimos construtores para a classe Conta que an-
cestral das duas que criamos agora e no denimos construtores para as
duas subclasses que acabamos de gerar.
Programao Orientada a Objetos e-Tec Brasil 56
Caso voc no tenha denido um construtor em sua superclasse, no ser
obrigado a denir construtores para as subclasses, pois Java utilizar o cons-
trutor padro para a superclasse e para as subclasses. Porm, caso haja al-
gum construtor denido na superclasse, obrigatoriamente voc precisar
criar ao menos um construtor para cada subclasse. Vale ressaltar que os
construtores das subclasses utilizaro os construtores das superclasses pelo
uso da palavra reservada super.
A Figura 4.3 exibe o construtor criado para a classe ContaEspecial enquanto
a Figura 4.4 exibe o construtor da classe ContaPoupanca.
Figura 4.3: Construtor da classe ContaEspecial
Fonte: Elaborada pelos autores
Figura 4.4: Construtor da classe ContaPoupanca
Fonte: Elaborada pelos autores
Note que o construtor da classe ContaEspecial recebe como parmetros o
nmero, o nome do titular e o limite. Ento, pelo uso da palavra super, esse
construtor chama o construtor da classe Conta (que criamos em aula an-
terior) repassando o nmero e o nome do titular e, depois, atribui ao limite
o valor recebido como parmetro. J o construtor da classe ContaPoupanca
apenas se utiliza do construtor da superclasse, pois ele no recebe atributos
alm dos j tratados pela superclasse.
4.2 Utilizao de atributos protected
Quando estudamos encapsulamento aprendemos que devemos preferen-
cialmente manter os atributos com nvel de acesso privado (private) de forma
que para acess-los outras classes precisem utilizar mtodos.
Mas, vimos tambm que h um nvel de acesso protegido (protected) que
faz com que o atributo se comporte como pblico para classes da mesma
hierarquia ou do mesmo pacote e como privado para as demais classes.
Denir alguns atributos da superclasse como protected pode trazer algumas
facilidades para implementar mtodos das subclasses.
e-Tec Brasil Aula 4 Herana e polimorsmo 57
Por exemplo, note que na implementao do mtodo reajustar da classe
ContaPoupanca apresentado na Figura 4.2, tivemos de obter o saldo, cal-
cular o reajuste e depois depositar esse reajuste na conta para que fosse
somado ao saldo, pois o atributo saldo foi denido na superclasse Conta
como privado, no permitindo que o alterssemos diretamente de dentro da
classe ContaPoupanca.
A Figura 4.5 apresenta uma nova implementao para o mtodo reajustar
da classe ContaPoupanca, considerando que o atributo saldo teve sua de-
nio alterada para protegido (protected).
Figura 4.5: Nova implementao do mtodo reajustar considerando o atributo
saldo como protected
Fonte: Elaborada pelos autores
Note que na nova implementao podemos acessar diretamente o
atributo, o que a torna mais simples.
Apesar de potencialmente facilitar a implementao de mtodos nas sub-
classes, a utilizao de atributos protegidos perigosa, pois o atributo car
acessvel a todas as classes que estejam no mesmo pacote e no somente s
subclasses. Assim, pense bastante sobre as vantagens e desvantagens antes
de se decidir por denir um atributo como protected.
4.3 Polimorsmo
A palavra polimorsmo vem do grego poli morfos e signica muitas formas.
Na orientao a objetos, isso representa uma caracterstica que permite que
classes diferentes sejam tratadas de uma mesma forma.
Programao Orientada a Objetos e-Tec Brasil 58
O polimorsmo permite escrever programas que processam objetos que
compartilham a mesma superclasse (direta ou indiretamente) como se todos
fossem objetos da superclasse; isso pode simplicar a programao (DEITEL;
DEITEL, 2010, p. 305).
Em outras palavras, podemos ver o polimorsmo como a possibilidade de um
mesmo mtodo ser executado de forma diferente de acordo com a classe do
objeto que aciona o mtodo e com os parmetros passados para o mtodo.
Com o polimorsmo podemos projetar e implementar sistemas que so fa-
cilmente extensveis novas classes podem ser adicionadas com pouca ou
nenhuma alterao a partes gerais do programa, contanto que as novas clas-
ses faam parte da hierarquia de herana que o programa processa gene-
ricamente. As nicas partes de um programa que devem ser alteradas para
acomodar as novas classes so aquelas que exigem conhecimento direto das
novas classes que adicionamos hierarquia (DEITEL; DEITEL, 2010, p. 305).
O polimorsmo pode ser obtido pela utilizao dos conceitos de herana,
sobrecarga de mtodos e sobrescrita de mtodo (tambm conhecida como
redenio ou reescrita de mtodo).
4.4 Sobrescrita
A tcnica de sobrescrita permite reescrever um mtodo em uma subclasse de
forma que tenha comportamento diferente do mtodo de mesma assinatura
existente na sua superclasse.
Para ilustrar o conceito de sobrescrita, vamos criar um mtodo imprimirTipo-
Conta() na superclasse Conta e vamos sobrescrev-lo nas duas subclasses da
nossa hierarquia de exemplo (ContaEspecial e ContaPoupanca). Esse mtodo
simplesmente imprimir na tela uma mensagem de acordo com o tipo da
conta, ou seja, de acordo com o tipo do objeto ele imprimir uma mensagem
diferente. A Figura 4.6 exibe apenas a linha de denio de cada classe e
seu respectivo mtodo imprimirTipoConta() (omitimos o resto dos cdigos das
classes e as juntamos todas em uma nica gura por uma questo de espao).
e-Tec Brasil Aula 4 Herana e polimorsmo 59
Figura 4.6: Exemplo de sobrescrita de mtodo
Fonte: Elaborada pelos autores
Note que no exemplo da Figura 4.6, nas linhas anteriores aos mtodos Im-
primirTipoConta das classes ContaEspecial e ContaPoupana, h uma no-
tao @Override. A notao @Override inserida automaticamente pelo
NetBeans para indicar que esse mtodo foi denido no ancestral e est sen-
do redenido na classe atual. A no colocao da notao @Override no
gera erro, mas gera um aviso (Warning). Isso ocorre porque entende-se que,
quando lemos uma classe e seus mtodos, importante existir alguma forma
de sabermos se um certo mtodo foi ou no denido numa classe ancestral.
Assim a notao @Override fundamental para aumentar a legibilidade e
manutenibilidade do cdigo.
A Figura 4.7 exibe um exemplo de utilizao dos mtodos apresentados na
Figura 4.6, a m de ilustrar o polimorsmo.
Programao Orientada a Objetos e-Tec Brasil 60
Figura 4.7: Exemplo de polimorsmo
Fonte: Elaborada pelos autores
No exemplo da Figura 4.7, vemos que, de acordo com a opo escolhida no
menu impresso, temos a criao de um objeto diferente. Quando o usurio di-
gita 2, por exemplo, criada uma instncia de ContaEspecial. Note que a vari-
vel c do tipo Conta. Mas, ainda assim, possvel atribuir a ela uma instncia
de ContaPoupanca ou de ContaEspecial pois ambas herdam da classe Conta.
Na ltima linha do cdigo apresentado, o mtodo imprimirTipoConta()
chamado. Mas, sabemos que esse mtodo foi implementado na classe Con-
ta e sobrescrito nas duas classes lhas. Assim, qual das implementaes ser
usada por essa chamada? A resposta a essa pergunta vai depender da op-
o digitada pelo usurio! Por exemplo, caso o usurio digite 2, a varivel c
receber uma instncia de ContaEspecial. Nesse caso, na ltima linha ser
chamado o mtodo imprimirTipoConta() da classe ContaEspecial. Analoga-
mente, caso o usurio digite a opo 1, ser utilizado o mtodo da classe
Conta e, caso digite 3, ser utilizado o mtodo da classe ContaPoupanca.
Nesse exemplo, a mesma linha de cdigo pode ter um comportamento dife-
rente, dependendo das circunstncias. Isso polimorsmo!
e-Tec Brasil Aula 4 Herana e polimorsmo 61
Agora que entendemos o conceito de sobrescrita, vamos corrigir uma falha
que cometemos ao denir nossa hierarquia de classes! A classe ContaEspecial
tem um atributo limite que dene um valor que o proprietrio da conta pode-
ria sacar mesmo no tendo saldo. O problema que quando implementamos
a classe ContaEspecial no reescrevemos o mtodo sacar; logo, essa classe
est utilizando o mtodo da superclasse Conta. Assim, independentemente
do valor do atributo limite da ContaEspecial, o saque no ser efetuado caso
no haja saldo suciente, pois essa a lgica implementada no mtodo sacar
da classe Conta. A Figura 4.8 exibe uma implementao para o mtodo sacar
na classe ContaEspecial que sobrescreve o mtodo da superclasse e permite
a realizao do saque caso o valor a ser sacado seja menor ou igual a soma
entre o saldo e o limite da conta.
Figura 4.8: Mtodo sacar sobrescrito na classe ContaEspecial
Fonte: Elaborada pelos autores
4.5 Sobrecarga
Mtodos de mesmo nome podem ser declarados na mesma classe, contanto
que tenham diferentes conjuntos de parmetros (determinado pelo nmero,
tipos e ordem dos parmetros). Isso chamado sobrecarga de mtodo (DEI-
TEL; DEITEL, 2010, p. 174).
Para que os mtodos de mesmo nome possam ser distinguidos, eles devem
possuir assinaturas diferentes. A assinatura (signature) de um mtodo
composta pelo nome do mtodo e por uma lista que indica os tipos de todos
os seus argumentos. Assim, mtodos com mesmo nome so considerados
diferentes se recebem um diferente nmero de argumentos ou tipos diferen-
tes de argumentos e tm, portanto, uma assinatura diferente.
Quando um mtodo sobrecarregado chamado, o compilador Java sele-
ciona o mtodo adequado examinando o nmero, os tipos e a ordem dos
argumentos na chamada (DEITEL; DEITEL, 2010, p. 174).
Programao Orientada a Objetos e-Tec Brasil 62
Mesmo sem saber, ns j utilizamos o conceito de sobrecarga quando cria-
mos os construtores da classe Conta. Ao criar a classe Conta ns denimos
dois construtores, sendo que um deles recebendo trs parmetros e o outro
recebendo dois parmetros (veja a Figura 4.1 da Aula 4).
Para ilustrar melhor o conceito de sobrecarga, implementaremos na classe
Conta um novo mtodo imprimirTipoConta que receber como parmetro
uma String e imprimir na tela o tipo da conta seguido pela String recebida.
A Figura 4.9 exibe os dois mtodos imprimirTipoConta da classe Conta.
Figura 4.9: Exemplo de sobrecarga
Fonte: Elaborada pelos autores
Na Figura 4.10 apresentado um exemplo que visa ilustrar o comportamento
dos objetos diante o uso de herana, sobrecarga e sobrescrita. A gura exibe
tanto o cdigo-fonte de uma classe que utiliza as classes Conta e ContaEspecial
quanto a sada da execuo desse programa (destacada em vermelho).
Figura 4.10: Utilizao de sobrecarga e sobrescrita
Fonte: NetBeans IDE 7.0.1
No exemplo da Figura 4.10, a varivel c1 contm uma instncia da classe
Conta e c2, uma instncia da classe ContaEspecial. Aps a criao dos obje-
tos, primeiro feita uma chamada ao mtodo imprimirTipoConta de c1 sem
passar nenhum parmetro, e depois outra chamada passando uma String.
Em seguida foram feitas as mesmas chamadas a partir de c2. Note que como
no criamos na classe ContaEspecial, um mtodo imprimirTipoConta que
e-Tec Brasil Aula 4 Herana e polimorsmo 63
receba uma String como argumento, a ltima chamada feita a partir de c2
foi atendida pelo mtodo da classe Conta. O que aconteceu foi que, como
c2 contm uma instncia de ContaEspecial, o compilador procurou por um
mtodo imprimirTipoConta(String) na classe ContaEspecial. Como no en-
controu, ento o compilador fez uso do mtodo existente na superclasse, j
que ContaEspecial herda de Conta.
4.6 Classe Object
Todas as classes no Java herdam direta ou indiretamente da classe Object;
portanto, seus 11 mtodos so herdados por todas as outras classes (DEITEL;
DEITEL, 2010, p. 258).
Vejamos alguns mtodos:
toString(): esse mtodo indica como transformar um objeto de uma classe
em uma String. Ele utilizado, automaticamente, sempre que necessrio
transformar um objeto de uma classe em uma String. Na classe Conta, por
exemplo, esse mtodo poderia ser denido da seguinte forma:
@Override
public String to String() {
return (Conta: + this.numero);
}
Note o uso da notao @Override para o mtodo toString(). Isso ocorre
porque estamos sobrescrevendo um mtodo denido em Object.
getClass: retorna a classe de um objeto. Muito utilizado quando se trabalha
na criao de ferramentas geradoras de cdigo ou frameworks. Utilizaremos
esse mtodo no exemplo da Figura 4.11 para construir o mtodo toString .
equals(): esse mtodo possibilita comparar os valores de dois objetos. Se
considerarmos esses objetos iguais, devemos retornar true; caso sejam dife-
rentes, devemos retornar false.
Programao Orientada a Objetos e-Tec Brasil 64
Quando comparamos dois objetos com o operador ==, na realidade estamos
comparando se eles so o mesmo objeto e no se seus valores so iguais.
Isso ocorre porque os objetos em Java so ponteiros para espaos de me-
mria. Assim, dois objetos podem ter os mesmos valores em seus atributos
e no serem iguais, pois podem apontar para locais diferentes. Dessa forma,
para comparar os valores de dois objetos, devemos utilizar o mtodo equals.
Por isso que quando queremos comparar Strings, por exemplo, utilizamos o
mtodo equals. A Figura 4.11 exibe uma implementao do mtodo equals
para a classe Conta. Nesse mtodo consideramos que duas contas so iguais
se so de uma mesma classe e se tm o mesmo nmero.
Figura 4.11; Exemplo de mtodo equals para a classe Conta
Fonte: Elaborada pelos autores
No mtodo equals apresentado so feitas as seguintes vericaes:
if ( o == null ): estamos prevendo que se pode tentar comparar um objeto
Conta com um valor nulo (varivel no instanciada). Como o objeto Conta
que acionou o mtodo equals est instanciado, ele no pode ser igual a null.
if (o.getClass() != this.getClass()): estamos vericando se o objeto passa-
do como parmetro da mesma classe que o objeto que est invocando
o mtodo, ou seja, se estamos comparando duas instncias da classe
Conta. Caso os objetos sejam de classes diferentes, consideramos que
eles so diferentes.
if (((Conta) o).getNumero() != this.getNumero()): caso os dois objetos se-
jam do mesmo tipo (Conta), ento comparamos os valores do atributo
numero dessas contas. Se os nmeros so diferentes, consideramos que
so contas diferentes; caso contrrio, as consideramos iguais.
e-Tec Brasil Aula 4 Herana e polimorsmo 65
importante conhecermos a hierarquia de uma classe para evitarmos repli-
car cdigos de forma desnecessria.
Conforme voc ver na documentao acima, a classe Object prov o m-
todo clone, cujo objetivo criar uma cpia de um objeto. Nesse contexto,
explique por que a expresso x.clone().equals(x) tipicamente verdadeira,
enquanto a expresso x.clone() == x tipicamente falsa.
Resumo
Nesta aula aprendemos dois dos principais conceitos de orientao a obje-
tos: herana e polimorsmo. O conceito de herana nos permite criar uma
classe a partir de outra. Assim, quando temos um conjunto de classes com
caractersticas comuns, utilizamos o conceito de herana para agrupar essas
caractersticas em vez de repetirmos suas implementaes vrias vezes. J o
polimorsmo permite que um mesmo mtodo seja executado de formas di-
ferentes de acordo com a classe do objeto que o aciona e com os parmetros
passados para o mtodo. De fato, o polimorsmo conseguido pela imple-
mentao de conceitos como herana, sobrecarga e sobrescrita de mtodos.
Esses conceitos nos permitem desenvolver cdigos mais reutilizveis e ele-
gantes. O entendimento desses conceitos fundamental para desenvolver
programas realmente orientados a objetos.
Acesse a URL http://download.
oracle.com/javase/6/docs/api/
java/lang/Object.html. L voc
encontrar a documentao
ocial da Oracle sobre a classe
Object.
Programao Orientada a Objetos e-Tec Brasil 66
Atividades de aprendizagem
1. Crie a hierarquia de classes utilizada como exemplo nesta aula: crie a clas-
se ContaEspecial (Figura 4.1) e ContaPoupanca (Figura 4.2), crie os cons-
trutores dessas classes (Figuras 4.3 e 4.4), crie o mtodo reajustar na clas-
se ContaPoupanca (Figura 4.5) e o mtodo sacar na classe ContaEspecial
(Figura 4.8).
2. Agora que temos vrios tipos de contas, vamos alterar o programa que
iniciamos no exerccio 3 da aula 2 e incrementamos no exerccio 2 da aula
3. Nessa nova verso, quando o usurio escolher a opo 1 (criar nova
Conta) o sistema deve questionar o tipo de conta a ser criada dando como
opes 1 para Conta, 2 para ContaEspecial e 3 para ContaPoupanca. Com
base na resposta do usurio, o sistema deve instanciar o tipo correto de
conta (lembre-se que os argumentos necessrios para instanciar um obje-
to variam de acordo com o tipo da conta). Aps criada, a conta continua
sendo inserida na lista. No so necessrias alteraes no resto do cdigo
graas ao polimorsmo!
Note que no exerccio 2 da aula 4 o nico trecho de cdigo que ser alterado
devido ao fato de termos contas de tipos diferentes o trecho que trata de
criao de contas. Todo o resto continua funcionando, pois, independente-
mente do tipo, toda conta tem mtodos para sacar, depositar e exibir saldo.
Note tambm que, de acordo com o tipo da conta, o mtodo correto
chamado de forma automtica. o polimorsmo funcionando na prtica!
e-Tec Brasil Aula 4 Herana e polimorsmo 67
e-Tec Brasil
Aula 5 Classes abstratas
e associaes
Objetivos
Conhecer os conceitos de classes e mtodos abstratos.
Aprender a utilizar classes abstratas em hierarquias de classes.
Conhecer o conceito de associao entre classes.
Aprender a implementar associaes entre classes em Java.
5.1 Classes abstratas
J aprendemos que uma classe dene as caractersticas e o comportamento
de um conjunto de objetos. Assim, os objetos so criados (instanciados) a
partir de classes.
Mas, nem todas as classes so projetadas para permitir a criao de objetos.
Algumas classes so usadas apenas para agrupar caractersticas comuns a
diversas classes e, ento, ser herdada por outras classes. Tais classes so co-
nhecidas como classes abstratas.
s vezes til declarar classes chamadas classes abstratas para as quais
voc nunca pretende criar objetos. Como elas s so usadas como superclas-
ses em hierarquias de herana, so chamadas superclasses abstratas. Essas
classes no podem ser usadas para instanciar objetos, porque so incomple-
tas. Suas subclasses devem declarar as partes ausentes para tornarem-se
classes concretas, a partir das quais voc pode instanciar objetos (DEITEL;
DEITEL, 2010, p. 309).
As classes que no so abstratas so conhecidas como classes concretas.
As classes concretas podem ter instncias diretas, ao contrrio das classes
abstratas que s podem ter instncias indiretas, ou seja, apesar de a classe
abstrata no poder ser instanciada, ela deve ter subclasses concretas que por
sua vez podem ser instanciadas.
e-Tec Brasil Aula 5 Classes abstratas e associaes 69
O conceito de classe abstrata est intimamente ligado ao conceito de heran-
a estudado na aula anterior. Assim, caso voc ainda tenha alguma dvida
sobre a aula anterior, tente esclarec-la antes de continuar.
Para ilustrar o conceito de classe abstrata, voltemos ao nosso exemplo de
contas bancrias. No exemplo apresentado na aula sobre herana e poli-
morsmo, tnhamos as classes ContaEspecial e ContaPoupana herdandas
da classe Conta.
Agora, suponha que toda conta criada no nosso banco tenha que ser uma
conta especial ou uma conta poupana. Nesse caso, nunca teramos uma
instncia da classe Conta,pois toda conta criada seria uma instncia de
ContaEspecial ou de ContaPoupanca.
Nesse contexto surgem algumas perguntas: teria sentido criar a classe Conta?
Por que criar uma classe que nunca ser instanciada?
A resposta primeira pergunta sim! A classe Conta continuaria existindo
para organizar as caractersticas comuns aos dois tipos de contas. Ento,
para garantir que a classe Conta exista, mas nunca seja instanciada, essa
classe deve ser criada como abstrata.
Para denir uma classe abstrata em Java, basta utilizar a palavra reservada
abstract. A palavra abstract deve ser inserida entre o qualicador de aces-
so e o nome da classe. A Figura 5.1 exibe o cdigo da classe Conta agora
como classe abstrata.
Figura 5.1: Verso abstrata da classe Conta
Fonte: Elaborada pelos autores
Programao Orientada a Objetos e-Tec Brasil 70
Note que a nica diferena em relao ao cdigo original o uso da palavra
abstract. A Figura 5.1 apresenta apenas os atributos e construtores da classe
Conta, no apresentando os seus mtodos. Mas, vale ressaltar que a trans-
formao de uma classe em abstrata no traz impacto para nenhum de seus
mtodos e nem para os cdigos das suas subclasses.
Observando o exemplo da Figura 5.1, surge uma nova questo: tendo em
vista que uma classe abstrata no pode ser instanciada, faz algum sentido
uma classe abstrata ter construtores?
A resposta sim! Como vimos na aula sobre herana, os construtores das
subclasses se utilizam dos construtores da superclasse. Assim, mesmo no
podendo ser instanciadas, comum classes abstratas terem construtores
que inicializam seus prprios atributos e so utilizados pelas subclasses. Mas,
vale ressaltar que, assim como em qualquer outra classe, no obrigatrio
denir construtores para as classes abstratas.
Mas, e se eu tentar utilizar um construtor de uma classe abstrata para instan-
ciar um objeto, o que acontece? A resposta erro de compilao. A Figura
5.2 exibe um exemplo de classe que tenta criar uma instncia de Conta, uma
instncia de ContaEspecial e uma instncia de ContaPoupanca.
Figura 5.2: Tentativa de instanciar uma classe abstrata
Fonte: Elaborada pelos autores
Note que na linha 6 do cdigo exibido na Figura 5.2 tentamos instanciar um
objeto da classe Conta, mas o NetBean s apontou o erro. J na linha 7, criamos
normalmente uma instncia de ContaEspecial. Por m, preste ateno linha
8. Apesar de c1 ser uma varivel do tipo Conta que abstrato, foi possvel
atribuir a ela uma instncia de classe ContaPoupanca, pois ContaPoupanca
uma classe concreta e herda de Conta.
e-Tec Brasil Aula 5 Classes abstratas e associaes 71
5.2 Mtodos abstratos
Em algumas situaes as classes abstratas podem ser utilizadas para prover
a denio de mtodos que devem ser implementados em todas as suas
subclasses, sem apresentar uma implementao para esses mtodos. Tais
mtodos so chamados de mtodos abstratos.
Toda classe que possui pelo menos um mtodo abstrato uma classe abstra-
ta, mas uma classe pode ser abstrata sem possuir nenhum mtodo abstrato.
Para denir um mtodo abstrato em Java, utiliza-se a palavra reservada
abstract entre o especicador de visibilidade e o tipo de retorno do mtodo.
Vale ressaltar que um mtodo abstrato no tem corpo, ou seja, apresenta
apenas uma assinatura.
Para exemplicar o conceito de mtodo abstrato, vamos novamente recorrer
ao exemplo das contas bancrias. sensato imaginar que todo tipo de conta
bancria deve ter uma forma de sacar. Mas, de acordo com o tipo da conta, h
regras diferentes para o saque. Em nosso exemplo, a ContaEspecial possui um
limite de forma que ela permite saques acima do saldo disponvel at o limite
da conta. J a ContaPoupanca no permite saques acima do saldo disponvel.
Nesse contexto, podemos denir, na classe Conta, um mtodo abstrato
sacar. Assim, toda classe que herdar de conta dever sobrescrever (lembra-
-se do conceito de sobrescrita?) esse mtodo implementando suas prprias
regras de saque.
A Figura 5.3 exibe o cdigo do mtodo abstrato sacar denido na classe Conta.
Figura 5.3: Mtodo abstrato sacar da classe Conta
Fonte: Elaborada pelos autores
Note que o mtodo apresentado na Figura 5.3 no possui corpo, ou seja, ele
no dene como deve ser feito um saque em uma conta. Esse mtodo serve
apenas para obrigar todas as classes que herdem de Conta a sobrescrever
o mtodo sacar. Caso uma subclasse de Conta no sobrescreva o mtodo
sacar, ela no poder ser denida como uma classe concreta.
A Figura 5.4 exibe as implementaes dos mtodos sacar nas classes
ContaPoupanca e ContaEspecial.
Mtodos abstratos
So aqueles que no
possuem cdigo e devem ser
implementados em classes
concretas que herdem da classe
abstrata ( no abstratas ).
Programao Orientada a Objetos e-Tec Brasil 72
Figura 5.4: Implementaes concretas do mtodo sacar nas classes
ContaEspecial e ContaPoupanca
Fonte: Elaborada pelos autores
Para que uma subclasse de uma classe abstrata seja concreta, ela deve obri-
gatoriamente apresentar implementaes concretas para todos os mtodos
abstratos de sua superclasse. Por exemplo, se o mtodo sacar no fosse
implementado na classe ContaEspecial, essa classe teria de ser abstrata ou
ocorreria erro de compilao.
5.3 Associaes
Como sabemos, a base do paradigma de orientao a objetos que o mun-
do pode ser visto como um conjunto de objetos e, objetos com estruturas
similares podem ser agrupados em classes de objetos. Assim, as classes des-
crevem as estruturas (pelos atributos) e o comportamento (pelos mtodos)
de um conjunto de objetos.
fcil notar que no mundo real esses objetos se ligam uns aos outros de
diversas maneiras. Voltando ao exemplo do banco, podemos dizer que o
banco tem clientes e esses clientes possuem contas bancrias. Note que
os clientes constituem um conjunto de objetos desse universo bancrio
que possui um conjunto de caractersticas prprias como nome, CPF, entre
outras. Ou seja, podemos criar uma classe Cliente para representar nossos
clientes. Alm disso, como clientes possuem contas bancrias, necessrio
mapear as ligaes que relacionam o cliente sua conta. Essas ligaes entre
classes so chamadas de associaes.
As associaes podem ser implementadas como atributos e/ou como mto-
dos. Por exemplo, vimos que a classe Conta poderia ser associada a classe
Cliente. Assim, uma forma de implementar essa associao seria criar na
classe Conta um atributo do tipo Cliente e mtodos que nos permitam obter
o cliente titular da conta e atribuir um novo cliente conta.
Associao
Representa uma conexo
entre classes.
e-Tec Brasil Aula 5 Classes abstratas e associaes 73
Utilizamos associaes quando desejamos representar relacionamentos que
existam entre objetos de duas classes distintas, como por exemplo:
Um Curso tem Disciplinas
Um Produto de uma Marca.
No exemplo que criamos anteriormente, a classe conta tinha trs atributos:
o nmero, o saldo e o nome do titular. Note que nmero e saldo so real-
mente caractersticas da conta. Porm o nome_titular na verdade uma
caracterstica do cliente. Assim, agora que criamos uma classe Cliente para
encapsular as caractersticas do cliente, tiraremos o atributo nome_titular
da classe Conta e colocaremos em seu lugar um atributo titular que ser do
tipo Cliente. Esse atributo representar a associao entre a classe Conta e a
classe Cliente. Veja na Figura 5.5 o cdigo da classe Cliente e na Figura 5.6
o novo cdigo da classe Conta implementando a associao com a classe
Cliente (a Figura 5.6 exibe apenas a parte do cdigo da classe Conta que foi
alterada devido associao com a classe Cliente).
Figura 5.5: Classe Cliente
Fonte: Elaborada pelos autores
Veja que no mtodo SetCPF
apenas recebemos uma String e
atribumos ao CPF. Na verdade,
o ideal seria validar se a String
passada um CPF vlido e s
atribuir em caso positivo. Nesse
caso o mtodo retornaria um
boolean indicando se a operao
foi realizada ou no. Como vimos
na Aula 4, esse o maior motivo
para encapsular atributos: validar
os valores atribudos.
Programao Orientada a Objetos e-Tec Brasil 74
Figura 5.6: Classe Conta
Fonte: Elaborada pelos autores
Note que na classe Conta os atributos numero e saldo so representados por
tipos primitivos enquanto o atributo titular representado por outro objeto, ou
seja, um atributo cujo tipo uma outra classe (no caso, a classe Cliente). Isso
signica que um objeto pode ser construdo pela associao de outros objetos.
Na Figura 5.6 vemos que alguns construtores da classe Conta recebem como
argumento um objeto da classe Cliente. Porm, possvel fazer a instancia-
o de um objeto de uma Classe no construtor de uma outra classe com a
qual a primeira tenha uma associao. Por exemplo, note na Figura 5.6 que
h um construtor da classe Conta que recebe como parmetros os dados do
Cliente e instancia um objeto Cliente dentro do seu construtor. Mas, deve-se
tomar cuidado com essa abordagem quando se trabalha com sistemas gran-
des nos quais uma mesma classe tem associao com diversas outras.
Nas classes que utilizam associao, portanto, existem instanciaes de
objetos de uma dada classe ou recebimento de objetos construdos em
outras partes do cdigo.
e-Tec Brasil Aula 5 Classes abstratas e associaes 75
A associao um tipo de estruturao de classes que facilita o reuso de
cdigo. Em nosso exemplo, agora que temos a classe Cliente criada, se for-
mos desenvolver um sistema para uma loja varejista, por exemplo, podemos
reutilizar essa classe.
No confunda o conceito de herana com o de associao. A herana um
tipo de estruturao entre classes que indica que um objeto de um certo
tipo, contendo algumas especializaes. Uma ContaEspecial, por exemplo,
um tipo de Conta. Assim, para representar essa estruturao utilizamos he-
rana. J Cliente no um tipo de Conta e nem Conta um tipo de Cliente.
Na verdade uma Conta pertence a um Cliente. Da a utilizao de associao
para representar essa estruturao.
Resumo
Esta aula foi dedicada ao estudo de dois conceitos muito interessantes da
orientao a objetos: classes e mtodos abstratos. As classes abstratas no
podem ser instanciadas e so utilizadas para agrupar um conjunto de ca-
ractersticas a serem herdadas por classes concretas. Os mtodos abstratos
so aqueles que no tm uma implementao, mas so obrigatoriamente
implementados nas classes concretas que herdam da abstrata que a dene.
Toda classe que tem um mtodo abstrato abstrata, mas nem toda classe
abstrata tem um mtodo abstrato. A utilizao desses conceitos possibilita
trazer mais exibilidade e qualidade para os programas orientados a objetos.
Atividades de aprendizagem
1. Com base na hierarquia de contas criada no exerccio 1 da aula 4, trans-
forme a classe Conta em uma classe abstrata (Figura 5.1). Transforme o
mtodo sacar da classe Conta em abstrato (Figura 5.3), implementando-o
nas subclasses (Figuras 5.4 e 5.5).
2. Crie, no mesmo pacote, a classe Cliente (Figura 5.5) e altere a classe
Conta para que tenha uma associao com a classe Cliente (Figura 5.6).
Faa as alteraes necessrias nos construtores das subclasses de Conta.
3. Altere o programa construdo no exerccio 2 da aula 4, para que conti-
nue funcionando, utilizando nossa nova hierarquia de Contas e a classe
Cliente. Note que como Conta agora abstrata, dentro da opo de criar
nova conta no deve mais haver a opo de criar uma instncia de Conta.
Programao Orientada a Objetos e-Tec Brasil 76
e-Tec Brasil
Aula 6 Herana mltipla e interfaces
Objetivos
Entender o conceito de herana mltipla.
Conhecer o conceito de interface.
Aprender a aplicar o conceito de interface em Java.
Entender como o conceito de interface pode ser utilizado para si-
mular uma herana mltipla em Java.
6.1 Herana mltipla
Imaginemos que precisamos fazer um sistema para a Federao Brasileira de
Atletismo e, para isso, precisamos denir classes que representem Nadadores,
Corredores, Ciclistas e Triatletas. Ento, quando comeamos a analisar o pro-
blema, notamos que esses indivduos tm vrias caractersticas em comum,
como, por exemplo, todos eles devem se aquecer antes da prova. Assim, de-
cidimos criar uma classe que represente todos os tipos de Atletas de forma
que as demais classes herdaro dessa. Avaliando o problema mais a fundo,
chegaremos concluso que todo Atleta uma Pessoa, o que nos levaria a
criar uma classe para organizar as caractersticas comuns a todas as pessoas.
Ento, at o momento, decidimos criar uma superclasse Pessoa da qual her-
dar a classe Atleta que, por sua vez, tem como subclasses Nadador, Corredor,
Ciclista e Triatleta. Mas, note que, um Triatleta deve saber correr como um
Corredor, nadar como um Nadador e pedalar como um Ciclista. Assim, seria
natural que Triatleta herdasse caractersticas dessas trs classes.
Nesse contexto ento teramos a seguinte hierarquia:
Teramos uma superclasse Pessoa para agrupar as caractersticas comuns
a todos as pessoas.
Todo atleta uma pessoa. Assim, Atleta herdaria de Pessoa (Em Java:
Atleta extends Pessoa).
e-Tec Brasil Aula 6 Herana mltipla e interfaces 77
Todo nadador um atleta. Assim, Nadador herdaria de Atleta (Em Java:
Nadador extends Atleta).
Todo corredor um atleta. Assim, Corredor herdaria de Atleta (Em Java:
Corredor extends Atleta).
Todo ciclista um atleta. Assim, Ciclista herdaria de Atleta (Em Java:
Ciclista extends Atleta).
Todo triatleta nadador, corredor e ciclista. Assim Triatleta deveria herdar
de Nadador, Corredor e Atleta.
No caso do Triatleta emprega-se o conceito de herana mltipla.
O problema que Java no implementa o conceito de herana mltipla.
Mas, como implementar o comportamento da herana mltipla em Java, se
Java no suporta herana mltipla? Isso possvel por meio de interfaces.
6.2 Interfaces
Uma interface pode ser vista como um conjunto de declaraes de mto-
dos, sem as respectivas implementaes.
Uma interface parecida com uma classe; porm, em uma interface, todos
os mtodos so pblicos e abstratos e todos os atributos so pblicos, est-
ticos e constantes.
A sintaxe para criar uma interface muito parecida com a sintaxe para criar
uma classe: public interface <nome_da_interface>.
O problema de herana mltipla apresentado na seo anterior pode ser
resolvido com a criao de:
quatro interfaces: Atleta, Corredor, Nadador e Ciclista;
duas classes: Pessoa e Triatleta.
A Figura 6.1 exibe as implementaes das interfaces citadas. A implementa-
o da classe Pessoa exibida na Figura 6.2, enquanto a Figura 6.3 exibe o
cdigo da classe Triatleta.
Herana mltipla
O conceito de herana mltipla
torna possvel que uma classe
descenda de vrias classes.
Java no implementa herana
mltipla por opo. Isso ocorre
porque a herana mltipla pode
nos gerar situaes inusitadas.
Suponhamos que temos um
mtodo aquecer() em Atleta
e esse mtodo redenido em
Nadador, Corredor e Ciclista.
Suponhamos, ainda, que esse
mtodo no foi implementado
em Triatleta. Dessa forma, o
Triatleta deveria, por herana,
utilizar o mtodo aquecer() de
seu ancestral.
Entretanto, Triatleta tem trs
ancestrais; a vem a dvida:
qual dos trs ele iria utilizar?
Em outras palavras, um Triatleta
aquece como um Nadador,
como um Corredor ou como
um Ciclista? Java, para evitar
esse problema, eliminou a
possibilidade de herana
mltipla fazendo uso de
interfaces. Outras linguagens
utilizam outros tipos de solues
e permitem herana mltipla,
mas acabam, de certa forma,
entrando em conito com o
conceito de herana.
Interface
uma coleo de mtodos que
indica que uma classe possui
algum comportamento alm do
que herda de suas superclasses.
Os mtodos includos em uma
interface no denem esse
comportamento; essa tarefa
deixada para as classes
que implementam a interface
(CADENHEAD; LEMAY,
2005, p. 17).
Programao Orientada a Objetos e-Tec Brasil 78
Figura 6.1: Implementaes das interfaces Atleta, Nadador, Corredor e Ciclista
Fonte: Elaborada pelos autores
Note que Nadador, Corredor e Ciclista herdam de Atleta. A herana entre
interfaces feita da mesma forma que a herana entre classes: utilizando a
palavra reservada extends.
Figura 6.2: Implementao da classe Pessoa
Fonte: Elaborada pelos autores
A classe Pessoa traz os atributos nome e endereco, os mtodos que manipu-
lam esses atributos e um construtor.
e-Tec Brasil Aula 6 Herana mltipla e interfaces 79
Figura 6.3: Implementao da classe Triatleta
Fonte: Elaborada pelos autores
A classe Triatleta herda da classe Pessoa e implementa as interfaces Nadador,
Corredor e Ciclista.
O construtor de Triatleta apenas chama o construtor de sua superclasse (Pessoa)
repassando para ele o nome que recebera como parmetro.
A classe Triatleta teve de implementar os mtodos nadar(), correr() e correr-
DeBicicleta() porque ela implementa as interfaces Nadador, Atleta e Ciclista.
Note que tambm obrigatria a implementao do mtodo aquecer() pois,
as interfaces Nadador, Atleta e Ciclista que so implementadas pela classe
Triatleta herdam da interface Atleta.
O uso de interfaces recomendvel no desenvolvimento de sistemas para
fornecer um contexto menos acoplado e mais simplicado de programa-
o. Vamos supor, por exemplo, que temos uma interface responsvel pela
comunicao com banco de dados; dessa forma, qualquer classe que im-
plementar a interface responder a todas as funcionalidades para acesso a
banco. Suponhamos que um novo banco seja elaborado e que desejemos
fazer a troca do banco antigo por esse banco novo; ser necessrio apenas
elaborar a classe que implemente a interface de acesso a esse banco novo e,
ao invs de utilizarmos um objeto da classe antiga, utilizaremos um objeto
da nova classe elaborada.
Programao Orientada a Objetos e-Tec Brasil 80
Resumo
O principal conceito trabalhado nesta aula foi o de herana mltipla. Heran-
a mltipla um tipo especial de herana na qual uma classe herda de duas
ou mais outras classes. Mas, Java no implementa herana mltipla. Ento o
conceito de interface surge como uma alternativa. Uma interface dene um
conjunto de mtodos sem suas implementaes, de forma que toda classe
que implemente uma interface deve trazer implementaes para todos os
mtodos denidos em tal interface.
Atividades de aprendizagem
1. Implemente as interfaces Nadador, Corredor e Ciclista e as classes Pessoa
e Triatleta como apresentadas nos exemplos deste captulo. Faa um pro-
grama principal que instancie um triatleta e utilize seus mtodos.
2. Crie uma interface Investimento que dena um mtodo reajustar que
receba um double como parmetro e retorne void. Ento altere a classe
Poupana que criamos em exerccios anteriores de forma que ela imple-
mente a interface Investimento e continue herdando da classe Conta,
pois se trata de uma conta que tambm um investimento.
e-Tec Brasil Aula 6 Herana mltipla e interfaces 81
e-Tec Brasil
Aula 7 Interfaces grficas em Java
Parte I
Objetivos
Construir nossas primeiras interfaces grcas em Java.
Conhecer algumas classes para construo de interfaces grcas em
Java: JFrame, JLabel, ImageIcon, JOptionPane,JTextField e JPassword.
Aprender a fazer tratamento de eventos sobre interface grca
em Java.
7.1 Java Swing
A construo de interfaces grcas para programas desktop em Java se baseia
em duas bibliotecas principais: a AWT (Abstract Window Toolkit) e a Swing.
Ao contrrio do que muitos pensam, a Swing no um substituto da AWT.
Em vez disso, a Swing funciona como uma camada disposta acima da AWT.
Dessa forma, apesar de nosso estudo nessa disciplina se concentrar em
Swing, inevitvel referenciar a AWT.
Para utilizar as classes Java Swing, os programas a serem implementados
devem importar classes de trs pacotes:
import java.awt.*
import java.awt.event.*
import javax.swing.*
Se no zermos essas importaes, o NetBeans poder indicar erro quando
utilizarmos classes Java Swing. Assim, podemos fazer as trs importaes e,
quando alguma das importaes no for utilizada, ns a apagaremos.
Outra opo deixar o NetBeans fazer as correes de importao classe
a classe.
Java Swing
um conjunto de classes desti-
nado elaborao de aplicaes
com interface grca
padro Windows.
e-Tec Brasil Aula 7 Interfaces grcas em Java Parte I 83
7.2 JFrame
A janela a parte mais importante da interface do aplicativo, pois sobre
ela que os demais componentes sero construdos. A janela principal de
aplicativos Java para desktop criada como uma instncia da classe JFrame
(herana da classe Frame implementada no pacote Java Swing).
A classe JFrame prov um conjunto de mtodos que permitem criar e con-
gurar janelas. Abaixo so citados alguns deles:
JFrame(): construtor padro. Apenas cria uma nova janela.
JFrame(String t): cria uma janela atribuindo um ttulo a mesma.
getTitle(): obtm o ttulo da janela.
setTitle( String t ): atribui um ttulo janela.
isResizable(): verica se a janela redimensionvel.
setResizable(boolean b): especica se a janela ou no redimensionvel.
Caso seja passado true como parmetro, a janela ser redimensionvel.
Caso o parmetro passado seja false, a janela no ser redimensionvel.
setSize(int l, int a): dene o tamanho da janela. Os parmetros passados
so a largura e a altura da janela.
setLocation(int x, int y): dene a posio da janela na tela. O primeiro
parmetro a ser passado a posio horizontal da janela a partir do lado
esquerdo da tela. O segundo parmetro dene a posio vertical a partir
da parte superior da tela.
A Figura 7.1 exibe um exemplo de cdigo de janela criada a partir da classe
JFrame. Note que nesse exemplo foi utilizada grande parte dos mtodos
citados acima.
JFrame
uma classe do pacote
Swing que fornece todas as
propriedades, mtodos e eventos
de que precisamos para construir
janelas padro Windows.
Frame
uma classe do pacote AWT
responsvel pela criao de
janelas, parecidas com as
encontradas no ambiente
Windows
(FUGIERI, 2006, p. 176).
Programao Orientada a Objetos e-Tec Brasil 84
Figura 7.1: Primeiro exemplo de janela Jframe
Fonte: Elaborada pelos autores
A classe PrimeiraJanela apresentada no exemplo 7.1 herda de JFrame. Assim,
ela tem todos os mtodos e atributos de JFrame.
No construtor da classe PrimeiraJanela temos chamadas a vrios dos mto-
dos da classe JFrame sendo chamados (this.<metodo>).
O mtodo getContentPane() retorna um objeto que representa a parte in-
terior da janela; esse objeto possui um mtodo que possibilita alterarmos a
cor de fundo (setBackground) desse objeto. Note, ainda, que conguramos
a cor de fundo da janela para azul utilizando a classe Color e seu atributo
esttico blue.
A Figura 7.2 exibe a janela gerada pela execuo do cdigo apresentado na
Figura 7.1.
e-Tec Brasil Aula 7 Interfaces grcas em Java Parte I 85
Figura 7.2: Janela gerada pelo exemplo da Figura 7.1
Fonte: Elaborada pelos autores
7.3 JLabel e ImageIcon
A classe JLabel utilizada para criar etiquetas (labels) de textos nas janelas
(FUGIERI, 2006, p. 178). Ela permite o controle de propriedades do texto
a ser utilizado, tais como: alinhamento, tipo de letra, tamanho, cor, etc. A
classe JLabel fornece vrios construtores dentre os quais destacamos:
JLabel(): construtor padro.
JLabel(String): recebe como parmetro uma String que ser o texto apre-
sentado pelo Label.
JLabel(String, int): alm do texto a ser apresentado, recebe como par-
metro um inteiro que representa o tipo de alinhamento a ser utilizado.
JLabel(String, Image): alm do texto a ser apresentado, recebe como pa-
rmetro um image que ser o cone a ser exibido.
JLabel(String, Image, int ): recebe como parmetros o texto a ser apresen-
tado, o cone a ser exibido e o tipo de alinhamento a ser utilizado.
Outros dois mtodos essenciais para o uso de JLabels so o mtodo getText()
que retorna o texto do Label e o setText(String) que especica (altera) o texto
a ser apresentado pelo Label.
A classe ImageIcon utilizada, entre outras possibilidades, para colocar um
cone no JLabel. A Figura 7.3 exibe o cdigo de uma janela que utiliza as
classes JLabel e ImageIcon.
Programao Orientada a Objetos e-Tec Brasil 86
Figura 7.3: Exemplo de utilizao de JLabel e ImageIcon
Fonte: Elaborada pelos autores
No exemplo da Figura 7.3 note que a classe UsaJLabel_ImageIcon herda da
classe Jframe; assim, conseguimos utilizar seus mtodos.
O mtodo setUndecorated da classe JFrame retira da janela a borda padro
Windows. A linha janela.getRootPane().setWindowDecorationStyle(JRootPane.
FRAME);, por sua vez, coloca na janela a borda padro Java.
Temos tambm a denio do layout da janela: this.getContentPane().
setLayout(new GridLayout(2, 1));. O layout Grid divide a tela em partes iguais
de linhas e colunas. No nosso exemplo, temos a tela divida em duas linhas
e uma coluna. A ordem de insero de objetos nesse layout da esquerda
para a direita e de cima para baixo. A insero feita com o mtodo add
(this.getContentPane().add(this.label1);). Nos aprofundaremos no estudo
dos layouts futuramente.
A Figura 7.4 exibe a janela gerada pelo cdigo exibido na Figura 7.3.
Figura 7.4: Janela gerada pelo cdigo da Figura 7.3
Fonte: Elaborada pelos autores
e-Tec Brasil Aula 7 Interfaces grcas em Java Parte I 87
7.4 JOptionPane
A classe JOptionPane utilizada para gerar caixas de dilogo (FUGIERI, 2006,
p. 207). Ela nos permite criar vrios tipos de caixas de dilogo, a saber:
MessageDialog, ConrmDialog, InputDialog e OptionDialog.
7.4.1 MessageDialog
Uma MessageDialog uma caixa de dilogo que apresenta uma mensagem.
Sintaxe para criao: JOptionPane.showMessageDialog (<componente>,
<mensagem>, <ttulo da mensagem>, <tipo da mensagem>)
Parmetros para criao:
<componente>: objeto continer que permite denir a posio da tela em
que a caixa de mensagem aparecer. Normalmente esse parmetro null.
<mensagem>: mensagem a ser exibida na caixa.
<ttulo da mensagem>: ser exibido na barra de ttulo da caixa de mensagem.
<tipo da mensagem>: determina o cone que aparecer junto mensagem.
Podendo ser:
Pergunta: QUESTION_MESSAGE
Informao: INFORMATION_MESSAGE
Alerta: WARNING_MESSAGE
Erro: ERROR_MESSAGE
Denido pelo Usurio: INFORMATION_MESSAGE ( e acrescenta-se o
argumento do tipo ImageIcon na chamada do showMessageDialog )
Vazio: PLAIN_MESSAGE

Exemplo de utilizao:
JOptionPane.showMessageDialog(null, s, Login conrmado, JOptionPane.
INFORMATION_MESSAGE);
7.4.2 ConrmDialog
Uma ConrmDialog uma caixa de dilogo que apresenta uma mensagem
e possibilita ao usurio responder uma pergunta.
Programao Orientada a Objetos e-Tec Brasil 88
Sintaxe para utilizao:
int resposta = JOptionPane.showConrmDialog (<componente>, <mensa-
gem>, <ttulo da mensagem>, <botes presentes>, <tipo da mensagem>
Parmetros para utilizao: os parmetros so os mesmos apresentados
no MessageDialog com acrscimo do parmetro que indica os botes a se-
rem apresentados:
< botes presentes>: determinam quais botes iro aparecer. Podendo ser:
YES_NO_OPTION ou 0: aparecem yes e no.
YES_NO_CANCEL ou 1: aparecem yes, no e cancel.
OK_CANCEL_OPTION ou 2: aparecem ok e cancel.
Retorno: O valor retornado pode ser:
YES_OPTION = 0
NO_OPTION = 1
CANCEL_OPTION = 2
Exemplo de utilizao:
JOptionPane.showConrmDialog(null, Conrma login ?, Caixa de conr-
mao, JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
7.4.3 InputDialog
Uma InputDialog uma caixa de dilogo que apresenta uma mensagem e
possibilita que o usurio digite um texto.
Sintaxe para utilizao:
String resposta = JOptionPane.showInputDialog(<componente>, <mensa-
gem>, <ttulo da mensagem>, < tipo da mensagem>)
e-Tec Brasil Aula 7 Interfaces grcas em Java Parte I 89
Exemplo de utilizao:
String s = JOptionPane.showInputDialog(null, Digite seu login, Login no
sistema, JOptionPane.INFORMATION_MESSAGE);
7.4.4 OptionDialog
Uma OptionDialog uma caixa de dilogo que possibilita a exibio de v-
rias opes para escolha do usurio. Ela apresenta vrios botes para o usu-
rio e retorna um nmero inteiro indicando em qual dos botes o usurio
clicou (o primeiro boto representado pelo nmero zero; o segundo, pelo
um e assim sucessivamente).
Sintaxe para utilizao:
int resposta = JOptionPane.showOptionDialog (<componente>,
<mensagem>,<ttulo da mensagem>,<botoes presentes>, <tipo da mensa-
gem>, <icone>, <array de objetos>, <seleo padrao>)
Parmetros para utilizao: os parmetros so os mesmos apresentados
nas anteriores com os seguintes acrscimos:
<array de objetos>: utilizado para exibir opes fora do padro YES_NO_
OPTION, YES_NO_CANCEL_OPTION ou OK_CANCEL_OPTION ( personalizar
botes de seleo ).
< seleo padro >: determina o boto padro selecionado.
Exemplo:
String[] nomes = { Joo, Maria, Pedro };
int resp = JOptionPane.showOptionDialog (null, Escolha um login padro,
Login no sistema , 0, JOptionPane.INFORMATION_MESSAGE, null, no-
mes, nomes[0]);
A Figura 7.5 exibe um cdigo que utiliza a classe JOptionPane para criar
vrias caixas de dilogo diferentes.
Programao Orientada a Objetos e-Tec Brasil 90
Figura 7.5: Exemplos de utilizao da classe JOptionPane
Fonte: Elaborada pelos autores
O exemplo da Figura 7.5 no tem uma funcionalidade especca. Seu objeti-
vo apenas ilustrar o uso de mtodos da classe JOptionPane.
7.5 Tratamento de eventos e JButton
Quando desenvolvemos aplicativos com interface grca precisamos progra-
mar as respostas que o sistema dar s interaes do usurio com a interface
grca. A essa programao do comportamento do sistema de acordo com
as aes do usurio d-se o nome de tratamento de eventos.
Quando o usurio clica em um boto, pressiona a tecla ENTER ou seleciona
algo na tela, so disparados eventos correspondentes ao do usurio e
cabe ao programador denir qual o procedimento a ser adotado na ocor-
rncia de tal evento. A interface ActionListener possibilita a identicao
dos eventos, permitindo assim que seja programado o comportamento do
sistema ao evento.
Para ilustrar a utilizao da interface ActionListener para o tratamento de
eventos, vamos desenvolver um exemplo (apresentado na Figura 7.6) que
exibir uma janela com um boto e, ao clicar no boto, ser exibida uma
caixa de dilogo. Para criar um boto na janela precisaremos utilizar a classe
JButton. Dentre os mtodos mais utilizados da classe JButton esto:
JButton(): construtor que cria um boto sem texto.
JButton( String ): construtor que cria um boto exibindo o texto passado
como parmetro.
JButton(String, Image): construtor que cria um boto com texto e imagem.
e-Tec Brasil Aula 7 Interfaces grcas em Java Parte I 91
getLabel(): obtm o texto apresentado pelo boto.
setLabel(String): dene o texto a ser apresentado pelo boto.
setEnabled(boolean): dene se o boto est habilitado (true) ou desabi-
litado (false).
setHorizontalTextPosition(): dene o alinhamento horizontal, que pode
ser: LEFT (esquerda) ou RIGHT (direita ).
setVerticalTextPosition(): dene o alinhamento vertical que pode ser:
TOP (por cima) ou BOTTOM (por baixo).
setMnemonic(int): dene o atalho (combinao de teclas) para acionar o
boto (equivalente ao clique sobre o boto).
setToolTipText(String): possibilita colocar uma mensagem de ajuda no boto.
No exemplo da Figura 7.6 temos o uso do layout Flow (FlowLayout). Esse
padro de layout preenche as linhas da janela e, quando no possvel mais
inserir componentes numa linha, avana para a linha seguinte. Os layouts
sero objetos de estudo da prxima aula.
Programao Orientada a Objetos e-Tec Brasil 92
Figura 7.6: Exemplo de tratamento de evento e de utilizao de JButton
Fonte: Elaborada pelos autores
Note que no exemplo da Figura 7.6, nossa janela, alm de herdar de JFrame,
implementa a interface ActionListener. Sempre que quisermos tratar eventos
como cliques em botes de nossas janelas, elas devero implementar
tal interface e, por consequncia, teremos de implementar o mtodo
actionPerformed (ActionEvent e) que denir o comportamento do programa
sempre que um evento for detectado. Note o mtodo actionPerformed do
exemplo da Figura 7.6: sempre que um evento for disparado, vericado se
ele foi disparado pelo boto (if e.getSource() == b1) e, em caso positivo, uma
caixa de dilogo exibida.
importante ressaltar que para que o mtodo actionPerformed seja
chamado na ocorrncia de um evento em um objeto, esse objeto deve
avisar para a janela que ele deseja ser ouvido. Isso feito pelo mtodo
addActionListener. No exemplo da Figura 7.6 os eventos do boto s sero
ouvidos devido linha b1.addActionListener(this).
Assim como tratamos eventos de um boto, podemos tratar eventos de outros
componentes de interface, bastando para isso avisar que eles devem ser
ouvidos e programar o mtodo actionPerformed para responder ao evento.
7.6 JTextField e JPasswordField
A classe JTextField utilizada para criar caixas de texto. Normalmente, utili-
za-se a classe JLabel para apresentar um texto xo e a classe JTextField para
campos de texto a serem digitados pelos usurios.
e-Tec Brasil Aula 7 Interfaces grcas em Java Parte I 93
Dentre os mtodos utilizados para manipular um JtextField, destacam-se:
JTextField(): construtor padro utilizado para criar uma caixa de texto vazia.
JTextField(String): construtor utilizado para criar uma caixa de texto com
a String fornecida.
JTextField(int): construtor utilizado para criar uma caixa de texto com a
quantidade de colunas especicada.
JTextField(String, int): construtor utilizado para criar uma caixa de texto
com uma determinada String e com a quantidade de colunas especicada.
getText(): obtm o texto do objeto.
setText(String): atribui uma String ao objeto.
getSelectedText(): obtm o texto selecionado no objeto.
isEditable(): verica se o componente editvel ou no e retornando um
boolean (true ou false) .
setEditable( boolean ): especica se o componente editvel ou no.
H uma classe especial para criar caixas de texto prprias para campos de se-
nha: JpasswordField (FUGIERI, 2006, p. 190). O funcionamento dessa classe
bastante semelhante ao de JTextField. A diferena bsica que os caracteres
digitados so substitudos por outros para ocultar a senha. Assim, os principais
mtodos de JPasswordField so idnticos aos de JTextField (exceto os construto-
res, obviamente) merecendo destaque adicionam apenas os seguintes mtodos:
setEchoChar(char): determina o caracter que ser utilizado para esconder
a senha.
getPassword(): gera um vetor de char com a senha digitada.
getText(): mtodo obsoleto que retorna a String do objeto.
Programao Orientada a Objetos e-Tec Brasil 94
A Figuras 7.7 e 7.8 exibem o cdigo de uma janela que utiliza as classes
JTextField e JpasswordField (o cdigo de uma janela est dividido nas duas -
guras). Note que nesse exemplo foi criado um mtodo privado montarLayout
que responsvel por montar o layout da janela, ou seja, por inserir e orga-
nizar os componentes na janela. Assim como no exemplo da Figura 7.4 foi
utilizado o layout GridLayout.
Figura 7.7: Primeira parte do exemplo de utilizao de JTextField e JpasswordField
Fonte: Elaborada pelos autores
Figura 7.8: Segunda parte do exemplo de utilizao de JTextField e JpasswordField
Fonte: Elaborada pelos autores
e-Tec Brasil Aula 7 Interfaces grcas em Java Parte I 95
No mtodo actionPerformed, que como vimos anteriormente dene o trata-
mento de eventos para a janela, temos a criao de uma caixa de mensagem
por meio da classe JOptionPane e seu mtodo showMessageDialog (veja a
caixa de mensagem criada na Figura 7.10). Lembre-se que para tratar o even-
to de clique no boto, no podemos esquecer de fazer a janela ouvir esse
evento. Para isso foi utilizado o comando this.b1.addActionListener(this);.
Note que no exemplo das Figuras 7.7 e 7.8 zemos uso tambm de um com-
ponente grco que ainda no conhecamos: o JPanel. Utilizando JPanel po-
demos dividir uma janela em painis independentes de forma que podemos
aplicar layouts diferentes a cada painel e inserir nos painis outros compo-
nentes de interface. Porm, no caso especco desse exemplo utilizamos um
JPanel apenas para ocupar o espao abaixo dos rtulos de texto de forma que
o boto casse alinhado abaixo dos campo para preenchimento de senha. A
Figura 7.9 exibe a janela criada.
A Figura 7.9 exibe a janela criada pela execuo do cdigo apresentado nas
Figuras 7.7 e 7.8.
Figura 7.9: Janela gerada pela execuo do cdigo apresentado nas Figuras 7.7 e 7.8
Fonte: Elaborada pelos autores
A Figura 7.10, por sua vez, exibe a caixa de dilogo criada pelo evento de
clique no boto conforme dene o mtodo actionPerformed.
Figura 7.10: Caixa de mensagem criada ao clicar no boto
Fonte: Elaborada pelos autores
Para facilitar o entendimento do
uso de JPanel nesse exemplo,
refaa o exemplo das Figuras
7.7 e 7.8 retirando do cdigo
a utilizao do JPanel e veja o
resultado. Note que o boto ser
deslocado para a esquerda.
Programao Orientada a Objetos e-Tec Brasil 96
Resumo
Nesta aula comeamos a criar interfaces grcas em Java. Aprendemos que
a principal biblioteca de Java para trabalhar interfaces grcas a biblioteca
Swing. Vimos que a classe JFrame responsvel por criar uma janela e apren-
demos diversas outras classes que representam vrios tipos de componentes
grcos. Por m, vimos como tratar eventos ocorridos nas interfaces. Com
esses conhecimentos j somos capazes de criar nossos primeiros programas
com interfaces grcas em Java.
Atividades de aprendizagem
1. Faa um programa com interface grca que permita criar contas do tipo
ContaEspecial (utilize as classes criadas em exerccios anteriores). Sua ja-
nela deve conter campos para que o usurio informe o nome do titular,
o saldo da conta e o limite da conta e um boto que o usurio dever
clicar para criar a conta. Assim, o usurio dever preencher os campos
e, quando clicar no boto o programa, deve instanciar uma nova conta
com os dados informados e o nmero da conta ser sequencial atribudo
pelo prprio programa. Ento o programa deve inserir a conta criada em
uma lista que conter todas as contas j criadas e deve exibir uma janela
de mensagem (JOptionPane) informando o nmero da conta criada e o
nome do seu titular.
2. Acrescente janela criada no exerccio anterior um boto que, ao ser
clicado, exiba os nmeros e os nomes dos titulares de todas as contas
criadas em uma janela de mensagem (JOptionPane).
3. No mesmo projeto do exerccio anterior, crie uma nova janela que con-
tenha um campo no qual o usurio digitar um nmero de uma conta e
um boto para consultar o saldo da conta. Na janela criada no exerccio
anterior, crie um boto que, ao ser clicado, instanciar a nova janela e a
tornar visvel. O construtor da nova janela receber como parmetro um
ArrayList. Assim, quando a nova janela for instanciada, j receber como
parmetro o ArrayList de contas que existe na antiga. Ento o usurio
dever preencher na nova janela o nmero da conta e clicar no boto
de consultar saldo. Nesse momento o sistema deve procurar pela conta
desejada na lista. Se encontrar, deve exibir o saldo da conta em uma
janela de mensagem (JOptionPane). Se no encontrar, deve exibir uma
mensagem de erro informando que a conta no existe.
A classe JTextField no foi
projetada para permitir a
digitao de textos em mltiplas
linhas. Para isso Java tem
a classe JTextArea que tem
funcionamento muito parecido
com a classe JTextField.
Acesse a documentao
ocial da Oracle sobre a classe
JTextArea em http://download.
oracle.com/javase/6/docs/api/
javax/swing/JTextArea.html
e, utilizando as informaes
l apresentadas, acrescente
ao exemplo da Figura 7.7 um
JTextArea que permita ao usurio
digitar uma ou mais frases de
lembrete sobre sua senha.
Todas as janelas de exemplo
que zemos tm um mtodo
main, ou seja, so executveis.
Porm, em programas comuns
temos vrias janelas que no so
executveis, e sim so exibidas a
partir de outras. Para exibir uma
janela a partir de um clique em
um boto de uma outra janela,
basta programar esse evento de
forma que a janela a ser exibida
seja instanciada e se torne
visvel, como fazemos no mtodo
main do exemplo apresentado
na Figura 7.8.
e-Tec Brasil Aula 7 Interfaces grcas em Java Parte I 97
e-Tec Brasil
Aula 8 Interfaces grficas
em Java parte II
Objetivos
Aprender o conceito de padres de layout.
Conhecer alguns padres de layout de Java.
Conhecer mais classes para construo de interfaces grcas em
Java: JComboBox, JCheckBox, JRadioButton, ButtonGroup, JMe-
nuBar, JMenu e JmenuItem.
Desenvolver novos exemplos de tratamento de eventos sobre in-
terface grca em Java.
8.1 Padres de layout
Os padres de layout denem como os objetos sero dispostos na janela
(FUGIERI, 2006, p. 230). possvel desenvolver uma janela sem a utilizao
de um padro de layout, mas, nesse caso, necessrio, para cada objeto,
denir manualmente sua posio na janela, o que gera mais exibilidade,
mas tambm mais trabalho para a denio do layout. O uso de padres de
layout deixa nossas janelas mais genricas e adaptveis a modicaes.
Nesta aula aprenderemos como utilizar dois padres de layout: FlowLayout
e GridLayout.
8.1.1 FlowLayout
O padro de layout FlowLayout insere os objetos, um aps o outro, linha a
linha. Assim, quando no mais possvel inserir objetos numa linha, criada
uma nova linha e novos objetos podem ser inseridos. Esse padro de layout
assemelha-se a um editor de textos, pois quando no existe mais espao
numa dada linha criada uma nova linha para insero de mais contedos.
A Figura 8.1 apresenta um exemplo de uso do padro FlowLayout.

e-Tec Brasil Aula 8 Interfaces grcas em Java parte II 99
Figura 8.1: Exemplo de uso de FlowLayout
Fonte: Elaborada pelos autores
Note no exemplo que o construtor do FlowLayout recebe trs parmetros:
o alinhamento desejado (no caso utilizamos alinhamento centralizado), o
espaamento horizontal e o espaamento vertical. Para aplicar o layout
janela, utilizamos o mtodo setLayout.
A Figura 8.2 exibe o resultado da execuo do cdigo apresentado na Figura 8.1.
Figura 8.2: Janela utilizando FlowLayout
Fonte: Elaborada pelos autores
Programao Orientada a Objetos e-Tec Brasil 100
8.1.2 GridLayout
O padro de layout GridLayout organiza os objetos como uma tabela, com
clulas de objetos de mesmo tamanho. um layout exvel, pois uma vez
redimensionada a janela ele ajusta automaticamente os objetos de forma
que o padro se mantenha, ou seja, que cada objeto de cada clula seja
apresentado com o mesmo tamanho.
A Figura 8.3 apresenta um exemplo de uso do padro GridLayout.
Figura 8.3: Exemplo de uso de GridLayout
Fonte: Elaborada pelos autores
Note no exemplo que o construtor do GridLayout recebe quatro parmetros: o
nmero de linhas em que a janela ser dividida (no caso 2), o nmero de colunas
em que a janela ser dividida (no caso 3), o espaamento horizontal e o espa-
amento vertical. Para aplicar o layout janela, utilizamos o mtodo setLayout.
A Figura 8.4 exibe o resultado da execuo do cdigo apresentado na Figura 8.3.
e-Tec Brasil Aula 8 Interfaces grcas em Java parte II 101
Figura 8.4: Janela utilizando GridLayout
Fonte: Elaborada pelos autores
8.2 JComboBox e tratamento de eventos
A classe JComboBox utilizada para criar caixas que permitem que o usurio
selecione apenas um item da sua lista de opes.
Para criar um objeto do tipo JComboBox, necessrio passar um vetor de
Strings que indicar as opes de seleo a serem exibidas na caixa.
Exemplo de Criao:
String[] animais = { Leo, Elefante, Cobra, Jabuti };
JComboBox combo = new JComboBox(animais);
Dentre os mtodos mais utilizados da classe JComboBox, destacam-se:
getSelectedIndex: retorna o ndice do item selecionado no combobox.
importante notar que o ndice do primeiro elemento 0.
removeItemAt: dado um ndice, elimina do combobox o item que est
nessa posio.
removeAllItens: remove todos os itens do combobox.
addItem: dado um novo item, insere-o no combobox.
getSelectedItem: retorna o item selecionado.
getItemCount: retorna a quantidade de itens do combobox.
A seguir apresentado um exemplo em que utilizamos um combobox para
exibir uma listagem de animais. A janela construda no exemplo permite
incluir novas opes no combobox e exibe um texto informando a opo se-
Programao Orientada a Objetos e-Tec Brasil 102
lecionada. Para isso, foi preciso tratar o evento de clique em um boto (para
adicionar item) e o evento de mudana de item selecionado.
Como o exemplo cou muito extenso, ele foi dividido em trs Figuras (8.5,
8.6 e 8.7). Mas note que as trs guras juntas apresentam o cdigo de
uma nica classe.
Figura 8.5: Exemplo de utilizao de JComboBox parte I
Fonte: Elaborada pelos autores
Figura 8.6: Exemplo de utilizao de JComboBox parte II
Fonte: Elaborada pelos autores
e-Tec Brasil Aula 8 Interfaces grcas em Java parte II 103
Figura 8.7: Exemplo de utilizao de <IT>JComboBox<IT> parte III
Fonte: Elaborada pelos autores
No exemplo apresentado temos um campo de texto que informa qual o
item atualmente selecionado no combobox. Assim, sempre que o usurio
alterar o item selecionado, temos que identicar a ocorrncia desse evento e
atualizar o texto exibido. Para que o evento de mudana de item selecionado
seja acionado, necessrio adicionar o combobox ao controlador de eventos
de mudana de item (ItemListener) do prprio combobox. Para isso, utili-
zamos o comando: this.combo.addItemListener(this);. Adicionalmente, para
que a janela seja capaz de ouvir, ou melhor, de tratar o evento, ela dever
implementar a interface ItemListener e, consequentemente, implementar o
mtodo itemStateChanged que denir o comportamento da janela sempre
que houver mudana de item selecionado em algum dos combobox adicio-
nados na janela. O mtodo itemStateChanged do nosso exemplo apresen-
tado na Figura 8.6.
No exemplo apresentado, se houvesse mais combos na janela seria necess-
rio determinar o combo selecionado utilizando e.getSource() == this.combo
(como foi feito no mtodo actionPerformed do mesmo exemplo).
A Figura 8.8 exibe a janela gerada pela execuo do exemplo apresentado
pelas trs guras anteriores.
Programao Orientada a Objetos e-Tec Brasil 104
Figura 8.8: Janela gerada pela execuo do exemplo anterior
Fonte: Elaborada pelos autores
8.3 JCheckBox
As caixas de opo so criadas a partir da classe JCheckBox e permitem re-
presentar uma opo que est ativada (true) ou desativada (false) (FUGIERI,
2006, p. 201).
As Figuras 8.9 e 8.10 apresentam um exemplo que utiliza JCheckBox. Nesse
exemplo h um texto e um checkbox. Se o checkbox estiver selecionado, o
texto ser apresentado em negrito e, caso contrrio, ser apresentado em
fonte plana. Para vericar se um objeto JCheckBox est selecionado, utiliza-
mos o mtodo isSelected().
Como o exemplo cou muito extenso, ele foi dividido em duas Figuras
(8.9 e 8.10). Mas, note que as duas guras juntas apresentam o cdigo de
uma nica classe.
Figura 8.9: Exemplo de utilizao de JCheckBox parte I
Fonte: Elaborada pelos autores
e-Tec Brasil Aula 8 Interfaces grcas em Java parte II 105
Figura 8.10: Exemplo de utilizao de JCheckBox parte II
Fonte: Elaborada pelos autores
Note no exemplo que, assim como acontece com JComboBox, os eventos de
alterao de estados da classe JCheckBox acionam o mtodo ItemStateChanged
da interface ItemListener (veja o mtodo ItemStateChanged do exemplo na Figu-
ra 8.10).
Note tambm que necessrio acrescentar objetos JCheckBox ao tratador
de eventos para que o mtodo itemStateChanged reconhea os eventos
ocorridos com os checkbox. No exemplo isso feito pelo comando: this.
c1.addItemListener(this);.
A Figura 8.11 exibe a janela gerada pela execuo do exemplo apresentado
pelas duas guras anteriores.
Figura 8.11: Janela gerada pela execuo do exemplo da Figura 8.9 e 8.10
Fonte: Elaborada pelos autores
8.4 JRadioButton e ButtonGroup
A classe JRadioButton utilizada para criar botes de rdio. Esses botes
so gracamente muito semelhantes aos checkbox. A diferena entre radio-
Programao Orientada a Objetos e-Tec Brasil 106
button e checkbox est no fato que os primeiros so usados em conjuntos
de forma que apenas um elemento do conjunto pode estar selecionado em
um dado momento. Mas, para haver esse controle, os JRadioButton devem
estar em um grupo representado pela classe ButtonGroup.
Um objeto da classe ButtonGroup no visual, ou seja, no tem impacto na
interface grca, mas sem ele perdemos a garantia de que apenas um boto
de rdio est selecionado.
Dentre os mtodos mais utilizados da classe JRadioButton, destacamos:
setMnemonic: permite que uma combinao de teclas tenha o mesmo
efeito do clique sobre um objeto JRadioButton.
isSelected: determina se um boto de rdio est selecionado.
setSelected: recebe um parmetro booleano (true ou false) que faz com
que o boto de rdio seja selecionado ou no.
As Figuras 8.12, 8.13 e 8.14 exibem um exemplo de utilizao de JRadioButton.
Como o exemplo cou muito extenso, ele foi dividido em trs Figuras (8.12,
8.13 e 8.14). Mas, note que as trs guras juntas apresentam o cdigo de
uma nica classe.
Figura 8.12: Exemplo de utilizao de JRadioButton parte I
Fonte: Elaborada pelos autores
e-Tec Brasil Aula 8 Interfaces grcas em Java parte II 107
Figura 8.13: Exemplo de utilizao de JRadioButton parte II
Fonte: Elaborada pelos autores
Figura 8.14: Exemplo de utilizao de JRadioButton parte III
Fonte: Elaborada pelos autores
Programao Orientada a Objetos e-Tec Brasil 108
Note que o tratamento dos eventos de mudana de estados dos radiobuttons
tambm feito atravs do mtodo itemStateChanged. Note tambm que, para
que o mtodo itemStateChanged seja disparado quando ocorre um evento em
um radiobutton necessrio acrescentar o objeto JRadioButton ao tratador de
eventos (this.radio1.addItemListener(this)).
No exemplo apresentado so utilizados dois campos de texto nos quais o usu-
rio deve informar dois nmeros, e os radiobuttons so utilizados para per-
mitir que se selecione a operao aritmtica a ser realizada com os nmeros
digitados. Assim, quando o usurio seleciona a operao, o resultado dela
apresentado em um terceiro campo de texto posicionado na parte inferior da
janela. A Figura 8.15 exibe a janela gerada pela execuo desse exemplo.
Figura 8.15: Janela gerada pela execuo do exemplo de utilizao de rabiobutton
Fonte: Elaborada pelos autores
8.5 JMenuBar, JMenu e JMenuItem
Agora aprenderemos a criar barras de menu em nossas janelas (FUGIERI, 2006,
p. 222). Para que nossa janela conte com uma barra de menu, necessrio, ini-
cialmente, instanciar uma barra de menus, ou seja, uma JMenuBar e associ-la
janela. Para isso, utilizamos comandos como os apresentados abaixo:
JMenuBar menuBar = new JMenuBar();
this.setJMenuBar(menuBar);
Para acrescentar um menus na barra de Menu, precisamos instanciar um
objeto da classe JMenu e depois adicion-lo barra de menu. As linhas de
cdigo abaixo apresentam um exemplo de como fazer isso:
JMenu menu1 = new JMenu(<nome do menu>);
menuBar.add(menu1)
Por m, para acrescentar itens a um menu, precisamos instanciar objetos da clas-
se JMenuItem e adicion-los ao menu, como nas linhas apresentadas a seguir:
comum os JRadioButton serem
colocados em painis (JPanel)
nas janelas como forma de
destacar seu agrupamento. Os
JPanel podem assumir vrios
tipos de layout, assim como um
JFrame qualquer. Pode-se colocar
quantos JPanel forem desejados
em uma JFrame.
e-Tec Brasil Aula 8 Interfaces grcas em Java parte II 109
JMenuItem menuItem1 = new JMenuItem(< nome do item do menu>)
menu1.add( menuItem1 )
As Figuras 8.16, 8.17 e 8.18 exibem um exemplo de criao de janela com
barra de menu.
Como o exemplo cou muito extenso, ele foi dividido em trs Figuras (8.16,
8.17 e 8.18). Mas, note que as trs guras juntas apresentam o cdigo de
uma nica classe.
Figura 8.16: Exemplo de criao de janela com barra de menu parte I
Fonte: Elaborada pelos autores
Programao Orientada a Objetos e-Tec Brasil 110
Figura 8.17: Exemplo de criao de janela com barra de menu parte II
Fonte: Elaborada pelos autores
Figura 8.18: Exemplo de criao de janela com barra de menu parte III
Fonte: Elaborada pelos autores
e-Tec Brasil Aula 8 Interfaces grcas em Java parte II 111
No exemplo apresentado, exibido um texto em uma caixa de acordo com o
menu selecionado na janela. Note que, para isso, mais uma vez implementa-
mos o mtodo actionPerformed da interface ActionListener (Figura 8.16), a
exemplo do que zemos para tratar o evento de clique em boto. Note tam-
bm que foi necessrio adicionar os menus aos actionListeners (Figura 8.17).
Note que apenas os JMenuItem respondem interface ActionListener. Os
JMenu e os JMenuBar no tm como acionar o mtodo actionPerformed.
Na Figura 8.19 exibida a janela gerada pela execuo desse exemplo.
Figura 8.19: Janela gerada pela execuo do exemplo de criao
de janela com barra de menu
Fonte: Elaborada pelos autores
Programao Orientada a Objetos e-Tec Brasil 112
Resumo
Nesta aula aprendemos a utilizar vrias classes Swing que criam diversos com-
ponentes de interface grca. Aprendemos o conceito de padres de layout e
dois dos padres mais utilizados em Java e vimos novos exemplos de tratamen-
to de eventos. Com o que aprendemos nas duas ltimas aulas, somos capazes
de criar programas com interfaces grcas em Java; porm, este assunto no
foi esgotado nessas aulas. A inteno dessas aulas dar uma boa introduo
ao assunto, de forma que voc tenha base para se aprofundar futuramente.
Atividades de aprendizagem
1. Faa um programa com interface grca que permita ao usurio criar con-
tas (use o exerccio 1 da aula 7 como base). Assim como no exerccio 1 da
aula 7, as contas criadas devem ser armazenadas em um ArrayList. Neste
exerccio, porm, o usurio deve selecionar o tipo de conta que deseja criar:
ContaPoupanca ou ContaEspecial (utilizar as classes criadas no exerccio 1
da aula 4). Assim, deve ser utilizado um RadioGroup com RadioButtons para
indicar o tipo de conta a ser criada. Note que ContaPoupanca no tem o
atributo limite. Se for selecionado o tipo ContaPoupanca, o campo limite
deve car desabilitado na tela (dica: voc ter de programar os eventos dos
RadioButtons).
2. Faa uma janela para consultar saldo, idntica a que foi feita no exerccio
3 da aula 7. Crie um menu na janela do exerccio 1 da aula 8 e programe
o evento de clique nesse menu para exibir a janela de saldo.
e-Tec Brasil Aula 8 Interfaces grcas em Java parte II 113
e-Tec Brasil
Aula 9 Integrao com Banco
de Dados parte I
Objetivos
Compreender o conceito de programao cliente-servidor.
Aprender a acessar bancos de dados em Java utilizando drivers
nativos e ODBC.
Aprender a construir aplicaes em Java capazes de consultar da-
dos de bancos de dados.
9.1 Programao cliente-servidor
Originalmente, o termo cliente-servidor era usado para descrever softwares
que se utilizavam de mais de um hardware em sua execuo. Atualmente,
porm, comum utilizar este termo para caracterizar situaes nas quais
diferentes componentes de software se comunicam uns com os outros,
mesmo que rodando em uma mesma mquina. Nesse contexto podemos
ter arquiteturas cliente-servidor nas quais os componentes de software exe-
cutam em mquinas espalhadas ao redor do mundo e se comunicam por
uma arquitetura de rede ou, em outro extremo, podemos ter arquiteturas
cliente-servidor nas quais todos os componentes de software executam em
uma mesma mquina. Vale ressaltar, que, em ambas as situaes, cada com-
ponente de software executa uma funo independente e se comunica com
os demais componentes.
Um uso comum para arquiteturas cliente-servidor manter no lado cliente
o gerenciamento das interfaces grcas com o usurio e utilizar o servidor
para manter a integridade dos dados do negcio havendo diversas variaes
para essa abordagem.
Uma classicao muito comumente utilizada para designar a losoa uti-
lizada em uma arquitetura cliente-servidor dene dois tipos de arquitetura:
e-Tec Brasil Aula 9 Integrao com Banco de Dados parte I 115
Cliente pesado: quando a interface com o usurio e toda a lgica de
negcio esto no lado cliente, cando o servidor dedicado apenas ao
armazenamento, acesso e distribuio de dados.
Servidor pesado: quando o cliente responsvel apenas pela interface
com o usurio, cando sob responsabilidade do servidor a maior parte da
lgica de negcio e o gerenciamento dos dados. Para implementar uma
arquitetura desse tipo, necessrio que se faa uma separao entre a
poro de cdigo que trata da interface com o usurio e a poro que
implementa as regras de negcio.
A forma de programao que utilizaremos nesta disciplina pode ser enquadrada
como cliente pesado pois desenvolveremos programas que caro respon-
sveis pela interface com o usurio e toda a lgica de negcio (cliente) e que
acessaro os dados armazenados em servidores de bancos de dados (servidor).
De fato, nos exemplos e exerccios que faremos nesta aula, nossos progra-
mas sero executados na mesma mquina que o servidor de banco de da-
dos. Porm, veremos que para colocar o servidor de banco de dados para
funcionar em uma mquina separada, precisaramos apenas de uma estru-
tura de rede entre as duas mquinas e seria necessrio alterar uma linha de
cdigo que dene o endereo do servidor.
9.2 Acesso a Bancos de Dados em Java
A linguagem Java possui um conjunto de classes para acesso e manipulao
de dados em banco de dados. Essas classes cam no pacote JDBC.
O primeiro passo para acessar um banco pela aplicao estabelecer a co-
nexo. Para isso, necessrio utilizar um driver que estabelecer a conexo
com o banco. Em ambientes Windows temos basicamente dois tipos de
drivers para conexo com banco de dados:
Drivers ODBC: o Windows possui uma fonte de dados, de forma que,
uma vez existente um driver ODBC para um dado banco, ca sob res-
ponsabilidade do Windows a comunicao entre o software e o banco.
Drivers nativos: so implementaes de um driver diretamente para
uma dada linguagem, no nosso caso, Java.
Programao Orientada a Objetos e-Tec Brasil 116
O Quadro 9.1 exibe um comparativo entre os dois tipos de drivers para co-
nexo com banco de dados em Java.
Quadro 9.1: Drivers nativos x drivers ODBC
Drivers nativos Drivers ODBC
Normalmente, so mais rpidos, pois so otimizados para uma dada
plataforma.
Facilitam a troca de banco em ambien-
te Windows (MySQL para Sybase por
exemplo), pois basta trocar a fonte de
dados no Windows que o programa
atuar sobre o novo banco desejado.
Um programa feito em Java utilizando um driver nativo migrado para ou-
tro SO (Windows para Linux, por exemplo) apenas recompilando os cdigos
fonte existentes (obviamente esse outro SO dever possuir a JVM e o driver
nativo para o banco desejado).
Se for necessrio migrar para outro
sistema operacional que no seja Win-
dows, obviamente, no ser possvel
continuar utilizando o ODBC.
Fonte: Elaborado pelos autores
9.3 Fontes de dados ODBC
Se optarmos por utilizar um banco de dados com um driver ODBC, precisaremos,
inicialmente, congurar a fonte de dados ODBC, de forma que, seja criado um
Data Source e que por este possa ser feita a conexo em nossa aplicao.
Para criarmos o Data Source de um banco, no Windows XP, por exemplo,
precisamos ir em Painel de Controle->Ferramentas Administrativas->Fontes
de Dados (ODBC) (Figura 9.1).
Figura 9.1: Fonte de dados ODBC
Fonte: Windows XP Professional
Na janela apresentada, clicando em Adicionar, temos a janela apresentada
pela Figura 9.2, na qual devemos selecionar o driver de acordo com o servi-
dor de banco de dados a ser utilizado.
e-Tec Brasil Aula 9 Integrao com Banco de Dados parte I 117
Figura 9.2: Adicionando fonte de dados
Fonte: Windows XP Professional
Utilizaremos nesta disciplina o sistema gerenciador de banco de dados
(SGBD) MySQL. Escolhemos esse SGBD por ser gratuito e pelo fato de ter
sido utilizado na disciplina Banco de Dados deste curso. Assim, necessrio
que a mquina a ser utilizada para implementar os exemplos e exerccios
desta aula tenha o MySQL instalado e congurado.
Como vamos incluir uma fonte de dados MySQL ODBC 5.1 Driver, devemos
selecionar essa opo e clicar em Concluir. Ento ser exibida a janela apre-
sentada pela Figura 9.3.
Figura 9.3: Congurando um DataSource MySQL
Fonte: MySQL Conector/ODBC para Windows XP
Na Figura 9.3 temos a congurao da Fonte de Dados ODBC. Para nalizar
a congurao, devemos denir:
Data Source: nome que identicar o banco em nossos programas Java
(ou em outra linguagem que faa uso dessa tecnologia).
Description: apenas uma descrio acerca da fonte de dados congurada.
Programao Orientada a Objetos e-Tec Brasil 118
Server: IP da mquina onde est o banco que se deseja conectar. Caso
o servidor de banco de dados seja a mesma mquina em que a aplica-
o rodar, podemos preencher esse campo com localhost ou com o IP
127.0.0.1 ou ainda com o endereo IP da mquina.
Port: porta por onde ser feita a comunicao (a porta utilizada pelo
MySQL por padro a 3306).
User: nome do usurio que ir conectar ao banco de dados. Note que
no se trata do usurio do sistema operacional e sim do usurio do banco
de dados (usurio que voc utilizava para acessar o MySQL na disciplina
Banco de Dados).
Password: senha do usurio que ir conectar ao banco de dados.
Database: iro aparecer no combobox os bancos de dados existentes no servi-
dor informado, de forma que possa ser escolhido o banco de dados desejado.
Agora basta clicar em Ok que o Data Source ser criado.
9.4 Conectando com o Banco de Dados
Como vimos, aplicativos Java podem se conectar com um banco de dados
utilizando driversnativos ou por fontes de dados ODBC (FUGIERI, 2006, p.2
97). Em ambos os casos algumas informaes so necessrias para o estabe-
lecimento da conexo:
O nome do usurio do banco de dados e sua senha.
O driver utilizado nativo ou ODBC?
Caso seja nativo:
IP da mquina onde est o banco que se deseja conectar.
A porta a ser utilizada pela conexo.
O nome do banco de dados.
e-Tec Brasil Aula 9 Integrao com Banco de Dados parte I 119
Caso seja ODBC:
Data Source do banco: identicao do banco no Windows (fonte de
dados ODBC).
Como primeiro exemplo, a Figura 9.4 exibe um cdigo que estabelece uma
conexo com um banco de dados utilizando um driver ODBC.
Figura 9.4: Conexo com banco de dados via ODBC
Fonte: Elaborada pelos autores
Avaliemos alguns trechos principais desse cdigo.
Figura 9.5: Denio do Data Source a ser utilizado
Fonte: Elaborada pelos autores
Como exibe a Figura 9.5, foi denida uma String com nome url que faz refe-
rncia ao nome do Data Source (fonte de dados ODBC): Banco_LP.
J a Figura 9.6 exibe o trecho de cdigo que utiliza o mtodo Class.forName
para vericar se o driver ODBC existe na mquina (nas mquinas com Win-
dows praticamente sempre haver). Caso no exista o driver, ser disparada
a exceo ClassNotFoundException.
Figura 9.6: Vericao da existncia do driver ODBC
Fonte: Elaborada pelos autores
Programao Orientada a Objetos e-Tec Brasil 120
No cdigo exibido pela Figura 9.7 feita a conexo com o banco, utilizando
para isso o mtodo DriverManager.getConnection passando como parme-
tros a url contendo o nome do data source, o nome do usurio a ser utiliza-
do para acessar o banco e a senha desse usurio.
Figura 9.7: Estabelecimento da conexo com o banco
Fonte: Elaborada pelos autores
Finalizando nossa anlise sobre o cdigo da Figura 9.4, vemos que a ten-
tativa de conexo est envolta em um bloco try...catch. Assim, em caso de
erro na conexo (data source inexistente, usurio ou senha invlidos, entre
outros) ser disparada uma exceo do tipo SQLException. Caso no ocorra
erro, exibida uma mensagem e a conexo fechada utilizando o mtodo
close: minhaConexao.close();
Vamos agora exemplicar como fazer uma conexo utilizando um driver nativo.
Para utilizar um driver nativo precisamos acrescent-lo ao projeto como uma
biblioteca, uma vez que, ele foi compilado separadamente. Para fazer isso,
no NetBeans, devemos clicar no projeto com o boto direito do mouse, es-
colher a opo Propriedades e nela escolher a opo Bibliotecas. Ento o
arquivo do driver deve ser escolhido e adicionado ao projeto. A Figura 9.8
ilustra essa funcionalidade.
Figura 9.8: Acrescentando uma biblioteca de driver nativo ao projeto
Fonte: NetBeans IDE 7.0.1
Uma vez o driver nativo adicionado ao projeto, podemos utiliz-lo para criar
nossa conexo. O programa exibido pela Figura 9.9 ilustra a conexo com
um banco de dados nativo.
e-Tec Brasil Aula 9 Integrao com Banco de Dados parte I 121
Figura 9.9: Criando uma conexo com banco de dados via driver nativo
Fonte: Elaborada pelos autores
Note que o cdigo muito semelhante ao que utilizamos para conectar a
um banco de dados utilizando um driver ODBC.
Na url, onde havamos informado o nome do Data Source, agora tivemos
que informar o nome do servidor, a porta a ser utilizada e o nome do banco.
J a classe buscada pelo Class.forName agora a do driver MySQL nativo. O
restante do cdigo continua a mesma coisa.
9.5 Consultando dados no banco
Para uma aplicao Java buscar dados num banco de dados, precisaremos
de uma sequncia de aes:
conectar com o banco;
escrever a consulta que desejamos que seja feita no banco;
submeter essa consulta;
ler os dados do resultset (resultado da consulta).
A consulta deve ser escrita na linguagem SQL, que a linguagem padro
utilizada para manipular dados em bancos de dados relacionais. A linguagem
SQL no faz parte da ementa dessa disciplina, pois foi objeto de estudo na dis-
ciplina Banco de Dados. Assim, fundamental que este assunto seja revisado.
Programao Orientada a Objetos e-Tec Brasil 122
As Figuras 9.10, 9.11 e 9.12 exibem um exemplo de aplicao que se conec-
ta a um banco de dados, consulta todos os dados da tabela lme e impri-
me na tela o cdigo, o gnero, a produtora e a data da compra de
todos os lmes dessa tabela.
O exemplo foi dividido em trs Figuras (9.10, 9.11 e 9.12), mas as trs gu-
ras juntas apresentam o cdigo de uma nica classe.
Figura 9.10: Denio da classe e do mtodo main
Fonte: Elaborada pelos autores
Figura 9.11: Construtor da classe
Fonte: Elaborada pelos autores
Figura 9.12: Execuo da consulta
Fonte: Elaborada pelos autores
e-Tec Brasil Aula 9 Integrao com Banco de Dados parte I 123
Nesse exemplo, o construtor da classe estabelece a conexo com o banco
de dados.
O mtodo main cria uma instncia da classe utilizando seu construtor e aciona
ento o mtodo buscarDados(). Nesse mtodo, a consulta sql denida em
uma String, e executada pelo mtodo meuState.executeQuery(sql). Note que
meuState o objeto de conexo criado anteriormente dentro do construtor.
Ainda no mtodo buscarDados(), aps a execuo da consulta gerado
um ResultSet que, nada mais do que o resultado da consulta submetida
ao banco. A partir do ResultSetrs possvel obter os dados resultantes da
consulta, navegando linha a linha pelo mtodo rs.next(). Note que o mtodo
rs.next() utilizado como condio de um lao while. O comando while (rs.
next()) equivalente a dizer: enquanto tivermos mais uma linha, permanea
no lao. Na primeira vez esse comando marca a primeira linha para que os
dados sejam buscados a partir dela; uma nova chamada de next() marca a
linha seguinte, at que no haja mais linhas.
Dentro do lao while h quatro comandos de impresso println com o obje-
tivo de imprimir os dados de cada coluna na tela de sada. Nesse contexto,
merece destaque o comando rs.getString(<nome_da_coluna_no_banco>).
Esse comando retorna o valor da linha atual para a coluna passada como pa-
rmetro. Por exemplo, o comando rs.getString(CODIGO) vai retornar uma
String com o valor da coluna CODIGO da linha atual da tabela.
Para esse exemplo funcionar ser necessrio uma sequncia de passos:
criar um banco de dados no MySQL com o nome banco_lp (pode usar
outro nome, mas, nesse caso, precisar adequar o script apresentado na
Figura 9.13);
criar dentro desse banco uma tabela com o nome FILME utilizando o
cdigo SQL apresentado na Figura 9.13;
inserir algumas linhas nessa tabela para que tenhamos dados para con-
sultar;
criar uma fonte de dados ODBC com o nome banco_lp que aponte
para o banco criado no primeiro item. Na seo 9.3 aprendemos a criar
fontes de dados ODBC.
Programao Orientada a Objetos e-Tec Brasil 124
Figura 9.13: Cdigo SQL para criao da tabela lme
Fonte: Elaborada pelos autores
Resumo
Nesta aula tivemos uma introduo ao conceito de programao cliente-
-servidor e aprendemos a acessar servidores de bancos de dados por nossas
aplicaes em Java. Vimos que, para conectar com os servidores de bancos
de dados, utilizamos drivers que podem ser de dois tipos: nativos ou ODBC.
Por m, aprendemos a consultar dados em bancos de dados.
Atividades de aprendizagem
1. Para fazer os exerccios desta aula, antes crie um banco de dados com
uma tabela lme, como a exibida na Figura 9.13 e insira alguns registros
nessa tabela utilizando para isso as ferramentas que voc aprendeu a
utilizar na disciplina de banco de dados.
2. Construa um programa que acesse o banco de dados criado para obter
os dados de todos os lmes da tabela e exiba esses dados em uma janela.
Para exibir os dados organizadamente, utilize um JLabel para exibir o va-
lor de cada campo de forma a exibir os dados em formato tabular. Acesse
o banco utilizando driver ODBC.
3. Altere o exerccio anterior agora utilizando um driver nativo para acessar
o banco.
4. Construa um programa que apresente uma janela com um campo de
texto no qual o usurio dever digitar o cdigo do lme desejado e um
boto com o texto Consultar. Quando o usurio clicar no boto, o
programa dever buscar no banco de dados os dados do lme do cdigo
informado e exibir esses dados na tela.
Existe na biblioteca Swing a
classe JTable, que prpria
para exibir dados tabulares em
janelas. Assim, uma boa tarefa
seria estudar esse componente e
utiliz-lo para fazer os exerccios
1 e 2 da aula 9 em lugar de criar
vrios JLabels para exibio dos
dados.
e-Tec Brasil Aula 9 Integrao com Banco de Dados parte I 125
e-Tec Brasil
Aula 10 Integrao com Banco
de Dados parte II
Objetivos
Aprender a construir aplicaes em Java capazes de inserir, alterar
e excluir dados de bancos de dados.
10.1 Introduo
Nesta aula criaremos uma classe para encapsular o processo de conexo a
banco de dados, a m de facilitar a implementao de nossos aplicativos. Nes-
sa classe vamos optar pelo uso de conexes utilizando driver nativo do MySQL.
classe criada para nos dar suporte a conexo com bancos de dados daremos
o nome de MySQLNativeDriver. O cdigo dessa classe exibido na Figura 10.1.
Figura 10.1: Classe MySQLNativeDriver parte I
Fonte: Elaborada pelos autores
e-Tec Brasil Aula 10 Integrao com Banco de Dados parte II 127
O mtodo mais importante da classe MySQLNativeDriver o mtodo obter-
Conexao() que cria e retorna uma conexo com um banco de dados utilizan-
do o driver nativo do MySQL.
Note tambm que nessa classe temos atributos para denir todos os par-
metros necessrios para o estabelecimento de uma conexo com o banco
de dados: IP do servidor, porta, nome do banco, nome do usurio e senha.
A classe conta ainda com dois construtores: um que recebe como parme-
tros as cinco informaes necessrias para a conexo, e um segundo que
recebe apenas o nome do banco, o nome do usurio e a senha e assume
que o banco est na mquina local (localhost) e que a porta a ser utilizada
a porta padro do MySQL (3306).
importante lembrar que para fazermos uso do driver MySQL nativo pre-
cisamos inclu-lo no projeto, como aprendemos na aula anterior (seo 9.4
Figura 9.8).
Para os exemplos deste captulo, utilizaremos a mesma tabela FILME j
criada na aula anterior (Figura 9.13).
Nesta aula faremos insero, atualizao e excluso de dados nessa tabela.
Para isso importante entendermos o cdigo de criao dessa tabela, apre-
sentado pela Figura 9.13.
Note que a coluna codigo a chave primria da tabela e uma coluna au-
toincrementvel. Isso signica que ela no precisa participar do INSERT, pois
esse dado ser preenchido, automaticamente, pelo banco, utilizando o valor
do ltimo registro inserido mais uma unidade (conforme j estudado na dis-
ciplina Banco de Dados).
Na atualizao (UPDATE) e na excluso (DELETE) a coluna codigo identicar
de forma nica cada registro encontrado na tabela lme, possibilitando as-
sim, sua atualizao ou excluso.
Programao Orientada a Objetos e-Tec Brasil 128
10.2 Insero de dados
A Figura 10.2 ilustra como pode ser feita a insero de dados na tabela lme.
Figura 10.2: Exemplo de insero de dados
Fonte: Elaborada pelos autores
Note que utilizamos a classe MySQLNativeDriver para obter uma conexo
com o banco de dados. Em seguida, montamos o nosso comando INSERT
(varivel sql). As interrogaes so os locais onde sero inseridos os valores a
serem atribudos aos campos em nosso INSERT. Esses valores sero inseridos
no comando INSERT pelo mtodo pstmt.setString posicionalmente a cada
interrogao (1 para a primeira interrogao, 2 para a segunda, e assim
sucessivamente).
Para entender o funcionamento desse cdigo fundamental conhecer a
sintaxe do comando INSERT da linguagem SQL que foi estudada na disciplina
Banco de Dados.
Finalmente, o comando pstmt.executeUpdate() efetua a insero dos dados no
banco de dados. Note que o cdigo est envolto por uma clusula try...catch de
forma que caso ocorra algum erro na insero, ser disparada uma exceo do
tipo SQLException que ser tratada pelo seu respectivo catch, que, nesse caso,
basicamente ir apresentar uma mensagem de erro.
No caso do nosso exemplo,
informamos valores xos para
cada uma das colunas da nossa
tabela o que no muito til
e serve apenas para ilustrar e
para facilitar o entendimento.
Normalmente, teremos uma
interface grca na qual o
usurio informar o valor
desejado para cada campo e
clicar em um boto. Nesse
caso, o evento de clicar no boto
dever disparar um mtodo que
ter cdigo muito parecido com o
mtodo main do nosso exemplo
mas, no lugar dos valores xos
que inserimos em cada campo,
buscaremos o valor que o usurio
preencheu em cada campo da
interface grca. Por exemplo,
suponha que tenhamos na
interface um JTextField de nome
nomeFilme no qual o usurio
dever digitar o nome do lme.
Assim, no lugar do comando
pstmt.setString(1, Jogos
Mortais); do exemplo teramos
o comando pstmt.setString(1,
nomeFilme.getText());.
e-Tec Brasil Aula 10 Integrao com Banco de Dados parte II 129
10.3 Atualizao de dados
A atualizao de dados ocorre de forma semelhante insero. A Figura
10.3 ilustra como pode ser feita a atualizao de dados.
Figura 10.3: Exemplo de atualizao de dados
Fonte: Elaborada pelos autores
Para entender o funcionamento desse cdigo, fundamental conhecer a
sintaxe do comando UPDATE da linguagem SQL que foi estudada na disci-
plina Banco de Dados.
Assim como no exemplo de insero de dados, a classe MySQLNativeDriver
serve para obter uma conexo com o banco. Em seguida montamos uma
String com o nosso comando SQL UPDATE. Note que, tambm a exemplo
do que ocorreu na insero, nos lugares dos valores a serem atribudos aos
campos das tabelas foram colocadas interrogaes. Note que o campo cdi-
go foi utilizado na clusula where do seu comando SQL a m de selecionar
o registro desejado para a alterao.
Aqui tambm importante
notar que, em uma aplicao
comercial, os valores a serem
utilizados no UPDATE no sero
xos e sim obtidos a partir de
alguma entrada, normalmente,
uma interface grca. Alm
disso, antes de uma atualizao,
normalmente, ocorre uma
consulta a m de que os dados
sejam apresentado para que
ento o usurio os atualize.
Programao Orientada a Objetos e-Tec Brasil 130
10.4 Excluso de dados
O cdigo para executar uma excluso de dados ainda mais simples que
os cdigos para atualizao e para insero de dados. A Figura 10.4 ilustra
como pode ser feita a atualizao de dados.
Figura 10.4: Exemplo de excluso de dados
Fonte: Elaborada pelos autores
Assim como nos exemplos anteriores, a classe MySQLNativeDriver serve para
obter uma conexo com o banco.
Para entender o funcionamento desse cdigo, fundamental conhecer a
sintaxe do comando DELETE da linguagem SQL que foi estudada na discipli-
na Banco de Dados.
Note que na montagem do comando DELETE foi utilizada apenas uma in-
terrogao. Isso se deve ao fato de que para excluir um registro basta que
tenhamos o valor de sua chave primria, que no caso da nossa tabela lme
a coluna codigo.
Assim como aconteceu na
incluso e na alterao de
dados, esse exemplo apenas
ilustrativo e tem foco nas
classes e mtodos a serem
utilizados. Obviamente, que
em uma aplicao comercial
o cdigo do elemento a ser
excludo seria informado
pelo usurio. Normalmente,
feita uma consulta, os dados
so apresentado e s ento
o usurio pode optar por
solicitar a excluso do registro
apresentado.
e-Tec Brasil Aula 10 Integrao com Banco de Dados parte II 131
Resumo
Nesta aula demos sequncia aos estudos iniciados na aula anterior sobre
acesso a bancos de dados pelas aplicaes em Java. Aprendemos a inserir,
atualizar e excluir dados em bancos de dados. Vimos que, para isso, precisa-
mos utilizar comandos SQL aprendidos na disciplina Bancos de Dados.
Atividades de aprendizagem
1. Crie uma tabela ContaEspecial em um banco de dados. Altere o pro-
grama criado no exerccio 1 da aula 7 de forma que ao invs de arma-
zenar as contas em um ArrayList, os dados das contas criadas sejam
inseridos nessas tabelas.
2. Faa um programa que exiba uma janela com um campo de texto n-
mero da conta, um boto Consultar e um boto Excluir. A janela
deve ser exibida com o boto Excluir desabilitado. O usurio deve in-
formar o nmero da conta desejada e clicar no boto consultar. Ento
o sistema deve buscar os dados da conta desejada no banco de dados,
exibir os dados na janela e o boto excluir deve ser habilitado. Se o usu-
rio clicar ento em excluir, a conta deve ser excluda do banco e uma
mensagem deve ser exibida. Se o usurio informar alterar o nmero da
conta e clicar novamente em consultar, os dados da nova conta informa-
da devem ser exibidos no lugar da anterior. (Dica: utilize um JTextField
para exibir cada um dos dados da conta).
Programao Orientada a Objetos e-Tec Brasil 132
Referncias
CADENHEAD, Rogers; LEMAY, Laura, Aprenda em 21 dias Java 2. 4. ed. So Paulo:
Campus, 2005.
DEITEL, Harvey M.; DEITEL, Paul J. Java: como programar. 8. ed. So Paulo: Pearson/
Prentice-Hall, 2010.
FUGIERI, Srgio. Java 2 Ensino Didtico. 6 Edio. So Paulo: rica, 2006.
PAMPLONA, Vitor Fernando. Tutorial Java: o que Java?Disponvel em: <http://
javafree.uol.com.br/artigo/871498/Tutorial-Java-O-que-e-Java.html>. Acesso em: 12
out. 2011.
PAMPLONA, Vitor Fernando. Tutorial Java 2<BOLD>: caractersticas bsicas.
Disponvel em: <http://javafree.uol.com.br/artigo/871496/Tutorial-Java-2-Caracteristicas-
Basicas.html>. Acesso em: 12 out. 2011.
PAMPLONA, Vitor Fernando. Tutorial Java 3: orientao a objetos. Disponvel em:
<http://javafree.uol.com.br/artigo/871497/Tutorial-Java-3-Orientacao-a-Objetos.html>.
Acesso em: 12 out.2011.
e-Tec Brasil 133 Referncias
Currculo dos professores-autores
Victorio Albani
Tcnico em Processamento de Dados pela Escola Tcnica Federal do Espri-
to Santo (1998), graduado em Cincia da Computao pela UFES (2003)
e mestre em Informtica pela UFES (2006). professor do Departamento
de Informtica do Instituto Federal de Educao, Cincia e Tecnologia do
Esprito Santo Campus Colatina, onde trabalha com os cursos Tcnico em
Informtica, na modalidade presencial e a distncia, e Superior de Tecnologia
em Redes de Computadores.
Antes de ingressar no IFES, atuou em vrias empresas pblicas e privadas, den-
tre as quais se destacam Xerox, Unisys e Cesan, sempre exercendo funes re-
lacionadas ao processo de desenvolvimento de software, como programador,
analista/projetista de sistemas e lder de equipe de desenvolvimento.
Giovany Frossard Teixeira
Graduado em Cincia da Computao (2004) e mestre em Informtica
(2006) pela Universidade Federal do Esprito Santo. Atualmente professor
do Instituto Federal de Educao, Cincia e Tecnologia do Esprito Santo
Campus Colatina, nos cursos Tcnico em Informtica, Tecnlogo em Redes
de Computadores e Bacharel em Sistemas de Informao. Tem experincia
na rea de Cincia da Computao, com nfase em Linguagens de Progra-
mao, Otimizao e Software Bsico.
Programao Orientada a Objetos e-Tec Brasil 134

Curso Tcnico em Informtica
Programao
Orientada a Objetos
Victorio Albani de Carvalho
Giovany Frossard Teixeira

Você também pode gostar