Você está na página 1de 162

Professor Dr. Edson A.

Oliveira Junior
PROGRAMAO I (JAVA)
GRADUAO
ANLISE E DESENVOLVMENTO DE SISTEMAS
MARING-PR
2013
Reitor: Wilson de Matos Silva
Vice-Reitor: Wilson de Matos Silva Filho
Pr-Reitor de Administrao: Wilson de Matos Silva Filho
Pr-Reitor de EAD: Willian Victor Kendrick de Matos Silva
Presidente da Mantenedora: Cludio Ferdinandi
NEAD - Ncleo de Educao a Distncia
Diretor Comercial, de Expanso e Novos Negcios: Marcos Gois
Diretor de Operaes: Chrystiano Mincoff
Coordenao de Marketing: Bruno Jorge
Coordenao de Sistemas: Fabrcio Ricardo Lazilha
Coordenao de Polos: Reginaldo Carneiro
Coordenao de Ps-Graduao, Extenso e Produo de Materiais: Renato Dutra
Coordenao de Graduao: Ktia Coelho
Coordenao Administrativa/Servios Compartilhados: Evandro Bolsoni
Coordenao de Curso: Danillo Xavier Saes
Supervisora do Ncleo de Produo de Materiais: Nalva Aparecida da Rosa Moura
Capa e Editorao: Daniel Fuverki Hey, Fernando Henrique Mendes, Humberto Garcia da Silva, Jaime de Marchi Junior,
Jos Jhonny Coelho, Robson Yuiti Saito e Thayla Daiany Guimares Cripaldi
Superviso de Materiais: Ndila de Almeida Toledo
Reviso Textual e Normas: Hellyery Agda Gonalves da Silva, Janana Bicudo Kikuchi, Jaquelina Kutsunugi, Keren Pardini,
Maria Fernanda Canova Vasconcelos e Nayara Valenciano
Ficha catalogrfca elaborada pela Biblioteca Central - UniCesumar

C397 CENTRO UNIVERSITRIO DE MARING. Ncleo de Educao
a distncia:
Programao I (JAVA) / Edson A. Oliveira Junior. Maring -
Pr., 2013.
162 p.
Curso de Graduao em Anlise e Desenvolvimento de
Sistemas EaD.

1. Programao I. 2. JAVA . EaD. I. Ttulo.
CDD - 22 ed. 005.1

As imagens utilizadas neste livro foram obtidas a partir dos sites PHOTOS.COM e SHUTTERSTOCK.COM.
Av. Guedner, 1610 - Jd. Aclimao - (44) 3027-6360 - CEP 87050-390 - Maring - Paran - www.cesumar.br
NEAD - Ncleo de Educao a Distncia - bloco 4- (44) 3027-6363 - ead@cesumar.br - www.ead.cesumar.br
PROGRAMAO I (JAVA)
Professor Dr. Edson A. Oliveira Junior
Reviso Tcnica: Professor Me. Rogrio de Leon Pereira
5
PROGRAMAO I (JAVA) | Educao a Distncia
APRESENTAO DO REITOR
Viver e trabalhar em uma sociedade global um grande desafio para todos os cidados.
A busca por tecnologia, informao, conhecimento de qualidade, novas habilidades para
liderana e soluo de problemas com eficincia tornou-se uma questo de sobrevivncia no
mundo do trabalho.
Cada um de ns tem uma grande responsabilidade: as escolhas que fizermos por ns e pelos
nossos far grande diferena no futuro.
Com essa viso, o Centro Universitrio Cesumar assume o compromisso de democratizar o
conhecimento por meio de alta tecnologia e contribuir para o futuro dos brasileiros.
No cumprimento de sua misso promover a educao de qualidade nas diferentes reas
do conhecimento, formando profissionais cidados que contribuam para o desenvolvimento
de uma sociedade justa e solidria , o Centro Universitrio Cesumar busca a integrao
do ensino-pesquisa-extenso com as demandas institucionais e sociais; a realizao de uma
prtica acadmica que contribua para o desenvolvimento da conscincia social e poltica e,
por fim, a democratizao do conhecimento acadmico com a articulao e a integrao com
a sociedade.
Diante disso, o Centro Universitrio Cesumar almeja ser reconhecida como uma instituio
universitria de referncia regional e nacional pela qualidade e compromisso do corpo do-
cente; aquisio de competncias institucionais para o desenvolvimento de linhas de pesqui-
sa; consolidao da extenso universitria; qualidade da oferta dos ensinos presencial e a
distncia; bem-estar e satisfao da comunidade interna; qualidade da gesto acadmica e
administrativa; compromisso social de incluso; processos de cooperao e parceria com o
mundo do trabalho, como tambm pelo compromisso e relacionamento permanente com os
egressos, incentivando a educao continuada.
Professor Wilson de Matos Silva
Reitor
6 PROGRAMAO I (JAVA) | Educao a Distncia
Seja bem-vindo(a), caro(a) acadmico(a)! Voc est iniciando um processo de transformao,
pois quando investimos em nossa formao, seja ela pessoal ou profissional, nos transformamos
e, consequentemente, transformamos tambm a sociedade na qual estamos inseridos. De
que forma o fazemos? Criando oportunidades e/ou estabelecendo mudanas capazes de
alcanar um nvel de desenvolvimento compatvel com os desafios que surgem no mundo
contemporneo.
O Centro Universitrio Cesumar mediante o Ncleo de Educao a Distncia, o(a) acompanhar
durante todo este processo, pois conforme Freire (1996): Os homens se educam juntos, na
transformao do mundo.
Os materiais produzidos oferecem linguagem dialgica e encontram-se integrados
proposta pedaggica, contribuindo no processo educacional, complementando sua formao
profissional, desenvolvendo competncias e habilidades, e aplicando conceitos tericos em
situao de realidade, de maneira a inseri-lo no mercado de trabalho. Ou seja, estes materiais
tm como principal objetivo provocar uma aproximao entre voc e o contedo, desta forma
possibilita o desenvolvimento da autonomia em busca dos conhecimentos necessrios para a
sua formao pessoal e profissional.
Portanto, nossa distncia nesse processo de crescimento e construo do conhecimento
deve ser apenas geogrfica. Utilize os diversos recursos pedaggicos que o Centro
Universitrio Cesumar lhe possibilita. Ou seja, acesse regularmente o AVA Ambiente Virtual
de Aprendizagem, interaja nos fruns e enquetes, assista s aulas ao vivo e participe das
discusses. Alm disso, lembre-se que existe uma equipe de professores e tutores que se
encontra disponvel para sanar suas dvidas e auxili-lo(a) em seu processo de aprendizagem,
possibilitando-lhe trilhar com tranquilidade e segurana sua trajetria acadmica.
Ento, vamos l! Desejo bons e proveitosos estudos!
Professora Ktia Solange Coelho
Coordenadora de Graduao do NEAD - UniCesumar
7
PROGRAMAO I (JAVA) | Educao a Distncia
APRESENTAO
Livro: PROGRAMAO I (JAVA)
Professor Dr. Edson A. Oliveira Junior
Prezado(a) acadmico(a), com grande satisfao que apresento a voc o livro de
Programao I (Java). Este material foi elaborado com o objetivo de contribuir em sua formao,
especialmente a de desenvolvedor(a) de software. Sou o professor Edson A. de Oliveira Junior,
autor deste livro. Voc pode ter certeza que este foi preparado com carinho especial para que
voc possa entender o que essa disciplina pode te trazer de benefcio ao longo de sua vida
como desenvolvedor(a) e/ou analista de sistemas.
Antes de iniciar os seus estudos relacionados a este material, vou me apresentar
adequadamente: sou Bacharel em Informtica pela Universidade Estadual de Maring (UEM),
Mestre em Cincia da Computao pela Universidade Estadual de Maring (UEM) e Doutor em
Cincias de Computao e Matemtica Computacional pelo Instituto de Cincias Matemticas
e de Computao (ICMC) da Universidade de So Paulo (USP). Todos esses ttulos foram
obtidos na rea de concentrao de Engenharia de Software, em que minha especialidade
Linha de Produto de Software e Gerenciamento de Variabilidade, alm de Arquitetura de
Software, Desenvolvimento Baseado em Componentes (DBC), Frameworks, Metamodelagem
e Modelagem UML. DBC e Frameworks so temas de pesquisa que envolvem no s a
modelagem de sistemas, mas a implementao de sistemas e suas arquiteturas.
Participo de vrios cursos de Ps-Graduao em diversas instituies de ensino superior
como a prpria UEM, UNIPAR, Faculdade Integrado, Unicesumar, Faculdade Alfa, Instituto
Paranaense de Ensino e Faculdade Cidade Verde. Possuo as seguintes certificaes
da Tecnologia Java: Sun Certified Java Associate, Sun Certified Java Programmer, Sun
Certified Java Developer, Sun Certified Web Component Developer e Sun Certified Business
Component Developer, todas elas certificadas pela Sun Microsystems entre os anos de 2003
e 2007. Ministro esta disciplina em cursos de treinamento tcnico, graduao e ps-graduao
desde o ano de 2000.
Inicialmente, o livro abordar conceitos bsicos da linguagem Java, desde a sua criao at o
processo de compilao e execuo e, em seguida, sero apresentados os demais conceitos
para que voc possa ter uma noo de programao orientada a objetos com a linguagem
8 PROGRAMAO I (JAVA) | Educao a Distncia
Java. Escrever este material foi um desafio, pois necessrio expressar os conceitos de uma
forma clara para que voc, caro(a) aluno(a), possa entender a lgica dos exemplos. Assim,
espero que voc goste do que foi colocado aqui.
Na Unidade I, teremos a apresentao da histria e evoluo da linguagem Java, desde as
suas primeiras verses, em que s existia a linguagem Java puramente e algumas poucas
bibliotecas disponveis. Alm disso, ser apresentada a tecnologia Java onde a linguagem
Java est inserida atualmente e as principais bibliotecas disponveis para cada plataforma
Java de desenvolvimento. O processo de compilao e interpretao de programas Java
apresentado, destacando cada fase e os elementos necessrios para que um programa Java
possa ser executado.
A Unidade II abordar as estruturas bsicas de um programa em Java, como: tipos primitivos,
declarao e inicializao de variveis e escopo de variveis. Estruturas de controle, repetio
e seleo sero apresentadas para permitir que programas Java possam ser executados de
forma a terem fluxos de informaes diferentes em momentos diferentes de sua execuo.
Para tanto, estruturas como if, do-while e switch podem ser usadas.
Na Unidade III voc entender a diferena entre classes e objetos Java. Voc ver que uma
classe Java serve como um modelo para que os objetos (instncias) daquela classe possam
ser criados e permitir que o programa Java tenha vida. Mas para entender esses conceitos,
sero apresentados os principais elementos que compem uma classe Java: atributos,
mtodos, construtores, e o mtodo main.
A Unidade IV abordar um dos conceitos mais importantes em programao orientada a
objetos, o encapsulamento. Este conceito serve para proteger os dados de uma classe de
acessos indevidos por elementos de outras classes ou at mesmo de outros pacotes. Porm,
para entender tal conceito, necessrio aprender os chamados modificadores de acesso da
linguagem Java: private, public, protected e default.
Por fim, na Unidade V sero apresentados outros dois conceitos fundamentais em programao
orientada a objetos: herana e polimorfismo. Herana permite criar uma hierarquia de classes
que possuem um conjunto de atributos e mtodos comuns, mas com seus tipos prprios. J
polimorfismo permite criar tal estrutura, porm exigindo que cada tipo especializado tenha as suas
prprias verses de implementao de seus mtodos, que so diferentes dos mtodos herdados.
9
PROGRAMAO I (JAVA) | Educao a Distncia
Lembre-se sempre que programar uma arte moderna em que aquele que detm o maior
poder de abstrao possvel aquele que melhor saber desenvolver os seus programas.
tima leitura e sucesso em sua vida de desenvolvedor(a) de software.
Professor Dr. Edson A. Oliveira Junior
SUMRIO
UNIDADE I
INTRODUO LINGUAGEM JAVA
HISTRICO E EVOLUO DA LINGUAGEM JAVA...............................................................16
A TECNOLOGIA JAVA ............................................................................................................19
O PROCESSO DE COMPILAO E INTERPRETAO DE PROGRAMAS JAVA ...............24
UNIDADE II
ESTRUTURAS BSICAS DA LINGUAGEM JAVA
O QUE SO TIPOS PRIMITIVOS? .........................................................................................35
DECLARAO E INICIALIZAO DE VARIVEIS ................................................................38
ESCOPO DE VARIVEL ........................................................................................................ 41
ESTRUTURAS DE CONTROLE .............................................................................................46
ESTRUTURAS DE SELEO ................................................................................................47
ESTRUTURAS DE REPETIO ............................................................................................55
UNIDADE III
CLASSES X OBJETOS JAVA
OBJETOS JAVA ......................................................................................................................87
JAVABEANS OU POJOS ........................................................................................................92
ESTADO E COMPORTAMENTO ............................................................................................98
UNIDADE IV
MODIFICADORES JAVA E ENCAPSULAMENTO
UTILIZANDO MODIFICADORES DE ACESSO .................................................................... 111
O MODIFICADOR STATIC .................................................................................................... 116
O MODIFICADOR FINAL ...................................................................................................... 118
O MODIFICADOR ABSTRACT ............................................................................................. 120
CONSTRUTORES JAVA .......................................................................................................122
UNIDADE V
HERANA E POLIMORFISMO EM JAVA
HERANA ............................................................................................................................. 131
POLIMORFISMO ..................................................................................................................139
CONCLUSO ........................................................................................................................ 151
GABARITO DAS ATIVIDADES DE AUTOESTUDO ............................................................ 152
REFERNCIAS .....................................................................................................................162
UNIDADE I
INTRODUO LINGUAGEM JAVA
Professor Dr. Edson A. Oliveira Junior
Objetivos de Aprendizagem
Entender o que a linguagem Java e a sua importncia.
Estudar o histrico e a evoluo da linguagem Java, alm das plataformas que
englobam a tecnologia Java.
Plano de Estudo
A seguir, apresentam-se os tpicos que voc estudar nesta unidade:
Histrico e Evoluo da Linguagem Java
A Tecnologia Java
O Processo de Compilao e Interpretao de Programas em Java
15
PROGRAMAO I (JAVA) | Educao a Distncia
INTRODUO
F
o
n
t
e
:

S
H
U
T
T
E
R
S
T
O
C
K
.
C
O
M
Caro(a) aluno(a), nesta primeira unidade trataremos alguns conceitos relacionados linguagem
Java que sero fundamentais para o entendimento das demais unidades.
A tecnologia Java, formada pela linguagem Java mais todas as bibliotecas disponveis para
download e uso, tem sido responsvel por grande parte do mercado de desenvolvimento de
software comercial e acadmico nas ltimas duas dcadas. Empresas de mdio e grande porte
vm adotando tal tecnologia com base em seus poderosos recursos e caractersticas. Java
uma linguagem baseada no paradigma de orientao a objetos, o que facilita a manuteno de
sistemas Java quando os princpios bsicos de tal paradigma so seguidos.
16 PROGRAMAO I (JAVA) | Educao a Distncia
HISTRICO E EVOLUO DA LINGUAGEM JAVA
F
o
n
t
e
:

S
H
U
T
T
E
R
S
T
O
C
K
.
C
O
M
A linguagem Java foi criada por James Gosling em 1992.
A primeira verso estvel da linguagem Java foi o JDK (Java Development Kit) 1.0.2, conhecido
por Java 1, em janeiro de 1996 com o codinome Oak.
Em fevereiro de 1997, foram adicionadas algumas bibliotecas, como: eventos com base na
biblioteca Abstract Window Toolkit (AWT), classes internas, conexo com banco de dados via
Java Database Connectivity (JDBC) e invocao remota de mtodos.
Em dezembro de 1998, foi lanada a J2SE 1.2 (Java Standard Edition), codinome playground
e conhecida simplesmente como Java 2. Esta foi a evoluo mais significativa da linguagem
Java, j que a tecnologia foi dividida em trs principais plataformas: J2SE (Java 2 Standard
Edition), J2EE (Java 2 Enterprise Edition) e J2ME (Java 2 Micro Edition).
17
PROGRAMAO I (JAVA) | Educao a Distncia
Ao J2SE foram adicionadas as seguintes bibliotecas: Swing para interface grfica com o
cliente, colees (List, Set e Map), e a possibilidade de criao de pontos flutuantes de acordo
com o padro IEEE 754.
Em maio de 2000, foi lanada a verso 1.3, codinome Kestrel. As mudanas mais notveis
foram: invocao remota de mtodo compatvel com CORBA, introduo das bibliotecas
JavaSound para tratamento de sons e JNDI (Java Naming and Directory Interface) para o
compartilhamento de recursos.
Em fevereiro de 2002, foi lanada a verso 1.4 da J2SE, codinome Merlin, que foi a primeira
verso desenvolvida sob a tutela da Java Community Process (JCP). A JCP
1
uma comunidade
extremamente importante formada por um consrcio de empresas que regulamenta a
tecnologia Java de forma geral. Dentre as maiores melhorias, destacam-se: a incluso de
expresses regulares, capacidade de lidar com o protocolo iPv6, biblioteca para Logging,
integrao parsers XML, melhoria nas bibliotecas para criptografia e segurana.
Em setembro de 2004 foi lanada a verso J2SE 5.0, codinome Tiger, conhecida como Java 5.
Vrias mudanas significativas foram incorporadas nesta nova verso, dentre elas: biblioteca
para Generics, eliminando a necessidade de converses entre tipos similares, incluso de
uma biblioteca para metadados de uma aplicao, autoboxing/unboxing, que so converses
automticas entre tipos primitivos, enumerations, que permitem criar listas de valores
ordenados, e a melhoria da estrutura de repetio for para colees e arrays.
Em dezembro de 2006, foi lanada a verso Java SE 6, codinome Mustang, conhecida como
Java 6. A partir desta verso, as siglas J2SE, J2EE e J2ME foram substitudas pelas siglas
Java SE, Java EE e Java ME, respectivamente. Dentre as melhorias, podemos citar: aumento
de desempenho da plataforma bsica, suporte ao JDBC 4.0, uma biblioteca dedicada somente
ao compilador Java e melhorias no desempenho e segurana da mquina virtual Java.
1
Saiba mais sobre a JCP em <http://www.jcp.org/en/home/index>. Texto em ingls.
18 PROGRAMAO I (JAVA) | Educao a Distncia
Em julho de 2011, foi lanada a verso Java SE 7, codinome Dolphin, conhecida como Java
7. Algumas caractersticas adicionadas a esta verso: estrutura de seleo switch aceitando
strings, e no somente valores inteiros, nova biblioteca para tratar entrada e sada e melhorias
nos streams para XML e Unicode.
Espera-se para setembro de 2013 a verso Java SE 8 com algumas melhoria adiadas da verso
7. Alm disso, a verso Java SE 9 est em discusso e possivelmente oferecer a possibilidade
de programao paralela. Para a verso 10, existem especulaes da possibilidade de remover
tipos primitivos, tornando Java uma linguagem totalmente orientada a objetos.
Saiba mais sobre programao paralela
Por Domingos Manoel Oran Barros Coelho Jnior
Ultimamente os processadores de computadores e notebooks esto sendo fabricados com mais de
um ncleo. Isso requer um olhar especial por quem desenvolve software e o deseja fazer com quali-
dade.
Saiba mais sobre o assunto no artigo completo.
Disponvel em: <http://www.devmedia.com.br/programacao-paralela/21405>. Acesso em: 03 abr.
2013.
19
PROGRAMAO I (JAVA) | Educao a Distncia
Programao Paralela Multicore
Disponvel em: <http://www.youtube.com/watch?v=UjgzYVEG9I0>.
A TECNOLOGIA JAVA
F
o
n
t
e
:

S
H
U
T
T
E
R
S
T
O
C
K
.
C
O
M
O Java composto por uma srie de vrios produtos de software e especificaes provenientes,
originalmente, da Sun Microsystems, e hoje sobre responsabilidade da Oracle. Esses produtos
juntos fornecem um sistema para o desenvolvimento e a implantao de softwares em
ambientes computacionais multiplataforma.
20 PROGRAMAO I (JAVA) | Educao a Distncia
O Java usado em uma ampla variedade de plataformas computacionais, desde sistemas
embarcados e telefones celulares at servidores empresariais e supercomputadores. Menos
comum, porm ainda usados, esto os Java applets que de vez em quando so utilizados
para melhorar a segurana de navegadores Web e computadores de mesa, conhecidos como
desktops.
Escrever usando a linguagem de programao Java a principal forma de produzir o cdigo
que ser implantado na forma de bytecodes Java. Existem, ainda, os compiladores de
bytecodes disponveis para gerar cdigo para outras linguagens como Ada, JavaScript, Python
e Ruby. Vrias novas linguagens de programao foram projetadas para serem executadas de
forma nativa na mquina virtual Java (Java Virtual Machine - JVM), que veremos na seo A
Mquina Virtual Java, como Scala, Clojure e Groovy. A sintaxe de Java muito semelhante
de C e C + +, porm mais recursos orientados a objetos podem ser modelados.
O Java elimina algumas construes de baixo nvel, como ponteiros, alm de possuir um
modelo de memria muito simples, em que cada objeto alocado em uma pilha e todas as
variveis de tipos de objeto so referncias. O seu gerenciamento de memria feito por meio
da coleta de lixo (Garbage Collector) automtica realizada pela JVM.
Uma edio da plataforma Java o nome de um pacote de programas relacionados que
permite o desenvolvimento e a execuo de programas escritos em Java. A plataforma no
especfica para qualquer processador ou sistema operacional. Porm, a sua execuo requer
uma JVM e um compilador com um conjunto de bibliotecas que so implementadas para
diversos hardwares e sistemas operacionais para que os programas em Java possam ser
executados de forma idntica em qualquer ambiente. As seguintes plataformas Java so as
mais comuns:
Java Card uma tecnologia que permite pequenas aplicaes baseadas em Java
(applets) para serem executadas em cartes inteligentes com segurana e similares de
memria em pequenos dispositivos.
21
PROGRAMAO I (JAVA) | Educao a Distncia
Java ME (Micro Edition) especifica vrios conjuntos diferentes de bibliotecas (conheci-
dos como perfis) para dispositivos com armazenamento, exibio e capacidade de ener-
gia limitados. Muitas vezes usado para desenvolver aplicativos para dispositivos mveis,
PDAs, set-top boxes de TV e impressoras.
Java SE (Standard Edition) para uso geral em aplicaes, desktops, servidores e
dispositivos similares.
Java EE (Enterprise Edition) a soma da plataforma Java SE com as mais diversas
outras APIs teis para aplicaes multicamadas e cliente-servidor em empresas.
A plataforma Java consiste de vrios programas. Cada programa fornece uma parcela de
suas capacidades gerais. Por exemplo, o compilador Java, que converte cdigo-fonte Java
em bytecode Java (uma linguagem intermediria para a JVM), fornecido como parte do Java
Development Kit (JDK). O Java Runtime Environment (JRE) complementa a JVM com um
compilador just-in-time (JIT), que converte bytecodes intermedirios no cdigo de mquina
nativo da plataforma alvo. Um extenso conjunto de bibliotecas tambm forma a plataforma
Java.
Assim, os componentes essenciais da plataforma Java so: o compilador Java, as bibliotecas e
o ambiente de tempo de execuo em que o bytecode Java intermedirio executa de acordo
com as regras estabelecidas na especificao da mquina virtual.
O corao da plataforma Java a mquina virtual, que executa programas de bytecode Java.
Este cdigo o mesmo, no importa em que sistema operacional ou hardware o programa
est sendo executado. O compilador JIT traduz o bytecode Java em instrues do processador
nativo em tempo de execuo e armazena o cdigo nativo em memria durante a execuo.
O uso do bytecode como linguagem intermediria permite que os programas Java possam rodar
em qualquer plataforma que tenha uma mquina virtual disponvel. O uso de um compilador
22 PROGRAMAO I (JAVA) | Educao a Distncia
JIT permite que aplicaes Java, depois de um pequeno atraso durante o carregamento e
uma vez prontas, tendam a ser executadas to rpido como os programas nativos. Desde
a verso 1.2 da JRE, a implementao de Java incluiu um compilador just-in-time, em vez de
um interpretador.
Embora os programas Java sejam multiplataforma ou independente de plataforma, o cdigo
da mquina virtual em que estes programas rodam no . Cada plataforma operacional possui
a sua prpria JVM.
Em muitos sistemas operacionais modernos, um conjunto extenso de cdigo reutilizvel
fornecido para simplificar o trabalho do programador. Normalmente, esse cdigo fornecido
como um conjunto de bibliotecas carregveis dinamicamente, em tempo de execuo. Como a
Plataforma Java no dependente de qualquer sistema operacional especfico, os aplicativos
no podem confiar em qualquer biblioteca de sistema operacional pr-existente. Em vez disso,
a plataforma Java fornece um conjunto amplo de suas prprias bibliotecas-padro contendo,
grande parte, as mesmas funes reutilizveis comumente encontradas em sistemas
operacionais modernos. A maior parte do sistema de bibliotecas tambm escrita em Java.
Por exemplo, biblioteca Swing desenha a interface do usurio e controla os eventos em si,
eliminando muitas diferenas sutis entre diferentes plataformas, como lidar com componentes
semelhantes.
As bibliotecas Java servem a dois propsitos principais. Primeiro, assim como outras
bibliotecas de cdigo-padro, as bibliotecas Java fornecem ao programador um conjunto bem
conhecido de funes para realizar tarefas comuns, como a manuteno de listas de itens ou
a anlise de uma String complexa. Segundo, as bibliotecas de classe fornecem uma interface
abstrata para tarefas que normalmente dependem fortemente dos sistemas de hardware e
operacional. Tarefas como acesso rede e acesso a arquivos esto muitas vezes fortemente
entrelaadas com as implementaes distintas de cada plataforma. As bibliotecas java.net e
java.io implementam uma camada de abstrao em cdigo nativo do sistema operacional,
ento fornecido para a interface padro das aplicaes Java.
23
PROGRAMAO I (JAVA) | Educao a Distncia
De acordo com a Oracle, o JRE encontrado em mais de 850 milhes de computadores.
A Microsoft no tem fornecido um JRE com seus sistemas operacionais desde que a Sun
Microsystems processou a Microsoft por adicionar classes especficas do Windows ao pacote
do ambiente de execuo Java.
Alguns aplicativos Java esto em uso em desktop, incluindo ambientes de desenvolvimento
integrados, como NetBeans e Eclipse, e os clientes de compartilhamento de arquivos como
o Limewire e Vuze. O Java tambm usado no ambiente de programao matemtica
MATLAB para tornar a interface do usurio mais amigvel. O Java fornece interface de usurio
multiplataforma para algumas aplicaes, como o Lotus Notes.
O que a tecnologia Java e por que necessria?
Por Oracle, Inc.
Java uma linguagem de programao e uma plataforma de computao lanada pela primeira vez
pela Sun Microsystems em 1995. a tecnologia que capacita muitos programas da mais alta quali-
dade, como utilitrios, jogos e aplicativos corporativos, entre muitos outros, por exemplo. O Java
executado em mais de 850 milhes de computadores pessoais e em bilhes de dispositivos em todo
o mundo, inclusive telefones celulares e dispositivos de televiso.
Saiba mais sobre o assunto no artigo completo.
Disponvel em: <http://www.java.com/pt_BR/download/faq/whatis_java.xml>. Acesso em: 03 abr. 2013.
24 PROGRAMAO I (JAVA) | Educao a Distncia
Java est em toda parte.
Disponvel em: <http://www.youtube.com/watch?v=sd4KPIF8eAo>.
O PROCESSO DE COMPILAO E INTERPRETAO DE PROGRAMAS
JAVA
F
o
n
t
e
:

S
H
U
T
T
E
R
S
T
O
C
K
.
C
O
M
O JDK inclui muitos utilitrios para compilao, depurao e execuo de aplicaes Java.
O Compilador Java
Uma aplicao Java deve ter pelo menos uma classe que contenha um mtodo chamado
main(), o qual contm o primeiro cdigo a ser executado para iniciar a aplicao.
25
PROGRAMAO I (JAVA) | Educao a Distncia
A classe, a seguir, um bom exemplo, ela simplesmente mostra a frase Ol, Mundo! na sada
padro, que neste caso o console:
public class OlaMundo {
public static void main(String[] args) {
System.out.println(Ol, Mundo!);
}
}
O compilador Java simplesmente converte arquivos-fonte Java em bytecodes. O uso do
compilador Java o seguinte:
javac [opes] [arquivo fonte]
A forma mais direta como se segue:
javac OlaMundo.java
Isso resultar em um arquivo bytecode com o mesmo nome do arquivo .java, mas com a
extenso .class: OlaMundo.class. possvel, ainda, informar a pasta de destino do bytecode
com a opo d.
O Classpath
O Path (caminho em ingls) uma varivel de ambiente de um sistema operacional que fornece
a uma aplicao uma lista de pastas onde procurar por algum recurso especfico.
O exemplo mais comum o caminho para programas executveis. A varivel de ambiente
CLASSPATH de Java uma lista de locais que so visitados na procura por arquivos de
classes. Tanto o interpretador Java como o compilador Java usa a CLASSPATH quando
procura por pacotes e classes Java.
Um elemento de classpath pode ser uma pasta, um arquivo .JAR ou um arquivo .ZIP. A forma
exata de configurar a classpath varia de sistema para sistema. Em um sistema baseado no
Unix (incluindo o Mac OS X), voc pode configurar a varivel de ambiente CLASSPATH com
26 PROGRAMAO I (JAVA) | Educao a Distncia
uma lista de locais separados por dois pontos. Por exemplo:
% CLASSPATH=/home/ze/Java/classes:/home/maria/lib/foo.jar:.
% export CLASSPATH
Nesse exemplo, estamos especificando uma classpath com trs locais: uma pasta chamada
classes, um arquivo .JAR e a pasta atual que especificada com um ponto.
No sistema Windows, a varivel de ambiente CLASSPATH configurada com uma lista de
locais separada por ponto e vrgula. Por exemplo:
C:\> set CLASSPATH=D:\users\joao\Java\classes;E:\apps;
O inicializador Java e outras ferramentas de linha de comando sabem como encontrar as
classes essenciais, as quais so includas na instalao Java. As classes nos pacotes java.
lang, java.io, java.net, e java.swing, por exemplo, no precisam ser includas na classpath.
Para encontrar outras classes, o compilador e o interpretador Java procuram os elementos
da classpath na ordem em que foram inseridos. A busca combina os locais e os nomes dos
pacotes das classes. Por exemplo, imagine a estrutura de pacote e classe animais.passaros.
Galinha. Procurar o local /usr/lib/java includo na classpath, significa procurar por /usr/lib/java/
animais/passaros/Galinha.class. Procurar pelo local /home/maria/classesuteis.jar includo na
classpath, significa procurar pelo arquivo /home/maria/classesuteis.jar e dentro dele procurar
pelo arquivo compactado animais/passaros/Galinha.class.
Se voc deseja compilar sua aplicao com pacotes e classes definidos por voc mesmo(a),
ter que dizer JVM onde procurar os pacotes e classes na classpath. Essa incluso da
informao de localizao da classe na classpath feita dizendo ao compilador onde a classe
ou pacote desejado esto com as opes de linha de comando cp ou classpath.
Por exemplo:
javac cp terceiros\classes;\home\maria\classesuteis.jar;. AloMundo.java
27
PROGRAMAO I (JAVA) | Educao a Distncia
Essa linha de comando diz que alm das classes core, qualquer classe ou pacote que esteja
nos locais citados na lista separada por ponto e vrgula pode ser utilizado na compilao de
AloMundo.java.
Note que no necessrio incluir na classpath da compilao o local das classes core, como
j foi dito, e tambm locais j definidos na varivel de ambiente CLASSPATH.
Para conhecer outras opes do compilador javac, basta digitar javac help ou simplesmente
javac sem nenhum complemento. Uma lista com as opes ser mostrada.
O interpretador Java
A interpretao de arquivos bytecode Java a base para a criao de aplicaes Java.
A forma de utilizar o aplicativo java.exe para interpretar arquivos de bytecode (.class) a
seguinte:
java [-opes] nome_da_classe [argumentos]
Interpretao do bytecode
O interpretador Java chamado com o aplicativo java.exe (no Windows). Ele usado para
interpretar o bytecode (arquivo .class) e executar o programa.
O nome da classe deve ser especificado de forma completa, incluindo pacotes, se houver.
Alguns exemplos:
% java animais.passaros.Galinha
% java AloMundo
O interpretador procura pela classe na classpath. Por outro lado, voc pode querer definir onde
se encontram certos pacotes ou classes que sejam importantes para a interpretao (como
classes de apoio). Voc pode encontrar pacotes ou classes em tempo de execuo incluindo a
opo cp ou classpath com o interpretador. A utilizao a mesma que no comando javac
visto anteriormente.
28 PROGRAMAO I (JAVA) | Educao a Distncia
O interpretador Java pode ser utilizado com a opo jar para executar um arquivo container
.JAR. Por exemplo:
% java -jar batalhanaval.jar
Nesse caso, o arquivo .JAR se torna o classpath e a classe que contm o mtodo main()
dentro dela considerada o programa a ser executado.
A assinatura do mtodo main()
O mtodo main() deve possuir a assinatura de mtodo correta. A assinatura de um mtodo um
conjunto de informaes que define o mtodo. Ela inclui o nome do mtodo, seus argumentos
e o tipo de retorno, assim como o modificador de visibilidade e tipo. O mtodo main() deve ser
pblico (public), esttico (static) e receber um array de objetos Strings (textos, nesse caso sem
espao) e no deve retornar valor indicando com a palavra reservada void. Assim:
public static void main (String[] argumentos)
O fato de main() ser pblico e esttico simplesmente significa que ele acessvel globalmente
e que ele pode ser chamado diretamente pelo nome. Quem o chama o inicializador quando
interpretamos o bytecode.
O nico argumento do mtodo main() um array de objetos Strings, que serve para
armazenar em cada entrada do array os parmetros digitados pelo usurio aps o nome da
classe a ser interpretada. O nome do parmetro pode ser escolhido pelo usurio (escolhemos
argumentos no exemplo acima); mas o tipo deve ser sempre String[], que significa array
de objetos String.
Se, por exemplo, interpretamos uma classe que aceita argumentos da seguinte forma:
java ClasseExemplo arroz feijo macarro
29
PROGRAMAO I (JAVA) | Educao a Distncia
Ento teremos a primeira posio do array, argumentos[0] igual a arroz, a segunda posio,
argumentos[1] igual a feijo e a terceira posio do array, argumentos[2] igual a macarro.
Repare que arrays tm sua indexao comeada por zero.
O processo interpretao e compilao: Entendendo o Java de uma forma diferente
Por Oracle, Inc.
Entenda como o Java compilado e interpretado neste artigo que ilustra todas as etapas com exem-
plos prticos.
Saiba mais sobre o assunto no artigo completo.
Disponvel em: <http://www.devmedia.com.br/processo-de-interpretacao-e-compilacao-entendendo-
-o-java-de-uma-forma-diferente/24257>.
Codifcando, compilando e executando um programa Java
Disponvel em: <http://www.youtube.com/watch?v=M9LCDfRTyQ0>.
30 PROGRAMAO I (JAVA) | Educao a Distncia
Introduo linguagem Java Captulo 1 do Livro Programao Java com nfase em orientao
a objetos
Por Douglas R. Mendes
Saiba mais sobre o assunto no captulo completo.
Disponvel em: <http://www.novateceditora.com.br/livros/javaoo/capitulo9788575221761.pdf>.
CONSIDERAES FINAIS
Nesta primeira unidade, foi apresentada a histria e a evoluo da linguagem Java, os
elementos que compem a tecnologia Java e o processo de compilao, interpretao e
execuo de um arquivo Java.
Esses conceitos so importantes do ponto de vista geral, enquanto voc, caro(a) aluno(a),
deve domin-los com o intuito de entender grande parte do que acontece desde o momento
em que programamos usando Java at o momento em que o programa criado executado.
O Java uma linguagem e uma tecnologia muito poderosa, que pode trazer grandes benefcios
ao desenvolvedor, desde que este tenha o domnio dos conhecimentos bsicos. Assim, espero
que esta primeira unidade tenha lhe fornecido algum conhecimento novo e que voc possa
desfrutar de todo o restante do livro.
ATIVIDADES DE AUTOESTUDO
1. Por que o Java divulga tanto que os seus programas so write once, run everywhere?
2. Quais as principais caractersticas do Java 5? O que mudou nos programas j existentes at
o momento do seu lanamento?
3. O que JCP? Como voc pode fazer para submeter uma mudana que voc considera
importante para futuras verses de Java?
31
PROGRAMAO I (JAVA) | Educao a Distncia
4. Quais plataformas compem a tecnologia Java? Fornea uma pequena descrio de cada
uma delas.
5. Explique o que bytecode e como ele deve ser lido para permitir que um programa Java
seja executado.
6. Explique, com as suas palavras, o processo de compilao, interpretao e execuo de
programas Java. Dica: faa uma ilustrao.
7. Por que o classpath to importante para o Java?
O Java uma linguagem totalmente orientada a objetos!
UNIDADE II
ESTRUTURAS BSICAS DA LINGUAGEM JAVA
Professor Dr. Edson A. Oliveira Junior
Objetivos de Aprendizagem
Estudar as estruturas Bsicas da Linguagem Java.
Estudar Tipos Primitivos.
Estudar Declarao e Inicializao de Variveis.
Estudar Escopo de Variveis.
Estudar Estruturas de Controle.
Estudar Estruturas de Repetio.
Estudar Estruturas de Seleo.
Plano de Estudo
A seguir, apresentam-se os tpicos que voc estudar nesta unidade:
O que so tipos primitivos
Declarao e inicializao de variveis
Escopo de varivel
Estrutura de controle
Estrutura de repetio
Estrutura de seleo
35
PROGRAMAO I (JAVA) | Educao a Distncia
INTRODUO
Caro(a) aluno(a), nesta unidade iremos compreender alguns dos elementos bsicos da
linguagem Java. Abordaremos os aspectos fundamentais das palavras-chaves, tipos primitivos,
variveis e escopo de variveis, que so responsveis por informar como acessar uma varivel
de outra classe.
Tambm abordaremos estruturas de controle, repetio e seleo. Essas estruturas de
controle so uma parte-chave de quase toda linguagem de programao e a linguagem Java
oferece vrias maneiras de execut-las. Algumas, como as instrues if e for, so comuns
maioria as linguagens.
Para a implementao de todos os exemplos, usaremos a plataforma de desenvolvimento
NetBeans IDE e a ferramenta Astah Community para realizar todas as modelagens UML de
nosso projeto. A UML (Unified Modeling Language - Linguagem de Modelagem Unificada)
uma linguagem visual utilizada para modelar sistemas computacionais orientados a objeto.
Neste trabalho, faremos uso do diagrama de atividades que apresenta muita semelhana com
fluxogramas utilizados para desenvolver a lgica de programao e determinar o fluxo de
controle de um algoritmo.
O QUE SO TIPOS PRIMITIVOS?
Toda a linguagem de programao possui uma maneira de tratar os dados que sero
manipulados em um sistema. Para tanto, esses dados devem ser armazenados em tipos de
dados que correspondam ao seu valor.
Definir um tipo de dado mais adequado para ser armazenado em uma varivel uma questo
de grande importncia para garantir a resoluo do problema. Ao desenvolver um algoritmo,
necessrio que se tenha conhecimento prvio do tipo de informao (dado) que ser utilizado
36 PROGRAMAO I (JAVA) | Educao a Distncia
para resolver o problema proposto. Da escolhe-se o tipo adequado para a varivel que
representar esse valor.
As variveis devem ser declaradas respeitando-se a sintaxe bsica tipo nomeVariavel;. H
oito tipos de dados primitivos em Java e vamos compreender um pouco mais sobre cada um
a seguir.
Tipos Inteiros
Os tipos inteiros so para nmeros sem partes fracionrias. Valores negativos so permitidos.
O Java fornece os quatro tipos de nmeros inteiros mostrado na tabela abaixo:
Tabela 1 Tipos inteiros
byte Representam nmeros inteiros de 8 bits (1 byte). Podem assumir valores entre -128 a 127.
short Representam nmeros inteiros de 16 bits (2 bytes). Podem assumir valores entre -32.768
at 32.767.
int Representam nmeros inteiros de 32 bits (4 bytes). Podem assumir valores entre
-2.147.483.648 at 2.147.483.647.
long Representam nmeros inteiros de 64 bits (8 bytes). Podem assumir valores entre
-9.223.372.036.854.775.808 at 9.223.372.036.854.775.807.
Fonte: o autor
Na maioria das situaes, o tipo int o mais prtico. Os tipos byte e short so essencialmente
utilizados para aplicativos especializados, como tratamento de arquivo de baixo nvel, ou para
grandes arrays quando h pouco espao de armazenamento.
O tipo long deve ser identificado com a letra L para no ser compactado pela linguagem em
um tipo inteiro. A compactao ocorre como uma maneira de reduzir o uso de memria.
37
PROGRAMAO I (JAVA) | Educao a Distncia
Tipos de ponto flutuante
Os tipos de ponto flutuante denotam nmeros com partes fracionrias. Os dois tipos de ponto
flutuante so mostrados na tabela abaixo:
Tabela 2 Tipos futuantes
foat Representam nmeros reais de 32 bits com preciso simples. Podem assumir valores de
ponto futuante com formato defnido pela especifcao IEEE 754.
double Representam nmeros reais de 64 bits com preciso dupla. Assim como o foat, podem
assumir valores de ponto futuante com formato defnido pela especifcao IEEE 754.
Fonte: o autor
O nome double refere-se ao fato de que esses nmeros so duas vezes mais precisos do
que o tipo float. As nicas razes para utilizar float so aquelas raras situaes em que o
processamento importante ou quando voc precisa armazenar um grande nmero deles.
Nmeros do tipo float tm sufixo F (por exemplo, 3.454F). Nmeros de ponto flutuante sem
um sufixo F sempre so considerados como o tipo double. Opcionalmente, voc pode fornecer
o sufixo D (3.22D).
O tipo char
O tipo char utilizado para descrever caracteres individuais. Por exemplo A um caractere de
constante com um valor 65. Ele diferente de A, uma string que contm um nico caractere.
Tabela 3 Tipos char
char Representam notao de caracteres de 16 bits (2 bytes) para formato Unicode UTF-16.
Podem assumir caracteres entre \u0000 a \uffff e valores numricos entre 0 a 65535.
Fonte: o autor
38 PROGRAMAO I (JAVA) | Educao a Distncia
O tipo boolean
O tipo boolean tem dois valores, false e true. Ele utilizado para avaliar condies lgicas.
Voc no pode converter entre nmeros inteiros e valores boolean.
Tabela 4 Tipos boolean
boolean Representam apenas 1 bit de informao (0 ou 1). Podem assumir apenas os valores
true e false.
Fonte: o autor
DECLARAO E INICIALIZAO DE VARIVEIS
Declarao de variveis
Java uma linguagem de programao fortemente tipada. Isto significa que cada varivel deve
ter um tipo de dado associado a ela. Por exemplo, uma varivel pode ser declarada para usar
um dos oito tipos de dados primitivos: byte, short, int, long, float, double, char ou boolean, que
so os tipos primitivos que vimos anteriormente.
O nome de uma varivel pode comear com uma letra, um sublinhado _, ou cifro $. Se
o nome da varivel comear com um sublinhado, o segundo caractere deve ser uma letra
alfabtica. Veja, abaixo, alguns exemplos de declaraes de variveis.
Figura 1 Declarao de variveis
O nome no pode comear com um dgito (0, 1, 2, 3, 4, 5, 6, 7, 8 ou 9). Veja, a seguir, um
exemplo de tentativa de declarao de uma varivel iniciando com dgito.
39
PROGRAMAO I (JAVA) | Educao a Distncia
Figura 2 Declarao de uma varivel incorretamente
Observe que o NetBeans IDE destacou o nome incorreto de varivel.
Depois do primeiro caractere, o nome da varivel pode incluir letras, dgitos (0, 1, 2, 3, 4, 5,
6, 7, 8 ou 9) ou sublinhados, em qualquer combinao. O nome de uma varivel tambm no
pode ser nenhuma das palavras-chaves da linguagem Java. As palavras-chaves so palavras
especiais, reservadas em Java. Elas tm um significado para o compilador que as usa para
determinar o que seu cdigo-fonte est tentando fazer. Veja no quadro abaixo a lista das 49
palavras-chaves reservadas.
byte - short - int - long - char - Boolean - double - foat - public - private - protected - static - abstract
- fnal - strictfp - transient - synchronized - native - void - class - interface -implements - extends - if -
else - do - default - switch - case - break - continue - assert const - goto - throws - throw - new - catch
- try - fnally - return - this - package - import - instaceof - while - for - volatile - super
Inicializando Variveis
Antes de uma varivel ser utilizada, ela deve receber um valor inicial. Isto chamado de
inicializao de varivel. Se tentar usar uma varivel sem antes a inicializar, como no exemplo
abaixo, ocorrer um erro:
Figura 3 Inicializao de varivel incorretamente
40 PROGRAMAO I (JAVA) | Educao a Distncia
O compilador ir lanar um erro informando que a varivel nmero no pode ser inicializada.
Para inicializar uma varivel, usamos uma instruo de atribuio. Uma instruo de atribuio
segue o mesmo padro de uma equao de matemtica (por exemplo, a equao 2 + 2 = 4).
Para dar um valor varivel, o lado esquerdo tem de ser o nome da varivel e o lado direito o
valor atribudo, conforme figura abaixo:
Figura 4 Inicializao de variveis
No exemplo acima, o nmero foi declarado com um tipo de dados int e foi inicializado com 0
(zero). Podemos agora adicionar 5 para a varivel nmero, pois ela j foi inicializada:
Figura 5 Inicializao de variveis
Tipicamente, a inicializao de uma varivel feita ao mesmo tempo que a sua declarao:
Figura 6 Inicializao de variveis
41
PROGRAMAO I (JAVA) | Educao a Distncia
ESCOPO DE VARIVEL
Muitos erros de compilao so gerados porque os programadores no possuem uma imagem
clara de quanto tempo as variveis esto disponveis e quando elas podem ser acessadas. O
conceito escopo de varivel descreve a vida de uma varivel, ou seja, refere-se acessibilidade
de uma varivel. a parte do programa em que o nome da varivel pode ser referenciado. Voc
pode declarar varivel em vrios lugares diferentes do mesmo cdigo. Abaixo sero listados
vrios escopos de varivel para que voc possa compreender mais sobre esse assunto to
importante.
Variveis de instncia (atributos)
As variveis de instncias so definidas dentro da classe, mas fora de qualquer mtodo, e s
so inicializadas quando a classe instanciada. Elas so os campos que pertencem a cada
objeto. Por exemplo, o cdigo abaixo define campos (variveis de instncia) para a classe
Livro.
Figura 7 Variveis de instncia
A classe Livro do cdigo anterior informa que cada instncia sua ter seu prprio preo,
quantidade e tipo. Em outras palavras, cada instncia poder ter seus prprios valores
exclusivos para esses trs campos.
42 PROGRAMAO I (JAVA) | Educao a Distncia
Variveis Locais
As variveis locais so as declaradas dentro de um mtodo. Da mesma forma que a varivel
local inicia sua existncia dentro do mtodo, ela tambm eliminada quando a execuo do
mtodo concluda. No h palavra-chave especial que designa uma varivel como local; a
determinao vem inteiramente a partir do local em que a varivel declarada - que entre as
chaves de abertura e fechamento do mtodo.
As variveis locais s so visveis para os mtodos em que so declaradas, no so acessveis
a partir do resto da classe. Por isso elas no utilizam a maioria dos modificadores e acessos
como public, abstract, static etc., porm ela pode fazer uso do modificador final.
A varivel local precisa ser inicializada para ser usada. A sintaxe para declarar uma varivel
local e inicializ-la semelhante ao declarar um campo. Veja na imagem abaixo um exemplo
de varivel local.
Figura 8 Varivel local
Observe que a varivel contador foi declarada dentro do mtodo metodoContar(). E ela foi
inicializada na mesma linha onde foi declarada. O compilador rejeitar qualquer tentativa de
utilizao de uma varivel a qual no tenha sido atribudo um valor, porque diferente das
variveis de instncia as variveis locais no recebem valores padro.
A varivel contador do exemplo acima no pode ser referenciada em nenhum cdigo externo
ao mtodo onde foi declarada. Para compreendermos mais, vamos analisar a figura a seguir:
43
PROGRAMAO I (JAVA) | Educao a Distncia
Figura 9 Tentativa de acesso de varivel local
Observe que no segundo mtodo imprimir() a varivel contador foi destacada pelo NetBeans
IDE acusando um erro de acesso.
Variveis de Classe (Estticas)
Variveis de classe, tambm conhecidas como variveis estticas, so declaradas com
a palavra-chave static em uma classe, mas fora de um mtodo construtor ou um bloco. O
modificador static diz ao compilador que h apenas uma cpia de cada varivel de classe por
classe, independentemente de quantos objetos so criados a partir dele.
A ideia por trs do conceito de varivel esttica a de que objetos de uma mesma classe
podem e, em algumas situaes, devem compartilhar valores em comum, caso contrrio,
teramos de criar atributos que precisariam ser atualizados todos ao mesmo tempo, e em cada
objeto criado.
Vejamos o seguinte exemplo: um sistema de venda de livros possui um desconto que
ajustado regularmente de acordo com a inflao e repassado a todas as vendas de livros do
sistema, quando tivermos de fazer um ajuste ou atualizar o valor do desconto, teramos de
faz-lo em todos os livros cadastrados. Porm, se essa varivel no pertencer aos objetos,
e sim prpria classe, todos os livros sabero do novo desconto, pois se baseiam no mesmo
valor. Observe na figura a seguir o exemplo de um cdigo com a varivel static.
44 PROGRAMAO I (JAVA) | Educao a Distncia
Figura 10 Variveis estticas
Neste caso, a varivel quando esttica funciona mais ou menos como uma varivel do tipo
global em linguagens como Pascal ou Delphi. Embora no Java no exista um conceito de
varivel global, este caso seria talvez o que teramos mais prximo disto.
Ento quando a classe criada, a varivel DESCONTO inicializada com 20 e na chamada do
mtodo vender() ela calculada gerando assim um novo valor para o livro.
Comparando os escopos de varivel
A tabela abaixo apresenta uma comparao resumida entre os escopos de varivel vistos
anteriormente e os principais pontos que devem ser lembrados.
Tabela 5 Comparando o escopo de variveis
Local Instncia (atributos) Classe (estticas)
Onde a Declarar Dentro de um mtodo Dentro de uma classe, fora
de todos os mtodos, mas
sem static
Dentro de uma classe,
fora de todos os mto-
dos, com static
Proprietrio Mtodo em que
declarado
Cada objeto (instncia da
classe) dono de uma cpia
Classe onde ele
declarado
Tempo de vida Apenas enquanto o
mtodo estiver em
execuo
Enquanto o objeto que o
conter existir
Enquanto a classe
que o conter estiver
carregada
Onde utilizvel Apenas dentro do
mtodo em que
declarado
Em todos os mtodos de
instncia da classe
Em todos os mtodos
da classe
Fonte: o autor
45
PROGRAMAO I (JAVA) | Educao a Distncia
Tipos primitivos do Java
Por ActJava
Quando criamos um programa, devemos saber com que tipo de informao estamos lidando e para
qual fnalidade ela ser til. Afnal, devemos ter conhecimento disso para declararmos corretamente o
tipo de dado que a varivel ir suportar.
Saiba mais sobre o assunto no artigo completo.
Disponvel em: <http://www.actjava.com.br/2012/04/tipos-primitivos.html>.
Certifcao Java Tipos Primitivos
Disponvel em: <http://www.youtube.com/watch?v=PN0avdHxRZ8>.
46 PROGRAMAO I (JAVA) | Educao a Distncia
ESTRUTURAS DE CONTROLE
Quando voc compila e executa um programa Java, a JVM executa o que est dentro do
mtodo principal. Estas instrues so realizadas sequencialmente. Um programa de
computador (algoritmo) como uma receita: uma sequncia de instrues:
Leia um valor X;
Calcule Y como funo de X: Y = X * 2;
Imprima o resultado.
Estruturas de controle so instrues que permitem que blocos especficos de cdigo sejam
escolhidos para serem executados, redirecionando determinadas partes do fluxo do programa.
O Java contm trs tipos de estruturas de controle: instrues de sequncia; instruo de
seleo (if, if else, switch) e instrues de repetio (while, do-while, for).
Instrues de sequncia
Normalmente instrues em um programa so executadas uma aps a outra na ordem em que so
escritas. Somente programas muito simples so estritamente sequenciais. Vejamos o diagrama
de atividades UML que modela um fluxo de sequncia em Java com apenas 2 instrues.
Instruo 1
Instruo 2
Figura 11 Fluxograma da estrutura sequencial
Fonte: o autor
47
PROGRAMAO I (JAVA) | Educao a Distncia
O crculo slido na parte superior representa o estado inicial do nosso programa, os retngulos
so as diretrizes (instrues), as setas representam as transies e o crculo slido cercado
por um crculo vazio representa o estado final do nosso programa. Esse padro de modelagem
ser visto em outros exemplos desse material.
ESTRUTURAS DE SELEO
Instrues if e else
A linguagem Java disponibiliza os comandos if e else que, de forma seletiva, definem qual
bloco de comandos dever ser executado. Se a condio do comando if for avaliada como
verdadeira ser executado o bloco de comandos dentro do if. Abaixo temos a estrutura do
comando if.
if (expresso){
diretiva
}
Nesse cdigo, todas as instrues colocadas entre chaves sero executadas se forem
verdadeiras. Abaixo, podemos observar o fluxograma que representa o funcionamento do
comando if.
Diretiva 1
TRUE
FALSE
EXPRESSO
Figura 12 Fluxograma do comando if
Fonte: o autor
48 PROGRAMAO I (JAVA) | Educao a Distncia
Diretivas so as instrues que a linguagem Java fornece para a construo de programas.
Elas so separadas por ; (ponto e vrgula).
Vejamos um exemplo de um cdigo utilizando a instruo if.
Figura 13 Programa com instruo if
Observe que temos uma expresso comparando o valor1 com o valor2, no caso, a expresso
retornou um valor verdadeiro, o que fez com que a diretiva fosse executada. Agora vejamos a
estrutura de condio if else.
if (expresso){
Diretiva 1
}else {
Diretiva 2
}
Veja, a seguir a representao grfica da estrutura de seleo if e else. Observe que cada
diretiva executada dependendo do resultado da expresso.
49
PROGRAMAO I (JAVA) | Educao a Distncia
Diretiva 1
Diretiva 2
TRUE
FALSE
EXPRESSO
Figura 14 Fluxograma do comando if e else
Fonte: o autor
Agora vejamos um programa utilizando if e else:
Figura 15 Programa com a instruo if e else
50 PROGRAMAO I (JAVA) | Educao a Distncia
A expresso (valor1>valor2) sempre retornar um valor lgico, ou seja, verdadeiro ou falso.
Caso verdadeiro, o bloco de comandos abaixo da condio ser executado, caso contrrio, o
bloco else ser executado. Voc no obrigado a implementar o bloco else caso seu programa
no necessite.
Argumentos vlidos para instrues if
As instrues if s podem avaliar valores booleanos. Qualquer expresso que tenha como
resultado um valor booleano ser adequada. Podemos fazer uso de operadores lgicos && e
||. Quando usamos o operador &&, caso a primeira condio avaliada em um comando if seja
falsa, automaticamente a segunda expresso no ser avaliada. Quando usamos ||, caso a
primeira condio avaliada em um comando if seja verdadeira, automaticamente a segunda
expresso no ser avaliada.
Figura 16 Programa com instruo if e else e operadores lgicos
51
PROGRAMAO I (JAVA) | Educao a Distncia
Note no nosso cdigo que s foram impressas as linhas que retornaram uma condio positiva.
J que os testes if requerem expresses booleanas, voc precisa ter um conhecimento slido
tanto sobre os operadores lgicos quanto sobre a sintaxe e semntica do teste if.
Instrues Switch
Uma estrutura muito utilizada em programao o switch. A instruo switch verifica uma
varivel e trabalha de acordo com seus cases. Os cases so as possibilidades de resultados
que so obtidos por switch.
Basicamente, o switch serve para controlar vrias aes diferentes de acordo com o case
definido dentro dele. Segue abaixo a estrutura do Switch:
switch (expresso ordinal) {
case valor ordinal 1:
diretiva 1;
break;
case valor ordinal 2:
diretiva 2;
break;
...
default:
diretiva N;
}
A expresso ordinal a expresso que retorna um valor de algum tipo discreto (inteiro, char
etc.). Veja, a seguir, o fluxograma da instruo switch.
52 PROGRAMAO I (JAVA) | Educao a Distncia
Diretiva 2 Diretiva 3 Diretiva 1
Expresso
Ordinal =
Figura 17 Programa com instruo switch
Fonte: o autor
possvel construir um programa com if equivalente ao switch. Observe o cdigo do bloco
else-if da figura abaixo com if aninhados:
Figura 18 Instrues if aninhados
53
PROGRAMAO I (JAVA) | Educao a Distncia
Talvez voc esteja se perguntando quando devo usar o switch e quando devo utilizar o comando
if. Qual dos dois comandos ser mais til? O cdigo da figura anterior um bom motivo para
se utilizar switch, pois o uso de cada um dos comandos depende da composio da estrutura
de deciso. Ento devemos escolher o switch quando, no teste realizado, usarmos uma
mesma varivel, igualando-a com vrios valores diferentes. A estrutura do comando switch
vem acompanhada com o comando case, que com base no valor da varivel do comando
switch define qual opo ser executada. Para que somente um entre os vrios comandos seja
executado, devemos executar o comando break logo aps a execuo dos comandos contidos
no bloco do comando case selecionado. Veja um exemplo na figura abaixo:
Figura 19 Instruo switch
Nesse programa vamos ler do teclado um caractere numrico utilizando a classe Scanner
do Java. A classe Scanner uma das diversas classes do Java que permite a leitura de
dados vindos do teclado. A utilizao do mtodo nextint() da classe Scanner deixa no buffer a
instruo da tecla pressionada.
54 PROGRAMAO I (JAVA) | Educao a Distncia
Agora que entendemos um pouco sobre essa poderosa classe Scanner do Java, vamos nos
ater ao que interessa, que a instruo de controle switch.
Nesse programa leremos do teclado um caractere numrico, e caso seja igual a uma das opes
do nosso menu, ele ento apresentar a informao personalizada para cada opo escolhida.
Somente executamos o comando break ao final dos comandos executados. importante
observar que a palavra-chave break interrompe a execuo do case. Se a palavra-chave
break for omitida, o programa simplesmente continuar a executar os outros blocos case
at que uma palavra break seja encontrada na instruo switch, ou at que a instruo
termine. Veja no exemplo abaixo como ficaria o nosso cdigo anterior comentando todos os
comandos break.
Figura 20 Instruo switch
Observe o resultado na sada de comando. Essa combinao aconteceu porque o cdigo no
chegou a uma instruo break; portanto, a execuo simplesmente continuou a percorrer cada
55
PROGRAMAO I (JAVA) | Educao a Distncia
instruo case at o final. Esse processo chamado de passagem completa por causa da
maneira como a execuo passa de uma instruo para a seguinte.
H tambm o comando default, que representa uma exceo a todas as opes listadas nos
comandos case. importante observar que nos comandos case da instruo switch s so
aceitas variveis do tipo int, char, byte, short.
ESTRUTURAS DE REPETIO
Os loops da linguagem Java permitem que voc repita a execuo de um bloco de cdigo
at que uma determinada condio seja verdadeira ou durante uma quantidade especfica de
iteraes.
Usando loop for
O loop for ser particularmente til para o controle do fluxo quando voc j souber quantas
vezes ter de executar as instrues do bloco do loop. A figura abaixo apresenta a estrutura
do comando for.
for ([incio]; [condio]; [inc/dec]){
diretiva;
}
Note que incio a diretiva executada antes do lao comear; em seguida, temos a condio
que a expresso de condio de parada do lao (geralmente, comparao com o valor final);
o inc/dec representa diretiva executada antes de comear cada iterao do lao (geralmente
usada para incrementar ou decrementar o contador). A seguir fluxograma de atividades do
comando for.
56 PROGRAMAO I (JAVA) | Educao a Distncia
INICIALIZAO
Diretiva
Incremento/
Decremento
Condio
FALSE
TRUE
Figura 21 Instruo for
Fonte: o autor
O loop for uma construo geral para suportar a interao que encontrada por uma varivel
de contador ou semelhante, que atualizada depois de cada iterao. Veja abaixo um exemplo
de um loop for.
Figura 22 Exemplo de programa com instruo for
57
PROGRAMAO I (JAVA) | Educao a Distncia
Lembrando que devemos usar o comando for quando sabemos de antemo quantas vezes o
loop dever ser executado.
Em vrias linguagens de programao, o for (ou similar) serve somente para repetio simples:
para i de 1 at 10 faa
Escreva i
fm_para
Em Java, pode-se usar para fazer repetio condicional:
Figura 23 Declarao da instruo for
Podemos efetuar mltiplas diretivas na inicializao e no incremento, se necessrio, separando
com vrgulas:
Figura 24 Declarao da instruo for
Usando loop while
O loop while ser adequado em cenrios nos quais voc no souber quantas vezes o bloco ou
instruo ter que ser repetido. A instruo while tem o formato a seguir:
while (condio)
{
Diretiva;
}
A condio a expresso de condio de parada do lao (expresso lgica). A seguir, o
diagrama da instruo while.
58 PROGRAMAO I (JAVA) | Educao a Distncia
Diretiva
Condio
FALSE
TRUE
Figura 25 Fluxograma da instruo while
Fonte: o autor
O problema com estruturas de repetio, principalmente com while, o que chamamos
de looping infinito. Damos esse nome ao fato de que o programa fica repetindo a mesma
sequncia de cdigos esperando por um resultado que nunca ir acontecer. Portanto,
imprescindvel que uma determinada varivel seja modificada de acordo com cada loop.
Na figura abaixo temos um programa utilizando a instruo while.
Figura 26 Exemplo de programa com instruo while
59
PROGRAMAO I (JAVA) | Educao a Distncia
Note que a varivel contador iniciada com 0, a cada loop executado somado 1 ao contador.
Perceba que o while ir manter a repetio enquanto a varivel contador for menor que 5.
Outro ponto importante que a varivel contador inicializada antes de chegar ao while,
assim, o while comparar a sentena e s depois permitir a execuo do bloco. Se quisermos
fazer todo o bloco primeiro e s depois fazer a comparao, devemos utilizar o comando DO
WHILE.
Usando loop do-while
O do while difere do while no sentido de permitir que pelo menos uma execuo do bloco de
comandos seja executada antes de testar a condio. O bloco de comandos ser executado
enquanto a condio for verdadeira. A figura abaixo mostra um exemplo da sintaxe do comando
do while e a representao grfica do comando.
do {
diretiva;
} while (condio);
Abaixo o fluxograma da instruo do while.
Diretiva
Condio
FALSE
TRUE
Figura 27 Exemplo de programa com instruo do-while
Fonte: o autor
60 PROGRAMAO I (JAVA) | Educao a Distncia
Note que do while s avalia depois, certamente executando a diretiva ao menos uma vez; neste
caso, devemos ter as mesmas precaues quanto ao while, no que diz respeito ao looping
infinito. No necessrio comparar a varivel de controle antes do bloco de cdigo como
acontece com while, pois a comparao s ser feita aps todo o cdigo ter sido executado.
Veja no exemplo abaixo:
Figura 28 Exemplo de programa com instruo do-while
Desvios incondicionais
O Java s tem dois casos especficos de desvios incondicionais: break e continue. Break
e continue so dois comandos de controle de estruturas largamente utilizados em loops
(repeties), como for e while.
Break
O comando break tem a funo de interromper a execuo de um loop. No comando switch,
por exemplo, ele determina que no pode ser executado o case seguinte, e assim por diante.
A seguir, temos uma repetio que se inicia em 1 e deve terminar em mil (500), mas dentro
desta estrutura h uma condio: se a varivel for igual a 6, saia da estrutura de repetio.
61
PROGRAMAO I (JAVA) | Educao a Distncia
Vejamos:
Figura 29 Exemplo de programa com comando break
Note que mesmo que a condio for instrusse para que o programa imprimisse nmeros at
o 500, a condio if se tornou vlida quando o cont chegou ao nmero 6, e sendo verdadeiro,
executou seu bloco de instruo interrompendo o programa.
Continue
O comando continue tem a funo de fazer com que a condio do comando de loop seja
novamente testada, mesmo antes de alcanar o fim do comando. Veja, a seguir, um exemplo
do comando continue.
62 PROGRAMAO I (JAVA) | Educao a Distncia
Figura 30 Exemplo de programa com comando continue
Note que o programa no imprimiu os nmeros 5, 6 e 7 devido execuo do comando
continue.
Break e continue rotulados
Tanto a instruo break quanto continue podem ser no rotuladas ou rotuladas. As rotuladas
sero necessrias somente nas situaes em que voc tiver um loop aninhado e precisar indicar
qual quer encerrar ou a partir de qual deseja continuar a prxima interao. Uma instruo
break sair do loop rotulado e no do loop atual se a palavra-chave break for combinada com
um rtulo. Um exemplo do formato de um rtulo se encontra no cdigo a seguir:
63
PROGRAMAO I (JAVA) | Educao a Distncia
Figura 31 Exemplo de programa com comando break rotulado
Nesse exemplo, a sentena Dentro do Loop ser exibida uma vez. Em seguida, a instruo
break rotulada ser executada e o fluxo sair do loop rotulado com o rtulo que declaramos
externo. Ento, a prxima linha de cdigo exibir Fora do Programa. Vejamos o que
acontecer se a instruo continue for usada em vez de break:
64 PROGRAMAO I (JAVA) | Educao a Distncia
Figura 32 Exemplo de programa com comando continue rotulado
Figura 33 Resultado do programa com comando continue rotulado
Nesse exemplo, a sentena Dentro do Loop foi executada 2 vezes atendendo a condio de
y < 3. Depois de concluda essa instruo, o programa imprimiu 13 vezes a sentena Fora do
Loop. Para concluir, quando a condio do loop externo for avaliada como falsa, o loop i ser
encerrado e a sentena Fora do Programa ser exibida.
65
PROGRAMAO I (JAVA) | Educao a Distncia
Break e continue no rotulados
As instrues break e continue no rotuladas saram da estrutura do loop atual e prosseguiro
na linha de cdigo posterior ao bloco do loop. O exemplo abaixo demonstra uma instruo
break.
Figura 34 Resultado do programa com comando break no rotulado
No exemplo anterior, a instruo break no foi rotulada. A seguir, temos o exemplo com a
instruo continue no rotulada.
Figura 35 Resultado do programa com comando continue no rotulado
66 PROGRAMAO I (JAVA) | Educao a Distncia
Observe que aps executar o cdigo anterior no foi impresso o nmero 3, pois ao chegar na
condio, o programa encontrou um continue que mandou continuar a execuo do programa.
Fundamentos da UML
Por KDE.org
A Unifed Modelling Language (UML) uma linguagem ou notao de diagramas para especifcar,
visualizar e documentar modelos de software orientados por objetos. A UML no um mtodo de
desenvolvimento, o que signifca que no lhe diz o que fazer primeiro ou o que fazer depois ou como
desenhar o seu sistema, mas ajuda-o a visualizar o seu desenho e a comunicar com os outros. A
UML controlada pela Object Management Group (OMG) e a norma da indstria para descrever
grafcamente o software.
Saiba mais sobre o assunto no artigo completo.
Disponvel em: <http://docs.kde.org/stable/pt_BR/kdesdk/umbrello/uml-basics.html>. Acesso em
14 maio 2013.
Introduo a UML
Disponvel em: <http://www.youtube.com/watch?v=hfN6n5fJfLc>.
CONSIDERAES FINAIS
Nesta Unidade abordamos aspectos fundamentais da linguagem Java. Como vimos, h
vrios tipos primitivos em Java, cada um com um consumo de memria determinado que afeta
diretamente o seu alcance. Vimos tambm que uma varivel referenciar sempre a um tipo
primitivo de Java e que o escopo a vida de uma varivel em Java, tratando-se dos locais
nos quais ela pode ser acessada. Em Java, o escopo de variveis vai de acordo com o bloco
67
PROGRAMAO I (JAVA) | Educao a Distncia
onde elas foram declaradas. A varivel criada no primeiro acesso a ela e destruda aps o
interpretador sair do bloco de execuo ao qual ela pertence.
Tambm abordamos uma importante rea envolvendo maneiras de controlar o fluxo de seu
programa, com base em um teste condicional. Primeiro voc conheceu as instrues if e
switch. A instruo if avalia uma ou mais expresses com relao a um resultado booleano. A
instruo switch usada para substituir vrias instrues if-else.
Voc tambm conheceu trs estruturas de loop disponveis na linguagem Java. Essas
estruturas so os loops for, while e do-while. De um modo geral, o loop for usado quando
sabemos quantas vezes ser preciso percorrer o loop. O loop while usado quando no
sabemos quantas vezes precisamos percorrer o loop, enquanto o do-while empregado
quando temos que percorrer o loop pelo menos uma vez.
ATIVIDADES DE AUTOESTUDO
1. Suponha que uma varivel declarada como int a = 2147483647. Qual ser o resultado das
impresses a seguir?
a) System.out.println(a);
b) System.out.println(a + 1);
c) System.out.println(2 - a);
d) System.out.println(-2 - a);
e) System.out.println(2 * a);
f) System.out.println(4 * a);
2. O que est errado com cada uma das seguintes afirmaes?
a) if (a > b) then c = 0;
b) if a > b { c = 0; }
c) if (a > b) c = 0;
d) if (a > b) c = 0 else b = 0;
68 PROGRAMAO I (JAVA) | Educao a Distncia
3. Escreva um programa para cada situao de instrues de controle abaixo:
a) If-else.
b) Switch.
c) For loop.
d) While.
A efcincia de Java depende totalmente do tipo de hardware utilizado!
UNIDADE III
CLASSES X OBJETOS JAVA
Professor Dr. Edson A. Oliveira Junior
Objetivos de Aprendizagem
Entender o que uma classe Java.
Entender o que um objeto Java.
Estudar o que atributo, mtodo, construtores, e o mtodo main.
Plano de Estudo
A seguir, apresentam-se os tpicos que voc estudar nesta unidade:
Conceitos Bsicos de Classes
Conceitos Bsicos de Objetos
JavaBeans ou POJOs
Estado e Comportamento de Objetos
71
PROGRAMAO I (JAVA) | Educao a Distncia
INTRODUO
Conforme visto nas Unidades anteriores, a Classe ser o modelo utilizado para criarmos o
Objeto, e desta maneira resolver o problema. Mas como criar uma Classe em Java? E um
Objeto? Ser possvel pegar e tocar neste Objeto que iremos criar? Vamos aprender como
fazer estas e mais coisas neste momento.
Para os estudos a seguir, iremos criar um projeto na nossa IDE NetBeans chamado Agenda.
Para isto, basta:
Clicar em Arquivo -> Novo Projeto
Figura 36 Menu para se criar um Novo Projeto
Neste momento h uma infinidade de possibilidades para escolher que tipo ser o seu projeto.
Neste momento, iremos trabalhar apenas com aplicaes para desktop. Logo usaremos o
Java. Ao clicar em Java, algumas opes iro aparecer na parte direita da tela. Basta escolher,
criar uma Aplicao Java e clicar em Prximo.
72 PROGRAMAO I (JAVA) | Educao a Distncia
Figura 37 Primeiro passo para se criar um projeto Java
Em seguida, o NetBeans nos d a oportunidade de dar um nome para o projeto. Coloque o
nome de Agenda no primeiro campo. Logo abaixo, ele mostra onde ficaro os arquivos dentro
do sistema de pastas de seu sistema operacional. Grave bem o local, ou coloque um local de
sua escolha, para depois voc ter acesso ao programa pronto. No se esquea de desmarcar
a opo de Criar Classe Principal, para que possamos ns mesmos criar a nossa classe.
73
PROGRAMAO I (JAVA) | Educao a Distncia
Figura 38 Segundo passo para se criar um projeto Java
Ao se criar um projeto novo, possvel verificar 2 itens dentro do projeto. O Pacotes de
cdigo-fonte, que ser o local onde guardaremos nossas classes, e Bibliotecas, que o local
onde guardaremos classes j existentes em forma de biblioteca. Por hora, vamos necessitar
apenas da JDK do Java.
Para nos auxiliar na organizao de nossas classes, podemos utilizar um organizador que
chamamos de Pacote.
Pacotes
Os pacotes so agrupamentos de classes, que nos auxiliam a separ-las de acordo com
uma determinada caracterstica das classes. Esta organizao se faz necessria, pois por
meio dela fica mais fcil para que outras pessoas que olhem o seu cdigo entendam o seu
74 PROGRAMAO I (JAVA) | Educao a Distncia
programa, alm de auxiliar no trabalho em equipe e manuteno do seu software. Dificilmente
um programador que faa um software mais complexo que uma calculadora no utilize pacotes.
Apesar de aparecer um <pacote padro> dentro do projeto, este no um pacote. Para
se criar um pacote, basta clicar com o boto direito sobre a rea onde iro ficar as nossas
classes, clicar em Novo -> Pacote Java....
Figura 39 Menu para se criar um Pacote novo
Caso a opo Pacote Java... no esteja disponvel, selecione a opo Outro.... Esta opo
ir abrir uma janela, onde voc dever procurar pela opo Java na janela da esquerda, e
Pacote Java na janela da direita.
75
PROGRAMAO I (JAVA) | Educao a Distncia
Figura 40 Forma alternativa para se criar um Pacote novo
Ao se clicar em Pacote Java... uma nova janela ir se abrir, onde dever ser colocado o nome
do pacote. Vamos atribuir o nome de Dados.
Figura 41 Tela onde o nome do pacote ser atribudo
76 PROGRAMAO I (JAVA) | Educao a Distncia
Dentro deste pacote, vamos criar uma classe nova, chamada Pessoa. Para isto, clique com o
boto direito sobre o pacote Dados, selecione Novo -> Classe Java....
Figura 42 Menu para se criar uma nova Classe Java
Em seguida, basta colocar o nome Pessoa e a classe ser criada. Ao abrir o arquivo Pessoa.
java, podemos verificar que ele se encontra dentro do pacote Dados pela primeira linha de
comando, que informa em qual pacote ele est. Tambm o NetBeans oferece um padro ao se
criar as classes. Algumas informaes adicionais podem ser vistas, mas esto comentadas,
ou seja, no faro diferena na nossa programao.
Figura 43 Cdigo gerado pelo NetBeans ao se criar uma classe com o nome de Pessoa
77
PROGRAMAO I (JAVA) | Educao a Distncia
Conceitos Bsicos de Classes
Com a classe Pessoa aberta, pode-se verificar alguns detalhes. Primeiro que o nome da classe
se encontra no fim do comando public class Pessoa. Este public class indica que iremos criar
uma classe que poder ser utilizada por quem quiser us-la. Depois deste comando, d-se o
nome da classe, que no por acaso o mesmo nome do arquivo, para depois abrir e fechar
os colchetes. Tudo que se encontrar dentro destes colchetes far parte da classe Pessoa,
por isso tome cuidado para quando for implementar seus atributos e mtodos, crie eles dentro
destas chaves.
Mas o que deveremos colocar dentro desta classe? Acho que chegou a hora de verificarmos
qual o problema que dever ser resolvido com o nosso programa. Nosso usurio gostaria de
ter uma agenda eletrnica, onde ele possa gerenciar o nome, idade e telefone de uma nica
pessoa. Opa, ento o que fizemos at aqui foi o certo. Criamos uma classe Pessoa, que ir
conter os dados que queremos guardar. Estes dados vo acabar virando Atributos de nossa
classe.
Atributos
Os atributos de uma classe so, basicamente, variveis que se encontram dentro da classe,
e que a ela pertencem. Como no exemplo a seguir, podemos ver 3 variveis criadas dentro
da classe Pessoa. O tipo de varivel de cada atributo dever ser analisado e estipulado antes
de se comear a programar. Para nosso problema, precisamos de uma varivel para guardar
o nome, uma para a idade e outra para o telefone. Ficou definido que, para o nome e para o
telefone, ser utilizado o tipo String, enquanto que para a idade, ser usado o tipo int.
Figura 44 Classe Pessoa depois de criar 3 atributos
78 PROGRAMAO I (JAVA) | Educao a Distncia
Agora, quando criarmos um objeto do tipo Pessoa, estas variveis sero criadas em forma
de atributos, reservando um espao na memria para elas. Logo, se criar 10 objetos do tipo
pessoa, sero reservados 20 espaos para se guardar String e 10 espaos para se guardar int.
Apesar disso, cada objeto ter as suas variveis e no influenciaro uns nos outros.
Mas ao criar-se um objeto do tipo Pessoa, as variveis tero algum valor padro? possvel
mudar este valor padro? Podemos definir o valor padro por meio dos Construtores das
classes.
Construtores
Este artifcio que podemos criar dentro de uma classe nos auxilia na hora definir valores padro
para os atributos que sero criados ao se montar um objeto. Os construtores so mtodos, ou
seja, podero conter cdigos de programao dos mais diversos. A principal diferena entre
um construtor e um mtodo qualquer, que o construtor no pode conter nenhum tipo de
retorno, dever ter exatamente o mesmo nome da classe e ele sempre ser chamado primeiro
quando um objeto for construdo.
Neste momento, vamos criar um construtor que apenas ir atribuir valores padro para os
atributos criados anteriormente. Primeiramente precisa-se criar o cabealho do construtor, que
contm se ele acessvel de fora da classe, o nome dele e se ele precisa de alguma varivel
para comear a trabalhar. Para a classe Pessoa, precisaremos criar um construtor da seguinte
forma:
public Pessoa(){ }
O public indica que ele ser acessvel de fora da classe. Conforme citado anteriormente, o
nome do construtor exatamente o nome da classe (cuidado nesta parte, pois o java considera
diferente as letras maisculas e minsculas). Por fim, temos que abrir e fechar os parnteses.
Se houver necessidade de alguma varivel para o construtor funcionar, basta colocar entre
estes parnteses. Como neste caso no h necessidade de nenhuma varivel a mais, basta
79
PROGRAMAO I (JAVA) | Educao a Distncia
colocar os parnteses sem nada. Eles so obrigatrios e esquec-los faz com que o java se
engane, e pense que voc est tentando criar uma varivel comum, e no um mtodo. Em
seguida ao cabealho, voc deve abrir e fechar as chaves, assim como foi feito na hora de
criar a classe. Todos os cdigos referentes ao construtor devem estar dentro destas chaves.
Como neste construtor iremos apenas iniciar os atributos com um valor, teremos o seguinte
cdigo:
Figura 45 Construtor Pessoa(), inicializando os atributos vazios
possvel criar diversos construtores para uma mesma classe. Como todos tm que ter o
mesmo nome da classe, o que ir diferenciar um construtor do outro so as variveis criadas
nos parnteses. Para o nosso exemplo, vamos criar um segundo construtor, porm os valores
que iro para os atributos sero passados por parmetro. A passagem de parmetro se d
quando recebemos estas variveis de fora, ou seja, pelos parnteses. A seguir podemos ver
como ficar o segundo construtor.
Figura 46 Novo construtor, recebendo 3 parmetros, um para cada atributo
Podemos reparar que a principal diferena entre o primeiro e o segundo construtor se d
nos parnteses. Neste segundo pode-se ver 3 variveis sendo criadas como parmetros.
Foi tomado o cuidado de no se criar variveis com os mesmos nomes dos atributos, mas
80 PROGRAMAO I (JAVA) | Educao a Distncia
veremos mais adiante o que fazer quando isso ocorrer. Porm, os tipos das variveis so os
mesmos. Tambm muito importante notar como foi separada uma varivel da outra. Com o
uso da vrgula. Como neste caso temos estas variveis, em vez de atribuir valores fixos para
os atributos, as variveis foram atribudas.
Vale lembrar que todos os cdigos, desde a criao dos atributos e dos construtores, devem
ficar dentro das chaves da classe.
O construtor um mtodo especial. Mas o que um mtodo? E se eu quiser criar um mtodo
normal? Teremos esta resposta na prxima seo.
Mtodos
Enquanto os atributos definem as caractersticas que um objeto ter quando criado, os
mtodos iro indicar quais funcionalidades que este objeto ter. Os mtodos nada mais so
do que pedaos de cdigo que recebem um determinado nome, e que podem ser chamados
quando criamos um objeto.
A estrutura de criao de um mtodo um pouco diferente da de um construtor. Este possui 4
partes. Primeiro, identificado se ele acessvel para outras classes. Em seguida, temos que
indicar se ao fim do mtodo, este ter que retornar algum valor ou no. Em seguida, temos o
nome e, por fim, se ele ir receber algum tipo de parmetro ou no. Supondo que vamos criar
um mtodo que recebe uma idade, e este mtodo dever verificar se uma idade vlida, ou
seja, se maior que 0 anos de idade. Se for, dever retornar verdadeiro, e caso no for, dever
retornar falso.
Mesmo no sabendo como iremos realizar esta comparao, j podemos pensar em como
ficar o cabealho deste mtodo. Primeiro, ele dever ser acessvel de outras classes. Depois,
dever retornar verdadeiro ou falso, dependendo da idade. Para este tipo de valor, podemos
utilizar uma varivel do tipo boolean. Depois temos o nome, que iremos colocar como
81
PROGRAMAO I (JAVA) | Educao a Distncia
testeIdade. Por fim, este mtodo dever receber a idade que ir testar para poder avali-la.
O cabealho da funo ficar desta forma:
public boolean testeIdade(int idade) { }
Com a varivel em mos, fica fcil montar uma lgica de programao que testa se a idade
maior ou menor que 0. O cdigo para esta funo pode ser escrito com um simples if:
if (idade >=0)
return true;
else
return false;
O cdigo final fica:
Figura 47 Mtodo testeIdade, que recebe um parmetro e retorna true ou false
Mas como podemos ter certeza de que esta varivel idade no if a varivel que est sendo
passada por parmetro, e no o atributo "idade" da classe? Existe uma regra que diz que uma
varivel criada dentro de um mtodo (ou dentro das chaves, ou dentro dos parnteses) sempre
leva vantagem sobre um atributo. Esta caracterstica recebe o nome de sombreamento, onde
a varivel criada para o mtodo deixa o atributo em sua sombra. Mas e se quisermos acessar
o atributo de dentro do mtodo? Veremos mais adiante como realizar esta faanha.
Outro mtodo interessante de se criar uma mensagem padro para mostrar os atributos da
classe de forma ordenada. Para isto, vamos criar um mtodo chamado mostrarDados, onde
82 PROGRAMAO I (JAVA) | Educao a Distncia
este no precisa receber nenhum valor, mas ele retorna uma String preparada para ser usada.
O cdigo desta funo ficar da seguinte forma:
Figura 48 Mtodo mostrarDados, que retorna uma frase contendo os atributos
organizados
Repare que para criar os nomes dos mtodos, algumas regras so adotadas para manter um
padro. Primeiro, importante ressaltar que nomes de mtodos no podem conter espaos,
caracteres especiais ou iniciar com nmero. Alm disso, adota-se a seguinte regra: o nome
do mtodo inicia-se com minsculo, e a cada palavra nova, no d espao nem underline,
mas deixa a primeira letra maiscula. Esta ltima regra um padro adotado entre os
programadores, com o intuito de uma maior legibilidade dos nomes dos mtodos. Fica a seu
cargo adotar esta regra ou no.
Nossa classe Pessoa est pronta. Ela contm 3 atributos, 2 construtores e 2 mtodos que
poderemos utilizar quando criarmos um objeto. Mas e o objeto dela, vamos criar onde? Para
poder utilizar esta classe, precisaremos criar uma segunda classe, mas com uma diferena
bem crucial. Esta segunda classe no servir para se criar objetos, mas sim para conter o
mtodo main.
Normalmente, cada mtodo possui um nome diferente em relao aos outros que esto na
mesma classe, que um fator determinante para diferenci-lo dos demais. Porm, muitas vezes
voc ter a necessidade de que um mtodo tenha a possibilidade de trabalhar com diferentes
tipos de variveis. Um exemplo claro o mtodo println(). Apesar de manter o mesmo nome,
voc pode passar qualquer tipo de varivel que ele mostrar na tela. Ns podemos recriar esta
caracterstica tambm realizando a sobrecarga de um mtodo.
83
PROGRAMAO I (JAVA) | Educao a Distncia
Um mtodo no identificado pelo seu nome, e sim pela sua assinatura. A principal diferena
que na assinatura, alm do nome, os parmetros tambm ajudam a identificar. Vamos criar
um mtodo chamado teste:
public void teste(){...}
A assinatura deste mtodo teste(). Se quisermos criar outro mtodo com o mesmo nome,
devemos mudar a forma como os parmetros esto chegando, por exemplo:
public void teste(String var1){...}
Porm, a assinatura de um mtodo no leva em considerao o nome das variveis, ou seja,
no possvel criar outro mtodo chamado teste, que receba uma varivel do tipo String,
mesmo que esta varivel tenha outro nome. O que levado em conta o nmero de parmetros
e a ordem deles. Logo, podemos criar outro mtodo:
public void teste(String var1, String var2, int var3){...}
e
public void teste(String var1, int var2, String var3){...}
O mtodo main
Este mtodo bem especial, pois serve de ponto de partida para que o seu sistema comece
a rodar. Todo programa em java comea de um mtodo main, que chama outros mtodos e
cria objetos de outras classes. Enquanto as outras classes trazem os cdigos necessrios
para resolver nosso problema, o main ir efetivamente resolver o problema com o auxlio das
classes previamente criadas.
O mtodo main possui uma forma exata de ser criado, que a seguinte:
public static void main (String args[]){ }
Para que ele seja o incio de seu programa, ele deve conter todos estes detalhes. Primeiro, o
public indica que ele ser aberto para outras classes. O static, uma novidade para ns at o
momento, indica que no precisaremos criar um objeto desta classe para usar o main. Desta
84 PROGRAMAO I (JAVA) | Educao a Distncia
forma, o prprio java chama este mtodo por voc. Void indica que o mtodo no retorna nada
e main o seu nome. Como parmetro, ele recebe um vetor de Strings, que pode ser passado
ou no, quando se chama o main.
Vamos criar um pacote novo chamado Principal (ainda lembra como?) e, dentro deste pacote,
criar uma classe chamada Incio. Vamos criar um mtodo main dentro desta classe. O cdigo
dever ficar da seguinte forma:
Figura 49 Nova classe Incio, dentro do pacote Principal; esta classe contm o mtodo
main
Para verificar se o seu cdigo est funcionando, vamos mandar imprimir um Ol Mundo! na
tela. Para isto, vamos usar o seguinte comando:
System.out.println(Ol Mundo!);
System.out indica a sada padro do computador, que por hora o monitor. Neste comando,
utilizamos o mtodo println, que imprime o que passamos por parmetro e pula uma linha. Para
imprimir na tela, tambm podemos utilizar mtodos como print e printf, que possuem poucas
diferenas, e ao longo de nossa experincia iremos verificar quais so elas.
85
PROGRAMAO I (JAVA) | Educao a Distncia
Para executar o seu cdigo, o Netbeans oferece uma srie de possibilidades. Uma delas
clicar com o boto direito sobre o seu projeto e escolher a ao Executar.
Figura 50 Menu utilizado para executar o projeto
Todo projeto precisa indicar qual a sua classe que contm o mtodo main implementado.
Caso no estiver configurado, ele ir solicitar quando for executar o seu programa. No nosso
caso, basta selecionar a opo Principal.Inicio. possvel verificar que este nome est assim
por causa da organizao feita at o momento. Primeiro indicar o caminho entre os pacotes
e, por fim, o nome da classe.
Figura 51 Tela utilizada para indicar qual classe contm o mtodo main
Para verificar se o seu projeto contm uma classe principal, ou se voc quiser mudar esta
classe em seu projeto, basta clicar com o boto direito sobre o seu projeto e escolher
Propriedades.
86 PROGRAMAO I (JAVA) | Educao a Distncia
Uma vez aberta a janela de propriedades, procure pela categoria Executar. Ao selecionar
esta categoria, alguns campos iro aparecer na janela. Procure pelo campo Classe Principal.
Este campo contm qual classe ser inicializada primeiro. Voc pode mudar a classe principal
clicando no boto Procurar ao lado do campo.
Figura 52 Tela de Propriedades do Projeto
Se a classe principal estiver configurada corretamente, ao executar o seu projeto uma nova
aba chamada Sada dever aparecer na janela do NetBeans contendo o resultado de seu
programa. Neste caso, apenas um Ol Mundo!.
Figura 53 Tela contendo o resultado da execuo do cdigo gerado
Mas onde esto os objetos? Como fao para cri-los e utiliz-los?
87
PROGRAMAO I (JAVA) | Educao a Distncia
OBJETOS JAVA
Em nosso programa, at agora, apenas criamos classes. Uma ainda nem foi utilizada, enquanto
que a outra age como a classe principal. A partir de agora, nossos esforos estaro voltados
para criar o cdigo dentro da classe Incio, dentro do mtodo main. Primeiro, vamos criar um
objeto da classe Pessoa, que se encontra em outro pacote.
Depois, vamos adicionar uma linha de comando antes da classe Incio, porm depois do
comando que indica o pacote daquela classe.
import Dados.Pessoa;
Este comando importa para a classe uma outra classe, podendo esta ser de uma biblioteca ou
de outra classe disponvel na mquina. No nosso caso, vamos importar a classe Pessoa, que
se encontra dentro do pacote Dados.
A partir de agora, podemos criar e usar a classe Pessoa. Vamos us-la para criar um objeto.
Dentro do mtodo main, vamos inserir o seguinte comando:
Pessoa pes = new Pessoa();
O comando acima cria um objeto do tipo Pessoa, chamado pes. Este comando possui 2
etapas bem distintas. O Pessoa pes cria uma varivel do tipo Pessoa. Seria o equivalente a
colocarmos int pes, que seria uma varivel do tipo inteiro. Porm, o objeto ainda no existe s
nesta declarao. Neste momento, apenas a referncia ao objeto foi criada, ficando a cargo do
new Pessoa() a funo de instanciar o objeto, ou seja, criar o objeto na memria. O comando
new reserva o espao na memria, que tem seu valor calculado quando informamos qual tipo
de objeto ser criado, indicado no Pessoa().
Estas duas aes so to distintas que podemos reescrever o cdigo acima em 2 linhas
separadas.
88 PROGRAMAO I (JAVA) | Educao a Distncia
Pessoa pes;
pes = new Pessoa();
Porm, existe uma regra de que voc no pode utilizar o objeto enquanto ele no for criado
na memria, ou seja, no for dado o comando new nele. Uma questo muito importante
que, ao se dar este comando, logo em seguida voc determina qual construtor ir chamar. No
cdigo anterior, voc chama o construtor que no recebe parmetro algum. Logo, os atributos
destes objetos esto zerados ou com Strings vazias. Como temos 2 construtores disponveis
para uso, para utilizar o construtor que recebe valores por parmetros, basta mandar os valores
no comando new. Exemplo:
Pessoa pes2 = new Pessoa(Joo,(11)0980-0980,13);
Neste comando, estamos criando um segundo objeto chamado de pes2, onde, ao instanciar o
objeto, os valores que esto sendo passados sero passados para os atributos.
Mas e o primeiro objeto, o pes? Agora que ele j foi criado e passou pelo construtor que
inicia os atributos zerados, como podemos fazer para atribuir algum valor para ele? Podemos
acessar seus atributos e mtodos colocando o nome do objeto, um ponto e o atributo ou
mtodo desejado. Vamos atribuir alguns valores para seus atributos.
pes.nome = Fulano;
pes.idade = 22;
pes.telefone = (00) 7654-3210;
Porm, ao inserirmos este cdigo acima, o NetBeans acusa que estas so linhas de
programao que contm erros. Para analisar o erro, coloque o cursor sobre o sinal de aviso
no incio da linha com erro.
89
PROGRAMAO I (JAVA) | Educao a Distncia
Figura 54 Cdigos dentro da classe Incio, que contm erros
Ao ler o problema, ele est indicando que os atributos no so acessveis de fora do pacote por
no serem pblicos. Para resolver este problema, podemos adotar duas medidas. A primeira
e mais simples inserir o modificador public para cada atributo na classe, conforme a imagem
seguinte.
Figura 55 Modificao nos atributos da classe Pessoa com o Public
A segunda medida que podemos tomar ser discutida na prxima seo.
A partir de agora, o nosso objeto pes possui seus atributos com os valores determinados
naquele cdigo. Para confirmar, vamos utilizar o mtodo mostrarDados() para mostrar os
valores dos atributos. O comando ficar assim:
System.out.println(pes.mostrarDados());
Para verificar que cada objeto tem os seus dados, vamos tambm chamar o mesmo mtodo,
mas pelo objeto pes2.
System.out.println(pes2.mostrarDados());
O cdigo e o resultado devem ficar desta maneira:
90 PROGRAMAO I (JAVA) | Educao a Distncia
Figura 56 Cdigo e resultado do cdigo gerado e executado
Um erro muito comum que ocorre no momento que trabalhamos com mais de um objeto dentro
de um mtodo. O que acontece se colocarmos a seguinte operao:
pes = pes2;
Em um primeiro momento, parece que os atributos foram replicados e agora existem dois
objetos contendo os mesmos valores. Porm, voc ir perceber algo estranho quando voc
mudar o atributo de algum dos objetos. Se esta linha acima for executada, caso voc altere o
atributo nome de um objeto, o outro tambm ser alterado. Isto porque os objetos no foram
replicados, e sim apenas a varivel que aponta para o objeto. Na verdade, existe um nico
objeto e 2 caminhos diferentes para se chegar nele. extremamente importante fazer com que
91
PROGRAMAO I (JAVA) | Educao a Distncia
cada varivel criada para servir de objeto tenha o seu prprio comando new. Atribuies desta
forma podem levar a erros que no so facilmente identificados.
Existe um objeto especial, que podemos usar como quisermos e que nos ajuda ao criar os
mtodos de algumas classes. Este objeto especial o this. No h necessidade de cri-lo para
utiliz-lo, porm ele tem um uso muito restrito. Ele representa o prprio objeto. Complicado?
Bom, como podemos pegar o atributo nome do objeto criado pes? Basta colocar:
pes.nome;
Porm, se estamos dentro da classe Pessoa, como podemos acessar o prprio atributo,
sendo que cada objeto tem o seu? Fcil, coloque:
this.nome;
Assim, quando chegar nesta linha, o Java saber que para voc pegar o atributo do prprio
objeto. Portanto, quando um objeto chamar uma funo que contenha este cdigo, ele vai
pegar o prprio atributo e utiliz-lo. Anteriormente, ao criarmos o mtodo de testar a idade,
criamos uma varivel dentro do mtodo com o mesmo nome do atributo. Se deixarmos no if
a condio:
if (idade > 0)
Ser analisada a varivel que est chegando pelo parmetro. Se mudarmos para:
if (this.idade > 0)
O atributo que ser utilizado. Vamos deixar sem o objeto this, pois montamos nosso mtodo
para trabalhar com o parmetro mesmo. Com o uso do this, podemos at mesmo chamar
construtores, mas veremos depois de aprender sobre JavaBeans.
Mas agora uma questo importante, podemos criar um construtor que recebe um objeto como
parmetro? A resposta claro que sim, mas tem que ter certo cuidado na hora que for trabalhar
com ele.
92 PROGRAMAO I (JAVA) | Educao a Distncia
Este tipo de construtor muito til quando voc possui objetos que voc quer replicar e evitar
o erro de 2 variveis apontarem para o mesmo objeto. Basicamente, a gente recebe o objeto
como parmetro, mas dentro do construtor, cada atributo tratado separadamente. O cdigo
desta funo possui as seguintes caractersticas:
Figura 57 Novo construtor, recebendo um Objeto do mesmo tipo como parmetro
JAVABEANS OU POJOS
O que fizemos at agora foi criar duas classes, sendo que uma a classe principal e contm
o mtodo main, enquanto que a outra foi criada para ser utilizada. Esta classe que foi criada
com o intuito de se criar objetos dela foi feita da maneira mais fcil possvel, porm fica fora
das convenes adotadas para se criar classes deste tipo.
Estas convenes foram escolhidas pela sociedade de desenvolvedores para estabelecer
um padro entre as diferentes classes que so criadas ao redor do mundo, e assim, desta
forma, facilitar o uso de objetos criados a partir desta classe. Apesar deste programa funcionar
sem adotar estas convenes, o ideal segui-las para que sua classe possa ser facilmente
reutilizvel e para que voc, acostumado com as convenes, possa facilmente utilizar outras
classes.
A primeira conveno que um construtor que no receba parmetros seja feito para que
valores vazios sejam atribudos. Esta conveno j foi atendida pela nossa classe.
93
PROGRAMAO I (JAVA) | Educao a Distncia
Um prximo item seria tratar todos os atributos como private, ao invs de public. Isso implica
que no podemos acessar o atributo diretamente de outra classe, como fizemos no exemplo
anterior. S que se colocarmos as variveis como privadas, nosso cdigo ficar com problemas.
Ao colocar um atributo como private, faz-se necessrio criar 2 mtodos especficos para
aquele atributo, voltados para desempenhar as 2 funes principais de um atributo, receber
valor e recuperar o valor que possui.
Para isto, vamos criar os mtodos para o atributo nome. O cdigo, a seguir, cria um mtodo
para inserir um valor em nome.
public void setNome(String nome){
this.nome = nome;
}
Veja que foi adotada a nomenclatura setNome para seguir um padro. O nome do mtodo que
ir inserir valores nos atributos sempre ser set + Nome do Atributo. Este mtodo normalmente
no possui retorno, pois uma operao de insero de contedo. Por isso, temos um
parmetro do mesmo tipo do atributo, e este parmetro est sendo atribudo para o atributo.
Neste momento, podemos notar como o this consegue diferenciar o atributo da varivel.
J o mtodo que retorna o contedo do atributo fica um pouco diferente:
public String getNome(){
return this.nome;
}
possvel notar a diferena no nome, j que este faz a unio do nome do atributo com a
palavra get. Alm disso, ele possui o retorno do mesmo tipo do atributo e no recebe nenhum
parmetro. Vamos ver como ficar nossa classe depois de criados todos os gets e sets.
94 PROGRAMAO I (JAVA) | Educao a Distncia
Figura 58 Criao dos mtodos get e set para os atributos que ficaram privates
Uma vez os atributos privados e seus mtodos de acesso criados, s nos falta alterar o cdigo
na classe Incio para que utilize estes mtodos de acesso. Vamos substituir as linhas voltadas
insero de contedo pelos seus respectivos mtodos set. Como vamos utilizar um mtodo,
no h necessidade do sinal de igual. Basta passar o valor desejado dentro dos parnteses
como parmetros.
Figura 59 Forma de utilizao dos mtodos set e get na classe Incio
95
PROGRAMAO I (JAVA) | Educao a Distncia
Voc pode estar se perguntando: mas por que toda esta volta? O cdigo est fazendo a mesma
coisa que antes, mas est maior e mais complexo. O que ganhamos com isso? Realmente o
cdigo fica maior e mais complexo, porm agora voc, como dono da classe que criou, tem um
controle maior em como os objetos criados a partir dela trabalham com seus atributos. Vamos
supor que no seu programa de extrema importncia que no possa ter idade negativa. Antes
ficava a cargo de quem utilizava seu objeto de cuidar que isto no ocorra, mas agora voc
pode controlar isto.
bem simples, basta apenas lembrar que dentro dos mtodos podemos adicionar qualquer
comando de programao, e que estes sets e gets so mtodos. Para resolver o problema
da idade negativa, vamos adicionar um controle dentro do setIdade. Assim, o objeto pode
tentar inserir uma idade negativa, mas no conseguir. Dessa forma os atributos ficam mais
protegidos e sua classe menos propensa a cometer erros.
Para este problema em especfico, temos criado j um mtodo testaIdade, que verifica
exatamente esta condio. Vamos fazer uso deste mtodo dentro do mtodo setIdade e caso
seja negativo, atribuir o valor 0 idade.
public void setIdade(int idade){
if (testeIdade(idade))
this.idade = idade;
else
this.idade = 0;
}
Como o mtodo est na mesma classe que o mtodo setIdade, no h necessidade de se criar
um objeto para cham-lo. Assim, o parmetro que est chegando passado para o mtodo
testaIdade que, por sua vez, retorna verdadeiro ou falso. Este retorno utilizado pelo comando
if para direcionar o cdigo.
Com os mtodos get e set criados, o ideal que mesmo dentro da classe, eles sejam utilizados.
Assim, no h qualquer meio de um atributo no passar pelo teste imposto no mtodo. No nosso
96 PROGRAMAO I (JAVA) | Educao a Distncia
exemplo, vamos alterar tanto os construtores, quanto o mtodo mostrarDados(). Verificamos
na alterao tambm que os mtodos get e set esto sendo chamados como o uso do this,
porm no h necessidade deles. Como veremos mais adiante, os mtodos fazem parte do
comportamento dos objetos, o que algo compartilhado com todos. Foi utilizado o this apenas
para enfatizar como utiliz-lo na classe.
Figura 60 Modificao nos mtodos para todos usarem apenas get e set
Um cdigo mostrado acima que vale a pena comentar a atribuio de um objeto para o outro.
Vamos pegar a atribuio do atributo nome:
this.setNome(nova.getNome());
Neste comando, dois mtodos de dois objetos diferentes esto sendo chamados. Primeiro
chamado o mtodo getNome() do objeto nova. Por ser um get, ele no recebe parmetros
97
PROGRAMAO I (JAVA) | Educao a Distncia
e retorna uma String. Este retorno est sendo utilizado como forma de parmetro para o
setNome do objeto this, ou seja, dele prprio. Sempre que h vrios mtodos aninhados pela
utilizao dos mesmos como parmetros para outros, sempre leve em conta que o mtodo que
est mais interno nos parnteses ser executado primeiro.
Outra forma que podemos fazer com os construtores direcionar os outros construtores para
um nico construtor. Complicado? Nesta classe ns temos 3 construtores, que basicamente
fazem a mesma coisa, porm com atributos em quantidades e formatos diferentes. Porm,
o cdigo dentro deles muito parecido. Por que, em vez de ficar replicando as chamadas
dos mtodos set em cada construtor, no elegemos um nico construtor que ter estas
chamadas dos mtodos set e direcionamos os outros para o construtor eleito? bem simples
se utilizarmos o this.
Normalmente o construtor eleito para este trabalho aquele que recebe os atributos
separadamente por parmetro. Comeando pelo primeiro construtor, vamos chamar o
construtor eleito da seguinte forma:
this(,,0);
O comando this usado de uma forma diferente neste caso. No h necessidade do uso de
pontos para chamada de mtodo, apenas o this e os parmetros. Como o construtor eleito
recebe nome, telefone e idade, nesta ordem, passamos por parmetro os valores que ele
dever colocar em cada atributo. J no construtor que recebe o objeto como parmetro, o
comando ficar da seguinte forma:
this(nova.getNome(), nova.getTelefone(), nova.getIdade());
Simplesmente estamos pegando cada atributo separadamente e mandando em forma de
parmetro para o construtor eleito. Os trs construtores juntos ficam da seguinte forma:
98 PROGRAMAO I (JAVA) | Educao a Distncia
Figura 61 Modificao nos construtores, para que todos apontem para um nico construtor
ESTADO E COMPORTAMENTO
A partir de uma nica classe, podemos criar diversos objetos. Porm, existe alguma forma de
distinguir um objeto do outro? O que eles possuem em comum? Vamos analisar o que feito
na classe. As classes so compostas por um conjunto de atributos e mtodos. O que ficou
claro nos exemplos anteriores que cada objeto criado possui seus prprios atributos. Mesmo
que for da mesma classe, cada um possui o mesmo nmero e tipo de variveis, mas cada um
com o seu valor. Neste caso, a classe s informa o modelo do que cada objeto ir conter, mas
o valor gerenciado pelo objeto.
Este conjunto de atributos de um objeto define o estado em que ele se encontra. Cada objeto,
por ter os seus prprios atributos, pode estar em estados diferentes. Por exemplo, dois objetos
criados a partir da classe File, que gerencia arquivos do sistema. Um objeto pode estar com
um documento em aberto e pronto para alterar, enquanto que o outro pode j estar fechado,
no podendo mais alterar o arquivo.
99
PROGRAMAO I (JAVA) | Educao a Distncia
J o comportamento que o objeto tem algo descrito e compartilhado entre todos os objetos
por meio dos mtodos. Estes possuem um cdigo criado pelo desenvolvedor, que no se altera
de objeto para objeto, logo, todos possuem as mesmas funes. Seus atributos podem acabar
influenciando em um mtodo, mas todos os objetos tm acesso a todas as funes que os
outros objetos tm.
Podemos ver esta questo no nosso exemplo. Quando criamos dois objetos, ao chamar a
funo setIdade(), ela ir atribuir o valor passado ou 0, dependendo do valor. Porm, todos os
objetos esto sujeitos a executar qualquer parte do cdigo.
Comparando Objetos
Se voltarmos algumas pginas, no momento em que citado sobre a criao de um objeto,
vemos que o objeto criado no momento em que usamos o comando new. Antes disso,
criada uma varivel (no nosso exemplo o pes e o pes2), que vai servir de ponte para o
nosso objeto quando resolvermos cri-lo. Ou seja, podemos criar esta varivel, e s depois de
muitas linhas de cdigo chamar o new.
Isso nos faz pensar, o que esse pes se ele existe antes mesmo de criar o objeto? Podemos
pensar nele como um ponteiro que aponta para o objeto quando criado. Ou seja, quando
executamos o seguinte comando:
Pessoa pes;
Estamos criando um ponteiro que no aponta para lugar algum. A partir do momento que
fazemos:
pes = new Pessoa();
O ponteiro pes recebe o endereo de onde o comando new criou o objeto. Para termos certeza
disto, basta colocar o seguinte comando:
System.out.println(pes);
100PROGRAMAO I (JAVA) | Educao a Distncia
Ir aparecer um valor numrico precedido de um arroba e algumas letras. Isto na verdade o
valor que pes possui, o endereo de seu objeto. Por isso, normalmente no trabalhamos com
a varivel pes diretamente. Sempre colocamos um ponto para acessar o contedo do objeto
apontado, como um mtodo ou atributo.
Vamos efetuar uma alterao no nosso cdigo. Quero que seja criado um cdigo que analise
quem a pessoa que possui a maior idade e mostre o nome dela na tela.
Baseado no cdigo produzido at aqui, vamos acrescentar o seguinte cdigo dentro do mtodo
main, depois dos cdigos j criados:
if (pes > pes2)
System.out.println(pes.getNome());
else
System.our.println(pes2.getNome());
Apesar do NetBeans no apontar erro na sintaxe, nosso cdigo acima contm um erro grave.
Ao compararmos os objetos por meio de seus ponteiros, na verdade estamos comparando
qual endereo de memria possui o maior valor. Logo, nosso cdigo vai mostrar o nome de
pes se o endereo apontado em pes for maior. Para que seja efetuada a comparao correta,
precisa-se especificar qual atributo est sendo testado.
if(pes.getIdade() > pes2.getIdade())
Java Classes e Objetos
Por Mic Duarte
Saiba mais sobre o assunto no artigo completo.
Disponvel em: <http://forum.imasters.com.br/topic/336253-curso-java-classes-e-objetos/>.
101
PROGRAMAO I (JAVA) | Educao a Distncia
Diferenas entre classes e objetos em Java
Disponvel em: <http://www.youtube.com/watch?v=biGRUS_3NbY>.
CONSIDERAES FINAIS
Vimos nesta Unidade como criar Projetos dentro do NetBeans, alm da criao de classes e da
organizao das mesmas dentro de pacotes. Tambm vimos que as classes podem e devem
ser trabalhadas para que os atributos sejam protegidos de alteraes externas, deixando-os
privados e acessveis somente por meio de mtodos get e set.
Tambm vimos que existem os construtores, mtodos especiais que so chamados no
momento que o objeto de uma determinada classe criado. Os objetos foram criados a partir
de outra classe, e chamando o construtor, o objeto passa a existir e assim podemos acessar
seus mtodos e atributos que esto disponveis.
Agora voc dever ser capaz de criar classes simples, alm de conseguir utiliz-las.
ATIVIDADE DE AUTOESTUDO
1. Vamos utilizar nosso conhecimento para ver se conseguimos resolver um problema real.
Nosso dinheiro uma das coisas mais importantes que temos nos dias de hoje. Para isso,
precisamos de um programa confivel que gerencia exatamente quanto temos. Crie uma
classe chamada Conta que consiga gerenciar o quanto de dinheiro temos, onde as nicas
operaes que podemos fazer com o nosso dinheiro guardado sacar e depositar. Crie uma
classe nova chamada Incio, que ir conter o mtodo Main, e crie dois objetos da classe Conta,
um chamado contaCorrente e outro Poupana.
UNIDADE IV
MODIFICADORES JAVA E ENCAPSULAMENTO
Professor Dr. Edson A. Oliveira Junior
Objetivos de Aprendizagem
Entender o conceito de encapsulamento.
Estudar os modifcadores de acesso public, protected e private.
Entender a diferena dos modifcadores static, abstract e fnal.
Controlar o acesso a mtodos, atributos e construtores por meio de modifcadores.
Entender o que so Construtores de Classes.
Plano de Estudo
A seguir, apresentam-se os tpicos que voc estudar nesta unidade:
O que encapsulamento
Modifcadores de acesso public, private e protected
Utilizando modifcadores de acesso (getters e setters)
Modifcador static
Modifcador fnal
Modifcador abstract
Construtores
105
PROGRAMAO I (JAVA) | Educao a Distncia
INTRODUO
Ol, seja bem-vindo(a) ao mdulo de Modificadores de Acesso em JAVA. Nesta Unidade,
sero estudados conceitos importantes para a programao Orientada a Objetos, pois a
partir dos modificadores que poderemos tratar do encapsulamento das classes.
A ideia de encapsulamento remete ao fato de que possvel agrupar estados e comportamentos
em um mesmo mdulo e ainda controlar suas propriedades e seu acesso. Para isso, sero
tratados ainda neste mdulo como escrever mtodos de acesso aos elementos de uma classe
utilizando os chamados mtodos getters e setters.
Alm dos modificadores de acesso, existem outros modificadores que podem ser utilizados
para atribuir novas funes aos mtodos e atributos, e estes podem ser utilizados em conjunto
com modificadores de acesso. So eles: static, final e abstract. E, por fim, ser mostrado como
possvel implementar Construtores para as classes e desta forma controlar como os objetos
de uma classe sero inicializados.
ENCAPSULAMENTO
Quando se fala de encapsulamento, voc provavelmente imagina um objeto fechado, dentro
de uma cpsula, e isto no muito diferente na programao Orientada a Objetos, pois a ideia
principal do encapsulamento envolve omitir os membros de uma classe, alm de esconder
como funcionam as rotinas ou regras de negcio. Desta forma, o programador deve se atentar
s funcionalidades da Classe, e no como ela foi implementada, e isto bom uma vez que h
aumento na modularidade do seu projeto.
Sendo assim, realizar o encapsulamento de um projeto fundamental para que seja possvel
minimizar o impacto de problemas referentes a alteraes do projeto, uma vez que no
preciso alterar uma regra de negcio em vrios lugares, mas sim em apenas um nico lugar,
j que tal regra est encapsulada.
106PROGRAMAO I (JAVA) | Educao a Distncia
Para exemplificar, vamos focar no problema de realizao de operaes bancrias de um
caixa eletrnico. No caixa possvel: sacar dinheiro, depositar, verificar saldo, verificar extrato,
pagar contas e fazer transferncias. Para utilizar o caixa eletrnico, no necessrio conhecer
como as operaes foram implementadas em nvel de programao, mas sim o que cada
operao afeta sua conta.
Analise a Figura 62 logo abaixo e verifique a classe Conta, com atributos e mtodos para uma
Conta Corrente. Note, por exemplo, que o mtodo transferir recebe como parmetro o nmero
da conta (numContaDestino) e um valor a ser transferido (valor). Para utilizar este mtodo, o
programador no precisa saber como o criador desta classe implementou o mtodo transferir,
basta saber que este mtodo responsvel por enviar um valor a outra conta corrente e que
esta transferncia implica em subtrao do saldo da conta remetente.
Figura 62 Classe Conta com atributos e mtodos pblicos
Fonte: o autor
Ainda em relao Figura 62, esta est ilustrada em um diagrama de Classe UML, e o smbolo
de soma (+) indica que tanto os atributos quanto os mtodos so pblicos, isso significa que
eles podem ser acessados e modificados de qualquer outra classe do projeto, e isto no
uma boa prtica de programao, uma vez que seus atributos esto expostos e qualquer outro
objeto pode alterar os valores dos elementos das classes, o que pode comprometer a coeso
de seu projeto. Por exemplo:
//Criao da referncia a Conta
Conta c = new Conta();
//Modifcao do atributo saldo de forma direta
c.saldo = 0;
107
PROGRAMAO I (JAVA) | Educao a Distncia
Para solucionar este problema, faz-se necessria a utilizao de modificadores de acesso,
sendo que estes faro o papel de restringir ou autorizar o acesso a determinados atributos ou
mtodos das classes, e isto ser visto a partir da prxima seo.
Modificadores de Acesso: default, public, private e protected
a partir dos modificadores de acesso que poderemos restringir ou no o acesso aos atributos
e mtodos de uma classe. Na programao Orientada a Objetos, os modificadores de acesso
mais utilizados so o public e o private.
Antes de abordar modificadores, importante frisar alguns conceitos bsicos sobre a
programao em JAVA: Projeto e Pacotes do projeto.
Um projeto a base para o desenvolvimento em Java, nele que estaro todos os pacotes e
classes da sua aplicao. Quando trabalhamos com o Netbeans, para a criao de um projeto,
basta irmos ao menu Arquivo e, em seguida, selecionar a opo Novo Projeto, feito isso,
aparecer uma tela, como voc pode verificar na Figura 63 a seguir:
Figura 63 Criando um projeto em JAVA no Netbeans
108PROGRAMAO I (JAVA) | Educao a Distncia
Como o Netbeans uma ferramenta que suporta diversas linguagens de programao, ao
criar o projeto, necessrio previamente selecionar a linguagem e, em seguida, o tipo de
projeto, sendo assim, vamos criar um Aplicativo Java selecionando a opo Aplicativo Java.
Feito isso, uma nova tela ir solicitar o preenchimento do nome do projeto, como voc pode
verificar na Figura 64:
Figura 64 Configurando o nome do projeto
Aps estas etapas, seu projeto estar criado e poder ser visualizado na Paleta de Projetos
do Netbeans, como pode ser verificado na Figura 65. Como voc pode notar, um projeto
envolve Pacotes e Bibliotecas que, porventura, sua aplicao necessite utilizar.
Figura 65 Projeto em Java
109
PROGRAMAO I (JAVA) | Educao a Distncia
Para criar um novo pacote na pasta Pacotes de cdigo-fonte, por exemplo, necessrio
clicar sobre a pasta com o boto direito e selecionar a opo: Novo -> Pacote Java e, em
seguida, dar um nome ao seu novo pacote, como mostra a Figura 66.
Figura 66 Criando um novo pacote
Agora que voc j entendeu o conceito de Pacotes, podemos iniciar a teoria sobre modificadores
de acesso. Temos quatro modificadores de acesso: public, private, protected e default. O
modificador default no precisa ser declarado, ou seja, atributos ou mtodos que no tm a
declarao de um modificador de acesso so considerados default (que do ingls significa
padro). Como exemplo, voc pode notar no cdigo abaixo a criao de um atributo com
modificador de acesso default. No pacote em que est localizada a classe criada, o atributo
com modificador default pode ser acessado de forma direta por qualquer classe, agora, se a
classe que instanciar a classe estiver em outro pacote, este no ser acessvel de forma direta.
//exemplo de atributo default
String exemploDefault;
Atributos e mtodos pblicos (public) podem ser acessados e modificados de qualquer classe
do projeto a partir da instncia do objeto, ou seja, at de outros pacotes possvel ter acesso
110PROGRAMAO I (JAVA) | Educao a Distncia
a atributos/mtodos do tipo public de forma direta. Para declarar este tipo de modificador,
necessrio utilizar a palavra reservada public antes de indicar o tipo de varivel, isto pode ser
verificado no exemplo de cdigo-fonte abaixo.
//exemplo de atributo public
public int inteiroPublic;
//exemplo de mtodo public
public int soma(int a, int b){
return a+b;
}
J atributos e mtodos privados (private) so acessados somente pela prpria classe,
independente do pacote em que a classe esteja. O cdigo-fonte abaixo mostra como se pode
criar um atributo privado. Mtodos privados s podem ser acessados pela prpria classe, ou
seja, eles no so visveis e nem acessados por outros objetos.
//exemplo de atributo private
private String nomePrivate;
//exemplo de mtodo private
private String[] splitNome(String n){
return n.split( );
}
Outro modificador de acesso no to comumente utilizado o modificador protected (protegido
em portugus), este tipo de modificador funciona como um modificador pblico para elementos
que esto no mesmo pacote, e em outros pacotes ele s visvel para classes que herdam a
classe que possui o atributo protegido. A criao de atributos/mtodos protegidos se faz por
meio da palavra reservada protected antes da criao do atributo/mtodo.
//exemplo de atributo protected
protected String nomeCliente;
//exemplo de mtodo protected
protected String[] splitNome(String n){
return n.split( );
}
111
PROGRAMAO I (JAVA) | Educao a Distncia
Baseado nas explicaes dadas at aqui sobre os modificadores, possvel montar uma
tabela que resume se o atributo/mtodo acessvel ou no dependendo de sua localizao
no projeto.
Tabela 6 Modificadores de acesso e suas visibilidades
Modifcador Na prpria classe Em outro pacote No mesmo pacote Herana (em pacote
diferente)
public Acessvel Acessvel Acessvel Acessvel
private Acessvel No No No
protected Acessvel No Acessvel Acessvel
default Acessvel No Acessvel No
importante que voc, como um futuro bom programador, entenda bem esta tabela, e a tenha
sempre com voc para eventuais consultas. Sendo assim, na prxima seo vamos mostrar
na prtica como utilizar os modificadores de acesso de modo a manter o encapsulamento de
suas aplicaes.
UTILIZANDO MODIFICADORES DE ACESSO
Tendo como base um projeto exemplo de um Caixa Eletrnico, onde o objetivo realizar
operaes em contas bancrias, vamos elucidar a utilizao dos modificadores de acesso,
alm disso, trazer o conceito dos getters e setters. Para isso, veja como foi projetada a
aplicao na Figura 67.
Figura 67 Exemplo de projeto, seus pacotes e cdigos-fonte
112PROGRAMAO I (JAVA) | Educao a Distncia
Como voc pode notar, o projeto possui 3 pacotes: caixaeletronico, cliente e conta. Cada
pacote tem suas classes que possuem suas particularidades e sero descritas uma a uma a
seguir.
O pacote caixaeletronico possui a classe CaixaEletronico e esta a classe inicial do projeto,
nesta classe que se inicia a execuo da aplicao, pois esta contm o mtodo principal
(main) e ela ser nosso gerenciador de contas.
O pacote cliente possui classes que estruturam os objetos Clientes que podero ser pessoa
fsica (Fisica.java) ou jurdica (Juridica.java), alm de estruturar como ser o formato do
endereo de cada pessoa (Endereco.java).
E, por fim, o pacote conta possui a classe Conta.java que armazena as informaes de uma
conta. No diagrama, a seguir, mostrado pela Figura 68 possvel ter uma viso geral de cada
Classe do projeto.
Figura 68 Diagrama de Classe do projeto de caixa eletrnico
Fonte: o autor
113
PROGRAMAO I (JAVA) | Educao a Distncia
Tendo como base os diagramas da Figura 68, vamos primeiramente entender o Diagrama de
Classes em questo, note que antes dos nomes dos atributos e mtodos das classes existe um
sinal (-, + ou #), em UML, o sinal de significa que trata-se de um atributo/mtodo que
utiliza modificador de acesso private, o sinal + indica o modificador public e o sinal # indica
o sinal de modificador protected. Note ainda que as classes Fsica e Jurdica se ligam classe
Pessoa com uma seta grande e vazia, e esta ligao significa que Fsica e Jurdica so filhas
de Pessoa, ou seja, herdam todas as propriedades da classe Pessoa (o conceito de herana
ser abordado na prxima Unidade e l retomaremos este projeto).
Agora voc deve estar se perguntando: se houve restrio do acesso a alguns atributos
das Classes apresentadas, como ser realizada a alterao das informaes quando
forem necessrias?. A resposta relativamente simples, basta criar mtodos pblicos que
controlaro os acessos a estas variveis, ou seja, ser criada uma interface de acesso para
cada atributo privado (private) da classe em questo, a que entra o conceito de getters
e setters na programao Orientada a Objetos e este um mecanismo de acesso a dados
encapsulados.
Sendo assim, vamos aprender a criar mtodos que alteram os valores dos atributos privados;
a estes mtodos damos o nome de setters, ou seja, estes mtodos iro setar os valores
dos atributos privados. Para criar um mtodo setter, primeiro faz-se necessrio analisar o tipo
do atributo. Vamos pegar, por exemplo, o atributo saldo da classe Conta; por se tratar de um
atributo do tipo float (real), o mtodo para setar este atributo dever receber como parmetro
um elemento tambm float. Como um mtodo que no ter retorno, ento, utiliza-se o tipo
de retorno como void. Alm disso, o padro para mtodos setters sempre utilizar a palavra
set e, em seguida, concatenar com o nome da varivel, no caso em tela, teramos o mtodo
de nome setSaldo, que ter sua implementao da seguinte forma:
114PROGRAMAO I (JAVA) | Educao a Distncia
//metodo setSaldo setter para o atributo saldo
public void setSaldo(foat s){
this.saldo = s;
}
//metodo setNumConta setter para o atributo numConta
public void setNumConta(int n){
this.numConta = n;
}
Alm do mtodo de alterar o valor do atributo, precisamos utilizar o mtodo para resgatar
o valor deste atributo, a estes mtodos chamamos de getters e a caracterstica deste tipo de
mtodo que ele retorna o valor do atributo para o elemento que o chama. Os mtodos get
so precedidos pela palavra get e o nome do atributo, e eles devem retornar elementos do
mesmo tipo de atributo em questo. Utilizando o mesmo exemplo do atributo Saldo e o atributo
numConta, teremos os mtodos getters abaixo:
//metodo getSaldo getter para o atributo saldo
public foat getSaldo(){
return this.saldo;
}
//metodo getNumConta getter para o atributo numConta
public int getNumConta(int n){
return this.numConta;
}
Como exemplo, a Conta foi reimplementada, e utilizando os mtodos getters e setters de
maneira adequada, esta ficar como mostrado no cdigo a seguir. Note que para o atributo
saldo a implementao do getter e setter no foi feita, tendo em vista que existem trs
operaes bsicas que devem controlar esta varivel em um ambiente de caixa eletrnico,
que so as operaes: sacar, transferir e depositar, e sero implementadas posteriormente.
115
PROGRAMAO I (JAVA) | Educao a Distncia
package conta;
import cliente.Pessoa;
public class Conta {
private f oat saldo;
private Pessoa titular;
private int numConta;
private int tipoConta;
public int getNumConta() {
return numConta;
}
public void setNumConta(int numConta) {
this.numConta = numConta;
}
public int getTipoConta() {
return tipoConta;
}
public void setTipoConta(int tipoConta) {
this.tipoConta = tipoConta;
}
public Pessoa getTitular() {
return titular;
}
public void setTitular(Pessoa titular) {
this.titular = titular;
}
}
Dica da ferramenta: no Netbeans possvel a criao automtica dos mtodos getters e setters,
para isso, no cdigo-fonte de sua classe, aps a declarao dos atributos, pressione a tecla Alt+Insert
e escolha a opo getters e setters... e ento selecione os atributos que deseja gerar os mtodos.
116PROGRAMAO I (JAVA) | Educao a Distncia
Alm dos modificadores de acesso, o JAVA permite a utilizao de outros modificadores,
so eles: static, final e abstract. Cada um deles ser abordado em sees, pois eles tm
caractersticas bem diferentes entre si.
O MODIFICADOR STATIC
O modificador static pode ser aplicado a variveis e mtodos, e a principal caracterstica dele
que se tratando de atributos, todos os objetos compartilham do mesmo espao de memria,
e se tratando de mtodo, este pode ser acessado sem a necessidade de instncia do objeto.
Voc provavelmente j criou alguma aplicao em JAVA e se deparou com o mtodo public
static void main (String args[]), e deve ter se perguntado: O que significa todas estas palavras
antes do nome do mtodo principal?. Ento vamos por partes. O modificador de acesso public
indica que este mtodo pode ser visualizado de qualquer classe do projeto, o modificador static
indica que para acessar o mtodo da classe no necessrio instanci-lo, e o que acontece
que mtodos e variveis static so alocadas em memria antes que qualquer objeto seja
criado, por essa razo, um atributo no static da classe que no esteja no mtodo static no
pode ser acessado de forma direta, pois ele s existir a partir da instncia do objeto, por
exemplo, no cdigo a seguir da classe Exemplo, temos duas variveis valor (int) e valor2(static
int), note que do mtodo static, ao tentar atribuir um inteiro varivel valor, o NetBeans acusa
um erro com os seguintes dizeres: non-static variable valor cannot be referenced form a static
context, traduzindo, isto significa que a varivel no static valor no pode ser referenciada em
um contexto static.
117
PROGRAMAO I (JAVA) | Educao a Distncia
Para resolver este erro, temos duas sadas: uma transformar o atributo valor em static, a
outra criar um objeto (instncia) do tipo Exemplo e ento acessar e modificar a varivel valor.
Veja, a seguir, como ficariam as duas solues.
Uma varivel esttica compartilhada por todas as instncias de uma classe, ou seja, em vez de
cada instncia da classe ter uma cpia dessa varivel, ela uma nica varivel compartilhada
por todas as instncias. Para a existncia de uma varivel esttica no preciso nem mesmo
118PROGRAMAO I (JAVA) | Educao a Distncia
a criao de uma instncia da classe que contenha a varivel, necessrio somente que a
classe seja carregada na Mquina Virtual Java, j que esta criada e inicializada no momento
de carga da classe.
Exemplificando, imagine que haja um limite para realizar transferncias entre contas e que este
limite seja igual para todas as contas. Para resolver este problema, basta declarar o atributo
limiteTransferencia como static, desta forma, o limite alterado para todas as referncias de
conta. Veja a Figura 69, a seguir, onde ilustrado a varivel limiteTransferencia como sendo
um atributo compartilhado.
Conta c1 Conta c2
saldo = 200,40
titular = Joaquim
numConta = 35460
tipoConta = 1
Conta.limiteTransferencia = 3000
saldo = 400,40
titular = Maria
numConta = 35520
tipoConta = 1
Figura 69 Ilustrao de varivel static limiteTransferencia
Fonte: o autor
O MODIFICADOR FINAL
Os modificadores final restringem ainda mais o acesso aos elementos de uma classe, para
atributos, ele faz com que o atributo no possa ser modificado em tempo de execuo, ou
seja, cria-se uma varivel que ter um valor constante do incio ao trmino da execuo da
119
PROGRAMAO I (JAVA) | Educao a Distncia
aplicao. Para Classes, indica que esta no poder ser herdada (no poder ter filhos) e para
mtodos, indica que o mesmo no poder ser sobrescrito (usar tcnicas de polimorfimo).
Variveis de instncia do tipo final podem ser declaradas em conjunto com o modificador
static. Neste caso, se ele for declarado na inicializao da varivel, o valor atribudo a ele ser
o mesmo para todos os objetos e no poder ser modificado durante a execuo do projeto, se
uma varivel static final no for inicializada, ocorrer um erro de compilao. Podemos ento
utilizar o exemplo do limite de transferncia para ilustrar a utilizao do modificador final.
public class Conta{

private f nal static f oat LIMITETRANSFERENCIA=3000;

}
Dica de programao: quando se declara um atributo do tipo fnal, usa-se como padro a utilizao do
nome do atributo em caixa alta, por se tratar de um atributo constante.
Mtodos final no podem ser sobrescritos, ou seja, um mtodo final em uma superclasse
(classe pai) no pode ser reimplementado na subclasse (classe filha). Os mtodos declarados
como private so implicitamente final, porque no possvel sobrescrever em uma subclasse.
Uma classe final no pode ser superclasse, ou seja, no pode ter classes que herdam suas
propriedades. Portanto, quando uma classe final, implicitamente todos os mtodos so final.
120PROGRAMAO I (JAVA) | Educao a Distncia
O MODIFICADOR ABSTRACT
O modificador abstract aplicado somente a mtodos e a classes, mtodos abstratos no
fornecem implementaes e em classes abstratas no possvel a criao de objetos da
classe, e normalmente possuem um ou mais mtodos abstratos.
O objetivo de criao de classes abstratas fornecer uma superclasse apropriada a partir
da qual outras classes podem herdar e assim poder compartilhar um design comum. Veja na
Figura 70, abaixo, a criao da classe Pessoa como sendo uma classe abstrata baseada no
projeto do caixa eletrnico, esta classe possui tambm um mtodo abstrato para cadastro. A
declarao do mtodo abstrato fora a programao do mtodo nas subclasses.
Figura 70 Implementao da classe abstrata Pessoa e o mtodo abstrato cadastra
A Figura 71, logo a seguir, mostra a tentativa de criao de um objeto de uma classe abstrata,
no detalhe a mensagem do IDE de que uma classe abstrata no pode ser instanciada.
121
PROGRAMAO I (JAVA) | Educao a Distncia
Figura 71 Tentativa de criao de um objeto da classe abstrata Pessoa
Vamos criar uma subclasse para a classe Pessoa. Note que o mtodo cadastra precisou ser
implementado na classe Fsica, veja na Figura 72 esta implementao.
Figura 72 Classe Pessoa, subclasse da classe abstrata Pessoa
122PROGRAMAO I (JAVA) | Educao a Distncia
CONSTRUTORES JAVA
Um Construtor no um mtodo, pois este no possui a declarao de retorno. Mas lembre-se
disso: toda classe em Java tem pelo menos um construtor, exceto interfaces.
O que so esses construtores? Um construtor o primeiro mtodo que executado sempre
que uma classe instanciada. Quando se utiliza a palavra-chave new, o construtor ser
executado e inicializar o objeto. Existem classes que quando inicializadas requerem algum
tipo de parmetro, por exemplo, objetos do tipo Scanner (para realizar leitura de informaes
para o projeto), que voc pode conferir no cdigo a seguir.
Scanner tec = new Scanner (System.in);
Quando fazemos isto, estamos inicializando a classe com os dados parmetros. O construtor
inicializa as variveis de instncia da classe, como tambm executa cdigos necessrios para
a inicializao de uma classe. Em outras palavras, no Construtor voc pode determinar o que
ser realizado assim que seu objeto for instanciado.
Vamos utilizar o exemplo da Classe Pessoa e criar um construtor para ela:
public abstract class Pessoa {
protected String telefone;
protected String nomePessoa;
protected Endereco e = new Endereco();

public Pessoa(){
super();
System.out.println(Executando o construtor de Pessoa);
}
...//outros mtodos da classe
}
Note que o construtor similar a um mtodo, mas ele no tem um tipo de retorno, nem void.
Outro fato importante, um Construtor sempre ter o mesmo nome da classe. Modificadores
de acesso podem ser atribudos aos construtores, inclusive o private. Se o Construtor no for
123
PROGRAMAO I (JAVA) | Educao a Distncia
criado junto ao cdigo-fonte da classe, o compilador criar automaticamente um construtor
para sua Classe.
Quando uma classe instanciada, o mtodo super() dela chamado, mesmo que no seja
declarado, pois em algum momento a classe ter que ser inicializada. Lembre-se que todas as
classes em Java so filhas da classe Object, ou seja, Object a me de todas as classes (ela
fornece mtodos como equals e toString por exemplo).
Ainda no nosso exemplo apresentado na Figura 67, onde objetos do tipo Fsica so filhos da
classe Pessoa, quando criamos uma instncia de Fsica os construtores so executados em
forma de pilha: Fsica chama Pessoa, que chama Object. Ou seja, o construtor de Fsica s
ser executado por ltimo. Analise os cdigos a seguir, e logo aps a sada do compilador na
Figura 73.
public class Fisica extends Pessoa{
private String cpf;
public Fisica(){
System.out.println(Pessoa Fisica);
}
}
public class CaixaEletronico {
public static void main(String[] args) {
Fisica f = new Fisica();

}
}
Figura 73 Sada do Compilador quando se instancia a classe Fsica
Note que ao realizar a instncia da classe Fsica, o construtor da classe Pessoa tambm foi
acionado.
124PROGRAMAO I (JAVA) | Educao a Distncia
Uma classe pode possuir mais de um construtor. Voc deve estar se perguntando: mas como
isso possvel? Para isso, preciso criar construtores com argumentos diferentes, desta
forma, criam-se diversas formas de inicializar um objeto. Como exemplo, vamos utilizar a
classe Fsica, passando como parmetro no momento da inicializao da classe o nome do
titular da conta. Analise os cdigos a seguir, e depois a sada do compilador na Figura 74.
public class Fisica extends Pessoa{
private String cpf;
public Fisica(){
System.out.println(Pessoa Fisica);
}
public Fisica(String nome){
nomePessoa = nome;
}
}
public class CaixaEletronico {
public static void main(String[] args) {
Fisica f = new Fisica();
Fisica f2 = new Fisica(Joaquim);
System.out.println(f2.getNomePessoa());

}
}
Figura 74 Sada do console
125
PROGRAMAO I (JAVA) | Educao a Distncia
No h limite para a criao de construtores, voc pode criar em uma classe quantos
construtores quiser, porm, o que deve diferenciar os construtores so os parmetros, por
exemplo, se um construtor requer uma nica String, ento no se pode criar outro construtor
solicitando uma String, por mais que sejam variveis diferentes, porm, se for um construtor
solicitando uma String e outro solicitando duas Strings, possvel, ou seja, o tipo do parmetro
e o nmero de parmetros sero os determinantes para que o compilador saiba qual construtor
deva ser chamado.
Um ponto importante que enquanto o construtor no for executado, nenhum acesso varivel
de instncia ou mtodo ser possvel, isto quer dizer que um objeto no pode ser utilizado at
ser inicializado, o que obvio, mas tambm significa que voc no pode tentar sabotar o
construtor do objeto antes de chamar super(), como pode ser visto no cdigo a seguir:
public class Fisica extends Pessoa{
private String cpf;
public Fisica(){
System.out.println(Pessoa Fisica);
}
public Fisica(String nome){
nomePessoa = nome;
super();
}
}
A chamada de super() no construtor da Classe Fsica retorna um erro de compilao, onde
ser mostrado ao programador uma mensagem de que a chamada ao construtor de super()
deve ser a primeira sentena no construtor.
126PROGRAMAO I (JAVA) | Educao a Distncia
CONSIDERAES FINAIS
Nesta Unidade voc aprendeu sobre encapsulamento e como os modificadores de acesso
auxiliam na tarefa de encapsular seus projetos. Tambm aprendeu a manipular modificadores
privados por meio dos mtodos pblicos getters e setters.
Alm dos modificadores de acesso, voc aprendeu a utilizar o modificador final para criar
constantes, mtodos que no podem ser sobrescritos e classes que no podem ter filhos.
Tambm viu o modo de funcionamento do modificador static, que compartilha o mesmo espao
de memria para atributos deste tipo e como os mtodos estticos so alocados em memria
antes da instncia da classe e podem ser chamados utilizando somente o nome da classe e
o nome do mtodo.
No menos importante, voc tambm aprendeu sobre o modificador abstract, que faz com que
a classe no possa ser instanciada e os mtodos abstratos apenas indicam o que deve ser
implementado nas classes filhas. E, por fim, viu tambm como funcionam os Construtores em
JAVA, assim como a forma de inicializar seus objetos utilizando estes construtores.
Na prxima Unidade, voc ver os conceitos que envolvem Herana, que so caractersticas
dos projetos Orientados a Objetos.
Modifcadores Java
Por <javafreee.org>
Como em todas as linguagens de programao, a acessibilidade a uma classe/mtodo deve seguir
algumas regras, e de extrema necessidade que voc as saiba para no vacilar na hora do exame!
Saiba mais sobre o assunto no artigo completo.
Disponvel em: <http://javafree.uol.com.br/artigo/6941/Cap-2-Modifcadores.html>.
127
PROGRAMAO I (JAVA) | Educao a Distncia
Modifcadores de acesso
Disponvel em: <http://www.youtube.com/watch?v=OEGThN7PmsA>.
Encapsulamento
Disponvel em: <http://www.youtube.com/watch?v=2SHpfjfxeQ8>.
Constantes e o Modifcador fnal
Disponvel em: <http://www.youtube.com/watch?v=65mDDzCsDaU>.
Modifcadores so fundamentais para a criao de frameworks e componentes caixa-preta e caixa-branca!
ATIVIDADES DE AUTOESTUDO
1. Crie o projeto com as classes ilustradas na Figura 68 separando os pacotes, assim como
criando todos os mtodos pblicos para acesso aos atributos private e protected.
2. Considerando que a Classe Jurdico filha da classe Pessoa (Jurdico herda Pessoa),
possvel acessar o atributo protected nomePessoa de forma direta? Por qu? Se o atributo
fosse do tipo private, seria possvel o acesso de forma direta?
3. Crie 3 atributos na classe Conta: limiteTransferencia, limiteSaque e taxaJuros, sendo que
o limite de transferncia de R$ 3.000,00, o limite de saque de R$ 1.000,00 e o limite
de transferncia de R$ 2.500,00, e atribua os modificadores de modo que estes atributos
possam ser acessados e compartilhados por todas as instncias de conta, assim como no
permita a mudana destes atributos em tempo de execuo.
128PROGRAMAO I (JAVA) | Educao a Distncia
4. Dadas as classes Pessoa, PFisica e Vendedor logo abaixo:
class Pessoa {
Pessoa(){
System.out.println("Pessoa Construct");
}
}
class PFisica extends Pessoa{
PFisica() {
System.out.println("Pessoa Fisica");
}
}
public class Vendedor extends PFisica{

Vendedor() {
System.out.println(Vendedor);
}

public static void main(String[] args) {
Vendedor v = new Vendedor();
}
}
Responda: como ser a sada do console quando este projeto for executado?
UNIDADE V
HERANA E POLIMORFISMO EM JAVA
Professor Dr. Edson A. Oliveira Junior
Objetivos de Aprendizagem
Entender o conceito de herana.
Entender o conceito de Polimorfsmo.
Plano de Estudo
A seguir, apresentam-se os tpicos que voc estudar nesta unidade:
O que herana
Como implementar herana
O que polimorfsmo
A sobrescrita de mtodos
131
PROGRAMAO I (JAVA) | Educao a Distncia
INTRODUO
Ol, seja bem-vindo(a) ao mdulo de Herana e Polimorfismo em Java. Nesta Unidade,
trataremos de um tema essencial para a Orientao de Objetos, pois por meio de herana
podemos otimizar a reutilizao de cdigos, uma vez que classes com caractersticas
semelhantes podem ser implementadas de forma agrupada por meio de superclasses e
subclasses (classes filhas).
Utilizando o polimorfismo, possvel criar mtodos de nomes iguais, porm de comportamentos
distintos de acordo com a origem do objeto. Para mostrar a voc como utilizar estes recursos,
sero utilizados alguns exemplos que utilizam estas tcnicas de Herana e Polimorfismo,
sendo um exemplo discutido durante a apresentao do tema e outro mostrando um projeto
completo desenvolvido com tcnicas de Herana e Polimorfismo.
HERANA
Vamos comear nossa Unidade mostrando uma perspectiva do mundo real. Imagine um peixe,
como na Figura 75 a seguir. Qualquer espcie animal possui caractersticas prprias que
definem com preciso em qual espcie o animal se enquadra. Vamos pegar como exemplo
os peixes, eles possuem brnquias (para respirar), barbatana/nadadeira para se locomover e
boca para se alimentar.
De uma maneira geral, todos os peixes possuem estas caractersticas, agora, se formos
aprofundar um pouco mais no mundo dos peixes e analisarmos as caractersticas de cada
espcie, por exemplo: tipo de escama, tamanho, colorao, nmero de dentes, se de gua
doce ou salgada, entre outras caractersticas, teremos uma infinidade de espcies que se
diferem, como o peixe-palhao que possui caractersticas especficas a raa dele, por exemplo,
o tamanho reduzido, a colorao alaranjada e as manchas brancas e pretas distribudas em
seu corpo.
132PROGRAMAO I (JAVA) | Educao a Distncia
Um filhote de peixe-palhao possui as mesmas caractersticas de seus pais, avs, bisavs e
outras geraes, ou seja, ele herda todas as caractersticas da raa, alm disso, ele possui
todas as caractersticas comuns a qualquer peixe.
F
o
n
t
e
:

S
H
U
T
T
E
R
S
T
O
C
K
.
C
O
M
Figura 75 Peixe-palhao
Mantendo o raciocnio dos peixes, podemos dizer que um peixe-palhao uma raa da
espcie peixe, se fssemos transformar este conceito na programao Orientada a Objetos,
basta transformar o peixe-palhao em uma classe de nome PeixePalhaco, e esta herdaria as
caractersticas dos Peixes, representada pela classe Peixe.
Desta forma, podemos afirmar que o PeixePalhaco uma subclasse da superclasse Peixe. Em
outras palavras, objetos do tipo PeixePalhaco tero todas as caractersticas de objetos do tipo
Peixe, porm tero algumas especificidades que os diferem de outros tipos de peixe. Veja na
Figura 76, logo a seguir, o esquema de herana que ilustra o caso em tela.
133
PROGRAMAO I (JAVA) | Educao a Distncia
Figura 76 Superclasse Peixe e respectivas subclasses
Fonte: o autor
Todas as raas de peixes ilustradas na Figura 76 herdam todos os atributos e mtodos da
classe Peixe, ou seja, herdam suas caractersticas, e esse o papel da Herana na Orientao
a Objetos. De maneira geral, a herana permite a criao de novas classes (subclasses) a
partir de classes j existentes (superclasses), herdando caractersticas existentes na classe
a ser estendida. Esta tcnica implica em grande reaproveitamento de cdigo existente, uma
vez que no h a necessidade de reimplementao de mtodos que j foram criados nas
superclasses.
Em relao a Superclasses e Subclasses, podemos dizer que Subclasses so especializaes
de Superclasses que, por sua vez, so generalizaes de Subclasses. Em outras palavras,
subclasses so mais especializadas do que as suas superclasses, mais genricas. As
subclasses herdam todas as caractersticas de suas superclasses, como suas variveis e
mtodos.
A linguagem Java permite o uso de herana simples, mas no permite a implementao de
herana mltipla, que significa que uma classe pode herdar mtodos e atributos de mais de
uma classe. Para superar essa limitao, o Java faz uso de interfaces, o qual ser descrito
mais adiante ainda nesta Unidade.
134PROGRAMAO I (JAVA) | Educao a Distncia
Em Java, a palavra reservada que define que uma classe herda as caractersticas de outra
extends, ela deve ser utilizada assim que a classe for criada. Veja nos cdigos a seguir um
exemplo de cdigo que mostra onde deve ser empregada a palavra extends.
public class Peixe {
//atributos
private String tipoPele;
private int numDentes;
//metodos
public void nadar(){
System.out.println(Mecher as barbatanas);
}
public void comer(){
System.out.println(Procurar comida e comer);
}
}
public class PeixePalhaco extends Peixe{
//implementao da classe peixe palhaco
private int numeroListras;
}
Da forma como foram implementados esses cdigos, a classe PeixePalhaco herda todos os
atributos e mtodos da classe Peixe, mas com a diferena de possuir um atributo a mais,
numeroListras, que uma especificidade do peixe-palhao em relao a outros tipos de
peixe.
Ainda utilizando dois ltimos cdigos, vamos criar agora uma classe principal que cria uma
instncia de peixe-palhao e chama um de seus mtodos.
public class Principal
public static void main(String args[]){
PeixePalhaco pp = new PeixePalhaco();
pp.nadar();
PP.comer();
}
}
135
PROGRAMAO I (JAVA) | Educao a Distncia
O cdigo, a seguir, produzir no compilador uma sada como segue:
Mexer barbatanas
Procurar comida e comer
Note que os mtodos nadar e comer no foram implementados na classe PeixePalhaco,
somente na classe Peixe, como PeixePalhaco uma Subclasse de Peixe, ento os mtodos
da classe Peixe sero herdados automaticamente a objetos do tipo PeixePalhaco.
Agora que voc j entendeu o conceito base para herana, vamos retomar o projeto do Caixa
Eletrnico que iniciamos a desenvolver na Unidade anterior. Analise a Figura 77 logo abaixo,
que ilustra o projeto como um todo a partir de um diagrama de classes:
Figura 77 Projeto de Caixa Eletrnico
Fonte: o autor
Tendo como base o problema de que em um banco existem dois tipos de pessoas, sendo
elas: Pessoa Fsica e Pessoa Jurdica, podemos projetar nossos objetos como a classe
Pessoa sendo a superclasse e as classes Fsica e Jurdica como sendo subclasses. Alm
disso, podemos criar a classe Pessoa como sendo abstrata, j que Pessoa no se refere a
ningum especificamente, s de forma genrica. Sendo assim, teremos os seguintes cdigos
para cada classe:
136PROGRAMAO I (JAVA) | Educao a Distncia
137
PROGRAMAO I (JAVA) | Educao a Distncia
Note que no momento de declarao das classes Fsica e Jurdica existe a palavra reservada
extends, e esta palavra que indica se uma classe ou no subclasse de outra. Neste momento,
todos os atributos e mtodos implementados na classe Pessoa vo automaticamente fazer
parte das classes Filhas. Lembrando um pouco sobre a teoria dos modificadores, temos que
os atributos da classe Pessoa esto indicados com o modificador de acesso protected, e isso
significa que as classes filhas de Pessoa tero acesso a estes atributos de forma direta.
Volte no cdigo da classe Pessoa e confira quais so os atributos e mtodos dessa classe, feito
isso, voc j sabe quais so os atributos que a classe Fsica possui: telefone, nomePessoa,
endereo e CPF. Assim como os atributos da classe Jurdica: telefone, nomePessoa, endereo
e CNPJ. Alm dos atributos, as classes tambm possuem os mtodos implementados na
classe Pessoa, o cdigo a seguir mostra quais so os mtodos e atributos visveis de dentro
da classe Fsica.
Agora preste ateno ao cdigo a seguir, quando precisamos chamar algum mtodo que
faz parte da superclasse Pessoa. Note que necessrio utilizar a palavra reservada super,
138PROGRAMAO I (JAVA) | Educao a Distncia
que nos d acesso aos mtodos e atributos da classe pai. Alm disso, quando criarmos uma
instncia de Fsica, podemos tambm ter acesso a todos os mtodos da classe Pessoa, como
pode ser visto no cdigo a seguir (note que os mtodos getters e setters da classe Pessoa tem
visibilidade por meio da classe Fsica, que tambm uma classe Pessoa).
139
PROGRAMAO I (JAVA) | Educao a Distncia
O mecanismo de herana nos fornece um benefcio notvel no desenvolvimento de aplicaes.
Ao concentrarmos caractersticas comuns em uma classe e derivar as classes mais especficas
a partir desta, ns estamos preparados para a adio de novas funcionalidades ao sistema.
Se mais adiante uma nova propriedade comum tiver que ser adicionada, no precisaremos
efetuar alteraes em todas as classes. Basta alterar a superclasse e todas as outras classes
derivadas sero automaticamente atualizadas.
POLIMORFISMO
Polimorfismo significa vrias (poli) formas (morfo). Em Orientao a Objetos, polimorfismo
a capacidade pela qual duas ou mais classes derivadas de uma mesma superclasse podem
invocar mtodos que tm a mesma identificao, assinatura (o mesmo nome de mtodo),
mas que possuem comportamentos distintos (de acordo com a forma de implementao em
cada subclasse). Em Java, o conceito de Polimorfismo se manifesta apenas nas chamadas
dos mtodos. A possibilidade de Polimorfismo se d pelo fato de que mtodos podem ser
sobrescritos pelas subclasses (mtodos com o mesmo nome e nmeros de argumentos), ou
seja, se o mtodo da superclasse no suficiente ou no se aplica classe filha, ele pode
ser escrito novamente tendo um comportamento completamente diferente do da superclasse.
O interpretador JAVA se encarrega de chamar corretamente o mtodo a ser executado em
tempo de execuo. Existe ainda um mecanismo de sobrecarga, onde dois mtodos de uma
classe podem ter o mesmo nome, porm com assinaturas diferentes (tipos de retorno ou tipos
de argumentos diferentes), entretanto, esta sobrecarga no recebe o nome de polimorfismo.
Como dito anteriormente, tal situao no gera conflito, pois o compilador capaz de detectar
qual mtodo deve ser escolhido a partir da anlise dos tipos dos argumentos do mtodo.
Nesse caso, diz-se que ocorre a ligao prematura para o mtodo correto. Em Java, todas
as determinaes de mtodos a executar ocorrem por meio da ligao tardia (ocorrncia em
tempo de execuo) exceto em dois casos: mtodos final, que no podem ser redefinidos, e
140PROGRAMAO I (JAVA) | Educao a Distncia
mtodos private, que tambm no podem ser redefinidos e, portanto, possuem as mesmas
caractersticas de mtodos final.
Para que seja implementado o polimorfismo de maneira correta, necessrio que os mtodos
tenham exatamente a mesma identificao, sendo utilizado o mecanismo de redefinio de
mtodos, que o mesmo que sobrescrita (Override) de mtodos em classes derivadas. A
redefinio ocorre quando um mtodo cuja assinatura j tenha sido especificada recebe
uma nova definio, ou seja, um novo corpo em uma classe derivada. importante observar
que, quando o polimorfismo est sendo utilizado, o comportamento que ser adotado por
um mtodo s ser definido durante a execuo. Embora em geral esse seja um mecanismo
que facilite o desenvolvimento e a compreenso do cdigo orientado a objetos, h algumas
situaes onde o resultado da execuo pode ser no intuitivo.
Para ilustrar todo este processo, vamos verificar o mtodo cadastra, que est presente nas
trs classes do nosso exemplo (Pessoa, Fsica e Jurdica) e acrescentar a implementao
do mtodo imprime nestas classes. O cdigo, a seguir, indica a classe abstrata Pessoa,
que possui atributos protegidos (podem ser visualizados por seus herdeiros) e mtodos de
cadastra() e imprime() implementados.
141
PROGRAMAO I (JAVA) | Educao a Distncia
No cdigo a seguir, temos a implementao da subclasse Fsica, que conta com a implementao
do mtodo cadastra() e imprime(). Note que antes da assinatura dos mtodos, existe uma
anotao indicando que o mtodo est sobrescrevendo outro. Caso haja necessidade de
utilizao do mtodo da superclasse, necessrio invoc-lo como acontece na linha super.
cadastra(). Desta forma, o mtodo da classe Pai tambm ser executado.
A implementao da classe Jurdica anloga implementao da classe Fsica, o que
difere so as mensagens que sero apresentadas ao usurio do aplicativo, e o atributo CNPJ
existente somente na classe Jurdica. O cdigo, a seguir, mostra a implementao da classe
Jurdica.
142PROGRAMAO I (JAVA) | Educao a Distncia
Implementadas as classes filhas e os mtodos sobrescritos, criou-se um mtodo principal para
manipular os objetos do tipo Pessoa, dando a opo para que o usurio do aplicativo selecione
qual o tipo de Pessoa que se deseja cadastrar. Caso escolha a opo 1, ser criado um objeto
do tipo Fsica dentro do vetor de Pessoas, caso a opo escolhida seja o item 2, um objeto do
tipo Jurdica ser criado. Caso o usurio queira imprimir os elementos cadastrados at ento,
ele pode optar pela opo de nmero 3. Veja esta implementao no cdigo a seguir.
Note que o mtodo cadastra chamado apenas uma vez, isto possvel, pois como as
subclasses sobrescrevem um mtodo da superclasse, este mtodo pode ter comportamentos
diferentes de acordo com o objeto de origem, e isto o polimorfismo!
Outro exemplo de aplicao do polimorfismo ainda no exemplo em questo com o mtodo
de impresso, como todas as classes filhas tambm sobrescrevem o mtodo imprime da
Superclasse, ele pode ser chamado, que se comportar de acordo com o objeto de origem.
Mas e se o no houver sobrescrita do mtodo? Como o compilador se comporta? Nestes
143
PROGRAMAO I (JAVA) | Educao a Distncia
casos, o compilador invoca o mtodo da classe Pai e executa-o. Veja no cdigo, a seguir,
a implementao do mtodo de impresso. Note que no necessrio verificar que tipo de
Pessoa precisa ser impressa, em tempo de execuo isto resolvido.
Estudo de Caso Animais
A seguir, ser mostrado um projeto que implementa Herana e Polimorfismo, e desta forma
ilustrar os conceitos aprendidos at aqui.
Os animais do zoolgico da cidade de So Paulo precisam ser catalogados pela idade e
nome e o zoolgico precisa que, alm disso, fossem catalogadas as formas de se locomover
do animal, assim como o som que eles emitem, pois a ideia do zoolgico transformar este
software em algo que possa mostrar para os visitantes algumas curiosidades sobre os animais
que ali vivem. Para isso, a administrao do zoolgico chamou Oswaldo, um programador
JAVA para desenvolver um software que auxiliasse nesta catalogao.
Oswaldo ento comeou a fazer a anlise dos requisitos e percebeu que tratava-se de um caso
em que a utilizao de tcnicas de polimorfismo e herana eram imprescindveis para que o
projeto pudesse ser expandido mais tarde, alm de auxiliar no processo de manuteno. Desta
forma, Oswaldo criou uma classe abstrata chamada Animal, e nela colocou as informaes
principais solicitadas pelo zoolgico para a catalogao. Ento ele criou as classes Cachorro,
Cavalo e Preguia, que herdam as propriedades de Animal e implementam os mtodos
abstratos. A seguir, sero apresentados os mtodos desenvolvidos por Oswaldo para resolver
esta necessidade do zoolgico.
No cdigo a seguir, a classe Animal foi criada como uma classe abstrata, pois Animal
uma abordagem geral e precisa ser especificada, esta classe possui dois atributos, nome
144PROGRAMAO I (JAVA) | Educao a Distncia
e idade do animal, alm dos mtodos abstratos seLocomove() e emiteSom(), que devero,
obrigatoriamente, serem implementados nas classes que herdarem a classe Animal.
package animal;
abstract public class Animal {
private String nome;
private int idade;
abstract public void seLocomove();
abstract public void emiteSom();
public int getIdade() {
return idade;
}
public void setIdade(int idade) {
this.idade = idade;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
}
A Classe Cachorro herda todos os atributos e mtodos da classe Animal, e obrigada a
implementar os mtodos seLocomove() e emiteSom(). Note ainda que a classe cachorro
possui um Construtor que recebe como parmetro o nome e a idade do Animal. O cdigo, a
seguir, ilustra a criao desta classe.
package animal;
public class Cachorro extends Animal{
public Cachorro(String nome, int id ){
super.setNome(nome);
super.setIdade(id);
}
@Override
public void seLocomove() {
System.out.println(Cachorro: +super.getNome());
System.out.println(Idade: +super.getIdade());
System.out.println(Cachorro correndo, com suas 4 patas);
}
//
@Override
public void emiteSom() {
System.out.println(Au Au !);
}
}
145
PROGRAMAO I (JAVA) | Educao a Distncia
A Classe Cavalo, assim como a Classe Cachorro, herda todos os atributos e mtodos da
classe Animal e obrigada a implementar os mtodos seLocomove() e emiteSom(), porm, a
implementao difere da classe Cachorro, o que resulta em um comportamento diferente, isto
o polimorfismo dos mtodos seLocomove() e emiteSom();.
package animal;
public class Cavalo extends Animal {
public Cavalo(String nome, int id ){
super.setNome(nome);
super.setIdade(id);
}
@Override
public void seLocomove() {
System.out.println(Cavalo: +super.getNome());
System.out.println(Idade: +super.getIdade());
System.out.println(Cavalga, Marcha, Trota);
}
//
@Override
public void emiteSom() {
System.out.println(Nhiiiiiiiiiiii ri ri rin !);
}
}
No cdigo, a seguir, temos a implementao da classe Preguia, seguindo os padres de
implementao dos outros animais.
package animal;
public class Preguica extends Animal{
public Preguica(String nome, int id ){
super.setNome(nome);
super.setIdade(id);
}
@Override
public void seLocomove() {
System.out.println(Preguia: +super.getNome());
System.out.println(Idade: +super.getIdade());
System.out.println(Subindo na rvore);
}
@Override
public void emiteSom() {
System.out.println(GRRRRRRRrrrrrr);
}
}
146PROGRAMAO I (JAVA) | Educao a Distncia
A seguir, temos a implementao da classe principal que cria e manipula o vetor de animais.
Note que no cdigo de criao do vetor, criam-se ponteiros para cada Animal, mas ainda no
se sabe qual animal ser colocado em cada posio. Quem vai determinar o tipo do animal
o usurio, de acordo com a ordem de insero por meio do mtodo cadastraAnimal().
Este mtodo questiona ao usurio qual o tipo de animal ser armazenado, sendo que o mtodo
fica encarregado de criar o objeto do animal desejado. Depois de cadastrado, possvel
verificar que animal ocupa cada posio do vetor por meio do mtodo imprimeAnimais(). Veja
que cada objeto sabe exatamente como deve ser seu comportamento ao chamar os mtodos
de seLocomove() e emiteSom().
import java.util.Scanner;
public class AnimalPrincipal {
Animal vetAni[] = new Animal[30];
static int tam=0;
public static void main(String[] args) {
// TODO code application logic here
int opcao=0;
Scanner scan = new Scanner(System.in);
AnimalPrincipal ap = new AnimalPrincipal();
while(opcao!=3){
System.out.println("Digite a opcao desejada:");
System.out.println("1 - Cadastrar");
System.out.println("2 - Listar");
System.out.println("3 - Sair");
opcao = scan.nextInt();
scan.nextLine();
switch(opcao){
case 1: ap.cadastraAnimal();
break;
case 2: ap.imprimeAnimais();
break;
case 3: System.out.println("Saindo...");
break;
default:System.out.println("Opo invlida");
break;
}
}
}
public void cadastraAnimal(){
Scanner scan = new Scanner(System.in);
System.out.println("Digite o tipo de animal:");
System.out.println("1 - Cachorro");
System.out.println("2 - Cavalo");
System.out.println("3 - Preguica");
147
PROGRAMAO I (JAVA) | Educao a Distncia
int i = scan.nextInt();
scan.nextLine();
if (i==1 || i==3 || i==2){
System.out.println("Digite o nome do animal");
String n = scan.nextLine();
System.out.println("Digite a idade do animal");
int id = scan.nextInt();
scan.nextLine();
if (i==1)
vetAni[tam]= new Cachorro(n,id);
else if(i==2)
vetAni[tam]= new Cavalo(n,id);
else if(i==3)
vetAni[tam]= new Preguica(n,id);
tam++;
}}
public void imprimeAnimais(){
Scanner scan = new Scanner(System.in);
for (int i=0;i<tam;i++){
System.out.println("Codigo do Animal: "+i);
vetAni[i].seLocomove();
}
System.out.println("Digite o codigo do animal que deseja ver");
int cod = scan.nextInt();
vetAni[cod].seLocomove();
vetAni[cod].emiteSom();
}
}
Execute o projeto Animal e teste voc mesmo as funcionalidades das tcnicas de Herana e
Polimorfismo aqui apresentadas.
148PROGRAMAO I (JAVA) | Educao a Distncia
CONSIDERAES FINAIS
Nesta Unidade, voc estudou conceitos muito importantes para a criao de projetos Orientados
a Objetos. Herana e Polimorfismos ajudam e muito no desenvolvimento de aplicaes que so
transformadas do mundo real para o mundo computacional, e estes mecanismos possibilitam
maior flexibilidade do projeto, aumentando assim a reutilizao de cdigos.
Por meio de Herana, voc viu que possvel herdar mtodos e atributos de classes pai, e
que o Java consegue identificar qual o tipo de objeto que est sendo trabalhado. Com o
Polimorfismo, voc pde perceber a capacidade de sobrescrita do mtodo, alm de entender
como um mtodo implementado em uma superclasse e sobrescrito nas subclasses pode
agilizar o desenvolvimento, uma vez que no se faz necessria a criao de mecanismos de
identificao e desvios para chamar o mtodo correto.
Voc tambm viu os conceitos de Interfaces, que nada mais so do que um contrato entre a
Interface a classe que se compromete a implementar todos os mtodos abstratos identificados
na interface, alm disso, voc tambm pde ver como o JAVA pode simular a herana mltipla
utilizando interfaces.
Entendendo e aplicando herana em Java
Por Hudson Geovane
A herana um princpio da POO que permite a criao de novas classes a partir de outras previa-
mente criadas. Essas novas classes so chamadas de subclasses, ou classes derivadas; e as classes
j existentes, que deram origem s subclasses, so chamadas de superclasses, ou classes base.
Deste modo, possvel criar uma hierarquia dessas classes, tornando, assim, classes mais amplas
e classes mais especfcas. Uma subclasse herda mtodos e atributos de sua superclasse; apesar
disso, pode escrev-los novamente para uma forma mais especfca de representar o comportamento
do mtodo herdado.
Saiba mais sobre o assunto no artigo completo.
Disponvel em: <http://www.devmedia.com.br/entendendo-e-aplicando-heranca-em-java/24544>.
Acesso em: 15 maio 2013.
149
PROGRAMAO I (JAVA) | Educao a Distncia
Herana em Java
Disponvel em: <http://www.youtube.com/watch?v=I9cGMw4QORQ>.
O uso de polimorfsmo em Java
Por Higor Medeiros
Veja neste artigo os conceitos, utilizao, implementao e a importncia do polimorfsmo. Tambm
veremos onde o polimorfsmo utilizado e de que forma ele pode ajudar para termos projetos melhores.
Saiba mais sobre o assunto no artigo completo.
Disponvel em: <http://www.devmedia.com.br/uso-de-polimorfsmo-em-java/26140>.
Polimorfsmo com classes abstratas
Disponvel em: <http://www.youtube.com/watch?v=FH0a-L4OQB4>.
150PROGRAMAO I (JAVA) | Educao a Distncia
Toda aplicao Java deve envolver a organizao de suas classes de dados de forma polimrfca!
ATIVIDADE DE AUTOESTUDO
1. No projeto de animais, crie as classes Gato, Galinha e Avestruz, e crie os mtodos
necessrios para cada Animal.
151
PROGRAMAO I (JAVA) | Educao a Distncia
CONCLUSO
Neste livro, busquei mostrar a voc uma introduo programao com a linguagem Java. A
fim de possibilitar o seu entendimento, a Unidade I apresentou o histrico da linguagem Java,
o processo de compilao e execuo e a mquina virtual Java.
Na Unidade II, trabalhamos estruturas bsicas da linguagem Java, por exemplo, tipos primitivos,
declaraes e inicializaes de variveis e estruturas importantes ao fluxo de controle e de
dados de um programa Java. Voc est lembrado de quais so estas estruturas? As estruturas
so: de controle, de repetio e de seleo.
A Unidade III foi dedicada exclusivamente ao entendimento da diferena entre classes e
objetos Java e como uma classe composta. Mostrei os principais elementos de uma classe:
atributos, mtodos e construtores, bem como o conceito de JavaBeans e POJO (Plain Old
Java Object).
Na Unidade IV apresentei os principais modificadores de acesso da linguagem Java, sendo
eles: private, public, protected e default. Apresentei tambm os conceitos essenciais sobre
encapsulamento, que foram complementados com atividades de autoestudo.
E, para finalizar, vimos na Unidade V o conceito de herana, sendo um dos conceitos mais
importantes em programao orientada a objetos. Alm disso, mostrei como acessar os
membros de uma classe (atributos e mtodos) por meio de herana e instanciao de objetos.
Espero ter alcanado o objetivo inicial deste livro, que era apresentar uma introduo
programao em Java. Desejo que voc seja muito feliz profissionalmente utilizando os
conceitos apresentados aqui, e se puder ajudar de alguma forma, estou a sua disposio.
Prof. Dr. Edson A. Oliveira Junior
152PROGRAMAO I (JAVA) | Educao a Distncia
GABARITO DAS ATIVIDADES DE AUTOESTUDO
UNIDADE I
1. Porque uma vez escritos e compilados em bytecodes, s necessria uma mquina virtual
Java para um sistema operacional especfico, ficando o programa independente de plataforma.
2. As principais caractersticas esto relacionadas sintaxe da linguagem, com as seguintes
melhorias: for enhanced, generics e autoboxing.
3. JCP a Java Community Process. Para submeter uma mudana, uma pessoa deve propor
uma JSR (Java Specification Release) e enviar JCP.
4. Java SE para o desenvolvimento de sistemas desktop e distribudos; Java EE para
aplicaes corporativas Web e de componentes de negcio; Java ME para o desenvolvimento
de aplicaes para dispositivos mveis.
5. Bytecode o cdigo gerado pelo compilador Java. Ele interpretado por meio das instrues
presentes na mquina virtual Java.
6. Aps escrito o cdigo .java, ele compilado por meio do compilador Java gerando o
bytecode. O bytecode ento carregado e interpretado pela mquina virtual Java que executa
suas instrues.
7. O classpath indica o local exato onde esto disponveis todas as classes necessrias para
que um programa seja compilado e executado.
153
PROGRAMAO I (JAVA) | Educao a Distncia
UNIDADE II
1.
a) 2147483647
b) -2147483648
c) -2147483645
d) 2147483647
e) -2
f) -4
2.
a) No existe then em Java.
b) If exige o uso de parnteses na expresso.
c) Nada errado.
d) Falta um ; antes do else.
3.
a) int idade = 10;
if(idade > 0 && idade <= 12) {
System.out.println(criana...);
} else if(idade > 12 && idade <= 17) {
System.out.println(adolescente);
} else if(idade >= 18 && idade <= 65) {
154PROGRAMAO I (JAVA) | Educao a Distncia
System.out.println(adulto);
} else if(idade > 66) {
System.out.println(idoso);
}
b)
int mes = 5;
int dias = 0;

