Escolar Documentos
Profissional Documentos
Cultura Documentos
Programação Orientada A Objetos PDF
Programação Orientada A Objetos PDF
Orientada a Objetos
Victorio Albani de Carvalho
Giovany Frossard Teixeira
Colatina - ES
2012
Presidncia da Repblica Federativa do Brasil
Ministrio da Educao
Inclui bibliografia
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
Apresentao e-Tec Brasil
Prezado estudante,
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 Profissional e Tecnolgica (SETEC), as universidades e escolas
tcnicas estaduais e federais.
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.
Ns acreditamos em voc!
Desejamos sucesso na sua formao profissional!
Ministrio da Educao
Janeiro de 2010
Nosso contato
etecbrasil@mec.gov.br
3 e-Tec Brasil
Indicao de cones
5 e-Tec Brasil
Sumrio
Apresentao da disciplina 13
Projeto instrucional 15
7 e-Tec Brasil
Aula 4 Herana e polimorfismo 55
4.1 Herana 55
4.2 Utilizao de atributos protected 57
4.3 Polimorfismo 58
4.4 Sobrescrita 59
4.5 Sobrecarga 62
4.6 Classe Object 64
Referncias 133
9 e-Tec Brasil
Palavra do professor-autor
Caro estudante!
Um abrao!
Prof. Victorio Albani de Carvalho e Prof. Giovany Frossard Teixeira
11 e-Tec Brasil
Apresentao da disciplina
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 bibliografias recomendadas podem ser
necessrios para um melhor aprendizado e desenvolvimento de capacitaes
complementares imprescindveis formao direcionada para este curso.
13 e-Tec Brasil
Projeto instrucional
CARGA
OBJETIVOS DE
AULA MATERIAIS HORRIA
APRENDIZAGEM
(horas)
Softwares: DK e NetBeans.
Entender o funcionamento da plataforma
Java. Artigo sobre o que Java em:
http://javafree.uol.com.br/
Entender o que so os ambientes de desen-
artigo/871498/Tutorial-Java-O-
volvimento Java.
1. Introduo -que-e-Java.html
Conhecer ou revisar as principais caracte- 10
plataforma Java Artigo sobre as caractersticas
rsticas e recursos da linguagem Java: vari-
bsicas de Java em http://java-
veis, comentrios, operadores, comandos de
free.uol.com.br/artigo/871496/
deciso e de repetio, vetores e matrizes.
Tutorial-Java-2-Caracteristicas-
-Basicasindex
15 e-Tec Brasil
CARGA
OBJETIVOS DE
AULA MATERIAIS HORRIA
APRENDIZAGEM
(horas)
Objetivos
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.
JVM JVM
Windows Linux
Mquina Mquina
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.
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:
Aps criarmos o projeto, ele passa a ser exibido na aba Projetos, que fica 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!).
O tipo da varivel define, 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.
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).
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:
Para lermos valores do tipo int utilizando o objeto scan, utilizamos o mtodo
Em Java, podemos utilizar
nextInt(). J para valores do tipo double, utilizamos o mtodo nextDouble(). bibliotecas definidas em pacotes
da linguagem. Para isso,
utilizamos o comando import
No podemos esquecer de fechar o objeto quando findamos seu uso pelo <caminho do pacote>.<classe>;
mtodo close(). O comando import de Java
parecido com o include que
utilizamos em linguagem C. Veja
Para exibir mensagens e dados na tela, utilizamos em linguagem C o coman- na segunda linha do exemplo
apresentado na Figura 1.9 que
do printf. Em Java utilizaremos os mtodos System.out.print e System.out. a classe Scanner foi importada
println. A nica diferena entre eles que o primeiro imprime a mensagem para o nosso programa para que
pudssemos utiliz-la.
na mesma linha em que a mensagem anterior foi impressa, enquanto o Quando o NetBeans identifica
segundo imprime a mensagem em uma nova linha. Note que os dois foram que uma classe foi utilizada e
no foi feita sua importao, ele
utilizados no exemplo da Figura 1.9. sugere a sua incluso, facilitando
o trabalho do programador.
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:
Resumo
Consideramos que o aluno desta disciplina j estudou linguagem C ou a
prpria linguagem Java em disciplinas anteriores. Assim, nesta aula fizemos
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. Enfim, nesta aula relembramos vrios
conceitos e comeamos a esquentar as turbinas para nossa viagem ao
mundo da programao orientada a objetos
Objetivos
Assim, podemos entender uma classe como um modelo ou como uma es-
pecificao para um conjunto de objetos, ou seja, a descrio genrica dos
Classe objetos individuais pertencentes a um dado conjunto. A partir de uma classe
um componente de programa
que descreve a estrutura e o possvel criar quantos objetos forem desejados.
comportamento de um grupo
de objetos semelhantes isto ,
as informaes que caracterizam Uma classe define as caractersticas e o comportamento de um conjunto de
o estado desses objetos e as
aes (ou operaes) que eles objetos. Assim, a criao de uma classe implica definir um tipo de objeto em
podem realizar. termos de seus atributos (variveis que contero os dados) e seus mtodos
(funes que manipulam tais dados).
Como funciona?
Como exemplo, a Figura 2.1 ilustra a criao de uma classe Conta para re-
presentar os dados de uma conta bancria. Nesse exemplo definimos trs
atributos para a classe Conta, mas no definimos mtodos. 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
Figura 2.1: Criao de classe em Java em Prximo.
Fonte: Elaborada pelos autores 3. D um nome para a classe e
indique o nome do pacote no
Para ilustrar a utilizao do qualificador de acesso, veja o exemplo apresen- qual a classe ser criada. Clique
em Finalizar.
tado nas Figuras 2.2 e 2.3 a seguir.
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.
Como funciona?
Exemplos:
Sintaxe:
Como Funciona?
Exemplo:
return saldo;
A Figura 2.4 exibe uma nova verso da classe Conta, agora com um mtodo
depositar.
A Figura 2.5 exibe um novo mtodo para a classe Conta: o mtodo sacar.
O mtodo sacar recebe como argumento o valor a ser sacado. Ento, o mto-
do verifica se a conta tem saldo suficiente 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.
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 definio dessa classe Conta (feita na Figura 2.4) no definimos um
qualificador 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.
String Para criar uma instncia de String, no precisamos utilizar o operador new,
uma classe de Java utilizada
para representarmos uma como acontece com as outras classes. Para instanciar um objeto do tipo
cadeia de caracteres, que String, basta declarar uma varivel desse tipo e inici-la com um valor.
oferece diversos mtodos para
manipularmos essa cadeia. importante saber tambm que objetos da classe String podem ser concate-
nados utilizando o operador +.
A classe String conta ainda com diversos mtodos muito teis, dentre os
quais podemos destacar:
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.
trim: retorna uma String sem espaos em branco no incio e no final dela, a
partir da String que chamou o mtodo.
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:
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 fim, conhecemos duas classes muito teis de Uma outra classe fornecida
por Java para implementar
Java: String e ArrayList. o conceito de listas a
classe LinkedList. Acesse as
documentaes oficiais da
Atividades de aprendizagem Oracle sobre as classes ArrayList
e LinkedList respectivamente em
1. Implementar uma classe Conta tendo como atributos o nome do titular, http://download.oracle.
nmero e saldo e os mtodos sacar e depositar (seguindo os exemplos com/javase/6/docs/api/java/
util/ArrayList.html e http://
das Figuras 2.4 e 2.5). download.oracle.com/javase/6/
docs/api/java/util/LinkedList.
html.
2. Criar um programa principal que instancie uma Conta (exerccio anterior). Utilizando as informaes dessas
documentaes, reimplemente o
Solicite ao usurio os dados da conta atribuindo os valores informados aos exemplo apresentado na Figura
seus atributos. Depois o sistema deve entrar em lao exibindo as seguin- 2.11 utilizando a classe LinkList
em lugar da classe ArrayList.
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 verificando 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.
Objetivos
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.
Construtor
um mtodo especial para a
O construtor de uma classe tem, por definio, o mesmo nome que a classe. criao e inicializao de uma
nova instncia de uma classe. Um
A Figura 3.1 exibe dois exemplos de construtores para a classe Conta que construtor inicializa o novo objeto
utilizamos em exemplos da aula anterior. 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).
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 define um construtor padro para classes que no tem nenhum constru-
tor definido. O construtor padro no recebe nenhum argumento. No exemplo
apresentado na Figura 2.4 (aula anterior), como a classe Conta no tinha cons-
trutores definidos, 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.
Mtodo destrutor Em Java, o mtodo destrutor de uma classe o mtodo finalize. Quando
um mtodo acionado no definido um mtodo destrutor para uma classe, Java utiliza um mto-
imediatamente antes de o objeto
ser desalocado. do destrutor padro que no faz nada.
3.3 Encapsulamento
Encapsulamento uma tcnica utilizada para restringir o acesso a variveis
(atributos), mtodos ou at prpria classe. Os detalhes da implementao Encapsulamento
Consiste na separao entre os
ficam ocultos ao usurio da classe, ou seja, o usurio passa a utilizar os m- aspectos externos de um objeto,
acessveis por outros objetos.
todos de uma classe sem se preocupar com detalhes sobre como o mtodo
foi implementado internamente.
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 definio 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.
Objetivos
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 tipo de conta que permite que o cliente efetue saques acima de seu Em uma herana, a classe da
qual outras classes herdam
saldo at um limite, ou seja, permite que o cliente fique com saldo negativo chamada de classe pai, classe
base ou superclasse. J a classe
at um dado limite. Assim, criaremos uma classe ContaEspecial que herdar que herda de uma outra
da classe Conta que criamos em aulas anteriores. chamada de classe filha, classe
derivada ou subclasse.
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.
Quando visualizamos uma hierarquia partindo da classe pai para filhas, dize-
mos que houve uma especializao da superclasse. Quando visualizamos
partindo das classes filhas para as classes ancestrais, dizemos que houve
uma generalizao das subclasses.
4.3 Polimorfismo
A palavra polimorfismo vem do grego poli morfos e significa muitas formas.
Na orientao a objetos, isso representa uma caracterstica que permite que
classes diferentes sejam tratadas de uma mesma forma.
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.
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 definido no ancestral e est sen-
do redefinido 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 definido numa classe ancestral.
Assim a notao @Override fundamental para aumentar a legibilidade e
manutenibilidade do cdigo.
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.
@Override
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.
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 polimorfismo!
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 polimorfismo funcionando na prtica!
Objetivos
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?
Para definir uma classe abstrata em Java, basta utilizar a palavra reservada
abstract. A palavra abstract deve ser inserida entre o qualificador de aces-
so e o nome da classe. A Figura 5.1 exibe o cdigo da classe Conta agora
como classe abstrata.
Toda classe que possui pelo menos um mtodo abstrato uma classe abstra-
ta, mas uma classe pode ser abstrata sem possuir nenhum mtodo abstrato.
A Figura 5.3 exibe o cdigo do mtodo abstrato sacar definido na classe Conta.
Note que o mtodo apresentado na Figura 5.3 no possui corpo, ou seja, ele
no define 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 definida como uma classe concreta.
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 Associao
Representa uma conexo
classes so chamadas de associaes. entre classes.
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.
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 define.
Toda classe que tem um mtodo abstrato abstrata, mas nem toda classe
abstrata tem um mtodo abstrato. A utilizao desses conceitos possibilita
trazer mais flexibilidade 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).
Objetivos
Todo atleta uma pessoa. Assim, Atleta herdaria de Pessoa (Em Java:
Atleta extends Pessoa).
A sintaxe para criar uma interface muito parecida com a sintaxe para criar
uma classe: public interface <nome_da_interface>.
Interface
uma coleo de mtodos que
indica que uma classe possui O problema de herana mltipla apresentado na seo anterior pode ser
algum comportamento alm do resolvido com a criao de:
que herda de suas superclasses.
Os mtodos includos em uma
interface no definem esse
comportamento; essa tarefa
quatro interfaces: Atleta, Corredor, Nadador e Ciclista;
deixada para as classes
que implementam a interface
(CADENHEAD; LEMAY, duas classes: Pessoa e Triatleta.
2005, p. 17).
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.
Objetivos
import java.awt.event.*
import javax.swing.*
Frame A classe JFrame prov um conjunto de mtodos que permitem criar e confi-
uma classe do pacote AWT gurar janelas. Abaixo so citados alguns deles:
responsvel pela criao de
janelas, parecidas com as
encontradas no ambiente JFrame(): construtor padro. Apenas cria uma nova janela.
Windows
(FUGIERI, 2006, p. 176).
JFrame(String t): cria uma janela atribuindo um ttulo a mesma.
JLabel(String): recebe como parmetro uma String que ser o texto apre-
sentado pelo Label.
A Figura 7.4 exibe a janela gerada pelo cdigo exibido na Figura 7.3.
7.4.1 MessageDialog
Uma MessageDialog uma caixa de dilogo que apresenta uma mensagem.
Pergunta: QUESTION_MESSAGE
Informao: INFORMATION_MESSAGE
Alerta: WARNING_MESSAGE
Erro: ERROR_MESSAGE
Definido pelo Usurio: INFORMATION_MESSAGE ( e acrescenta-se o
argumento do tipo ImageIcon na chamada do showMessageDialog )
Vazio: PLAIN_MESSAGE
Exemplo de utilizao:
7.4.2 ConfirmDialog
Uma ConfirmDialog uma caixa de dilogo que apresenta uma mensagem
e possibilita ao usurio responder uma pergunta.
< botes presentes>: determinam quais botes iro aparecer. Podendo ser:
YES_OPTION = 0
NO_OPTION = 1
CANCEL_OPTION = 2
Exemplo de utilizao:
7.4.3 InputDialog
Uma InputDialog uma caixa de dilogo que apresenta uma mensagem e
possibilita que o usurio digite um texto.
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).
Exemplo:
A Figura 7.5 exibe um cdigo que utiliza a classe JOptionPane para criar
vrias caixas de dilogo diferentes.
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 definir 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, verificado se
ele foi disparado pelo boto (if e.getSource() == b1) e, em caso positivo, uma
caixa de dilogo exibida.
JTextField(): construtor padro utilizado para criar uma caixa de texto vazia.
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:
Note que no exemplo das Figuras 7.7 e 7.8 fizemos uso tambm de um com-
ponente grfico 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 especfico desse exemplo utilizamos um
JPanel apenas para ocupar o espao abaixo dos rtulos de texto de forma que
o boto ficasse 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.
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.
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 define o mtodo actionPerformed.
Objetivos
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.
Exemplo de Criao:
String[] animais = { Leo, Elefante, Cobra, Jabuti };
JComboBox combo = new JComboBox(animais);
Como o exemplo ficou muito extenso, ele foi dividido em trs Figuras (8.5,
8.6 e 8.7). Mas note que as trs figuras juntas apresentam o cdigo de
uma nica classe.
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).
Como o exemplo ficou muito extenso, ele foi dividido em duas Figuras
(8.9 e 8.10). Mas, note que as duas figuras juntas apresentam o cdigo de
uma nica classe.
Figura 8.11: Janela gerada pela execuo do exemplo da Figura 8.9 e 8.10
Fonte: Elaborada pelos autores
Como o exemplo ficou muito extenso, ele foi dividido em trs Figuras (8.12,
8.13 e 8.14). Mas, note que as trs figuras juntas apresentam o cdigo de
uma nica classe.
Por fim, para acrescentar itens a um menu, precisamos instanciar objetos da clas-
se JMenuItem e adicion-los ao menu, como nas linhas apresentadas a seguir:
Como o exemplo ficou muito extenso, ele foi dividido em trs Figuras (8.16,
8.17 e 8.18). Mas, note que as trs figuras juntas apresentam o cdigo de
uma nica classe.
Figura 8.18: Exemplo de criao de janela com barra de menu parte III
Fonte: Elaborada pelos autores
Atividades de aprendizagem
1. Faa um programa com interface grfica 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 ficar 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.
Objetivos
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 define o endereo do servidor.
Um programa feito em Java utilizando um driver nativo migrado para ou- Se for necessrio migrar para outro
tro SO (Windows para Linux, por exemplo) apenas recompilando os cdigos sistema operacional que no seja Win-
fonte existentes (obviamente esse outro SO dever possuir a JVM e o driver dows, obviamente, no ser possvel
nativo para o banco desejado). continuar utilizando o ODBC.
Fonte: Elaborado pelos autores
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.
Port: porta por onde ser feita a comunicao (a porta utilizada pelo
MySQL por padro a 3306).
Como primeiro exemplo, a Figura 9.4 exibe um cdigo que estabelece uma
conexo com um banco de dados utilizando um driver ODBC.
Como exibe a Figura 9.5, foi definida uma String com nome url que faz refe-
rncia ao nome do Data Source (fonte de dados ODBC): Banco_LP.
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 exemplificar como fazer uma conexo utilizando um driver nativo.
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.
O exemplo foi dividido em trs Figuras (9.10, 9.11 e 9.12), mas as trs figu-
ras juntas apresentam o cdigo de uma nica classe.
O mtodo main cria uma instncia da classe utilizando seu construtor e aciona
ento o mtodo buscarDados(). Nesse mtodo, a consulta sql definida em
uma String, e executada pelo mtodo meuState.executeQuery(sql). Note que
meuState o objeto de conexo criado anteriormente dentro do construtor.
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.
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 fim, 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 filme, 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.
Objetivos
10.1 Introduo
Nesta aula criaremos uma classe para encapsular o processo de conexo a
banco de dados, a fim 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.
Note tambm que nessa classe temos atributos para definir 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).
Note que a coluna codigo a chave primria da tabela e uma coluna au-
toincrementvel. Isso significa 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).
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 filme
a coluna codigo.
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.
DEITEL, Harvey M.; DEITEL, Paul J. Java: como programar. 8. ed. So Paulo: Pearson/
Prentice-Hall, 2010.
Victorio Albani