Você está na página 1de 120

Introduo Programao

Orientada a Objetos
Rogrio da Silva Batista
Rafael Arajo de Moraes

Curso Tcnico em Informtica

ISBN 978-85-67082-01-1

9 788567 082011
Introduo Programao
Orientada a Objetos
Rogrio da Silva Batista
Rafael Arajo de Moraes

Teresina PI
2013
Presidncia da Repblica Federativa do Brasil

Ministrio da Educao

Secretaria de Educao Profissional e Tecnolgica

Instituto Federal de Educao, Cincia e Tecnologia do Piau


Este Caderno foi elaborado em parceria entre o Instituto Federal de Educao,
Cincia e Tecnologia do Piau e a Universidade Federal de Santa Catarina para a
Rede e-Tec Brasil.

Equipe de Elaborao Coordenao de Design Grfico


Instituto Federal de Educao, Cincia e Tecno- Juliana Tonietto/UFSC
logia do Piau IFPI
Design Instrucional
Coordenao Institucional Gustavo Pereira Mateus/UFSC
Francieric Alves de Araujo/IFPI Juliana Leonardi/UFSC

Coordenao do Curso Web Master


Thiago Alves Elias da Silva/IFPI Rafaela Lunardi Comarella/UFSC

Professores-autores Web Design


Rogrio da Silva Batista/IFPI Beatriz Wilges/UFSC
Rafael Arajo de Moraes/IFPI Mnica Nassar Machuca/UFSC

Comisso de Acompanhamento e Validao Diagramao


Universidade Federal de Santa Catarina UFSC Liana Domeneghini Chiaradia/UFSC
Marlia Ceriolli Hermoso/UFSC
Coordenao Institucional
Araci Hack Catapan/UFSC Reviso
Jlio Csar Ramos/UFSC
Coordenao do Projeto
Silvia Modesto Nassar/UFSC Projeto Grfico
e-Tec/MEC
Coordenao de Design Instrucional
Beatriz Helena Dal Molin/UNIOESTE e UFSC

Catalogao na fonte pela Biblioteca Universitria da


Universidade Federal de Santa Catarina

B333i Batista, Rogrio da Silva


Introduo programao orientada a objetos
/ Rogrio da Silva Batista, Rafael Arajo de Moraes. Teresina :
Instituto Federal de Educao, Cincia e Tecnologia do Piau,
2013. 118 p. : il., tabs.

Inclui bibliografia
ISBN: 978-85-67082-01-1

1.Programao orientada a objetos (Computao).


I. Moraes, Rafael Arajo de. II. Ttulo.

CDU: 681.31:519.689
Apresentao e-Tec Brasil

Bem-vindo a Rede e-Tec Brasil!

Voc faz parte de uma rede nacional de ensino, que por sua vez constitui
uma das aes do Pronatec - Programa Nacional de Acesso ao Ensino Tc-
nico e Emprego. O Pronatec, institudo pela Lei n 12.513/2011, tem como
objetivo principal expandir, interiorizar e democratizar a oferta de cursos de
Educao Profissional e Tecnolgica (EPT) para a populao brasileira propi-
ciando caminho de o acesso mais rpido ao emprego.
neste mbito que as aes da Rede e-Tec Brasil promovem a parceria entre a
Secretaria de Educao Profissional e Tecnolgica (SETEC) e as instncias promo-
toras de ensino tcnico como os Institutos Federais, as Secretarias de Educao
dos Estados, as Universidades, as Escolas e Colgios Tecnolgicos e o Sistema S.
A educao a distncia no nosso pas, de dimenses continentais e grande
diversidade regional e cultural, longe de distanciar, aproxima as pessoas ao
garantir acesso educao de qualidade, e promover o fortalecimento da
formao de jovens moradores de regies distantes, geograficamente ou
economicamente, dos grandes centros.
A Rede e-Tec Brasil leva diversos cursos tcnicos a todas as regies do pas,
incentivando os estudantes a concluir o ensino mdio e realizar uma forma-
o e atualizao contnuas. Os cursos so ofertados pelas instituies de
educao profissional e o atendimento ao estudante realizado tanto nas
sedes das instituies quanto em suas unidades remotas, os polos.
Os parceiros da Rede e-Tec Brasil acreditam em uma educao profissional
qualificada integradora do ensino mdio e educao tcnica, - capaz de
promover o cidado com capacidades para produzir, mas tambm com auto-
nomia diante das diferentes dimenses da realidade: cultural, social, familiar,
esportiva, poltica e tica.

Ns acreditamos em voc!
Desejamos sucesso na sua formao profissional!
Ministrio da Educao
Fevereiro de 2013
Nosso contato
etecbrasil@mec.gov.br

3 e-Tec Brasil
Indicao de cones

Os cones so elementos grficos utilizados para ampliar as formas de


linguagem e facilitar a organizao e a leitura hipertextual.

Ateno: indica pontos de maior relevncia no texto.

Saiba mais: oferece novas informaes que enriquecem o


assunto ou curiosidades e notcias recentes relacionadas ao
tema estudado.

Glossrio: indica a definio de um termo, palavra ou expresso


utilizada no texto.

Mdias integradas: sempre que se desejar que os estudantes


desenvolvam atividades empregando diferentes mdias: vdeos,
filmes, jornais, ambiente AVEA e outras.

Atividades de aprendizagem: apresenta atividades em


diferentes nveis de aprendizagem para que o estudante possa
realiz-las e conferir o seu domnio do tema estudado.

5 e-Tec Brasil
Sumrio

Palavra do professor-autor 9

Apresentao da disciplina 11

Projeto instrucional 13

Aula 1 Introduo ao Java 15


1.1 Histrico 15
1.2 Caractersticas 16
1.3 A Mquina Virtual Java Java Virtual Machine (JVM) 17
1.4 Etapas de um programa Java 18
1.5 Hotspot e JIT 19
1.6 Verses do JAVA 19
1.7 JRE e JDK 20
1.8 Compilando o primeiro programa Java 21
1.9 Executando o primeiro programa Java 22

Aula 2 Tipos de dados, operadores e controle de fluxo 25


2.1 Tipos de dados 25
2.2 Declarao de variveis 26
2.3 Converses entre tipos 27
2.4 Operadores 30
2.6 Constantes 33
2.7 Controle de fluxo 33
2.8 Escopo de variveis 40

Aula 3 Orientao a objetos: conceitos bsicos 45


3.1 Introduo 45
3.2 Modelos 46
3.3 Objetos 52
3.4 Classes 56
3.5 Troca de mensagens entre objetos 59
3.6 Criando classes em Java 62
3.7 Escopo 67

7 e-Tec Brasil
3.8 Encapsulamento 69
3.9 Criando objetos e acessando dados encapsulados 71
3.10 Criando aplicaes em Java 74

Aula 4 Construtores, sobrecarga, atributos e


mtodos de classe 83
4.1 Introduo 83
4.2 O que so construtores? 86
4.3 Sobrecarga de mtodos 87
4.4 Cuidados com sobrecarga de mtodos 88

Aula 5 Campos e mtodos estticos 91


5.1 Introduo 91
5.2 Campos estticos em classe 91
5.3 Mtodos estticos em classe 97
5.4 Campos e mtodos estticos em aplicaes 100
5.5 Fbricas de instncias 102

Aula 6 Reutilizao de classes 107


6.1 Introduo 107
6.2 Herana 107
6.3 Polimorfismo 110
6.4 Criao de um objeto de
uma subclasse e o ponteiro super 113
6.5 Mtodo final e classe final 115

Referncias 118

e-Tec Brasil 8
Palavra do professor-autor

Caro estudante,

Bem-vindo disciplina Introduo Programao Orientada a Objetos.


Este material foi elaborado com o objetivo de contribuir para o desenvolvi-
mento de seus estudos e para a ampliao de seus conhecimentos sobre o
assunto tratado nesta disciplina.

Um grande abrao!

9 e-Tec Brasil
Apresentao da disciplina

Este texto destinado aos estudantes aprendizes que participam do progra-


ma Escola Tcnica Aberta do Brasil (e-Tec Brasil), vinculado Escola Tcnica
Aberta do Piau (ETAPI) do Instituto Federal de Educao, Cincia e Tecnolo-
gia do Piau (IFPI), com apoio das prefeituras municipais dos respectivos po-
los: Alegrete do Piau, Batalha, Monsenhor Gil e Valena do Piau. O caderno
composto de seis aulas, assim distribudas:

Na Aula 1 faremos uma introduo linguagem Java, abordaremos algu-


mas caractersticas, verses, instalao, compilao e execuo. A lingua-
gem Java ser a nossa linguagem de programao padro utilizada neste
curso, e atravs dela que aplicaremos na prtica os conceitos do paradigma
orientado a objeto.

Na Aula 2 abordaremos a linguagem Java com mais detalhes sobre suas


estruturas de controle e seus comandos.

Na Aula 3 comearemos de fato a estudar o paradigma orientado a objetos.


Nessa aula vamos entender alguns conceitos fundamentais como classes,
objetos, encapsulamento e vamos aplicar esses conceitos por meio de defi-
nio de classes e aplicaes em Java.

Na Aula 4 definiremos o que so e para que servem os construtores de clas-


ses e vamos aprender o conceito de sobrecarga de mtodos para utilizarmos
em nossas aplicaes.

Na Aula 5 conheceremos o que so campos e mtodos estticos e como


utiliz-los em nosso cdigo; vamos tambm aprender como diferenciar m-
todos estticos de mtodos no estticos e tambm como declarar campos
que sero compartilhados entre todas as instncias de uma classe.

Na Aula 6 vamos conhecer herana e polimorfismo, que so os conceitos


fundamentais que diferenciam a linguagem orientada a objetos das demais
linguagens. Vamos aprender a utilizar esses conceitos em nosso cdigo e a
criar objetos de uma subclasse e utilizar o mtodo e classe final.

11 e-Tec Brasil
Projeto instrucional

Disciplina: Introduo Programao Orientada a Objetos (carga horria: 90h).

Ementa: Introduo ao Java: histrico, caractersticas e verses. Tipos de da-


dos, varivel, constantes, operaes e estrutura condicional e de repetio.
Conceitos bsicos de orientao a objeto: classe, objeto, encapsulamento, po-
limorfismo e herana. Criao de construtores, sobrecarga, mtodos estticos.

CARGA
OBJETIVOS DE
AULA MATERIAIS HORRIA
APRENDIZAGEM
(horas)
Conhecer o conceito de Java, suas
caractersticas e aplicaes e ambiente
Caderno diadtico da disciplina.
de desenvolvimento.
1. Introduo ao Material disponibilizado no
Identificar as fases de um programa em 15
Java ambiente virtual de enssino-
Java.
-aprendizagem (AVEA).
Entender o processo de compilao e
execuo de um programa simples.
Conhecer os tipos primitivos da lin-
guagem Java bem como os operadores
Caderno diadtico da disciplina.
2. Tipos de dados, utilizados.
Material disponibilizado no
operadores e Aprender a trabalhar com os recursos da 15
ambiente virtual de enssino-
controle de fluxo linguagem Java.
-aprendizagem (AVEA).
Entender o que um escopo de uma
varivel.
Compreender o que e para que serve
orientao a objetos.
Criar modelos para representao de in-
formaes em um determinado contexto.
Conceituar objetos, classes, atributos e
comportamentos.
Caderno diadtico da disciplina.
3. Orientao a Entender o significado da criao e uso
Material disponibilizado no
objetos conceitos de variveis de referncia e objetos na 15
ambiente virtual de enssino-
bsicos memria.
-aprendizagem (AVEA).
Implementar o encapsulamento atravs
modificadores de acesso nas definies
de classe.
Implementar classes executveis atravs
do mtodo main para manipulao de
classes atravs de seus objetos criados.
Conhecer o que so e para que servem
4. Construtores, os construtores. Caderno diadtico da disciplina.
sobrecarga, atribu- Criar construtores para classes. Material disponibilizado no
15
tos e mtodos de Compreender a sobrecarga de mtodos ambiente virtual de enssino-
classe e quais os principais cuidados que -aprendizagem (AVEA).
devemos ter com ela.
Continua

13 e-Tec Brasil
CARGA
OBJETIVOS DE
AULA MATERIAIS HORRIA
APRENDIZAGEM
(horas)
Compreender o que so campos e
Caderno diadtico da disciplina.
mtodos estticos e como utiliz-los para
5. Campos e mto- Material disponibilizado no
escrever melhor seu programa em Java. 15
dos estticos ambiente virtual de enssino-
Saber diferenciar mtodo esttico de
-aprendizagem (AVEA).
mtodos no estticos.
Compreender os principais meios de
reutilizao de classes.
Compreender a utilizao do conceito de Caderno diadtico da disciplina.
herana, polimorfismo, dentre outros. Material disponibilizado no
6. Reutilizao de
Aprender os dois tipos de polimorfismo e ambiente virtual de enssino- 15
classe
como aplic-los em nosso cdigo; -aprendizagem (AVEA).
Aprender como criar objetos de uma
subclasse.
Utilizar o mtodo e classe final.
Concluso

e-Tec Brasil 14
Aula 1 Introduo ao Java

Objetivos

Conhecer o conceito de Java, suas caractersticas, aplicaes e am-


biente de desenvolvimento.

Entender as fases de um programa em Java.

Entender o processo de compilao e execuo de um programa


simples.

1.1 Histrico
A linguagem de programao Java foi criada em 1992 por James Gosling e
iniciou como parte do projeto Green, da Sun Microsystems, com a finalidade
de desenvolver inovaes tecnolgicas. A equipe responsvel teve a ideia de
criar um interpretador (veremos o que isso mais adiante) para pequenos
dispositivos, facilitando a reescrita de software para aparelhos eletrnicos,
como videocassete, televiso e aparelhos de TV a cabo.

A ideia no deu certo. Tentaram fechar diversos contratos com grandes fa-
bricantes de eletrnicos, como a Panasonic, mas no houve xito, devido ao
conflito de interesses. Com o advento da web, a Sun percebeu que poderia
utilizar a ideia criada em 1992 para possibilitar rodar pequenas aplicaes
dentro de um navegador. A semelhana era que na internet havia uma gran-
de quantidade de sistemas operacionais e navegadores e, com isso, seria
grande vantagem poder programar numa nica linguagem, independente-
mente da plataforma. Inicialmente a linguagem iria chamar-se Oak. A mu-
dana de nome ocorreu porque j existia uma linguagem de programao
com esse nome; ento, a linguagem foi rebatizada para Java.

Aula 1 Introduo ao Java 15 e-Tec Brasil


1.2 Caractersticas
O termo Java utilizado, geralmente, quando nos referimos a:

linguagem de programao orientada a objetos;

ambiente de desenvolvimento composto pelo compilador, interpretador,


gerador de documentao etc.;

ambiente de execuo que pode ser praticamente qualquer mquina que


possua Java Runtime Environment (JRE) instalado.

A linguagem de programao Java uma linguagem de alto nvel, com as


seguintes caractersticas:

Simples: O aprendizado da linguagem de programao Java pode ser


feito em um curto perodo de tempo, pois muito familiar para quem
programa em C/C++. Possui um pequeno numero de construes de
linguagem e elimina algumas das construes mais complicadas como:
desvio incondicional (goto), herana mltipla e ponteiros.

Orientada a objetos: Desde o incio do seu desenvolvimento, essa lin-


guagem foi projetada para ser orientada a objetos. Para isso, atende a
todos os requisitos como: oferecer mecanismos de abstrao, encapsula-
mento e hereditariedade.

Robusta: Ela foi pensada para o desenvolvimento de softwares confi-


veis, provendo verificaes tanto em tempo de execuo quanto compi-
lao. O coletor de lixo responsabiliza-se pela limpeza da memria quan-
do houver necessidade, evitando erros de uso dessa memria.

Segura: Aplicaes Java so executadas em ambiente prprio Java Run-


time Environment (JRE), o que inviabiliza a intruso de cdigo malicioso.

Portvel: Programas desenvolvidos nessa linguagem podem ser executados


em praticamente qualquer mquina, desde que esta possua o JRE instalado.

e-Tec Brasil 16 Introduo Programao Orientada a Objetos


1.3 A Mquina Virtual Java
Java Virtual Machine (JVM)
Em uma linguagem de programao como C e Pascal, temos o seguinte
quadro quando vamos compilar um programa (Figura 1.1).

Cdigo-Fonte em Cdigo Binrio para um


Pascal compilador determinado SO

Figura 1.1: Processo de compilao em uma linguagem de programao Pascal


Fonte: Elaborada pelos autores

O cdigo-fonte compilado para uma plataforma e sistema operacional


especficos. Muitas vezes, o prprio cdigo-fonte desenvolvido visando a
uma nica plataforma. Esse cdigo executvel (binrio) resultante ser exe-
cutado pelo sistema operacional e, por esse motivo, ele deve saber conver-
sar com o sistema operacional em questo.

Cdigo Binrio para Cdigo Binrio para


Aplicao
Windows Linux

Sistema
Windows Linux
Operacional

Figura 1.2: Exemplo de cdigo executvel para cada sistema operacional


Fonte: Elaborada pelos autores

Isto , temos um cdigo executvel para cada sistema operacional. neces-


srio compilar uma vez para Windows, outra para o Linux, etc.

Como foi dito anteriormente, na maioria das vezes, a sua aplicao se utiliza
das bibliotecas do sistema operacional, como, por exemplo, a de interface
grfica para desenhar as telas de um sistema. A biblioteca de interface grfica
do Windows bem diferente da biblioteca do Linux, ou seja, o programador
obrigado a reescrever o mesmo pedao de cdigo (referente interface
grfica) para diferentes sistemas operacionais, j que eles no so compatveis.

A mquina virtual Java (JVM) uma mquina imaginria que emula uma
aplicao em uma mquina real. a JVM que permite a portabilidade do c-

Aula 1 Introduo ao Java 17 e-Tec Brasil


digo Java; isso ocorre porque todo cdigo Java compilado para um forma-
to intermedirio, o bytecode. Esse formato ento interpretado pela JVM.
Existem diversas JVMs, cada uma delas destinada a um tipo de sistema ope-
racional (Windows, Linux, Mac, etc.). Dessa forma, sendo o cdigo de uma
aplicao Java transformada em bytecode e interpretada pela JVM, podemos
desenvolver uma aplicao sem nos preocuparmos onde ela ser executada,
pois uma vez que a JVM est instalada, nossa aplicao ir executar sem
nenhum envolvimento com o sistema operacional.

Bytecode java Bytecode java

Mquina virtual Mquina virtual


Java para Linux Java para Windows

Linux Windows

Figura 1.3: Relao entre o bytecode, a mquina virtual e o sistema operacional


Fonte: Elaborada pelos autores

1.4 Etapas de um programa Java


As etapas pelas quais passa um programa relacionam-se da seguinte forma:

100000000
101010100
Compilador JVM 011111110
111100110
Programa.java Programa.class

Figura 1.4: Etapas de um programa Java


Fonte: Curso Java Starter (www.t2ti.com)

1. criao do cdigo-fonte (Programa.Java);

2. compilao do cdigo-fonte e gerao do bytecode (Programa.class);

3. interpretao do bytecode pela mquina virtual;

4. converso do bytecode em linguagem de mquina.

e-Tec Brasil 18 Introduo Programao Orientada a Objetos


1.5 Hotspot e JIT
Hotspot a tecnologia que a JVM utiliza para detectar pontos quentes da
sua aplicao: cdigo que executado, muito provavelmente, dentro de
um ou mais loops. Quando a JVM julgar necessrio, ela vai compilar aquele
cdigo para instrues nativas da plataforma, tendo em vista que isso vai
provavelmente melhorar a performance da sua aplicao. Esse compilador
o JIT: Just in Time Compiler, o compilador que aparece bem na hora que
voc precisa.