switch(mes) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
dias = 31;
break;
case 4:
case 6:
case 9:
155
PROGRAMAO I (JAVA) | Educao a Distncia
case 11:
dias = 30;
break;
case 2:
dias = 28;
break;
default:
dias = 0;
}
c)
for(int i = 0; i < 100; i++) {
System.out.println(i: + i);
}
d)
int z = 10;
while(z < 5) {
System.out.println(z: + z);
z--;
}
156PROGRAMAO I (JAVA) | Educao a Distncia
UNIDADE III
1.
// classe Conta
public class Conta {
double saldo;
Conta() {
saldo = 0.0;
}

public void depositar(double quantia) {
saldo = saldo + quantia;
}

public void sacar(double quantia) {
if(saldo >= quantia) {
saldo = saldo - quantia;
}
}
}
//conta poupana
public class Inicio {

public static void main(String[] args) {

Conta contaCorrente = new Conta();
Conta poupanca = new Conta();

contaCorrente.depositar(1000.00);
contaCorrente.sacar(500.00);

System.out.println(Saldo da conta corrente: + contaCorrente.saldo);

poupanca.depositar(2500.00);
System.out.println(Saldo da poupanca: + poupanca.saldo);
poupanca.sacar(3000.00);
System.out.println(Saldo da poupanca: + poupanca.saldo);
}
}
157
PROGRAMAO I (JAVA) | Educao a Distncia
UNIDADE IV
1.
package localizacao;
public class Endereco {
private String rua;
private int numero;
private String cidade;
private String uf;

public Endereco() { super(); }
public String getCidade() { return cidade; }
public void setCidade(String cidade) { this.cidade = cidade; }
public int getNumero() { return numero; }
public void setNumero(int numero) { this.numero = numero; }
public String getRua() { return rua; }
public void setRua(String rua) { this.rua = rua; }
public String getUf() { return uf;}
public void setUf(String uf) { this.uf = uf; }
}
package pessoal;
import localizacao.Endereco;
public class Pessoa {

protected String nomePessoa;
protected Endereco endereco;
protected String telefone;

public Pessoa() { super();}
public Endereco getEndereco() { return endereco; }
public void setEndereco(Endereco endereco) { this.endereco = endereco;}
public String getNomePessoa() { return nomePessoa; }
public void setNomePessoa(String nomePessoa) { this.nomePessoa = nomePessoa; }
public String getTelefone() { return telefone; }
public void setTelefone(String telefone) { this.telefone = telefone; }
}
158PROGRAMAO I (JAVA) | Educao a Distncia
package pessoal;
public class Fisica extends Pessoa {

private String cpf;
public Fisica() { super();}
public String getCpf() { return cpf; }
public void setCpf(String cpf) { this.cpf = cpf; }
}
package pessoal;
public class Juridica extends Pessoa {

private String cnpj;

public Juridica() { super(); }
public String getCnpj() { return cnpj; }
public void setCnpj(String cnpj) { this.cnpj = cnpj; }
}
package caixa;
import pessoal.Pessoa;
public class Conta {
private double saldo;
private int numConta;
private Pessoa titular;
private int tipoConta;

public Conta() { super(); }
public int getNumConta() { return numConta; }
public void setNumConta(int numConta) { this.numConta = numConta; }
public double getSaldo() { return saldo; }
public void setSaldo(double saldo) { this.saldo = saldo; }
public int getTipoConta() { return tipoConta; }
public void setTipoConta(int tipoConta) { this.tipoConta = tipoConta; }
public Pessoa getTitular() { return titular; }
public void setTitular(Pessoa titular) { this.titular = titular; }
}
159
PROGRAMAO I (JAVA) | Educao a Distncia
package caixa;
import java.util.ArrayList;
public class CaixaEletronico {

private Conta c;
private ArrayList contasCadastradas = new ArrayList<Conta>();

public void sacar(foat valorSaque) {}
public void depositar(foat valorDep) {}
public void verifcarSaldo(){}
public void transferir(int numContaDestino, foat valor) {}
}
2.
Por herana, o atributo protected nomePessoa da classe Pessoa pode ser acessado por
qualquer classe que estende tal classe independentemente em qual pacote esteja. Se o
atributo for private, este no pode ser acessado de forma direta a partir da classe Jurdica.
3.
Acrescente os seguintes atributos classe Conta:
public static fnal double limiteTransferencia = 3000.0;
public static fnal double limiteSaque = 1000.0;
public static fnal double taxaJuros = 1.5;
4.
A sada ser:
Pessoa Construct
Pessoa Fisica
Vendedor
160PROGRAMAO I (JAVA) | Educao a Distncia
UNIDADE V
1.
package animal;
public class Gato extends Animal {
public Gato(String nome, int id) {
super.setNome(nome);
super.setIdade(id);
}
@Override
public void seLocomove() {
System.out.println(Gato: + super.getNome());
System.out.println(Idade: + super.getIdade());
System.out.println(Gato correndo, com suas 4 patas);
}
@Override
public void emiteSom() {
System.out.println(Miauuuuu... !);
}
}