Voc pode pensar ento: por que a JVM no compila tudo antes de execu-
tar a aplicao? que, teoricamente, compilar dinamicamente, na medida
do necessrio, pode gerar uma performance melhor. O motivo simples:
imagine um .exe gerado pelo VisualBasic, pelo gcc ou pelo Delphi; ele
esttico. Em princpio podemos pensar que o fato de o programa no preci-
sar passar por uma etapa a mais, a interpretao, ir torn-lo mais eficiente,
mas muitas vezes a compilao esttica no consegue prever situaes que
iro ocorrer durante a execuo do cdigo: trechos da aplicao mais utiliza-
dos, carga do sistema, quantidade de usurios simultneos, memria dispo-
nvel, etc. Ou seja, o compilador pode ter tomado uma deciso no to boa.

J a JVM, por estar compilando dinamicamente durante a execuo, pode


perceber que um determinado cdigo no est com performance adequada
e otimizar mais um pouco aquele trecho, ou ainda mudar a estratgia de
otimizao. por esse motivo que as JVMs mais recentes, chegam a ganhar,
em muitos casos, de cdigos C compilados com o GCC 3.x, se rodados du-
rante certo tempo.

1.6 Verses do JAVA


Java 1.0 e 1.1 so verses muito antigas do Java. Com o Java 1.2 houve um
aumento grande no tamanho da API, e foi nesse momento que trocaram a
nomenclatura de Java para Java2, com o objetivo de diminuir a confuso
entre Java e Javascript. Mas lembre-se: no h verso do Java 2.0, o 2 foi in-
corporado ao nome: Java2 1.2. Depois vieram o Java2 1.3 e 1.4, e o Java 1.5
passou a se chamar Java 5, tanto por uma questo de marketing quanto por-
que mudanas significativas na linguagem foram includas. nesse momento
que o 2 do nome Java desaparece. Repare que para fins de desenvolvimen-
to, o Java 5 ainda referido como Java 1.5. At a verso 1.4, existia a terceira
numerao (1.3.1, 1.4.1, 1.4.2, etc.), indicando bug fixes e melhorias. A partir
do Java 5 existem apenas updates: Java 5 update 7, por exemplo.

Aula 1 Introduo ao Java 19 e-Tec Brasil


Hoje a ltima verso disponvel do Java a 6.0, lanada em 2006. Da ver-
so 1.4 para a 5.0, a linguagem sofreu muitas modificaes, o que de certa
forma fomentou a mudana no versionamento do Java. J o Java 6.0 no
trouxe nenhuma mudana na linguagem, mas trouxe mais recursos na API e
muitas melhorias de performance na VM.

Existe compatibilidade para trs em todas as verses do Java. Um class gerado


pelo Javac da verso 1.2 precisa necessariamente rodar na JVM 6.0. Por isso,
recomendamos sempre usar a ltima verso do Java para usufruir das tecno-
logias mais modernas, mas sem correr o risco de quebrar aplicaes antigas.

1.7 JRE e JDK


JRE: O Java Runtime Environment contm tudo aquilo que um usurio
comum precisa para executar uma aplicao Java (JVM e bibliotecas),
como o prprio nome diz o Ambiente de execuo Java;

JDK: O Java Development Kit composto pelo JRE e um conjunto de


ferramentas teis ao desenvolvedor Java.

1.7.1 Ferramentas do JDK


A seguir temos uma breve descrio das principais ferramentas que fazem
parte do JDK:

javac: compilador da linguagem Java;

Java: interpretador Java;

jdb: debugador Java;

Java-prof: interpretador com opo para gerar estatsticas sobre o uso


dos mtodos;

javadoc: gerador de documentao;

jar: ferramenta que comprime, lista e expande;

appletviewer: permite a execuo e debug de applets sem browser;

e-Tec Brasil 20 Introduo Programao Orientada a Objetos


javap: permite ler a interface pblica das classes;

extcheck: detecta conflitos em arquivos Jar.

1.8 Compilando o primeiro programa Java


Vamos para o nosso primeiro cdigo. O programa que imprime uma linha
simples.

Figura 1.5: Nosso primeiro programa


Fonte: Elaborada pelos autores

Todos os cdigos apresentados neste caderno esto formatados com recur-


sos visuais para auxiliar a leitura e compreenso. Quando for digitar os c-
digos no computador, trate-os como texto simples. A numerao das linhas
no faz parte do cdigo e no deve ser digitada; apenas um recurso di-
dtico. O Java case sensitive: tome cuidado com maisculas e minsculas.
O nome do arquivo fonte do programa (.Java) dever ter sempre o mesmo
nome da classe. No Exemplo acima, o arquivo dever ser salvo com o nome:
MeuPrograma.java.

Voc dever digitar o cdigo acima em algum editor de textos de sua preferncia.

No Linux, recomendamos o uso do gedit ou do kate. No Windows, voc


pode usar o Notepad ou Notepad++. No Mac, TextWrangler ou TextMate.

Aps digitar o cdigo acima, grave-o como MeuPrograma.java em algum


diretrio. Para compilar, voc deve pedir para que o compilador de Java da
Sun, chamado javac, gere o bytecode correspondente ao seu cdigo Java.

Sintaxe no console do Sistema Operacional:

Figura 1.6: Sintaxe


Fonte: Elaborada pelos autores

Aula 1 Introduo ao Java 21 e-Tec Brasil


Depois de compilar, o bytecode foi gerado. Quando o sistema operacional
listar os arquivos contidos no diretrio atual, voc poder ver que um arqui-
vo .class foi gerado, com o mesmo nome da sua classe Java.

Figura 1.7: Visualizao de arquivos no console


Fonte: Elaborada pelos autores

1.9 Executando o primeiro programa Java


Os procedimentos para executar seu programa so muito simples. O coman-
do javac o compilador Java, e o comando java o responsvel por invocar
a mquina virtual para interpretar o seu programa. Sintaxe no console do
Sistema Operacional:

Figura 1.8: Executando o programa em Java


Fonte: Elaborada pelos autores

O corpo do programa (representado pela linha 3) o que ser executado


quando chamamos a mquina virtual. Por enquanto, todas as linhas anterio-
res, onde h a declarao de uma classe e a de um mtodo, no importam
para ns agora. Mas devemos saber que toda aplicao Java comea por
um ponto de entrada, e esse ponto de entrada um mtodo main. O main
o mtodo que inicia as aplicaes Java; quando solicitamos ao interpreta-
dor que execute uma determinada classe compilada, ele procura o mtodo
main; se esse mtodo no existir, ir ser gerada uma exceo informando
que o mtodo no foi localizado.

Ainda no sabemos o que mtodo, mas veremos mais adiante. At l, no


se preocupe com essas declaraes. Sempre que um exerccio for feito, o
cdigo a ser executado sempre estar nesse corpo.

No caso do nosso cdigo, a linha: System.out.println faz com que o con-


tedo entre aspas seja escrito na tela.

e-Tec Brasil 22 Introduo Programao Orientada a Objetos


Resumo
Nesta aula abordamos conceitos iniciais sobre a linguagem Java, suas carac-
tersticas e verses; a diferena entre a JRE e a JDK, de acordo com o uso
ou o desenvolvimento de programas Java; vimos a importncia da Mquina
Virtual Java Java Virtual Machine (JVM) como fator fundamental para a
portabilidade do Java e seu objetivo junto ao processo de compilao e exe-
cuo de um programa. Criamos a primeira aplicao Java como exemplo
para mostrar o uso dos comandos mais importantes da JDK, que so: javac
e java, que tm, respectivamente, como objetivos: a compilao de um pro-
grama fonte em Java(.java), cujo resultado o bytecode gerado .class e a
interpretao do bytecode gerado pela JVM.

Atividades de aprendizagem
1. Explique qual a funo da Mquina Virtual Java (JVM).

2. Qual a diferena entre JRE e JDK?

3. Crie um programa Java que imprima o seguinte texto Terminei a primei-


ra aula com um programa Java!.

4. Compile o programa desenvolvido no exerccio anterior. A seguir apague


o arquivo .class gerado e tente executar o programa. O que aconteceu?

5. Mude o nome do mtodo main para start, compile e execute. O que


aconteceu?

6. Crie um programa Java para imprimir duas linhas de texto usando duas
linhas de cdigo System.out, onde aparecer o seu nome na primeira
linha e na segunda linha aparecer o time para o qual voc torce.

7. Experimente escrever todo o programa anterior em maisculo, compile e


execute. O que aconteceu?

8. Experimente salvar o arquivo com um nome diferente do nome da classe,


compile e execute. O que aconteceu?

Poste suas respostas no AVEA.

Aula 1 Introduo ao Java 23 e-Tec Brasil


Aula 2 Tipos de dados, operadores
e controle de fluxo

Objetivos

Conhecer os tipos primitivos da linguagem Java bem como os ope-


radores utilizados.

Aprender a trabalhar com os recursos da linguagem Java.

Entender o que um escopo de uma varivel.

2.1 Tipos de dados


Como podemos observar, a linguagem Java oferece diversos tipos de dados
com os quais podemos trabalhar. H basicamente duas categorias em que
se encaixam os tipos de dados: tipos primitivos e tipos de referncias. Os
tipos primitivos correspondem a dados mais simples ou escalares, enquanto
os tipos de referncias consistem em arrays, classes e interfaces. Existem oito
tipos primitivos em Java. Seis deles so numricos, um o carter e o outro
o booleano. Os tipos inteiros guardam valores numricos sem parte fracio-
nria. Valores negativos so permitidos. Vamos a uma descrio curta sobre
cada um dos tipos mostrado no Quadro 2.1 a seguir.

Quadro 2.1: Tipos de dados primitivos em Java


Tipo Descrio

Pode ser contido em um bit, porm o seu tamanho no precisamente


boolean
definido. Assume os valores true ou false.

Caractere em notao Unicode de 16 bits. Serve para armazenar dados


char alfanumricos. Tambm pode ser usado como um dado inteiro com
valores na faixa entre 0 e 65535.
Inteiro de oito bits em notao de complemento de dois. Pode assumir
byte
valores entre -27=-128 e 27-1=127.
Inteiro de 16 bits em notao de complemento de dois. Os valores
short
possveis cobrem a faixa de -2-15=-32.768 a 215-1=32.767
Inteiro de 32 bits em notao de complemento de dois. Pode assumir
int
valores entre -231=2.147.483.648 e 231-1=2.147.483.647.
Inteiro de 64 bits em notao de complemento de dois. Pode assumir
long
valores entre -263 e 263-1.
Continua

Aula 2 Tipos de dados, operadores e controle de fluxo 25 e-Tec Brasil


Representa nmeros em notao de ponto flutuante normalizada
em preciso simples de 32 bits em conformidade com a norma IEEE
float 754-1985. O menor valor positivo representvel por esse tipo
1.40239846e-46 e o maior 3.40282347e+38. Quatro bytes de
tamanho e 23 dgitos binrios de preciso.
Representa nmeros em notao de ponto flutuante normalizada em
preciso dupla de 64 bits em conformidade com a norma IEEE 754-
double 1985. O menor valor positivo representvel 4.94065645841246544e-
324 e o maior 1.7976931348623157e+308. Oito bytes de tamanho
e 52 dgitos binrios de preciso.
Concluso

2.2 Declarao de variveis


A declarao de variveis em Java, como em vrias outras linguagens, exige
que o tipo da varivel seja declarado. Voc inicia a declarao indicando o
tipo da varivel e o nome desejado, como no exemplo:

tipoDaVariavel nomeDaVariavel;

Por exemplo, possvel ter uma idade que vale um nmero inteiro:

int idade;

Com isso, voc declara a varivel idade, que passa a existir a partir deste mo-
mento. Ela do tipo int, que guarda um nmero inteiro. A partir de agora
voc pode us-la, primeiro atribuindo valores.

A linha a seguir a traduo de idade deve valer agora quinze.

idade = 15;

sempre interessante a colocao de comentrios em programas. Os co-


mentrios permitem que a manuteno posterior do cdigo seja mais rpida
e servem para indicar o que o programa faz. Os comentrios em Java podem
ser de dois tipos. Utilizam-se duas barras ( // ) em qualquer posio da linha.
Tudo o que aparecer direita das duas barras ser ignorado pelo compilador.
Exemplo:

idade=15; // atribuio do valor inteiro 15 varivel idade

e-Tec Brasil 26 Introduo Programao Orientada a Objetos


Existem ocasies em que vrias linhas de comentrio so necessrias. Nesse
caso, utilizamos os sinais de /* e */ para indicar incio e fim de bloco de co-
mentrios, como no exemplo:

/* Programa de Exemplo Esse programa no faz nada.


Criado por Maria
Versao 1.0
*/

Note que todas as declaraes terminam com o ponto e vrgula. Os nomes


das variveis devem ser iniciados com qualquer letra, seguidas por uma se-
quncia de letras ou nmeros. O tamanho do nome da varivel no tem
limites. possvel declarar vrias variveis em uma linha, bem como atribuir
valores a elas na declarao, como nos exemplos abaixo:

int a,b;
int idade = 15; // Isto uma inicializao

2.3 Converses entre tipos


Alguns valores so incompatveis se voc tentar fazer uma atribuio direta.
Enquanto um nmero real costuma ser representado em uma varivel do
tipo double, tentar atribuir ele a uma varivel int no funciona porque
um cdigo que diz: i deve valer d, mas no se sabe se d realmente um
nmero inteiro ou no.

double d = 3.1415;
int i = d; // no compila
O mesmo ocorre no seguinte trecho:
int i = 3.14;

O mais interessante, que nem mesmo o seguinte cdigo compila:

double d = 5; // ok, o double pode conter um nmero inteiro


int i = d; // no compila

Apesar de 5 ser um bom valor para um int, o compilador no tem como


saber que valor estar dentro desse double no momento da execuo. Esse
valor pode ter sido digitado pelo usurio, e ningum vai garantir que essa
converso ocorra sem perda de valores. J no caso a seguir, o contrrio:

Aula 2 Tipos de dados, operadores e controle de fluxo 27 e-Tec Brasil


int i = 5;
double d2 = i;

O cdigo acima compila sem problemas, j que um double pode guardar


um nmero com ou sem ponto flutuante. Todos os inteiros representados
por uma varivel do tipo int podem ser guardados em uma varivel doubl;
ento, no existem problemas no cdigo acima.

s vezes, precisamos que um nmero quebrado seja arredondado e armaze-


nado como nmero inteiro. Para fazer isso sem que haja o erro de compila-
o, preciso ordenar que o nmero quebrado seja moldado (casted) como
um nmero inteiro. Esse processo recebe o nome de casting.

double d3 = 3.14;
int i = (int) d3;

O casting foi feito para moldar a varivel d3 como um int. O valor de i agora
3. O mesmo ocorre entre valores int e long.

long x = 10000;
int i = x; // no compila, pois pode estar perdendo informao

E, se quisermos realmente fazer isso, fazemos o casting:

long x = 10000;
int i = (int) x;
Alguns castings aparecem tambm:
float x = 0.0;

O cdigo acima no compila, pois todos os literais com ponto flutuante so


considerados double pelo Java. E float no pode receber um double sem per-
da de informao; para fazer isso funcionar, podemos escrever o seguinte:

float x = 0.0f;

A letra f, que pode ser maiscula ou minscula, indica que aquele literal
deve ser tratado como float.

e-Tec Brasil 28 Introduo Programao Orientada a Objetos


Outro caso, que mais comum:

double d = 5;
float f = 3;
float x = f + (float) d;

Voc precisa do casting porque o Java faz as contas e vai armazenando


sempre no maior tipo que apareceu durante as operaes, no caso o dou-
ble. E uma observao: no mnimo, o Java armazena o resultado em um int,
na hora de fazer as contas. At casting com variveis do tipo char podem
ocorrer. O nico tipo primitivo que no pode ser atribudo a nenhum outro
tipo o boolean.

As converses de tipos em Java sem perda de informao (implcitas) so as


seguintes:

Um byte pode ser convertido em um short, int, long, float ou double.

Um short pode ser convertido em um int, long, float ou double.

Um char pode ser convertido em um int, long, float ou double.

Um int pode ser convertido em um long, float ou double.

Um long pode ser convertido em um float ou double.

Um float pode ser convertido em um double.

byte byte b = 10; double


char c = 'A';
char
short s2 = b;
short
float f = 12.3f; int i2 = c;
converses legais

short s = 20; float int i3 = s;


int long m2 = i;
int i = 100;
Algumas

long m = 200L; float f2 = m;


double d2 = f;
long

Figura 2.1: Exemplo de converses de tipos


Fonte: Curso Java Starter (www.t2ti.com)

Aula 2 Tipos de dados, operadores e controle de fluxo 29 e-Tec Brasil


As converses explcitas (casting) so permitidas em todos os tipos (exceto o
boolean), mas o programador deve estar ciente de que poder haver perda
de informao.

2.4 Operadores

2.4.1 Operadores aritmticos


Os operadores aritmticos + - * / so utilizados para a adio, subtrao,
multiplicao e diviso. A diviso retorna resultado inteiro se os operadores
forem inteiros, e valores de ponto flutuante em caso contrrio. Se for neces-
srio ter o valor do resto da diviso, utilizamos o % (funo mod).

possvel utilizar operadores na atribuio das variveis, como no exemplo:

int n = 5;
int a = 2 * n; // a = 10

Existe tambm a possibilidade de utilizar atalhos para operaes (tambm


chamados de atribuio composta):

x += 4; // equivalente a x = x + 4;
x /= 10; // equivalente a x = x/10;

A exponenciao feita por uma funo da biblioteca matemtica. Essa


biblioteca tem dezenas de operaes especficas.

double y = Math.pow (x, b); // x elevado a b (xb)

Incremento e decremento

O uso de contadores em programas muito comum. Existem maneiras de


realizar incrementos e decrementos em variveis utilizando o sinal ++ e o --.
Veja nos exemplos:

int a = 12;
a++ // a agora vale 13

e-Tec Brasil 30 Introduo Programao Orientada a Objetos


O uso do incremento e do decremento depende da posio onde eles se
encontram na expresso. Existem ocasies em que se quer a expresso cal-
culada e que o valor seja incrementado depois. Em outros casos, o valor deve
ser incrementado e a expresso avaliada ao final.
Acompanhe o exemplo:

int m = 7;
int n = 7;
int a = 2 * ++m; // a vale 16, m vale 8
int b = 2 * n++; // b vale 14, n vale 8

2.4.2 Operadores relacionais e booleanos


Esses operadores servem para avaliar expresses. Para verificar a igualdade
entre dois valores, usamos o sinal = = (dois sinais de igual).

O operador usado para verificar a diferena (no igual) o !=. Temos ainda
os sinais de maior (>), menor (<), maior ou igual (>=), menor ou igual (<=).

Exemplos:

x = = 10;
3 != 2;
10 < 10
10 > 6;
3 >= 3;
7 <= 6;

Existem ainda os operadores lgicos. Os principais so: AND (&&), OR (||) e


NOT(!).

Exemplos:

(0 < 2) && ( 10 > 5) resultado: true


( 10 >11 ) || (10 < 12 ) resultado: true
!( 4 = = 4 ) resultado: false

Aula 2 Tipos de dados, operadores e controle de fluxo 31 e-Tec Brasil


2.4.3 Precedncia de operadores
A precedncia refere-se ordem na qual os operadores so executados.
Operadores de mesma precedncia so executados de acordo com sua as-
sociatividade. Por exemplo, considere a seguinte linha de cdigo :

int j = 3 * 10 % 7;

Os operadores * e % possuem a mesma precedncia e associatividade da es-


querda para direita. Assim, o * executado primeiro, produzindo o resultado
2. Se fosse colocado um parnteses para modificar a precedncia desta for-
ma int j = 3 * (10 % 7), o resultado final seria completamente diferente (9).

A Tabela 2.1 mostra os operadores Java em ordem de precedncia, onde a


linha 1 tem a mais alta precedncia. Com exceo dos operadores unrios,
condicionais e o operador de atribuio, os quais so associativos da direita
para esquerda, todos os outros operadores com a mesma precedncia so
executados da esquerda para direita.

Tabela 2.1: Operadores


Operador Precedncia Comentrios Associatividade
++, --, ! 1 Operadores unrios Direita
*, /, % 2 Multiplicao, diviso, resto Esquerda
+, - 3 Adio, subtrao Esquerda
< > <= >= 4 Operadores relacionais Esquerda
= =, != 5 Operadores de igualdade Esquerda
&& 6 AND Esquerda
|| 7 OR Esquerda
= 8 Atribuio Direita

2.5 Strings

Todos os outros valores que utilizamos em Java, com exceo dos tipos expli-
cados acima (ditos primitivos), so objetos. Um dos objetos mais utilizados
o String (com S maisculo); O String uma sequncia de caracteres.

String e = ; // String vazia. Note as aspas duplas.


String oi = Bom dia;

As strings podem ser concatenadas, utilizando o sinal de +, como no exemplo:

e-Tec Brasil 32 Introduo Programao Orientada a Objetos


String um = Curso;
String dois = Java;
String result = um + dois;

Nota: Uma String no deve ser comparada com outra usando o sinal ==,
pois elas so objetos. Existe um mtodo especial para comparar objetos,
utilizando o equals. Assim, a comparao da String a com uma String b seria:

a.equals(b);

2.6 Constantes
Uma constante pode ser definida tanto como um atributo de classe como
uma varivel local. Uma vez que foi declarado e atribudo um valor para ela,
no permitido que outra atribuio seja efetuada, ocasionando um erro de
compilao caso isso ocorra. A atribuio do valor inicial pode ser feita no
momento da declarao, ou posteriormente em outra parte do programa.
Para declarar uma varivel do tipo constante, devemos utilizar o modificador
final desta forma:

final <tipo> <identificador> [= valor];

Declare constantes com nomes descritivos, escritos com todas as letras mai-
sculas. Separe nomes internos com underscores ( _ ). Exemplos:

final double MIN_VALOR = 100.0;


final long NUMERO_MAXIMO_DE_VEZES;

2.7 Controle de fluxo


Nesta seo iremos abordar os comandos que nos permitem controlar o flu-
xo do programa e expresses condicionais em Java. Mas, antes, temos que
aprender a delimitar blocos e conceituar o escopo.

Um bloco nada mais do que uma srie de linhas de cdigo situadas entre
um abre e fecha chaves ( { } ). Podemos criar blocos dentro de blocos. Dentro
de um bloco temos um determinado escopo, que determina a visibilidade e
tempo de vida de variveis e nomes. Por exemplo:

Aula 2 Tipos de dados, operadores e controle de fluxo 33 e-Tec Brasil


Figura 2.2:Visibilidade e tempo de vida de uma varivel
Fonte: Elaborada pelos autores

Assim, permitida a definio de variveis com mesmo nome, desde que


elas no estejam compartilhando o mesmo escopo. A definio dos blocos
ajuda a tornar o programa mais legvel e a utilizar menos memria, alm de
indicar quais os comandos a serem executados pelas instrues condicionais
e os loop, que veremos mais adiante.

2.7.1 O comando if else


Sintaxe: if (expresso)
Expresso booleana formada
pelos operadores lgicos e
relacionais. Se a expresso comando1 ou { bloco1 }
boolena for verdadeira (true), else // opcional
executa comando1 ou bloco1;
caso seja falsa (false), executa comando2 ou { bloco2 } // opcional
comando2 ou bloco2.

Exemplo:

if ( fim = = true )
System.out.println(Trmino!);
else
System.out.println(Continuando...);

Para mais de um comando ser executado depois da declarao, utiliza-se o


conceito de blocos, delimitados por { }. Voc pode concatenar expresses
booleanas atravs dos operadores lgicos E (&&) e OU (||).

e-Tec Brasil 34 Introduo Programao Orientada a Objetos


Exemplo:

Figura 2.3: Concatenao de expresses booleanas


Fonte: Elaborada pelos autores

recomendado sempre usar blocos de comandos quando houver mais de


um comando, para facilitar a leitura e compreenso do cdigo. possvel
tambm criar comandos if aninhados.

Exemplo :

Figura 2.4: If aninhados


Fonte: Elaborada pelos autores

2.7.2 O comando switch


Utilizamos o comando switch para avaliar uma expresso contra vrios re-
sultados possveis. Aceita somente um char, byte, short ou int como sua
expresso de comparao. O valor procurado nas declaraes case que
vm depois da declarao switch e o cdigo adequado executado. O break
no final de cada comando serve para evitar comparaes inteis depois de
encontrado o valor correto. Se for preciso mais de um comando, necess-
rio colocar o bloco das instrues entre { }.

Aula 2 Tipos de dados, operadores e controle de fluxo 35 e-Tec Brasil


Sintaxe:

A varivel deve ser um literal ou switch (varivel)


uma constante.
{
Quando encontra uma opo case (valor1): comando ou { bloco } break;
vlida, os comandos so
executados at um break ser case (valor2): comando2 ou { bloco2 } break;
encontrado, o qual transfere
o controle para o comando
seguinte ao comando switch.
Ou seja, se um break no
especificado ao trmino de default: comando_final ou { bloco final }
um case, todas as diretivas }
dos cases subsequentes sero
executadas at que um break
seja encontrado ou o comando Exemplo:
switch termine.

Figura 2.5: Exemplo de comando switch


Fonte: Elaborada pelos autores

2.7.3 O comando while


Implementa um loop para executar um bloco de comandos sucessivas vezes.
A expresso de comparao avaliada antes que o lao seja executado. O
objetivo que esse bloco de comandos seja repetido enquanto a expresso
de comparao permanecer verdadeira. importante lembrar que o bloco
de comandos deve estar entre chaves ({}).

e-Tec Brasil 36 Introduo Programao Orientada a Objetos


Sintaxe :

while ( expresso_booleana ) { Enquanto a expresso for


verdadeira, o lao ser executado
comandos;
}

Exemplo:

int i = 0;
while(i < 10) {
System.out.println(i);
i = i + 1;
}

2.7.4 O comando do-while


Utilizado quando se quer que o corpo do lao seja necessariamente executa-
do pelo menos uma vez. A expresso de comparao avaliada depois que
o lao for executado. A nica diferena entre o while e o do-while que no
segundo, o comando sempre executado pelo menos uma vez.

Sintaxe:

do {
comandos;
} while ( expressao_booleana );

Exemplo:

int i = 1;
do {
System.out.println(i);
i = i + 1;
} while(i >= 10);

2.7.5 O comando for


Outro comando de loop extremamente utilizado o for. A ideia a mesma
do while: fazer um trecho de cdigo ser repetido enquanto uma condio
continuar verdadeira. Mas, alm disso, o for isola tambm um espao para

Aula 2 Tipos de dados, operadores e controle de fluxo 37 e-Tec Brasil


inicializao de variveis e o modificador dessas variveis. Isso faz com que
fiquem mais legveis as variveis que so relacionadas ao loop. Comumente,
um loop for possui uma parte inicial com a inicializao das variveis, segui-
da por uma expresso de comparao e depois a parte final com o incremen-
to ou decremento das variveis do lao.

Sintaxe:

for ( inicializao; condio; iterao ) {


comandos;
}

Exemplo:

Neste caso, como s temos um int i;


comando, no foi necessrio o
uso das chaves ({}). for (i = 0; i < 10; i ++)
System.out.println(i);

Pode-se declarar variveis na inicializao do for.

Exemplo:

for (int i = 0 ; i < 10 ; i++)


comando;

O nico elemento realmente imprescindvel a condio. possvel construir


laos for sem a inicializao e/ou o incremento. Ex.:

int i = 2;
for ( ; i<10 ; ){
comandos;
i++;
}

A inicializao e incremento podem ser feitos com mais de uma varivel.


Nesse caso devem estar separados por vrgula. Ex.:

for ( i = 0, j = 10 ; i < 8 && j > 2 ; i ++, j-- )


comando;

e-Tec Brasil 38 Introduo Programao Orientada a Objetos


2.7.6 Controlando loops
Apesar de termos condies booleanas nos nossos laos, em algum momen-
to podemos decidir parar o loop por algum motivo especial, sem que o resto
do lao seja executado.

O comando break utilizado para transferir o controle para o final de uma


construo de lao (for, do-while, while) ou de um switch. O lao vai encer-
rar independentemente de seu valor de comparao, e o comando aps ele O cdigo acima ir imprimir os
nmeros sequenciais comeando
ser executado. Exemplo: do numero 0 (zero) e ir parar
quando a varivel i for maior que
10, ou seja, quando a varivel i
atingir o valor 10.

O cdigo acima vai percorrer os


nmeros de x a y e parar quando
encontrar um nmero divisvel
por 19, uma vez que foi utilizada
a palavra-chave break.

Figura 2.6: Comando break


Fonte: Elaborada pelos autores

Figura 2.7: Exemplo de comando for


Fonte: Elaborada pelos autores

O comando continue interrompe a execuo de um loop naquele ponto


sem executar o resto dos comandos, e volta para o incio do looppara uma
nova iterao. Exemplo:

Figura 2.8: O comando continue


Fonte: Elaborada pelos autores

Aula 2 Tipos de dados, operadores e controle de fluxo 39 e-Tec Brasil


Este cdigo ir inicialmente imprimir todos os nmeros de 0 a 99, porm
existe uma condio dentro do lao que impede que os nmeros compreen-
didos entre 50 e 60 sejam impressos.

2.8 Escopo de variveis


O escopo da varivel o nome dado ao trecho de cdigo em que aquela
varivel existe e que possvel acess-la.

No Java, podemos declarar variveis a qualquer momento. Porm, depen-


dendo de onde voc as declarou, ela vai valer de um determinado ponto a
outro. Ex.:

//aqui a varivel i no existe


int i = 5;
// a partir daqui ela existe

Quando abrimos um novo bloco com as chaves, as variveis declaradas ali


dentro s valem at o fim daquele bloco. Ex.:

Figura 2.9: Validade de variveis


Fonte: Elaborada pelos autores

No bloco acima, a varivel j para de existir quando termina o bloco onde ela
foi declarada. Se voc tentar acessar uma varivel fora de seu escopo, ocor-
rer um erro de compilao.

O mesmo vale para um if:

e-Tec Brasil 40 Introduo Programao Orientada a Objetos


Figura 2.10: Acesso varivel fora do seu escopo
Fonte: Elaborada pelos autores

Aqui a varivel i no existe fora do if e do else! Se voc declarar a varivel an-


tes do if, vai haver outro erro de compilao: dentro do if e do else a varivel
est sendo redeclarada! Ento o cdigo para compilar e fazer sentido fica:

Figura 2.11: Uso de variveis dentro de if


Fonte: Elaborada pelos autores

Uma situao parecida pode ocorrer com o for:

for (int i = 0; i < 10; i++) {


System.out.println(ol!);
}
System.out.println(i); // cuidado!

Nesse for a varivel i morre ao seu trmino, no podendo ser acessada de


fora dele, gerando um erro de compilao. Se voc realmente quer acessar
o contador depois do loop terminar, precisa de algo como:

int i;
for (i = 0; i < 10; i++) {
System.out.println(ol!);
}
System.out.println(i);

Aula 2 Tipos de dados, operadores e controle de fluxo 41 e-Tec Brasil


Resumo
Nesta aula fizemos uma abordagem da linguagem Java e exploramos suas prin-
cipais caractersticas. Vimos os tipos primitivos e tambm as formas de conver-
so (casting) implcita e explcita. Os operadores em Java esto classificados
em: Relacionais, Aritmticos e Lgicos. A precedncia de operadores deve ser
lavada em considerao na hora de resolver uma expresso. Abordamos os
comandos que nos permitem controlar o fluxo de um programa em Java.

Os comandos vistos foram: if-else<, switch, while, do-while e for. Os co-


mandos if-else e switch so condicionais (deciso), enquanto os comandos:
while, do-while e for so de repetio (controle de laos). Foram explicados
os objetivos de cada comando bem como sua sintaxe e suas diferenas. Por
ltimo, explicamos um conceito de fundamental importncia para qualquer
programador, o escopo de varivel, que o bloco de cdigo dentro do qual
ela acessvel e determina quando a varivel criada e destruda.

Atividades de aprendizagem
1. Analise as seguintes declaraes de variveis e assinale (V) para Verdadei-
ro e (F) para Falso

a) ( ) byte x = 300;

b) ( ) short $mom = 43;

c) ( ) int num = 2.5;

d) ( ) double d = 20;

e) ( ) char c = 25;

f) ( ) boolean epar = (4%2=0)

g) ( ) char nome = Maria;

h) ( ) String b = 1

i) ( ) float x = 2.7;

j) ( ) int a = false;

e-Tec Brasil 42 Introduo Programao Orientada a Objetos


2. Escreva um programa que declare, inicialize e imprima as seguintes variveis:

Inteiro i de 32 bits com valor 1

Inteiro j de 64 bits com valor 2

Ponto flutuante p de 32 bits com valor 20.0

Ponto flutuante q de 64 bits com valor 30.0

Boolean b com valor verdadeiro

Caracter c com valor k

3. Crie um programa seguindo as orientaes abaixo. Faa tudo que pede


dentro do mtodo main.

a) Declare duas variveis para armazenar os valores de dois itens de


venda. Os valores dos dois itens devem ser 2.95 e 3.50. Pense em nomes
significativos para as variveis e tambm considere qual deve ser seu tipo.

b) Use o System.out.println() para mostrar o contedo de suas vari-


veis. Execute o programa e veja a sada. Apresente uma mensagem signi-
ficativa como O Item 1 custa 2.95 e ... (Dica : utilize o operador + para
concatenar o texto com o valor da varivel).

c) Declare uma outra varivel para armazenar o custo total dos itens.
Utilize o operador de adio para realizar o clculo e imprima o resultado.

d) Crie uma constante para armazenar a taxa de 8.25 % que deve ser
cobrada sobre o valor total. Armazene o clculo numa varivel chamada
taxaCalculada e imprima o resultado.

e) Adicione ao valor de cada item o valor da taxa calculado. Use a me-


nor linha de cdigo possvel para fazer isso. Some novamente os dois
valores e atribua o resultado a uma varivel chamada novoCusto.

f) Crie uma varivel booleana chamada muitoCaro. Escreva uma asser-


tiva lgica para setar essa varivel para true se novoCusto for maior que
10 e para false, caso contrrio. Imprima o valor obtido em muitoCaro.
(No utilize if para escrever a assertiva.)

Aula 2 Tipos de dados, operadores e controle de fluxo 43 e-Tec Brasil


4. Declare uma varivel chamada long1 do tipo long e a inicialize com 100.
Agora declare duas variveis do tipo int, int1 e int2, e inicialize int1 com
200. Agora faa int2 receber int1 mais long1 e explique os resultados.
Arrume o cdigo para que no ocorra o erro anterior.

5. Implemente um programa que recebe um nmero de 1 a 7 e imprime o


dia da semana correspondente.

6. Altere o programa do exerccio anterior para ficar recebendo o nmero


dentro de um lao enquanto for diferente de 0 (zero).

7. Escreva um programa que, dada uma varivel x (com valor 180, por
exemplo), temos y de acordo com a seguinte regra:

se x par, y = x / 2
se x impar, y = 3 * x + 1
imprime y
O programa deve ento jogar o valor de y em x e continuar at que y
tenha o valor final de 1.
Por exemplo, para x = 13, a sada ser:
40 -> 20 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1

8. Escreva um programa que imprima todos os mltiplos de 3, entre 1 e 100.

9. Escreva um programa que implemente um lao while que execute 20 ve-


zes, imprimindo o valor da varivel x que inicialmente est com valor 10.

10. Reescreva o programa anterior utilizando o comando do-while.

Poste suas solues no AVEA.

e-Tec Brasil 44 Introduo Programao Orientada a Objetos


Aula 3 Orientao a objetos:
conceitos bsicos

Objetivos

Compreender o que e para que serve orientao a objetos.

Criar modelos para representao de informaes em um deter-


minado contexto.

Conceituar objetos, classes, atributos e comportamentos.

Entender o significado da criao e uso de variveis de referncia


e objetos na memria.

Implementar o encapsulamento atravs modificadores de acesso


nas definies de classe.

Implementar classes executveis atravs do mtodo main para ma-


nipulao de classes atravs de objetos criados.

3.1 Introduo
Iniciaremos nossa aula perguntando: Por que Orientao a Objetos? Qual a
vantagem da Programao Orientada Objetos em relao Programa-
o Estruturada?

Um paradigma de programao, seja ele estruturado ou orientado a objetos


a forma como a soluo para um determinado problema desenvolvida.
Por exemplo, em Orientao a Objetos os problemas so resolvidos pensan-
do-se em interaes entre diferentes objetos; j no paradigma Estruturado,
procura-se resolver os problemas decompondo-os em funes e dados que
somados formaro um programa.

Durante muito tempo, a programao Estruturada foi o paradigma mais


difundido; porm, medida que os programas foram tornando-se mais
complexos, surgiu a necessidade de resolver os problemas de uma maneira
diferente. Nesse contexto surge o paradigma da Programao Orientada a

Aula 3 Orientao a objetos: conceitos bsicos 45 e-Tec Brasil


Objetos. Nesse paradigma os dados e as operaes que sero realizadas so-
bre estes formam um conjunto nico (objeto), e a resoluo de um problema
dada em termos de interaes realizadas entre esses objetos. Dizemos que
um objeto encapsula a lgica de negcios concentrando a responsabilidade
em pontos nicos do sistema, viabilizando um maior reuso do cdigo pela
modularidade dessa abordagem.

Benefcios da abordagem orientada a objetos:

modularidade: uma vez criado, um objeto pode ser passado por todo o
sistema;

encapsulamento: detalhes de implementao ficam ocultos externamen-


te ao objeto;

reuso: uma vez criado, um objeto pode ser utilizado em outros progra-
mas;

manutenibilidade: manuteno realizada em pontos especficos do pro-


grama (objetos).

3.2 Modelos
Modelos so representaes simplificadas de objetos, pessoas, itens, tarefas,
processos, conceitos, ideias, etc., usados comumente por pessoas no seu dia
a dia, independentemente do uso de computadores.

Um modelo comumente possui dados (informaes) e operaes (procedi-


mentos) associados a ele.

Para exemplificar o uso de modelos, consideremos uma lmpada incan-


descente comum e um modelo para represent-la. Essa lmpada tem um
dado bsico, que seu estado (ligada ou desligada). As operaes que
podemos efetuar nessa lmpada tambm so simples: podemos lig-la ou
deslig-la. O ato de ligar a lmpada equivale a modificar seu estado para
ligada, enquanto que desligar a lmpada significa modificar seu estado
para desligada. Para saber se uma lmpada est ligada ou desligada, po-
demos pedir que uma operao mostre o valor do estado. Nota-se neste
exemplo que a modelagem de entidades do mundo real pode ser muito di-
ferente da que vai ser usada em programas de computador: no mundo real,

e-Tec Brasil 46 Introduo Programao Orientada a Objetos


para saber se a lmpada est ligada ou no, basta observ-la; enquanto que
na modelagem para uso em um computador, precisamos de uma operao
para saber se ela est ou no ligada. Vale ressaltar que os dados contidos
no modelo so somente os relevantes abstrao do mundo real que est
sendo feita. Por exemplo, alguns dados como o preo da lmpada so irre-
levantes e no devem ser representadas pelo modelo em questo. A Figura
3.1 mostra o modelo Lampada usando uma variante do diagrama de clas-
ses da Linguagem Unificada de Modelagem (Unified Modeling Language,
UML). Nesse diagrama, o retngulo superior mostra o nome do modelo, o
retngulo central mostra dados do modelo a ser manipulados e o retngulo
inferior mostra que operaes do modelo podem ser usadas. Os nomes das
operaes ou mtodos so seguidos de parnteses, e quando argumentos
ou parmetros devem ser especificados para as operaes, eles so listados
dentro dos parnteses.

Lampada

- estadodaLmpada

- acende ( )
- apaga ( )
- mostraEstado ( )
Figura 3.1: Representao do modelo Lampada, seus dados e operaes
Fonte: Elaborada pelos autores

A listagem abaixo mostra como o modelo Lampada poderia ser descrito em


pseudocdigo.