package animal;
public class Galinha extends Animal {
public Galinha(String nome, int id) {
super.setNome(nome);
super.setIdade(id);
}
@Override
public void seLocomove() {
System.out.println(Galinha: + super.getNome());
System.out.println(Idade: + super.getIdade());
System.out.println(Galinha correndo, com suas 2 patas);
}
@Override
public void emiteSom() {
System.out.println(Cocoric...!);
}
}

161
PROGRAMAO I (JAVA) | Educao a Distncia
package animal;
public class Avestruz extends Animal {
public Avestruz(String nome, int id) {
super.setNome(nome);
super.setIdade(id);
}
@Override
public void seLocomove() {
System.out.println(Avestruz: + super.getNome());
System.out.println(Idade: + super.getIdade());
System.out.println(Avestruz correndo, com suas 2 patas);
}
@Override
public void emiteSom() {
System.out.println(Ruuuu... !);
}
}

162PROGRAMAO I (JAVA) | Educao a Distncia
REFERNCIAS
DEITEL, Harvey M. Java - Como Programar. 8. ed. Prentice Hall Brasil, 2010.
HORSTMANN, Cay S.; CORNELL, Gary. Core Java. V.1 Fundamentos. 8. ed. Pearson,
2010.
HORSTMANN, Cay S.; CORNELL, Gary. Core Java. V.2 - Advanced Features. Prentice Hall,
2008.
SIERRA, Kathy; BATES, Bert. Use A Cabea! Java. 2. ed. Alta Books, 2008.

Você também pode gostar