Aula 3 Orientao a objetos: conceitos bsicos 47 e-Tec Brasil


Figura 3.2: Modelo Lampada escrito em pseudocdigo
Fonte: Elaborada pelos autores

Outro exemplo: Um modelo de uma conta bancria simplificada.

O modelo deste exemplo representa uma conta bancria simplificada, que


somente representa o nome do correntista, o saldo da conta e se a conta
especial ou no. Se a conta for especial, o correntista ter o direito de retirar
mais dinheiro do que tem no saldo (ficar com o saldo negativo). Aspectos
prticos encontrados em contas de banco reais (senhas, taxas, impostos,
etc.) foram deixados de lado em nome da simplicidade. A Figura 3.3 mostra
os dados e operaes deste modelo, e a listagem mostra o modelo descrito
em pseudocdigo.

ContaBancariaSimplificada
- nomeDoCorrentista
- saldo
- contaEspecial
- abreConta (nome, depsito, Especial
- abreContaSimples (nome)
- deposita (valor)
- retira (valor)
- mostraDados ( )

Figura 3.3: Representao do modelo ContaBancariaSimplificada, seus dados e


operaes
Fonte: Elaborada pelos autores

e-Tec Brasil 48 Introduo Programao Orientada a Objetos


A Figura 3.4 mostra como o modelo ContaBancariaSimplificadapoderia
ser descrito em pseudocdigo.

Figura 3.4: Conta bancria simplificada escrita em pseudocdigo


Fonte: Elaborada pelos autores

Figura 3.5: Operao mostraDados em pseudocdigo


Elaborada pelos autores

Aula 3 Orientao a objetos: conceitos bsicos 49 e-Tec Brasil


Alguns pontos interessantes da listagem acima so:

Existem duas operaes que podem ser usadas para a abertura de con-
tas: uma para a qual temos que passar todos os dados que sero usados
(abreConta) e outra para a qual somente precisaremos passar o nome
do correntista (abreContaSimples). esperado que somente uma dessas
operaes seja usada por quem for utilizar o modelo, mas comum ofe-
recer vrias opes .

O conceito de que operaes manipulam os dados do modelo fica mais


claro ainda com as operaes deposita e retira, que so usadas para
modificar o saldo da conta.

O uso de blocos demonstrado de novo na operao retira, na qual um blo-


co delimita comandos que s sero executados se a conta no for especial.

Tambm possvel a criao de modelos que contenham somente dados ou


somente operaes. Os primeiros so pouco usados. Quando criamos mode-
los para representao de dados interessante e til adicionar algumas ope-
raes para manipulao desses dados. Modelos que contenham somente
operaes podem ser considerados bibliotecas de operaes. So exemplos
desses modelos os grupos de funes matemticas e de processamento de
dados, que no precisem ser armazenados. A criao e o uso de bibliotecas
de operaes em Java sero vistos mais adiante.

Modelos podem conter submodelos e ser parte de outros modelos. Por


exemplo, um modelo de casa poderia ser composto por diversos modelos de
lmpada. Um modelo de lmpada pode fazer parte tanto de um modelo de
casa quanto de um modelo de carro, etc.

A simplificao inerente aos modelos , em muitos casos, necessria: depen-


dendo do contexto, algumas informaes devem ser ocultas ou ignoradas.
Por exemplo, a representao das informaes sobre uma pessoa pode ser
feita de maneira diferente, dependendo do contexto, como nos trs exem-
plos mostrados abaixo:

Pessoa como Empregado de Empresa: Para uma pessoa como em-


pregada de uma empresa, para fins de processamento de folha de pa-
gamento, seria necessria a representao do nome, cargo, salrio e ho-
rasExtrasTrabalhadas, entre outros dados. Esse modelo poderia conter as
operaes calculaSalario e aumentaSalario.

e-Tec Brasil 50 Introduo Programao Orientada a Objetos


Pessoa como Paciente de uma Clnica Mdica: Para um modelo de
paciente seria necessrio representar o nome, o sexo, a idade, a altura, o
peso e o historicoDeConsultas do paciente. Esse modelo poderia conter
as operaes verificaObesidade, que usaria os dados sexo, altura e peso
para verificar se aquela pessoa est com o peso ideal para sua categoria
e adicionaInformacaoAoHistorico, que adicionaria informaes recentes
ao histrico do paciente.

Pessoa como Contato Comercial: Para esse modelo, seria necessrio


representar o nome, o telefone, o cargo e empresa da pessoa. Algumas
operaes teis para esse modelo seriam mostraTelefone, que retornaria
o telefone de uma certa pessoa, e trabalhaEmEmpresa, que informaria se
a pessoa trabalha em uma certa empresa.

As trs maneiras de representarmos os dados de uma pessoa e operaes


nesses dados (ou os trs modelos de representao de pessoas) so depen-
dentes de contexto: alguns dados e operaes que podem ser teis para um
modelo de representao de pessoas podem ser irrelevantes para outro por
exemplo, no faria sentido representar o salrio de uma pessoa para fins de
registros no banco de dados de pacientes de uma clnica ou a operao veri-
ficaObesidade de uma pessoa que no seja paciente de uma clnica mdica.
Por essa razo, e apesar dos trs exemplos acima representarem pessoas
de forma genrica, difcil, se no impossvel, elaborar um supermodelo
capaz de representar todos os dados e operaes relativos a uma pessoa,
independentemente do contexto, e usar esse modelo no lugar de todos os
outros mais especializados ou dependentes de contexto.

Modelos podem ser reutilizados para representar diferentes objetos, pesso-


as ou itens: o mesmo modelo PacienteDeClinica poderia ser utilizado para
representar cada um dos pacientes de uma clnica os pacientes podem
ser representados pelo mesmo modelo, mas os dados individuais de cada
um podem ser diferentes, conforme a necessidade dos diversos exemplos
de cada modelo assim, Joo, Pedro e Maria seriam exemplos do modelo
Paciente, cada um contendo dados de um paciente, provavelmente diferen-
tes entre si. Vemos que no necessria a criao de um modelo para cada
item, pessoa ou objeto do mundo real.

A criao e uso de modelos uma tarefa natural, e a extenso dessa aborda-


gem programao deu origem ao paradigma Orientao a Objetos.

Aula 3 Orientao a objetos: conceitos bsicos 51 e-Tec Brasil


3.3 Objetos
A resoluo de um problema passa pela anlise de uma determinada situa-
o real, tendo-se por objetivo a construo de um modelo que represente
essa situao. Isso caracteriza o processo de abstrao. Esse modelo dever
considerar os objetos (entidades) que integram o problema. Mas o que seria
mesmo um objeto?

Objetos so um conjunto de dados e procedimentos que representam a


estrutura e o comportamento inerentes s entidades, concretas ou abstratas,
do mundo real. Em outras palavras, so qualquer coisa que tenha algum
significado dentro do contexto do problema, seja ela concreta ou abstrata.
Alguns exemplos de objetos:

Um livro.

Uma data.

Uma festa.

Um carro.

Um pedido de compra de material.

Olhando sua volta possvel perceber muitos exemplos de objetos do


mundo real: seu cachorro, sua mesa, sua televiso, sua bicicleta. Esses obje-
tos tm duas caractersticas bsicas, que so o estado e o comportamen-
to. Alguns exemplos:

Objeto Estado Comportamento


Pessoa nome, idade, RG falar, andar, sorrir, chorar
Cachorro nome, raa latir, correr
Carro cor, marca, modelo acelerar, frear, ligar

Televiso marca, tamanho, tipo ligar, sintonizar, desligar

Cada objeto consiste em uma entidade com identidade prpria. Assim, mes-
mo que a partir de uma observao simples se diga que dois objetos so
iguais, tem-se dois objetos distintos. Se analisarmos dois exemplares de um
livro, por exemplo, veremos que se constituem em dois objetos distintos,
apesar de terem a mesma quantidade de pginas, mesmo contedo, etc.

e-Tec Brasil 52 Introduo Programao Orientada a Objetos


Em termos de programao, podemos definir um objeto como a abstrao
de uma entidade do mundo real, que apresenta sua prpria existncia, iden-
tificao, caractersticas de composio e que tem alguma utilidade, isto ,
pode executar determinados servios quando solicitado.

Todo objeto deve ter uma identificao. A identificao de um objeto refere-


-se ao nome que apresenta, o qual ser definido pelo projetista do modelo.
As caractersticas de composio de um objeto esto associadas sua consti-
tuio e definem a sua estrutura. Essas caractersticas so denominadas Atri-
butos. Assim, por exemplo, um objeto que seja a abstrao de um celular,
digamos o objeto identificado pelo nome meuCelular, pode ter como atribu-
tos, dependendo da abstrao feita, a sua cor, a sua marca, o seu peso, seu
comprimento, seu preo, a bateria etc.

Os atributos de um objeto definem a composio deste e podem ser mode-


lados, dependendo do contexto, como simples valores ou como outros obje-
tos. Pode-se tratar o atributo de um objeto como um simples valor quando
este constitui-se em uma informao que pode ser expressa por um nico
valor. No caso do objeto umCelular, o atributo que define o comprimento
do Celular pode ser expresso por um simples valor, por exemplo, 8.0. J o
atributo que representa a bateria, dadas as suas caractersticas, deve ser
modelado como outro objeto. Os atributos de um objeto definem a sua
estrutura e podem ser modificados durante a vida til do objeto. Assim, por
exemplo, no caso do objeto umCelular, o valor do atributo que especifica o
preo muda durante a sua vida til.

Alm das caractersticas de composio, ou seja, os atributos, um objeto apre-


senta tambm as caractersticas de utilidade. Essas caractersticas dizem respei-
to s aes ou servios que o objeto pode executar. Denominamos Comporta-
mento o conjunto de aes ou servios que um objeto pode prestar. Conforme
ocorre no mundo real, para que um objeto execute determinado servio,
necessrio que haja uma solicitao. A denominao de comportamento para
o conjunto de servios que o objeto pode executar se justifica, uma vez que
que esses servios definem a forma como ele reage s solicitaes.

Um objeto uma entidade que tem uma identificao e que apresenta atri-
butos e/ou comportamento. No caso do objeto umCelular, a abstrao pode
considerar um comportamento formado por servios, tais como ligar, desli-
gar, fazer uma chamada, etc. Veja a seguir alguns exemplos de objetos com
suas respectivas abstraes. Lembre-se que uma abstrao dependente de
quem a executa, ou seja, dependente do problema que se quer resolver.

Aula 3 Orientao a objetos: conceitos bsicos 53 e-Tec Brasil


Em termos de programao, um objeto a abstrao de uma entidade pre-
sente no problema a ser resolvido.

Exemplo 1

Seja o objeto resultante de uma abstrao da porta de determinada sala, di-


gamos o objeto umaPorta. Pode-se nessa abstrao identificar, por exemplo,
os seguintes atributos e servios:

Atributos (Estado):

Cor. (pode ser expresso por um valor);

Altura. (pode ser expresso por um valor);

Largura (pode ser expresso por um valor);

A fechadura (expresso como outro objeto).

Servios (Comportamento)

Abrir; Fechar.

Veja que nesse exemplo os atributos cor, altura e largura podem ser expres-
sos como valores. Assim, o objeto identificado por umaPorta pode ter, por
exemplo, o valor 2.1 para o atributo altura ou o valor cinza para o atributo
cor. J o atributo que representa a fechadura da porta constitui-se em outro
objeto que, obviamente, apresenta caractersticas diferentes de uma porta.

Exemplo 2

Considere a abstrao de um relgio, digamos o objeto meuRelogio. Fa-


zendo-se uma abstrao do ponto de vista do usurio do relgio, podemos
definir, por exemplo, os seguintes atributos e servios:

e-Tec Brasil 54 Introduo Programao Orientada a Objetos


Atributos(Estado)

Peso (30 gramas, por exemplo)

Custo (R$ 200,00 por exemplo)

A Pulseira (outro objeto)

Os Ponteiros (outro objeto)

A Pilha (outro objeto)

Servios (Comportamento)

Iniciar marcao de horas (funcionar);

Informar horas;

Informar data;

Corrigir horas;

Trocar pilha.

Na definio do comportamento de um objeto estaremos identificando


quais os servios que ele pode executar. Nesse processo, devemos imaginar
o objeto como algo que tenha vida e que, portanto, tenha a capacidade de
realizao de servios, mesmo quando esse objeto tratar-se da abstrao de
algo inanimado ou algo abstrato. Veja que, no caso do objeto meuRelogio,
a ao trocar pilha no se constitui em objetivo especfico de um relgio; en-
tretanto, necessita ser realizada em algum momento e, assim, consideramos
em nossa abstrao que o objeto tem a capacidade de realizar esse servio.

Exemplo 3

Considere a abstrao de determinado aluno de uma disciplina. Digamos


que esse objeto seja identificado por umAluno. Considerando que o sistema
de avaliao na disciplina seja constitudo por uma prova escrita, poderamos
identificar os seguintes atributos e servios:

Aula 3 Orientao a objetos: conceitos bsicos 55 e-Tec Brasil


Atributos (Estado)

Nome do aluno;

Nmero de matrcula;

Nota da prova escrita;

Servios (Comportamento)

Estudar;

Assistir a aula;

Realizar prova.

3.4 Classes
Se dois ou mais objetos apresentam as mesmas caractersticas, diz-se que
so pertencentes a uma mesma classe. O relgio do Jos e o relgio da Ma-
ria so dois objetos distintos, mas ambos apresentam os mesmos atributos
e podem executar os mesmos servios. Isso implica que ambos pertencem
mesma classe, por exemplo, classe Relgio. Quando dizemos que dois ou
mais objetos apresentam os mesmos atributos, estamos nos referindo exis-
tncia do atributo e no ao seu contedo ou valor. Assim, o relgio do Jos
tem o atributo peso, cujo valor pode ser, por exemplo, 30 gramas. O relgio
da Maria tambm tem o atributo peso, mas seu valor pode ser diferente, por
exemplo, 20 gramas. Da mesma forma, o relgio do Jos tem como atribu-
to a sua pulseira, o qual representa a pulseira desse relgio, que em nossa
modelagem exemplo consideramos como outro objeto. Tambm o relgio
da Maria tem como atributo a sua pulseira, a qual um objeto distinto da
pulseira do relgio do Jos.

Uma classe define as caractersticas de um grupo de objetos, isto , define


como sero as instncias pertencentes a ela. Uma instncia um objeto
gerado por uma classe. A classe apenas a representao de um objeto, en-
quanto a instncia de uma classe o objeto propriamente dito, com tempo
e espao de existncia.

e-Tec Brasil 56 Introduo Programao Orientada a Objetos


Assim, uma classe especifica quais sero os atributos de todo objeto perten-
cente a ela bem como quais servios esse objeto poder executar. Um servio
tambm pode ser denominado de Operao. Quando pensamos em uma
classe, estamos pensando em como sero os seus objetos. importante que
no se confunda classe com objeto. O objeto pode ser visualizado como o
caso concreto (ocorrncia), enquanto a classe pode ser visualizada como
a ideia que se tem do objeto.

Quando realizamos uma abstrao tendo por objetivo a definio do modelo


para a resoluo de um problema, procuramos identificar quais objetos inte-
gram o problema e como eles interagem no sentido da sua resoluo. A iden-
tificao, juntamente com a abstrao desses objetos, implica definir como
estes sero, isto , que atributos tero tais objetos e que servios eles podero
executar. Assim, ao identificarmos objetos, estaremos pensando em suas res-
pectivas classes. Veja que ser a classe que definir como sero seus objetos.
Como todo objeto uma instncia de alguma classe, isto , todo objeto per-
tence a uma classe, a classe pode ser considerada como o tipo do objeto.

Uma classe consiste em uma entidade que descreve quais atributos tero
todos os seus objetos bem como quais servios estes podero executar. Em
termos de programao, quando dizemos que um objeto executa um ser-
vio, significa dizer que o computador executa determinada sequncia de
instrues. sequncia de instrues que devem ser executadas pelo com-
putador, representando a execuo do servio pelo objeto, denominaremos
Mtodo. Uma classe, portanto, uma descrio dos atributos e dos mtodos
de determinado tipo de objeto. Em termos de programao, definir classes
significa formalizar um novo tipo de dado e todas as operaes associadas a
esse tipo, enquanto declarar objetos significa criar variveis do tipo definido.

Considere um programa para um banco: bem fcil perceber que uma en-
tidade extremamente importante para esse sistema a conta. Nossa ideia
aqui generalizar alguma informao, juntamente com funcionalidades que
toda conta deve ter.

O que toda conta tem e importante para ns?

nmero da conta;

nome do cliente;

Aula 3 Orientao a objetos: conceitos bsicos 57 e-Tec Brasil


saldo;

limite.

O que toda conta faz e importante para ns? Isto , o que gostaramos de
pedir conta.

saca uma quantidade x;

deposita uma quantidade x;

imprime o nome do dono da conta;

devolve o saldo atual;

transfere uma quantidade x para uma outra conta y;

devolve o tipo de conta.

Com isso, temos o projeto de uma conta bancria. Podemos pegar esse
projeto e acessar seu saldo? No. O que temos ainda o projeto. Antes,
precisamos construir uma conta, para poder acessar o que ela tem, e pedir a
ela que faa alguma coisa.

numero
cliente
saldo
limite
numero
Especificao cliente
de uma conta saldo
limite
numero
cliente
saldo
limite
Figura 3.6: Abstrao da classe Conta e seus objetos
Fonte: Elaborada pelos autores

Repare na Figura 3.6: apesar do papel do lado esquerdo especificar uma


Conta, essa especificao uma Conta? Ns depositamos e sacamos di-
nheiro desse papel? No. Utilizamos a especificao da Conta para poder
criar instncias que realmente so contas, nas quais possamos realizar as
operaes que criamos.

e-Tec Brasil 58 Introduo Programao Orientada a Objetos


Apesar de declararmos que toda conta tem um saldo, um nmero e uma
agncia no pedao de papel (como esquerda na figura), nas instncias
desse projeto que realmente h espao para armazenar esses valores. Ao
projeto da conta, isto , definio da conta, damos o nome de classe. Ao
que podemos construir a partir desse projeto, s contas de verdade, damos
o nome de objetos.

Um outro exemplo: uma receita de bolo. A pergunta certeira: voc come


uma receita de bolo? No. Precisamos instanci-la, criar um objeto bolo a
partir dessa especificao (a classe) para utiliz-la. Podemos criar centenas
de bolos a partir dessa classe (a receita, no caso), eles podem ser bem seme-
lhantes, alguns at idnticos, mas so objetos diferentes.

Podemos fazer milhares de analogias. A planta de uma casa uma casa? De-
finitivamente no. No podemos morar dentro da planta de uma casa, nem
podemos abrir sua porta ou pintar suas paredes. Precisamos, antes, construir
instncias a partir dessa planta. Essas instncias, sim, podemos pintar, deco-
rar ou morar dentro.

Pode parecer trivial, mas a dificuldade inicial do paradigma da orientao a


objetos justamente saber distinguir o que classe e o que objeto. co-
mum o iniciante utilizar de forma errada essas duas palavras como sinnimos.

3.5 Troca de mensagens entre objetos


Um objeto s executar determinado servio se receber uma solicitao. Essa
solicitao , em muitos casos, encaminhada por outro objeto. Quando al-
gum objeto necessitar que um outro objeto faa algum servio, o primeiro
deve comunicar-se com o segundo, encaminhando uma mensagem (fazer
uma solicitao). Objetos comunicam-se atravs do envio de mensagens.

Quando se tem a comunicao entre objetos, o envio de uma mensagem


envolver trs elementos: o objeto emissor, isto , aquele que encaminha a
mensagem, o objeto receptor, isto , aquele que recebe a mensagem, e a
especificao do servio a ser executado. Lembre-se que um objeto faz um
servio executando o mtodo correspondente de sua classe. Aqui, tambm
denominaremos o emissor de Objeto Cliente e, por conseguinte, sua classe
ser denominada Classe Cliente. Ao objeto receptor da mensagem denomi-
naremos Objeto Executor.

Aula 3 Orientao a objetos: conceitos bsicos 59 e-Tec Brasil


No envio de uma mensagem devem ser especificados o nome do objeto
executor e qual o mtodo a ser executado (tambm denominado Seletor).
Na especificao do mtodo devem tambm ser especificados os recursos
necessrios para a sua execuo. Conforme veremos mais adiante, em mui-
tas situaes, quando um objeto solicita um servio a outro objeto, possvel
que o segundo tenha que devolver ao primeiro alguma informao resultan-
te da execuo do servio solicitado. Veja a Figura 3.7 a seguir.

Servio solicitado

Acelerar
Emissor Receptor

motorista carro

Figura 3.7: Comunicao entre objetos por envio de mensagens


Fonte: Elaborada pelos autoreses

A comunicao entre dois objetos atravs do mecanismo de envio de men-


sagem deve sempre considerar os servios que o objeto sabe executar. Veja
os exemplos de envio de mensagem a seguir.

Exemplo 1

Suponha que, em determinado problema, o objeto identificado por umPro-


fessor deva solicitar que o objeto umAluno estude para a prova. Nesse caso,
o objeto umProfessor (o emissor) encaminhar uma solicitao (enviar uma
mensagem) ao objeto umAluno (receptor):

umAluno.estude();

Veja que s possvel solicitar que o objeto umAluno execute o servio


estude considerando que esse objeto saiba executar tal servio. Assim, na
classe do objeto umAluno, digamos, por exemplo, a classe Aluno, deve estar
definido o correspondente mtodo estude( ).

Conforme vimos anteriormente, em termos concretos, escrever um progra-


ma de computador consiste basicamente em projetar e escrever classes. Es-
crever uma classe consiste em elaborar um texto, expresso em determinada
linguagem, que definir quais atributos tero as instncias da classe, quais

e-Tec Brasil 60 Introduo Programao Orientada a Objetos


servios estas podero executar e como sero executados esses servios. O
como ser executado um servio consiste no mtodo, o qual formado
por uma sequncia de comandos ordens que o computador deve execu-
tar, representando a execuo do servio pelo objeto. Assim, a execuo do
comando umAluno.estude() far com que o computador v executar o con-
junto de instrues relativo ao mtodo estude, representando a execuo do
servio pelo objeto umAluno.

Exemplo 2

Suponha um programa que auxilie a administrao de um hotel. Imagine


que os objetos umHotel e umCliente sejam, respectivamente, a abstrao do
hotel e de um cliente. Se, em determinado ponto desse programa, for ne-
cessrio fazer com que o objeto umHotel determine a conta de um cliente,
pode-se escrever:

valorConta = umHotel.fornecaValorConta(umCliente);

Para que a conta de um cliente seja determinada, necessrio que se co-


nheam informaes relativas ao cliente. Assim, para que a execuo do
servio que determinar a conta de um cliente (mtodo fornecaValorConta)
seja possvel, necessrio o conhecimento do objeto umCliente. Por outro
lado, se algum objeto encaminha uma mensagem para o objeto umHotel,
solicitando que ele determine a conta de um cliente, esse objeto espera que
seja devolvido pelo objeto umHotel, como resultado da execuo do servio
solicitado, o valor dessa conta.

Por isso, o resultado da execuo do mtodo, isto , o que retoma com a


execuo do mtodo, colocado em valorConta. Assim, valorConta conte-
r, aps a execuo do mtodo, o valor da conta do objeto um Cliente.

Os elementos especificados entre parnteses, quando da solicitao de exe-


cuo de um mtodo, so denominados Argumentos.

O funcionamento do mecanismo da comunicao por envio de mensagem,


juntamente com a necessidade ou no da especificao de argumentos, ser
visto em maiores detalhes mais adiante. Por enquanto, importante enten-
der que a execuo de um mtodo pode necessitar de determinados recur-
sos, os quais devero ser fornecidos junto com a solicitao.

Aula 3 Orientao a objetos: conceitos bsicos 61 e-Tec Brasil


Resumindo, podemos dizer que o processo de envio de mensagem de um
objeto para outro envolver os seguintes elementos:

o objeto que encaminha a mensagem objeto cliente (sua classe deno-


minada Classe Cliente);

o objeto que recebe a mensagem objeto receptor ou executor;

o mtodo a ser executado (tambm chamado de Seletor).

Quando da especificao do mtodo, devem ser especificados os argumen-


tos, caso seja necessrio.

3.6 Criando classes em Java

3.6.1 Regras bsicas de sintaxe


Uma classe em Java sempre declarada com a palavra-chave class seguida
do nome da classe. O nome da classe no pode conter espaos, deve sem-
pre ser iniciado por uma letra. Para nomes de classes, mtodos e campos
em Java, o caractere sublinhado (_) e o sinal $ so considerados letras. O
nome da classe no deve conter acentos e pode conter nmeros, contanto
que estes apaream depois de uma letra. Nomes de classes no podem ser
exatamente iguais s palavras reservadas de Java (mostradas no Quadro 3.1).

Quadro 3.1: Palavras reservadas da linguagem Java


abstract boolean break Byte
char class const Continue
default do case Catch

double else extends False

final finally float For

goto if implements Import

instanceof int interface Long

native new null Package

private protected public Return

short static strictfp Super

switch synchronized this Throw

throws transient true Try

void volatile while

Fonte: Elaborada pelos autores

e-Tec Brasil 62 Introduo Programao Orientada a Objetos


Em Java uma classe pode ser escrita (declarada) de acordo com a seguinte
forma geral:

public class Nome_da_Classe


{
Corpo da classe (especificao dos atributos e mtodos)
}

Veja como o corpo da classe sempre deve iniciar com abre chaves ({) e
finalizar com fecha chaves (}).

A menor classe vlida em Java a classe vazia, ou seja, uma classe que no
possui atributos ou mtodos. Exemplo:

class Vazia
{

Tradicionalmente os nomes de classes comeam com caracteres maisculos


e alternam entre palavras. Exemplos de nomes de classes que seguem esta
conveno so: RegistroAcademico, ContaDeLuz e CadastroDeFuncionario-
sDeSupermercado.

aconselhvel que os arquivos criados em editores de texto contenham so-


mente uma classe, e os nomes dos arquivos devem ser compostos dos no-
mes das classes com a extenso java. Dessa forma, a classe Vazia deve ser
criada em um arquivo Vazia.java.

3.6.2 Declarando campos (atributos)


de classes em Java
A declarao dos campos nas classes em Java simples: basta declarar o tipo
de dado, seguido dos nomes dos campos que sero daquele tipo.

A Figura 3.8 mostra alguns exemplos de declarao de campos. Essa lis-


tagem corresponde ao modelo mostrado na seo 3.2, mas considerando
somente os dados do modelo, e no suas operaes.

Aula 3 Orientao a objetos: conceitos bsicos 63 e-Tec Brasil


Figura 3.8: Conta bancria simplificada
Fonte: Elaborada pelos autores

Algumas regras e informaes sobre declarao de campos em classes em


Java so mostradas a seguir:

Nomes de campos seguem quase todas as mesmas regras de nomes de


classes: devem ser iniciados por uma letra (incluindo _ e $), devem ser
compostos de uma nica palavra (sem espaos, vrgulas, etc.) e podem
ser compostos de letras e nmeros. Ao contrrio de nomes de classes,
nomes de campos podem conter acentos. Nomes de campos no podem
ser iguais a nenhuma das palavras reservadas mostradas na tabela de
palavras reservadas.

Tradicionalmente nomes de campos e variveis comeam com caracteres


minsculos, alternando com maisculos entre palavras. Alguns exemplos
de campos que seguem esta conveno so dia, nomeDoAluno, rotaco-
esPorMinuto e estadoDaLampada.

Campos podem ser declarados com a forma modificador-de-acesso ti-


po-ou-classe nome-do-campo; (terminando com ponto e vrgula, como
mostra o cdigo acima). Modificadores de acesso sero vistos mais adian-
te, mas nos exemplos a sua declarao foi omitida propositadamente.
Se vrios campos forem do mesmo tipo, podemos declar-los simulta-
neamente com a forma modificador-de-acesso tipo-ou-classe nome-do-

e-Tec Brasil 64 Introduo Programao Orientada a Objetos


-campo1, nome-do-campo2, nome-do-campo3; (nomes separados por
vrgulas, declarao terminada com ponto e vrgula). aconselhvel evi-
tar a declarao de muitos campos em uma mesma linha de programa
para no comprometer a clareza do cdigo.

Dois campos da mesma classe no podem ter exatamente o mesmo


nome. Por exemplo, no podemos declarar outro campo chamado saldo
na classe da listagem acima, mesmo se o tipo de dado for diferente.

3.6.3 Mtodos de classes em Java


At agora foi mostrado como podemos criar classes e representar campos
nessas classes. A maioria das classes representa modelos que tm dados e
operaes que manipulam estes dados. As operaes dos modelos, que em
Programao Orientada a Objetos so conhecidas como mtodos, tambm
seguem regras rgidas para sua criao, descritas a seguir:

Nomes de mtodos seguem as mesmas regras de nomes de campos: de-


vem ser iniciados por uma letra (incluindo _ e $), devem ser compostos de
uma nica palavra (sem espaos, vrgulas, etc.), podem ser compostos de
letras e nmeros e podem conter acentos. Nomes de mtodos no podem
ser iguais a nenhuma das palavras reservadas mostradas anteriormente.

Nomes de mtodos refletem aes que so efetuadas nos campos da classe


e/ou valores passados como argumentos para esses mtodos. Embora esta
no seja uma regra obrigatria, se ela for seguida os programas e classes
podero ser lidos e compreendidos mais facilmente por programadores.

Tradicionalmente, assim como nos atributos, os nomes de mtodos co-


meam com caracteres minsculos e alternam para maisculos entre pa-
lavras. Alguns exemplos de nomes de mtodos que seguem esta regra
so mostraDados, acende e inicializaData.

Mtodos no podem ser criados dentro de outros mtodos, nem fora


da classe a qual pertencem; ou seja, no podemos ter mtodos isolados,
fora de todas as classes.

Para exemplificar as regras de criao de mtodos, veremos a classe Conta-


BancariaSimplificada, com campos e mtodos bsicos, mostrada na Figura
3.9 a seguir.

Aula 3 Orientao a objetos: conceitos bsicos 65 e-Tec Brasil


Figura 3.9: Criao de mtodos da classe Conta Bancria Simplificada
Fonte: Elaborada pelos autores

Usando a listagem acima como exemplo, podemos ver outras regras sobre
declarao de mtodos em classes em Java:

O formato genrico usado para a declarao de mtodos modificador-


-de-acesso tipo-ou-classe-de-retorno nome-do-mtodo(lista-de-argu-
mentos). A declarao de mtodos no terminada com ponto e vrgu-
la. Modificadores de acesso sero vistos mais adiante. Na listagem acima
a declarao desses modificadores foi omitida propositadamente.

Cada mtodo deve ter, na sua declarao, um tipo ou classe de retorno,


correspondente ao valor que o mtodo deve retornar. Caso o mtodo
no retorne nada, isto , caso ele somente execute alguma operao sem
precisar retornar valores, o valor de retorno dever ser void, que nada
mais do que um tipo de retorno especial que indica que o retorno deve
ser desconsiderado. Na classe acima, os mtodos abreContaSimples e
deposita retornam void, enquanto o mtodo retira retorna um valor
do tipo boolean. Mtodos podem retornar tambm instncias de classes,
mas somente um valor pode ser retornado de cada vez.

Mtodos que retornam algum valor diferente de void devem ter, em


seu corpo, a palavra chave return seguida de uma constante ou vari-

e-Tec Brasil 66 Introduo Programao Orientada a Objetos


vel do tipo ou classe que foi declarada como a de retorno do mtodo.
No Exemplo acima (classe ContaBancariaSimplificada), o mtodo retira
declara que dever retornar um valor do tipo booleano, o que ser feito
atravs da palavra-chave return, dependendo da expresso condicional.
Mtodos que retornam void no precisam ter a palavra-chave return no
seu corpo; e se tiverem, esta no deve ser seguida de nenhuma constan-
te ou varivel.

Mtodos podem ter listas de argumentos, ou seja, variveis contendo


valores que podem ser usados pelos mtodos para efetuar suas opera-
es. Na listagem, o mtodo deposita recebe um argumento. Cada
argumento passado para um mtodo deve ter uma referncia ou nome
de varivel correspondente, e cada argumento deve ser precedido de seu
tipo ou classe. Opcionalmente, mtodos podem no receber argumen-
tos, como o caso do mtodo mostraDados.

3.7 Escopo
O escopo dos campos e variveis dentro de uma classe determina a sua visi-
bilidade (isto , se as variveis ou campos podem ser acessados ou modifica-
dos em todos os mtodos da classe, somente um determinado mtodo ou
mesmo somente em parte de um determinado mtodo). A classe Triangulo,
mostrada na Figura 3.10, ser usada para exemplificar alguns pontos sobre
escopo de campos e variveis.

Figura 3.10: Classe Triangulo


Fonte: Elaborada pelos autores

Aula 3 Orientao a objetos: conceitos bsicos 67 e-Tec Brasil


Figura 3.11: Mtodos da classe Triangulo
Fonte: Elaborada pelos autores

Algumas regras simples de escopo so mostradas a seguir:

Campos declarados em uma classe so vlidos por toda a classe, isto , o


escopo de campos de uma classe toda a classe, mesmo que os campos
estejam declarados depois dos mtodos que os usam, como mostrado na
listagem acima, onde os campos lado1, lado2 e lado3 podem ser usados nos
mtodos eEquiltero e calculaPerimetro mesmo antes (no sentido de lei-
tura da listagem, de cima para baixo) de serem declarados. Vale a pena notar
que para o compilador Java, a ordem em que as declaraes de mtodos e
campos aparecem irrelevante.

Variveis e instncias declaradas dentro de mtodos s sero vlidas den-


tro desses mtodos. Dessa forma, as variveis igualdade12 e igualdade23,
declaradas no mtodo eEquilatero, somente sero vlidas dentro desse m-
todo. Outras variveis podem ser declaradas em outros mtodos, mas mes-
mo que tenham o mesmo nome sero consideradas variveis diferentes e
no relacionadas, como por exemplo, a varivel resultado, que foi declarada
como sendo do tipo boolean no mtodo eEquilatero e como float no mto-
do calculaPerimetro.

e-Tec Brasil 68 Introduo Programao Orientada a Objetos


Dentro de mtodos e blocos de comandos, a ordem de declarao de variveis
e referncias a instncias considerada: se as linhas igualdade23 = (lado2 ==
lado3); e if (igualdade12 && igualdade23) da listagem acima fossem tro-
cadas, um erro de compilao ocorreria, pois o compilador no aceitaria que
a varivel igualdade23 recebesse um valor antes de ser declarada. Em resumo,
variveis dentro de mtodos s podem ser usadas depois de declaradas.

Variveis passadas como argumentos para os mtodos s so vlidas dentro


dos mtodos.

3.8 Encapsulamento
Diferentemente da abordagem estruturada, em que dados e procedimentos
so definidos de forma separada no cdigo, na programao orientada a
objeto os dados e procedimentos que manipulam esses dados so definidos
numa unidade nica: o objeto. Isso possibilita uma melhor modularidade do
cdigo; porm, a ideia principal poder utilizar os objetos sem ter que se
conhecer sua implementao interna, que deve ficar escondida do usurio
do objeto, que ir interagir com este apenas atravs de sua interface.

propriedade de se implementar dados e procedimentos correlacionados


em uma mesma entidade e de se proteger sua estrutura interna esconden-
do-a de observadores externos d-se o nome de encapsulamento.

O objetivo do encapsulamento separar o usurio do objeto do programa-


dor do objeto. Seus principais benefcios so:

possibilidade de alterar a implementao de um mtodo ou a estrutura


de dados escondidos de um objeto sem afetar as aplicaes que dele se
utilizam;

criao de programas mais modulares e organizados, o que possibilita


um melhor reaproveitamento do cdigo e melhor manutenibilidade da
aplicao.

Em geral, as variveis de instncia declaradas em uma definio de classe,


bem como os mtodos que executam operaes internas sobre estas vari-
veis, se houver, devem ser escondidos na definio da classe. Isso feito ge-
ralmente atravs de construes nas linguagens de programao conhecidas
como modificadores de acesso.

Aula 3 Orientao a objetos: conceitos bsicos 69 e-Tec Brasil


Os modificadores de acesso so: public, private, protected e package (tam-
bm conhecido como friendly ou default). O modificador public garante que
o campo ou mtodo da classe declarado com este modificador poder ser
acessado ou executado a partir de qualquer outra classe. Campos e mtodos
que devam ser acessados (e modificados, no caso de campos) devem ser
declarados com o modificador public.

Campos e mtodos declarados com o modificador private s podem ser


acessados, modificados ou executados por mtodos da mesma classe, sendo
completamente ocultos para o programador usurio que for usar instncias
dessa classe ou criar classes herdeiras ou derivadas (que sero vistas mais
adiante). Campos ou mtodos que devam ser ocultos totalmente de usu-
rios da classe devem ser declarados com esse modificador.

O modificador protected funciona como o modificador private, exceto que


classes herdeiras ou derivadas tambm tero acesso ao campo ou mtodo
marcado com esse modificador. O comportamento desse modificador ser
visto mais adiante.

Finalmente, campos e mtodos podem ser declarados sem modificadores.


Nesse caso, eles sero considerados da categoria package ou friendly, signi-
ficando que seus campos e mtodos sero visveis (podendo ser acessados)
para todas as classes pertencentes a um mesmo pacote ou package.

Quando definimos uma classe, recomendado (para alguns uma regra


sagrada) que declaremos pblicos apenas os mtodos da sua interface. na
interface (ou protocolo) da classe que definimos quais mensagens pode-
mos enviar s instncias de uma classe, ou seja, quais so as operaes que
podemos solicitar que os objetos realizem. Por exemplo, na classe Triangulo
acima, poderamos reescrev-la da seguinte forma:

e-Tec Brasil 70 Introduo Programao Orientada a Objetos


Figura 3.12: Reescrita da classe Triangulo
Fonte: Elaborado pelos autores

3.9 Criando objetos e acessando


dados encapsulados
Criamos objetos em Java de forma muito similar criao de variveis de
tipos primitivos. Se uma aplicao quisesse usar a classe Triangulo, poderia
declarar uma varivel desse tipo da seguinte forma:

Triangulo t;

Como Java case sensitive pode-se declarar dessa forma.

Esta sentena cria uma varivel t do tipo Triangulo. Podemos dizer que t
apenas uma referncia para a classe Triangulo.

Aula 3 Orientao a objetos: conceitos bsicos 71 e-Tec Brasil


Entretanto, isso no suficiente para acessarmos os mtodos e atributos p-
blicos da classe. A sentena acima somente declara uma varivel (referncia)
mas no cria um objeto da classe especificada (instncia). Em Java, objetos
so criados usando o operador new da seguinte forma:

Triangulo t1;
t1 = new Triangulo();
Triangulo t2;
t2 = new Triangulo;

O operador new cria uma instncia da classe e retorna a referncia do novo


objeto. Como vimos, todos os objetos em Java so tratados atravs da refe-
rncia ao endereo de memria onde o objeto est armazenado. O operador
new realiza trs tarefas:

1. Aloca memria para o novo objeto;

2. Chama um mtodo especial de inicializao da classe denominado


construtor;

3. Retorna a referncia para o novo objeto.

importante compreender o que ocorre na declarao e na inicializao da


varivel. Quando fazemos

Triangulo t1; null

O null um valor vlido em Java e permite comparaes como: if (t == null)

reservada uma poro da memria principal do Java (stack) para armaze-


nar o endereo na memria auxiliar (heap) onde o objeto ser armazenado.
Como apenas com a declarao da varivel o objeto ainda no existe, o
contedo inicial dela ser o valor nulo (null), indicando que ela ainda no se
refere a nenhum objeto. Apenas aps a inicializao

t1 = new Triangulo();

e-Tec Brasil 72 Introduo Programao Orientada a Objetos


que uma varivel de um tipo no primitivo estar valendo algo e atravs
dela ser possvel acessar os dados e operaes do objeto em questo. O
correto aqui dizer que t1 se refere a um objeto. No correto dizer que t1
um objeto, pois t1 uma varivel referncia, apesar de que, depois de um
tempo, os programadores Java falem Tenho um objeto t1 do tipo Triangu-
lo; seria mais correto dizer: Tenho uma referncia t1 a um objeto do tipo
Triangulo.

A Figura 3.13 mostra como seria a representao dessas instncias na memria.

Memria Triangulo

Triangulo

t1 t2

Figura 3.13: Representao das instncias na memria


Fonte: Elaborada pelos autores

Podemos afirmar ento que os comandos: t1 = new Triangulo() e t2 =


new Triangulo() criaram dois objetos da classe Triangulo na memria, os
quais so apontados respectivamente pelas variveis de referncia t1 e t2.
Isso quer dizer que a expresso: if (t1==t2) retornaria um valor falso, pois
t1 e t2 apontam para objetos localizados em posies de memria diferen-
tes. O operador == compara o contedo das variveis, mas essas variveis
no guardam o objeto, mas o endereo em que ele se encontra; portanto,
dois objetos com mesmo contedo so diferentes, pois esto em diferentes
endereos de memria.

Agora observe a seguinte situao:

Triangulo t3 = t1;

Qual o resultado do comando acima? O que acontece?

O operador = copia o valor de uma varivel. Mas qual o valor da varivel


t1? o objeto? No. Na verdade, o valor guardado a referncia (endereo)
de onde o objeto se encontra na memria principal. A Figura 3.14 mostra o
que acontece neste caso.

Aula 3 Orientao a objetos: conceitos bsicos 73 e-Tec Brasil


Memria Triangulo

Triangulo

t3 t1 t2

Figura 3.14: Referncias t3 e t1 apontando para o mesmo objeto


Fonte: Elaborada pelos autores

Quando fizemos t3 = t1, t3 passa a fazer referncia ao mesmo objeto que


t1 referencia nesse instante. Ento, nesse cdigo em especfico, quando
utilizamos t1 ou t3 estamos nos referindo exatamente ao mesmo objeto!
Elas so duas referncias distintas, porm apontam para o mesmo objeto!
Compar-las com = ir nos retornar true, pois o valor que elas carregam
o mesmo!

Uma vez um objeto tendo sido criado, seus mtodos e atributos pblicos
podem ser acessados utilizando o identificador do objeto (varivel que arma-
zena sua referncia) atravs do operador ponto:

<identificador>.<atributo>

<identificador>.<mtodo>

A aplicao que criou o objeto t acima pode solicitar que ele inicialize os
lados do triangulo:

t.inicializa(5,6,7);

3.10 Criando aplicaes em Java


Em Java, podemos criar em uma classe um mtodo especial que ser consi-
derado o ponto de entrada de um programa. A presena desse mtodo na
classe far com que ela se torne executvel, e dentro desse mtodo podere-
mos ter a criao e manipulao de dados e instncias de classes.

Esse mtodo especial em Java chamado main, similarmente linguagens


como C e C++. Para que a classe possa ser executada pela mquina virtual
Java, no basta a existncia de um mtodo chamado main esse mtodo

e-Tec Brasil 74 Introduo Programao Orientada a Objetos


deve ter obrigatoriamente os modificadores public static(nesta ordem), de-
vendo retornar void e receber como argumento um array (agrupamento,
conjunto ou lista) de instncias da classe String; ou seja, deve ser declarado
como public static void main(String[] argumentos). Vale a pena lembrar
que a declarao de mtodos no deve ser terminada com ponto e vrgula.
Segue abaixo um exemplo de uma aplicao em Java que cria e manipula
objetos da classe Triangulo.

Figura 3.15: Classe TestaTriangulo


Fonte: Elaborada pelos autores

Na Figura 3.15 vimos que o modificador public faz com que o mtodo seja
visvel de qualquer outra classe, o que ser uma exigncia da mquina virtual
Java para execut-lo. Mais adiante veremos o papel do modificador static
por enquanto fiquemos com a explicao simples de que um mtodo decla-
rado como static dispensa a criao de uma instncia de sua classe para que
possamos cham-lo. O tipo de retorno void indica que o mtodo main no
dever retornar nada. O nome do mtodo deve ser exatamente main, no
podendo ter variaes como maisculas, sublinhados, etc. O mtodo deve
receber como argumento um array de Strings, que dever ter um nome (re-

Aula 3 Orientao a objetos: conceitos bsicos 75 e-Tec Brasil


ferncia). O nome pode ser qualquer um que siga as regras de uso de nomes
de campos em Java, mas o array de Strings deve ser declarado como String[].
Arrays sero discutidos mais adiante. Esse array de Stringsconter, para o
mtodo main, os argumentos passados para a classe executvel via linha de
comando do terminal do computador.

Em princpio, o mtodo main poderia pertencer a qualquer classe, at mesmo


a uma classe que representa um modelo qualquer. Em vez de usar esse estilo
de programao, vamos tentar fazer com que o mtodo main, sempre que
possvel, seja o nico mtodo de uma classe, estando separado da represen-
tao dos modelos. Alm de tornar os programas executveis mais claros,
esta prtica serve para melhorar a distino entre os diferentes papis de pro-
gramadores que usam linguagens orientadas a objetos, discutida na seo.

Na figura acima, percebemos na linha 8 a declarao de uma varivel de re-


ferncia t3 e, curiosamente, esta no est associada a nenhuma instncia;
portanto, no h como acessar nenhum atributo ou mtodo da classe, pois
ela no aponta para nenhum objeto da classe. Nesse caso o compilador Java
apontar um erro na linha 14, pois h uma tentativa de acesso ao mtodo da
classe por essa varivel de referncia. Outro ponto curioso est na linha 13,
onde uma varivel de referncia t4 criada e associada ao objeto aponta-
do pela varivel t2. Nesse caso a varivel de referncia t4 existe de fato
e pode fazer os mesmos acessos que a varivel t2. Como essas variveis
apontam para a mesma instncia, qualquer operao feita atravs da vari-
vel t2 ter efeito na varivel t4 e vice-versa. No entanto, na linha 15,
ocorre uma tentativa da varivel t4 de modificar o valor do atributo lado3
da classe Triangulo. Como este atributo est encapsulado na classe atravs
do modificador de acesso private, o compilador Java acusar um erro de
permisso. Isso ocorre porque o modificador private impede o acesso direto
do atributo fora da classe onde este foi definido.

Outro exemplo mostrado na Figura 3.16 a seguir.

e-Tec Brasil 76 Introduo Programao Orientada a Objetos


Figura 3.16: Classe TestaContaBancariaSimplificada
Fonte: Elaborada pelos autores

Na listagem acima temos uma aplicao Java que manipula a classe Conta-
BancariaSimplificada, criada na seo 3.6.3. Declaramos duas variveis de
referncia c1 e c2 e associamos a duas instncias de ContaBancariaSimplifi-
cada. Depois foram feitas vrias operaes nessas instncias, como: abertura
de conta, depsito, saque, etc. Observe que os mtodos so invocados de
acordo com sua definio na classe ContaBancariaSimplificada. Observe na
linha 11 que h uma falha no encapsulamento dessa classe, pois foi per-
mitido que o objeto apontado pela referncia c2 alterasse diretamente o
atributo saldo da classe, o que caracteriza um erro grave! Imagine se voc,
correntista de um banco, pudesse alterar o saldo da sua conta sem fazer
nenhum depsito. Com certeza os bancos estariam falidos!. Para consertar
isso, a classe deveria ter sido definida com todos os seus atributos declarados
com o modificador private.

Resumo
Nesta aula exploramos os princpios bsicos da programao orientada a
objetos. Vimos a importncia de criar modelos para representarmos objetos,
pessoas, itens, tarefas, processos, conceitos, ideias, etc. Discutimos que os
objetos so criados com base nas classes que foram escritas em uma lin-
guagem de programao qualquer. As classes representam o conceito geral
de uma coisa, enquanto objetos representam instncias concretas de uma
classe. Uma classe especifica quais sero os atributos de todo objeto perten-
cente a ela bem como quais servios esse objeto poder executar. Os objetos
armazenam dados em campos que contm tipos. Os objetos tm mtodos
que utilizamos para a troca de mensagens entre eles.

Aula 3 Orientao a objetos: conceitos bsicos 77 e-Tec Brasil


O escopo dos campos e variveis dentro de uma classe determina a sua
visibilidade (isto , se as variveis ou campos podem ser acessadas ou mo-
dificadas em todos os mtodos da classe, se somente em um determinado
mtodo ou mesmo se somente em parte de um determinado mtodo).

O encapsulamento a propriedade de implementar dados e procedimen-


tos correlacionados em uma mesma entidade e de proteger sua estrutura
interna, escondendo-a de observadores externos. O encapsulamento im-
plementado atravs dos modificadores de acesso. So eles: public, priva-
te, protected e default. Os objetos so acessados por referncias, ou seja,
quando declaramos uma varivel para associar a um objeto, na verdade essa
varivel no guarda o objeto, e sim uma maneira de acess-lo, chamada de
referncia. A criao de objetos em Java feita atravs do operador new.

O operador new, depois de alocar a memria para esse objeto, devolve


uma flecha, isto , um valor de referncia. Quando voc atribui isso a uma
varivel, essa varivel passa a se referir para esse mesmo objeto. O mto-
do main usado em Java para a criao de classes executveis (aplicaes).
Dentro desse mtodo poderemos ter a criao e manipulao de dados e
instncias de classes.

Atividades de aprendizagem
1. Escreva um modelo para representar uma lmpada que est venda em
um supermercado. Que dados devem ser representados por esse modelo?

2. Crie um modelo para representar um time de um esporte qualquer em um


campeonato desse esporte. Que dados e operaes esse modelo deve ter?

3. Modifique a operao mostraDados do modelo ContaBancariaSim-


plificada ( ) para que, caso o saldo esteja negativo, uma mensagem de
alerta seja impressa. Dica: O saldo s poder ser negativo se a conta for
especial.

4. Crie uma classe em Java correspondente ao modelo criado na questo 1.

5. Crie uma classe em Java correspondente ao modelo criado na questo2.

6. Modifique o mtodo abreContaSimples da classe ContaBancariaSim-


plificada de forma que o cliente s possa abrir uma conta com um valor
mnimo de R$ 100,00.

e-Tec Brasil 78 Introduo Programao Orientada a Objetos


7. Identifique e explique o(s) erro(s) na classe abaixo:

1 class Registro De Eleitor


2{
3 /**
4 * Declarao dos campos desta classe
5 */
6 int tituloDeEleitor; // nmero do ttulo do eleitor
7 String nome; // nome do eleitor
8 short zonaEleitoral; // nmero da zona eleitoral
9 } // fim da classe

8. Identifique e explique o(s) erro(s) na classe abaixo:

1 class Teste2
2{
3 /**
4 * Declarao dos campos desta classe
5 */
6 int num1,num2;
7 /**
8 * Declarao dos mtodos desta classe
9 */
10 int maior()
11 {
12 if (num1 > num2)
13 return true;
14 else return false;
15 }
16 void menor()
17 {
18 if (num1 < num2)
19 return num1;
20 else return num2;
21 }
22 } // fim da classe

Aula 3 Orientao a objetos: conceitos bsicos 79 e-Tec Brasil


9. Identifique e explique o(s) erro(s) na classe abaixo.

1 class TesteImpressao
2{
3 main(String[] args)
4{
5 System.out.println(7+2=+(7+2));
6 System.out.println(7-2=+(7-2));
7 System.out.println(7*2=+(7*2));
8 System.out.println(7/2=+(7/2));
9 return true;
10 }
11 } // fim da classe

10. Identifique e explique o(s) erro(s) na classe abaixo.

1 class TesteDatas
2{
3 public void static main(String[] args)
4{
5 Data2 hoje = new Data2();
6 hoje.inicializaData(7,1,2001);
7 Data2 amanha;
8 amanha.inicializaData(8,1,2001);
9 System.out.println(amanha.eIgual(hoje));
10 }
11 } // fim da classe
Identifique e explique o(s) erro(s) na classe abaixo.
1 class TesteObjetos
2{
3 public static void main(String[] args)
4{
5 Data a;
6 Data b = new Data();
7 b = null;
8 b = a;
9}
10 } // fim da classe

11. Escreva uma aplicao em Java que demonstre o uso de instncias da


classe, que deve ter sido criada como resposta ao exerccio 2.

e-Tec Brasil 80 Introduo Programao Orientada a Objetos


12. Escreva uma aplicao em Java que demonstre o uso de instncias da
classe, que deve ter sido criada como resposta ao exerccio 1.

13. Escreva uma aplicao que demonstre o uso de instncias da classe Con-
taBancariaSimplificada implementada na seo 3.6.3. Crie um mtodo
transfere do tipo booleano que tenha como parmetros dois objetos
do tipo Conta e o valor a ser transferido de uma conta para outra. Esse
mtodo dever utilizar os mtodos deposita e retira da classe. O tipo
booleano de retorno do mtodo para sinalizar se a operao de trans-
ferncia de valores foi realizada com sucesso, ou seja, se o valor a ser
transferido da conta de origem for menor ou igual ao saldo dessa conta.

14. Qual a importncia de usar o encapsulamento na definio de classes?


Exemplifique.

15. A classe abaixo pode ser compilada sem erros. Quando for executado, o
programa imprimir o resultado da comparao na linha 11, que true,
mas o resultado da comparao na linha 12 false. Explique por que.

1 class DemoDataCopiada
2{
3 public static void main(String[] argumentos)
4{
5 Data aniversariodaMaria = new Data();
6 Data meuaniversario= new Data();
7 Data corpuschristi2010;
8 meuaniversario.inicializaData(3,6,2010);
9 aniversariodaMaria.inicializaData (3,6,2010);
10 corpuschristi2010= meuaniversario;
11 System.out.println(corpuschristi2010 == meuaniversario);
12 System.out.println(corpuschristi2010 == aniversariodaMaria);
13 }
14 }

Poste suas solues no AVEA.

Aula 3 Orientao a objetos: conceitos bsicos 81 e-Tec Brasil


Aula 4 Construtores, sobrecarga,
atributos e mtodos de classe

Objetivos

Compreender o que so e para que servem os construtores.

Criar construtores para classes.

Conhecer a sobrecarga de mtodos, saber utiliz-la e identificar


quais os principais cuidados que devemos ter com ela.

4.1 Introduo
Na aula anterior vimos que podemos criar aplicaes que utilizam instncias
de classes definidas pelo usurio ou j existentes. Para criar instncias, preci-
samos usar a palavra-chave new, que criar a instncia da classe e, em geral,
associar a instncia recm-criada a uma referncia, para que mtodos da
instncia possam ser executados.

At agora, alm de inicializar a instncia da classe com a palavra-chave new,


usamos mtodos para inicializar os campos das instncias. O uso desses m-
todos de responsabilidade do programador usurio das classes para criar
as instncias, o compilador obriga o uso da palavra-chave new, mas no
obriga o uso dos mtodos de inicializao. Dessa maneira, por esquecimen-
to, um programador usurio pode criar a instncia de uma classe mas no
inicializar os seus dados.

Para exemplificar os erros que podem ocorrer quando instncias so inicia-


lizadas mas os dados encapsulados no o so, consideremos as classes Re-
gistroAcademicoSemConstrutor (listagem da Figura 4.1a e b) que encapsula
os dados de um registro acadmico simples (basicamente para clculo da
mensalidade) e a classe DemoRegistroAcademicoSemConstrutor (listagem
da Figura 4.2) que demonstra usos de instncias dessa classe.

Aula 4 Construtores, sobrecarga, atributos e mtodos de classe 83 e-Tec Brasil


Figura 4.1a: A classe RegistroAcademicoSemConstrutor, que encapsula alguns dados
de um registro acadmico
Fonte: Elaborada pelos autores

Figura 4.1b: A classe DemoRegistroAcademicoSemConstrutor, que demonstra o uso


de instncias da classe RegistroAcademicoSemConstrutor
Fonte: Elaborada pelos autores

e-Tec Brasil 84 Introduo Programao Orientada a Objetos


Figura 4.2: Classe DemoRegistroAcademicoSemConstrutor
Fonte: Elaborada pelos autores

Podemos ver que na Figura 4.1b uma instncia da classe RegistroAcademico-


SemConstrutor no teve seus dados inicializados, o que no impede o com-
pilador de compilar corretamente a classe, nem a mquina virtual Java de
a interpretar. O resultado do programa na figura 4.1b mostrado a seguir:

A mensalidade do Michael 500.0

A mensalidade do Roberto NaN

A mensalidade do primeiro aluno foi calculada corretamente: a mensalidade


de seu curso 500 reais e o percentual de cobrana 100% (sem bolsa).
No caso do segundo aluno, os dados simplesmente no foram informados
para a sua instncia, os valores numricos foram considerados como zero,
e a mensalidade calculada como 0 _ 100:0=0:0 (veja a linha 47 da Figura
4.1a). A diviso de zero por zero (quando ambos so valores de ponto flutu-
ante) representada por Java como o valor NaN (Not a Number, no um
nmero). Em muitas situaes ser necessrio forar o programador usurio
a passar dados para as instncias criadas em classes e programas para que
estas tenham sentido. Isto pode ser feito usando construtores. Este captulo
discutir a criao e uso de construtores e de sobrecarga de mtodos, que
permite que criemos mtodos com nomes iguais, mas funes diferentes

Aula 4 Construtores, sobrecarga, atributos e mtodos de classe 85 e-Tec Brasil


4.2 O que so construtores?
Construtores so mtodos especiais chamados automaticamente quando
instncias so criadas atravs da palavra-chave new. Atravs da criao de
construtores, podemos garantir que o cdigo que eles contm ser executa-
do antes de qualquer outro cdigo em outros mtodos, j que uma instncia
de uma classe s pode ser usada depois de ter sido criada com new, o que
causar a execuo do construtor.

Construtores so particularmente teis para inicializar campos de instncias


de classes para garantir que, quando mtodos dessas instncias forem cha-
mados, elas contenham valores especficos e no os default Caso os campos
de uma instncia no sejam inicializados, os seguintes valores sero adotados:

Campos do tipo boolean so inicializados automaticamente com a cons-


tante false.

Campos do tipo char so inicializados com o caracter cujo cdigo Unico-


de zero e que impresso como um espao.

Campos de tipos inteiros (byte, short, long, int) ou de ponto flutuante


(float, double) so automaticamente inicializados com o valor zero, do
tipo do campo declarado.

Instncias de qualquer classe, inclusive da classe String, so inicializadas


automaticamente com null.

As diferenas bsicas entre construtores e outros mtodos so:

Construtores devem ter exatamente o mesmo nome da classe a que


pertencem, inclusive considerando maisculas e minsculas.

Construtores no podem retornar nenhum valor, nem mesmo void; por-


tanto, devem ser declarados sem tipo de retorno.

Construtores no devem receber modificadores como public ou private,


e sero pblicos se a classe for pblica. No h muito sentido em decla-
rar um construtor como sendo private, a no ser quando um construtor
privado for chamado de outro construtor pblico.

e-Tec Brasil 86 Introduo Programao Orientada a Objetos


Exemplo de um construtor:

class Conta {
int numero;
Cliente titular;
double saldo;
double limite;
// construtor
Conta() {
System.out.println(Construindo uma conta.);
}
// ..
}

Ento, quando fizermos:

Conta c = new Conta();

A mensagem construindo uma conta aparecer. como uma rotina de


inicializao que chamada sempre que um novo objeto criado.

4.3 Sobrecarga de mtodos


A sobrecarga de mtodos nada mais do que termos dois mtodos com o
mesmo nome, porm listas de argumentos diferentes.

A sobrecarga permite criar diversas verses de um mtodo, com listas de


argumentos (valores) diferentes, para a convenincia dos chamadores. Por
exemplo, se voc tiver um mtodo que use somente um int, o cdigo que o
chamar ter que converter, digamos, um double em um int antes de chamar
seu mtodo. Mas, se voc sobrecarregou o mtodo com outra verso que
usa um double, tornou tudo mais fcil para o chamador.

Os mtodos sobrecarregados tm muito mais flexibilidade.

Exemplo vlido de sobrecarga de mtodos:

Aula 4 Construtores, sobrecarga, atributos e mtodos de classe 87 e-Tec Brasil


class CSoma
{ public:
// Declarao do mtodo Soma, parmetro do tipo int, sem nome
int Soma( int , int );
// Declarao do mtodo Soma, parmetro do tipo float, com nomes
aeb
float Soma( float a, float b );
};

4.4 Cuidados com sobrecarga de mtodos


Um cuidado adicional deve ser tomado pelo programador das classes quan-
do for criar mtodos sobrecarregados: Java permite que alguns tipos nativos
de dados sejam promovidos, isto , aceitos como sendo de outros tipos
contanto que nada se perca na representao. Dessa forma, um valor do
tipo byte pode ser aceito por um mtodo que espere um valor do tipo int, j
que este pode representar bytes sem perda de informao.

O mesmo no ocorre em casos onde um mtodo ou construtor espere um


certo tipo de dado e a chamada ao mtodo contenha, como argumento, um
tipo de dado que nem sempre pode ser contido no esperado: por exemplo,
nem sempre um valor do tipo double pode ser representado por um valor do
tipo int. Em muitos casos, podemos usar a converso explcita ou cast para
forar o rebaixamento, geralmente com perda de preciso.

Quando for necessrio determinar qual construtor ou mtodo sobrecarregado


deve ser chamado, o compilador pode, se for necessrio, promover tipos de da-
dos para que um construtor ou mtodo com a assinatura adequada seja usado,
mas nunca far o rebaixamento, o que pode causar erros de compilao.

e-Tec Brasil 88 Introduo Programao Orientada a Objetos


Resumo
Nesta aula vimos como podemos inicializar e criar instncias de classes. Vi-
mos tambm que existe um mtodo especial chamado de Construtor, e que
atravs da sua criao podemos garantir que o cdigo que ele contm ser
executado antes de qualquer outro cdigo em outros mtodos, j que uma
instncia de uma classe s pode ser usada depois de ter sido criada com
new, o que causar a execuo do construtor.

Vimos tambm que a sobrecarga de mtodos nada mais do que termos


dois mtodos com o mesmo nome, porm listas de argumentos diferentes.
Pudemos ver que temos que tomar cuidado na hora de utilizar a sobrecarga
de mtodos, porque quando for necessrio determinar qual construtor ou
mtodo sobrecarregado deve ser chamado, o compilador pode, se for ne-
cessrio, promover tipos de dados para que um construtor ou mtodo com
a assinatura adequada seja usado, mas nunca far o rebaixamento, o que
pode causar erros de compilao.

Aula 4 Construtores, sobrecarga, atributos e mtodos de classe 89 e-Tec Brasil


Atividades de aprendizagem
1. Escreva um construtor para a classe Data que receba os valores corres-
pondentes ao dia, ms e ano, e inicialize os campos da classe, verificando
antes se a data vlida.

2. Escreva um construtor para a classe Lmpada, de forma que instncias


desta s possam ser criadas se um estado inicial for passado para o cons-
trutor. Este estado pode ser o valor booleano que indica se a lmpada
est acesa (true) ou apagada (false).

3. Defina uma classe Professor com os dados: nome do professor, nome do


departamento, data de admisso, nmero de registro. Inclua na classe um
construtor para setar os dados e um mtodo para imprimir o contedo.

4. Reescreva a classe Professor de forma que a data de admisso seja um


objeto da classe Data.

5. Construa uma classe ContaEmBanco. Atributos mnimos necessrio:


nome do cliente e saldo. Na construo, no mnimo o nome do cliente
deve ser informado, opcionalmente com um depsito inicial.

6. Defina uma classe para conter informaes sobre um funcionrio de uma


empresa (classe Funcionario). Quais so os atributos dessa classe? Inclua
entre eles o salrio que o funcionrio deve receber por hora trabalhada.
Implemente, para essa classe, pelo menos trs mtodos construtores: um
que receba apenas o nome do funcionrio e assuma valores default para
os demais atributos (assuma que o funcionrio deve receber dois reais
por hora trabalhada); o segundo construtor deve receber, alm do nome,
o valor que o referido trabalhador deve receber por hora trabalhada.
Identifique e implemente demais mtodos que achar conveniente para
um objeto da classe Funcionario.

7. Quais so os principais cuidados que devemos ter com a sobrecarga de


mtodos? Cite algum exemplo.

Poste suas respostas no AVEA.

e-Tec Brasil 90 Introduo Programao Orientada a Objetos


Aula 5 Campos e mtodos estticos

Objetivos

Definir o que so campos e mtodos estticos e como utiliz-los


para escrever melhor seu programa em Java.

Saber diferenciar mtodos esttico de mtodos no estticos.

Saber como declarar campos que sero compartilhados entre to-


das as instncias das classes de uma aplicao.

5.1 Introduo
Vimos nas aulas anteriores que cada instncia de uma classe ter uma cpia
de todos os campos declarados na classe esta uma das caractersticas
mais teis de linguagens de programao orientadas a objeto: a possibili-
dade da criao de novos tipos de dados que so compostos de outros
dados convenientemente agrupados em uma nica entidade.

As instncias de uma classe so, ento, independentes entre si: a modificao


do campo dia de uma instncia da classe Data no afeta o valor do mesmo
campo em outra instncia. Apesar de esperado, nem sempre esse compor-
tamento desejvel: no foi visto, at agora, um mecanismo que permita o
compartilhamento de informaes entre todas as instncias de uma classe,
o que poderia ser usado, por exemplo, para algum tipo de controle interno.

Nesta aula veremos como podemos declarar campos que sero compartilha-
dos entre todas as instncias de uma mesma classe em uma aplicao, assim
como a criao de mtodos que no precisam de instncias de classes para
ser executados.

5.2 Campos estticos em classe


Campos estticos em uma classe so compartilhados por todas as instncias
dessa classe; em outras palavras, somente um valor ser armazenado em um
campo esttico, e caso esse valor seja modificado por uma das instncias dessa
classe, a modificao ser refletida em todas as outras instncias dessa classe.

Aula 5 Campos e mtodos estticos 91 e-Tec Brasil


Campos estticos so declarados com o modificador static, que deve ser
declarado antes do tipo de dado do campo e pode ser combinado com mo-
dificadores de acesso como public e private.

Campos estticos so tambm conhecidos como campos de classes, j que


esses campos podero ser acessados diretamente usando o nome da classe,
sem que seja necessria a criao de uma instncia da classe e uma refe-
rncia para essa instncia. Em contraste, campos que podem ter diferentes
valores para cada instncia da mesma classe (como os vistos nos exemplos
anteriores) so conhecidos como campos de instncias.

As duas maiores utilidades de campos estticos em classes so manter uma


informao ou estado para todas as instncias de uma classe que possa ser
modificada ou acessada por qualquer das instncias e armazenar valores que
no sero modificados nem sero variveis por instncias de classe, isto ,
valores constantes.

Como exemplo de informao que deve ser compartilhada por todas as ins-
tncias de uma classe, consideramos o problema da simulao de um caixa
de banco. Suponhamos que nesse banco no exista um sistema de senhas
ou fila nica; ento cada caixa independente das outras em relao ao
atendimento do cliente; isto , cada caixa ter que ter sua prpria fila, e os
clientes sero atendidos medida que o cliente anterior sair da fila. Para ilus-
trar, a Figura 5.1 mostra, esquerda, um banco com cinco caixas, cada uma
com sua fila, e direita, um banco com cinco caixas e fila nica.

C1 C2 C3 C4 C5 C1 C2 C3 C4 C5

Figura 5.1: Bancos com e sem fila nica


Fonte: Elaborada pelos autores

e-Tec Brasil 92 Introduo Programao Orientada a Objetos


Para demonstrao do uso de campos estticos que representem um nico
valor para todas as instncias de uma classe, vamos criar classes que simu-
lem o atendimento de caixas em bancos com e sem fila nica. Uma classe
que simula o atendimento de uma caixa de banco com fila nica mostrada
abaixo (Figura 5.2).

Figura 5.2a: Classe Simulador de Caixa de Banco


Fonte: Elaborada pelos autores

Figura 5.2b: Classe Simulador de Caixa de Banco continuao


Fonte: Elaborada pelos autores

Aula 5 Campos e mtodos estticos 93 e-Tec Brasil


A demonstrao do funcionamento da classe SimuladorDeCaixaDeBanco0
atravs da criao e uso de vrias instncias da classe feita abaixo (Figura 5.3).

Figura 5.3a: Classe simulador de caixa de banco com vrias instncias


Fonte: Elaborada pelos autores

Figura 5.3b: Classe simulador de caixa de banco com vrias instncias continuao
Fonte: Elaborada pelos autores

Uma aplicao que usa instncias da classe SimuladorDeCaixaDeBanco pode


ser reescrita a partir das Figura 5.2a e Figura 5.2b, trocando-se as instncias
da classe SimuladorDeCaixaDeBanco por instncias da classe SimuladorDe-
CaixaDeBanco0. O resultado de uma aplicao que usa instncias da classe
SimuladorDeCaixaDeBanco mostrado a seguir:

e-Tec Brasil 94 Introduo Programao Orientada a Objetos


1. Caixa 1 iniciou operao.

2. Caixa 2 iniciou operao.

3. Caixa 3 iniciou operao.

4. Caixa 4 iniciou operao.

5. Caixa 5 iniciou operao.

6. Cliente com a senha nmero 1, favor dirigir-se ao caixa nmero 1.

7. Cliente com a senha nmero 2, favor dirigir-se ao caixa nmero 2.

8. Cliente com a senha nmero 3, favor dirigir-se ao caixa nmero 3.

9. Cliente com a senha nmero 4, favor dirigir-se ao caixa nmero 4.

10. Cliente com a senha nmero 5, favor dirigir-se ao caixa nmero 5.

11. Cliente com a senha nmero 6, favor dirigir-se ao caixa nmero 1.

12. Cliente com a senha nmero 7, favor dirigir-se ao caixa nmero 2.

13. Cliente com a senha nmero 8, favor dirigir-se ao caixa nmero 3.

14. Cliente com a senha nmero 9, favor dirigir-se ao caixa nmero 1.

15. Cliente com a senha nmero 10, favor dirigir-se ao caixa nmero 2.

16. Cliente com a senha nmero 11, favor dirigir-se ao caixa nmero 1.

17. Cliente com a senha nmero 12, favor dirigir-se ao caixa nmero 1.

18. Cliente com a senha nmero 13, favor dirigir-se ao caixa nmero 1.

19. Cliente com a senha nmero 14, favor dirigir-se ao caixa nmero 1.

Com este resultado, podemos ver que as instncias da classe SimuladorDe-


CaixaDeBanco.java compartilham o mesmo valor atravs do campo esttico
numeroDoCliente.

Aula 5 Campos e mtodos estticos 95 e-Tec Brasil


Um outro uso de campos estticos em classes o de criao de constantes,
que sero compartilhadas por todas as instncias da classe e, em geral, imu-
tveis. Constantes em classes geralmente so acessadas atravs da classe e
no de instncias dessa classe. Como exemplo, consideremos a classe Cons-
tantesMatematicas, mostrada no cdigo abaixo.

Figura 5.4: Classe ConstantesMatematicas


Fonte: Elaborada pelos autores

Um ponto importante do cdigo acima que as constantes que so decla-


radas com o modificador static, para que sejam os mesmo valores indepen-
dentemente de quantas instncias da classe sejam criadas, tambm so de-
claradas com o modificador final. O modificador final faz com que os valores
dos campos, depois de declarados, no possam mais ser modificados, o que
desejvel para campos que representam constantes. A aplicao no cdigo
a seguir demonstra usos das constantes na classe ConstantesMatematicas.

Figura 5.5a: Classe DemoConstantesMatematicas


Fonte: Elaborada pelos autores

e-Tec Brasil 96 Introduo Programao Orientada a Objetos


Figura 5.5b: Classe DemoConstantesMatematicas continuao
Fonte: Elaborada pelos autores

Podemos ver no cdigo apresentado acima que os valores constantes so


iguais para todas as instncias da classe ConstantesMatematicas, e que a
criao de instncias de uma classe onde todos os campos so declarados
como static no necessria: podemos acessar os campos diretamente (j
que eles so declarados como public) atravs do nome da classe.

5.3 Mtodos estticos em classe


Mtodos estticos em uma classe tambm so declarados com o modifica-
dor static, que deve preceder o tipo de retorno do mtodo e que pode ser
combinado com modificadores de acesso ao mtodo. A diferena principal
entre mtodos estticos (tambm conhecidos como mtodos de classes)
e mtodos no estticos que os mtodos estticos podem ser chamados
sem a necessidade de criao de instncias das classes s quais pertencem.

J vimos anteriormente um mtodo esttico o mtodo main que permite


que uma classe seja executada como uma aplicao ou programa. Se uma
classe, por exemplo, Teste tem o mtodo esttico main declarado adequada-
mente, no se precisa criar instncias de Teste para executar o mtodo main.
Mtodos estticos podem ser usados em classes que tenham o mtodo main
para servirem como sub-rotinas deste, o que ser descrito na seo 5.4.

Mtodos estticos so tambm adequados para implementar rotinas que


sejam independentes de dados armazenados em classes, ou seja, mtodos
que s necessitem dos dados passados como argumentos para efetuar a
tarefa requerida, e que sejam executados com o mesmo resultado, indepen-

Aula 5 Campos e mtodos estticos 97 e-Tec Brasil


dentemente de qual instncia da classe a que pertencem seja usada para
sua chamada. A aplicao mais frequente de mtodos estticos a criao
de bibliotecas de mtodos, classes que contm somente mtodos estti-
cos, geralmente agrupados por funo. Um exemplo de uma biblioteca de
mtodos (que tem mtodos para calcular vrias converses de unidades de
comprimento) mostrado no prximo exemplo de cdigo.

Figura 5.6a: Classe ConversoDeUnidadeDeComprimento


Fonte: Elaborada pelos autores

Figura 5.6b: Classe ConversoDeUnidadeDeComprimento continuao


Fonte: Elaborada pelos autores

e-Tec Brasil 98 Introduo Programao Orientada a Objetos


Os mtodos na classe ConversaoDeUnidadesDeComprimento so demons-
trados na aplicao abaixo (Figura 5.7).

Figura 5.7a: Mtodos da classe ConversaoDeUnidadeDeComprimento


Fonte: Elaborada pelos autores

Figura 5.7b: Mtodos da classe ConversaoDeUnidadeDeComprimento continuao


Fonte: Elaborada pelos autores

Podemos ver na aplicao mostrada que no necessrio criar uma instn-


cia da classe ConversaoDeUnidadesDeComprimento para acessar seus m-
todos, embora isso seja possvel. Curiosamente, a instncia conv, declarada
na linha 20, poderia ser inicializada com o valor null, e o programa ainda
seria executado normalmente o que importa nesse caso que a instncia
da classe ConversaoDeUnidadesDeComprimento, independentemente de
ser inicializada ou no.

Variveis que forem declaradas dentro de mtodos estticos sero automati-


camente estticas, mas como seu escopo somente dentro do mtodo, elas
no podero ser acessadas a partir de outros mtodos.

Aula 5 Campos e mtodos estticos 99 e-Tec Brasil


5.4 Campos e mtodos
estticos em aplicaes
Conforme explicado em aulas anteriores, o mtodo main, quando declarado
apropriadamente, ser o ponto de entrada que permite a execuo de uma
classe. O mtodo main deve ser declarado como esttico para que no seja
necessrio instanciar a classe a que pertence.

Eventualmente ser interessante que o mtodo main possa chamar um ou-


tro mtodo que no faa parte de outra classe, mas esteja contido na mes-
ma (um mtodo local, mais conhecido como sub-rotina), geralmente para
simplificar o cdigo (embora seja aconselhvel, sempre que seja possvel,
agrupar vrios mtodos com caractersticas em comum em uma classe, que
funcionar como uma biblioteca de rotinas).

Se um mtodo for chamado diretamente a partir do mtodo main, esse


mtodo dever ser obrigatoriamente declarado como esttico. Se o mto-
do main for acessar campos declarados na sua classe, mas fora do mtodo
main, esses campos tambm devero ser declarados como estticos.

Partes do cdigo que podem ser executadas repetidamente so candidatas


criao de mtodos locais, como mostrado na aplicao abaixo (Figura 5.8).

Figura 5.8a: Classe CalculoDePrecoDeTerreno


Fonte: Elaborada pelos autores

e-Tec Brasil 100 Introduo Programao Orientada a Objetos


Figura 5.8b: Classe CalculoDePrecoDeTerreno continuao
Fonte: Elaborada pelos autores

Curiosamente, o prprio mtodo main pode ser chamado a partir de ou-


tros mtodos, inclusive de mtodos main de outras classes. Dessa forma,
uma aplicao inteira (que seria executada pelo mtodo main de uma classe)
pode ser considerada como uma sub-rotina de outra aplicao.

O cdigo abaixo mostra como mtodos estticos (maine outros) de outras


classes podem ser chamados a partir do mtodo main.

Figura 5.9a: Mtodos estticos de outras classes chamados a partir do mtodo main
Fonte: Elaborada pelos autores

Aula 5 Campos e mtodos estticos 101 e-Tec Brasil


Figura 5.9b: Mtodos estticos de outras classes chamados a partir do mtodo main
continuao
Fonte: Elaborada pelos autores

5.5 Fbricas de instncias


Mtodos estticos que retornem novas instncias de classes so conhecidos
como fbricas de instncias.

Fbricas de instncias so teis para a criao simples e rpida de instncias


que sejam bem caractersticas de uma classe.

Nem sempre a criao dessas fbricas justificvel. interessante notar que


podemos ter fbricas de instncias de classes declaradas em outras classes.

Figura 5.10a: Classe DataComFabrica


Fonte: Elaborada pelos autores

e-Tec Brasil 102 Introduo Programao Orientada a Objetos


Figura 5.10b: Classe DataComFabrica continuao
Fonte: Elaborada pelos autores

A classe DataComFabrica, mostrada no cdigo acima, contm um mtodo


esttico que retorna uma nova instncia da prpria classe contendo a data
do Natal de um determinado ano, que deve ser passado como argumen-
to para este mtodo. A classe DemoDataComFabrica, mostrada no cdigo
abaixo (Figura 5.11), demonstra usos desse mtodo.

Figura 5.11: Classe DemoDataComFabrica


Fonte: Elaborada pelos autores

Aula 5 Campos e mtodos estticos 103 e-Tec Brasil


Podemos ver que a criao de instncias da classe DataComFabrica pode ser
feita de maneira simples com a fbrica de instncias.

Resumo
Nesta aula vimos como podemos declarar campos que sero compartilhados
entre todas as instncias de uma mesma classe em uma aplicao, assim
como a criao de mtodos que no precisam de instncias de classes para
ser executados.

Campos estticos em uma classe so compartilhados por todas as instncias


dessa classe; em outras palavras, somente um valor ser armazenado em um
campo esttico, e caso esse valor seja modificado por uma das instncias dessa
classe, a modificao ser refletida em todas as outras instncias dessa classe.

Campos estticos so declarados com o modificador static, que deve ser


declarado antes do tipo de dado do campo e pode ser combinado com mo-
dificadores de acesso como public e private.

Campos estticos so tambm conhecidos como campos de classes, j que


estes campos podero ser acessados diretamente usando o nome da classe.

Mtodos estticos em uma classe tambm so declarados com o modifica-


dor static, que deve preceder o tipo de retorno do mtodo e que pode ser
combinado com modificadores de acesso ao mtodo. A diferena principal
entre mtodos estticos (tambm conhecidos como mtodos de classes) e
mtodos no estticos que os mtodos estticos podem ser chamados sem
a necessidade de criao de instncias das classes s quais pertencem.

O mtodo main, quando declarado apropriadamente, ser o ponto de entra-


da que permite a execuo de uma classe. O mtodo main deve ser declarado
como esttico para que no seja necessrio instanciar a classe a que pertence.

Mtodos estticos que retornem novas instncias de classes so conhecidos


como fbricas de instncias. Fbricas de instncias so teis para a criao
simples e rpida de instncias que sejam bem caractersticas de uma classe.

e-Tec Brasil 104 Introduo Programao Orientada a Objetos


Atividades de aprendizagem
1. Escreva, para a classe DataComFabrica (Figuras 5.10), um mtodo pri-
meiroDeAbril que se comporte como uma fbrica de instncias.

2. O mtodo main pode ser chamado a partir de outro mtodo da mesma


classe. Se isso for feito, que problemas podem ocorrer na aplicao ?

3. Escreva a classe ConversaoDeUnidadesDeArea com mtodos estticos


para converso das unidades de rea segundo a lista abaixo.

1 metro quadrado = 10.76 ps quadrados


1 p quadrado = 929 centmetros quadrados
1 milha quadrada = 640 acres
1 acre = 43.560 ps quadrados

4. Escreva uma classe que contenha mtodos estticos para calcular as m-


dias de dois, trs, quatro e cinco valores, considerando que os argumen-
tos e retorno dos mtodos podem ser dos tipos int e double.

5. Escreva uma classe que contenha mtodos estticos para calcular as so-
mas de dois, trs, quatro e cinco valores, considerando que os argumen-
tos e retorno dos mtodos podem ser dos tipos int e double.

6. Escreva uma classe que contenha mtodos estticos para retornar o


maior de dois, trs, quatro e cinco valores, considerando que os argu-
mentos e retorno dos mtodos podem ser dos tipos int e double. Dica:
os mtodos podem ser chamados em cascata: para calcular o maior de
trs valores a, b e c, pode-se calcular o maior valor de a e b, e comparar
este resultado com c.

7. Escreva uma classe SerieLimitada, que encapsula um valor inteiro sequen-


cial como os usados em notas e sries de gravuras. Essa classe deve per-
mitir que um programa crie um nmero limitado de instncias dela, cada
uma numerada com um valor sequencial. O nmero total de instncias
controlado pelo campo maximoDeInstancias, declarado como static final,
e o de instncias j criadas controlado pelo campo contador, declarado
como static. Escreva tambm uma aplicao que crie algumas instncias
da classe para demonstrar seu funcionamento.

Poste suas respostas no AVEA.

Aula 5 Campos e mtodos estticos 105 e-Tec Brasil


Aula 6 Reutilizao de classes

Objetivos

Compreender e utilizar os principais meios de reutilizao de classes.

Saber utilizar o conceito de herana, polimorfismo, entre outros,


para que se possa reutilizar esses cdigos.

Aprender os dois tipos de polimorfismo e saber como aplic-los


no cdigo.

Aprender como criar objetos de uma subclasse.

Utilizar o mtodo final e a classe final.

6.1 Introduo
Uma das caractersticas mais interessantes de linguagens de programao
orientadas a objetos a capacidade de facilitar a reutilizao de cdigo o
aproveitamento de classes e seus mtodos que j estejam escritos e que
j tenham o seu funcionamento testado e comprovado. A reutilizao de
cdigo diminui a necessidade de escrever novos mtodos e classes, econo-
mizando o trabalho do programador e diminuindo a possibilidade de erros.

Linguagens procedurais podem implementar reutilizao de cdigo com fun-


es que podem ser chamadas a partir de vrios programas diferentes. Java
e outras linguagens de programao orientadas a objetos vo mais alm,
permitindo a criao de classes baseadas em outras. As classes criadas com
essa tcnica podero conter os mtodos das classes originais, alm de poder
adicionar comportamento especfico da nova classe.

6.2 Herana
A herana a principal caracterstica de distino entre um sistema de pro-
gramao orientado a objeto e outros sistemas de programao. As classes
so inseridas em uma hierarquia de especializaes de tal forma que uma

Aula 6 Reutilizao de classes 107 e-Tec Brasil


classe mais especializada herda todas as propriedades da classe mais geral a
qual subordinada na hierarquia. A classe mais geral denominada super-
classe, e a classe mais especializada, subclasse.

O principal benefcio da herana a reutilizao de cdigo. A herana per-


mite ao programador criar uma nova classe programando somente as dife-
renas existentes na subclasse em relao superclasse. Isso se ajusta bem
forma como compreendemos o mundo real, no qual conseguimos identificar
naturalmente essas relaes.

A fim de exemplificarmos este conceito, vamos considerar que queiramos


modelar os seres vivos pluricelulares existentes no planeta. Podemos ento
comear com a classe SerVivo abaixo (Figura 6.1).

SER VIVO

Figura 6.1: Classe SerVivo


Fonte: Elaborada pelos autores

Ela modela as caractersticas que todo ser vivo deve possuir, como a capa-
cidade de reproduzir-se ou a necessidade de alimentar-se. Sendo assim, a
classe SerVivo define atributos e mtodos tais como:

Atributos: Alimentos, Idade.

Mtodos: Nascer, Alimentar, Respirar, Crescer, Reproduzir, Morrer.

Os seres vivos, por sua vez, classificam-se em Animais e Vegetais, os quais


possuem caractersticas prprias que os distingue (Figura 6.2).

Ser Vivo

Animal Vegetal
Figura 6.2: Classificao de SerVivo
Fonte: Elaborada pelos autores

Analisando o problema em questo (o de modelar os seres vivos), ns natu-


ralmente identificamos classes que so especializaes de classes mais ge-
nricas, e o conceito de herana da orientao a objeto nos permite imple-
mentar tal situao.

e-Tec Brasil 108 Introduo Programao Orientada a Objetos


Os animais e vegetais, antes de tudo, so seres vivos e cada subclasse herda
automaticamente os atributos e mtodos (respeitando as regras dos modifi-
cadores de acesso) da superclasse, neste caso, a classe SerVivo. Alm disso,
as subclasses podem prover atributos e mtodos adicionais para representar
suas prprias caractersticas. Por exemplo, a classe Animal poderia definir os
seguintes mtodos e atributos:

Atributos: Forma de Locomoo, Habitat, Tempo Mdio de Vida.

Mtodos: Locomover.

A herana na programao obtida especificando-se qual superclasse a sub-


classe estende. Em Java isto feito utilizando-se a palavra chave extends:

public class SerVivo {


//Definio da classe SerVivo
}
public class Animal extends SerVivo {
//Atributos e mtodos adicionais que distinguem um Animal de um
SerVivo
//qualquer
}

Em Java, todas as classes, tanto as existentes nas APIs como as definidas pe-
los programadores, automaticamente derivam de uma superclasse padro:
a classe Object.

Se uma classe no especifica explicitamente uma superclasse, como o caso


da classe SerVivo, ento podemos considerar que esta deriva diretamente de
Object, como se ela tivesse sido definida como:

public class SerVivo extends Object { ... }

Alm disso, Java permite apenas herana simples, isto , uma classe pode
estender apenas de uma nica outra classe.

Resumindo, a classe SerVivo define os atributos e mtodos que so comuns


a qualquer tipo de ser vivo. A subclasse Animal herda esses mtodos e atri-
butos, j que Animal um SerVivo , e tem que especificar apenas seus atri-
butos e mtodos especficos (Figura 6.3).

Aula 6 Reutilizao de classes 109 e-Tec Brasil


SerVivo Animal

Alimentos, Idade Habitat, Locomoo, TMV

Nascer, Alimentar, Respirar,


Crescer, Reproduzir, Morrer Locomover

Figura 6.3: Herana simples


Fonte: Elaborada pelos autores

6.3 Polimorfismo
O termo polimorfismo origina-se do grego e quer dizer o que possui v-
rias formas. Em programao est relacionado possibilidade de se usar o
mesmo nome para mtodos diferentes e capacidade que o programa tem
em discernir, dentre os mtodos homnimos, aquele que deve ser executa-
do. De maneira geral o polimorfismo permite a criao de programas mais
claros, pois elimina a necessidade de darmos nomes diferentes para mtodos
que conceitualmente fazem a mesma coisa, e tambm programas mais fle-
xveis, dos quais facilita em muito a extenso.

O polimorfismo pode ser de duas formas; esttico ou dinmico:

Polimorfismo esttico: ocorre quando na definio de uma classe cria-


mos mtodos com o mesmo nome, porm com argumentos diferentes.
Dizemos nesse caso que o mtodo est sobrecarregado (overloading).
A deciso de qual mtodo chamar tomada em tempo de compilao,
baseada nos argumentos que foram passados.

Como exemplo de polimorfismo esttico, podemos relembrar dos vrios


construtores que criamos para uma classe Crculo:

Crculo() {}
Crculo(Ponto centro, Ponto extremidade, Cor c) {
raio = new Linha(centro, extremidade, c);
cor = c;
}
Crculo (double x1, double y1, double x2, double y2, Cor c)
{
raio = new Linha(new Ponto(x1, y1), new Ponto(x2, y2), c);
cor = c ;
}

e-Tec Brasil 110 Introduo Programao Orientada a Objetos


Todos esses mtodos construtores possuem o mesmo nome, mas devem ser
diferidos entre si pelos parmetros que recebem. Quando num programa
fazemos Crculo circulo = new Crculo(linha); o compilador consegue decidir
em tempo de compilao qual mtodo chamar, nesse caso, o mtodo Crcu-
lo que recebe uma linha como parmetro.

Polimorfismo dinmico: est associado com o conceito de herana e


ocorre quando uma subclasse redefine um mtodo existente na super-
classe. Dizemos nesse caso que o mtodo foi sobrescrito (overriding)
na subclasse. A deciso de qual mtodo executar tomada somente em
tempo de execuo, como veremos mais adiante.

O polimorfismo dinmico ocorre quando uma subclasse redefine um mtodo


de sua superclasse a fim de prover a ele um comportamento mais adequado s
suas caractersticas. Vamos rever a classe animal conforme a definimos acima:

class Animal extends SerVivo{


String formaLocomoo;
String habitat;
int tempoMedioVida;
public void locomover() { ... }
}

Como nem todo ser vivo nasce, cresce, alimenta-se, respira, se reproduz e
morre da mesma maneira, razovel que queiramos redefinir todos esses
mtodos na classe Animal.

class Animal extends SerVivo{


String formaLocomocao;
String habitat;
int tempoMedioVida;
public void locomover() { ... }
public void nascer() { ... }
public void crescer() { ... }
public void alimentar() { ... }
public void respirar() { ... }
public Animal reproduzir() { ... }
public morrer() { ... }
}

Aula 6 Reutilizao de classes 111 e-Tec Brasil


Os mtodos na subclasse devem ser definidos com a mesma assinatura
do mtodo na superclasse, isto , com o mesmo nome, tipo de retorno e
argumentos.

Bem, mas a vantagem do polimorfismo dinmico no apenas a de permitir


maior flexibilidade na modelagem das classes de objetos. Para entendermos
o que h de mais fantstico nele, temos que nos atentar para o seguinte:

...
SerVivo x; Declara uma varivel x do tipo Ser Vivo
Animal y = new Animal(); Declara e inicializa uma varovel y do tipo Animal
x = y; extremamente comum e til em OO atribuirmos a uma
... varivel de um tipo base um objeto de um tipo derivado
direta ou indiretamente deste tipo base.

Tendo isso em mente, poderamos definir um mtodo da seguinte forma:

void analisaSerVivo (SerVivo ser) {


//Este mtodo faz a anlise clnica de qualquer SerVivo e para isso
precisa pedir
//ao animal que respire
ser.respirar();
...
}

e num determinado momento cham-lo desta maneira:

...
Animal animal = new Animal();
analisaSerVivo(animal);
...

Nesse caso fica a questo: se o mtodo tem um argumento declarado como


SerVivo e recebe como parmetro um objeto Animal, quando tiver que exe-
cutar o mtodo respirar(), qual mtodo ser efetivamente chamado, o mto-
do respirar definido em SerVivo ou o mtodo respirar definido em Animal?

e-Tec Brasil 112 Introduo Programao Orientada a Objetos


O mtodo executado ser o mais apropriado, isto , aquele pertencente ao
objeto que foi passado varivel, nesse caso, o mtodo respirar existente
em Animal.

Isto o polimorfismo dinmico, que recebe este nome porque o compilador


no consegue nesses casos decidir em tempo de compilao qual mtodo
chamar, j que uma varivel de um tipo base pode receber qualquer tipo
derivado. Essa deciso tomada apenas em tempo de execuo, quando a
o Java poder saber qual objeto a varivel est de fato referenciando.

Se o polimorfismo dinmico no existisse, seria necessrio um mtodo anali-


saSerVivo para cada ser vivo existente e, sempre que um ser vivo novo fosse
acrescentado, o cdigo teria que ser modificado. Da forma como aqui est, o
mtodo continuar funcionando para qualquer ser vivo existente no projeto.

6.4 Criao de um objeto de


uma subclasse e o ponteiro super
Objetos so sempre construdos da classe mais alta na hierarquia em direo
mais baixa, isto , da classe Object at a classe que est sendo instanciada
com o operador new. Isso garante que uma subclasse pode sempre contar
com a construo apropriada de sua superclasse.

Por padro, so chamados construtores default das superclasses (aqueles


sem argumentos) quando a superclasse criada. Se quisermos mudar esse
comportamento, devemos usar o ponteiro super.

O ponteiro super uma referncia para a superclasse e est disponvel impli-


citamente em qualquer classe que possua um ancestral. Como vimos, os m-
todos na superclasse podem ser sobrescritos na subclasse atravs da criao,
nesta, de mtodos com a mesma assinatura do mtodo da superclasse. Com
o super possvel acessar um mtodo especfico da superclasse quando este
foi sobrescrito pela subclasse. Por exemplo, vamos recordar a classe Animal
definida acima, que implementava sua prpria verso de todos os mtodos
de sua superclasse, isto , SerVivo:

Aula 6 Reutilizao de classes 113 e-Tec Brasil


class Animal extends SerVivo{
String formaLocomoo;
String habitat;
int tempoMedioVida;
public void locomover() { ... }
public void nascer() { ... }
public void crescer() { ... }
public void alimentar() { ... }
public void respirar() { ... }
public Animal reproduzir() { ... }
public morrer() { ... }
}

Vamos supor que num determinado momento quisssemos acessar o m-


todo alimentasse tal qual como foi implementado na superclasse. Para isso
devemos usar o ponteiro super da seguinte maneira:

...
Acessa o mtodo alimentar-se de SerVivo.
super.alimentar();
...

Bem, mas como afinal de contas podemos mudar o comportamento padro


de quando uma subclasse instanciada para os construtores default serem
executados?

Um dos usos mais comuns da referncia super chamar um construtor de


uma superclasse. Para isso, este deve ser acrescentado na primeira linha do
construtor da subclasse. Por exemplo, se a classe SerVivo tiver um construtor
que receba a idade do ser vivo como parmetro

SerVivo (int idade){

this.idade = idade;
}

e queremos que este construtor seja chamado quando a classe Animal for
instanciada ao invs do construtor padro SerVivo(), fazemos

e-Tec Brasil 114 Introduo Programao Orientada a Objetos


Animal (int idade){
super (idade);
...
}

6.5 Mtodo final e classe final


Mtodo final: mtodo definido como final no pode ser sobrescrito.
Geralmente isso feito com o intuito de garantir segurana, prevenindo
que mtodos vitais, tais como aqueles que fazem autenticao de usu-
rios, sejam redefinidos.

Exemplo:

public final boolean checkPassword(String p) {


...
}

Classe final: uma classe declarada como final no poder ser estendida
por outra classe. Esta uma forte deciso no projeto e significa que a
classe autossuficiente para dispor de todos os seus requisitos atuais e
futuros. Classes definidas como final podem ajudar o compilador a produ-
zir cdigos mais otimizados. Como uma classe final no pode ser estendi-
da, quando o compilador encontra uma chamada a algum mtodo dessa
classe ele no gerar o cdigo necessrio para execuo do polimorfismo
dinmico, o qual acarreta um overhead durante a execuo, mas sim far
um acoplamento esttico com o mtodo em questo.

Aula 6 Reutilizao de classes 115 e-Tec Brasil


Resumo
Nesta aula vimos os principais conceitos que diferenciam a linguagem orien-
tada a objetos das demais linguagens de programao (herana, polimorfis-
mo e outros). Vimos que o principal benefcio da herana a reutilizao de
cdigo. A herana permite ao programador criar uma nova classe progra-
mando somente as diferenas existentes na subclasse em relao super-
classe. Isso se ajusta bem forma como compreendemos o mundo real, no
qual conseguimos identificar naturalmente essas relaes.

Pudemos compreender que o termo polimorfismo origina-se do grego e


quer dizer o que possui vrias formas. Em programao est relacionado
possibilidade de se usar o mesmo nome para mtodos diferentes e ca-
pacidade que o programa tem em discernir, dentre os mtodos homnimos,
aquele que deve ser executado. Vimos tambm os dois tipos de polimorfis-
mo: esttico e dinmico.

Aprendemos ainda como criar objetos de subclasse e como utilizar o mtodo


final e a classe final.

Atividades de aprendizagem
1. Criar uma estrutura hierrquica que contenha as seguintes classes: Vecu-
lo (classe abstrata), Bicicleta e Automvel. Os mtodos da classe Veculo
so todos abstratos e possuem a seguinte assinatura:

listarVerificacoes()
ajustar()
limpar()

Estes mtodos so implementados nas subclasses Automvel e Bicicleta.


Acrescentar na classe Automvel o mtodo mudarOleo()

2. Seria possvel evitar completamente a necessidade de sobreposio de


mtodos criando mtodos em classes descendentes que tenham assi-
naturas diferentes. Por exemplo, a classe Pessoa poderia ter o mtodo
imprimePessoa para imprimir seus campos, e a classe Aluno, que estende
a classe Pessoa, poderia ter o mtodo imprimeAluno para imprimir seus
campos. Que vantagens e desvantagens esta abordagem teria sobre a
sobreposio de mtodos ?

e-Tec Brasil 116 Introduo Programao Orientada a Objetos


3. Explique, com suas palavras, por que construtores de superclasses no
so herdados por subclasses.

4. Crie uma classe Equipamento com dois atributos privados.

5. Crie uma classe Computador com dois atributos sua escolha. A classe
Computador dever herdar tudo da classe Equipamento.

6. Crie os mtodos de acesso e de modificao para todos os atributos de-


finidos em ambas as classes.

7. Crie uma classe TestaEquipamento, com o mtodo main, crie nela um


objeto da classe Equipamento e instancie os dois atributos que voc de-
clarou na classe Equipamento. Crie tambm um objeto da classe Compu-
tador, utilizando os dois atributos declarados na prpria classe e os dois
herdados da classe Equipamento.

8. O mtodo main deve exibir as informaes dos dois objetos criados.

Poste no AVEA as solues das questes.

Aula 6 Reutilizao de classes 117 e-Tec Brasil


Referncias
BARNES, David J.; KOLLING, Michael. Programao orientada a objetos com Java:
uma introduo prtica usando o BLUEJ. So Paulo: Makron Books, 2004.

BORATTI, Isaas Camilo. Programao orientada a objetos em Java. Florianpolis:


Visual Books, 2007.

PRESMAN, Rogers. Engenharia de software. So Paulo: Makron Books, 1995.

SIERRA, Kathy; BATES, Bert. Use a cabea Java. Rio de Janeiro: Alta Books, 2007.

SANTOS, Rafael. Introduo programao orientada a objetos usando Java. Rio


de Janeiro: Campus, 2003.

e-Tec Brasil 118 Introduo Programao Orientada a Objetos


Introduo Programao
Orientada a Objetos
Rogrio da Silva Batista
Rafael Arajo de Moraes

Curso Tcnico em Informtica

ISBN 978-85-67082-01-1

9 788567 082011

Você também pode gostar