Escolar Documentos
Profissional Documentos
Cultura Documentos
Orientada a Objetos
Rogrio da Silva Batista
Rafael Arajo de Moraes
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
Inclui bibliografia
ISBN: 978-85-67082-01-1
CDU: 681.31:519.689
Apresentao 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
5 e-Tec Brasil
Sumrio
Palavra do professor-autor 9
Apresentao da disciplina 11
Projeto instrucional 13
7 e-Tec Brasil
3.8 Encapsulamento 69
3.9 Criando objetos e acessando dados encapsulados 71
3.10 Criando aplicaes em Java 74
Referncias 118
e-Tec Brasil 8
Palavra do professor-autor
Caro estudante,
Um grande abrao!
9 e-Tec Brasil
Apresentao da disciplina
11 e-Tec Brasil
Projeto instrucional
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
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.
Sistema
Windows Linux
Operacional
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-
Linux Windows
100000000
101010100
Compilador JVM 011111110
111100110
Programa.java Programa.class
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.
Voc dever digitar o cdigo acima em algum editor de textos de sua preferncia.
Atividades de aprendizagem
1. Explique qual a funo da Mquina Virtual Java (JVM).
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.
Objetivos
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.
idade = 15;
int a,b;
int idade = 15; // Isto uma inicializao
double d = 3.1415;
int i = d; // no compila
O mesmo ocorre no seguinte trecho:
int i = 3.14;
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
long x = 10000;
int i = (int) x;
Alguns castings aparecem tambm:
float x = 0.0;
float x = 0.0f;
A letra f, que pode ser maiscula ou minscula, indica que aquele literal
deve ser tratado como float.
double d = 5;
float f = 3;
float x = f + (float) d;
2.4 Operadores
int n = 5;
int a = 2 * n; // a = 10
x += 4; // equivalente a x = x + 4;
x /= 10; // equivalente a x = x/10;
Incremento e decremento
int a = 12;
a++ // a agora vale 13
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
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;
Exemplos:
int j = 3 * 10 % 7;
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.
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:
Declare constantes com nomes descritivos, escritos com todas as letras mai-
sculas. Separe nomes internos com underscores ( _ ). Exemplos:
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:
Exemplo:
if ( fim = = true )
System.out.println(Trmino!);
else
System.out.println(Continuando...);
Exemplo :
Exemplo:
int i = 0;
while(i < 10) {
System.out.println(i);
i = i + 1;
}
Sintaxe:
do {
comandos;
} while ( expressao_booleana );
Exemplo:
int i = 1;
do {
System.out.println(i);
i = i + 1;
} while(i >= 10);
Sintaxe:
Exemplo:
Exemplo:
int i = 2;
for ( ; i<10 ; ){
comandos;
i++;
}
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.
int i;
for (i = 0; i < 10; i++) {
System.out.println(ol!);
}
System.out.println(i);
Atividades de aprendizagem
1. Analise as seguintes declaraes de variveis e assinale (V) para Verdadei-
ro e (F) para Falso
a) ( ) byte x = 300;
d) ( ) double d = 20;
e) ( ) char c = 25;
h) ( ) String b = 1
i) ( ) float x = 2.7;
j) ( ) int a = false;
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.
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
Objetivos
3.1 Introduo
Iniciaremos nossa aula perguntando: Por que Orientao a Objetos? Qual a
vantagem da Programao Orientada Objetos em relao Programa-
o Estruturada?
modularidade: uma vez criado, um objeto pode ser passado por todo o
sistema;
reuso: uma vez criado, um objeto pode ser utilizado em outros progra-
mas;
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.
Lampada
- estadodaLmpada
- acende ( )
- apaga ( )
- mostraEstado ( )
Figura 3.1: Representao do modelo Lampada, seus dados e operaes
Fonte: Elaborada pelos autores
ContaBancariaSimplificada
- nomeDoCorrentista
- saldo
- contaEspecial
- abreConta (nome, depsito, Especial
- abreContaSimples (nome)
- deposita (valor)
- retira (valor)
- mostraDados ( )
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 .
Um livro.
Uma data.
Uma festa.
Um carro.
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.
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.
Exemplo 1
Atributos (Estado):
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
Servios (Comportamento)
Informar horas;
Informar data;
Corrigir horas;
Trocar pilha.
Exemplo 3
Nome do aluno;
Nmero de matrcula;
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 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.
nmero da conta;
nome do cliente;
limite.
O que toda conta faz e importante para ns? Isto , o que gostaramos de
pedir 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
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.
Servio solicitado
Acelerar
Emissor Receptor
motorista carro
Exemplo 1
umAluno.estude();
Exemplo 2
valorConta = umHotel.fornecaValorConta(umCliente);
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
{
Usando a listagem acima como exemplo, podemos ver outras regras sobre
declarao de mtodos em classes em Java:
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.
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.
Triangulo t;
Esta sentena cria uma varivel t do tipo Triangulo. Podemos dizer que t
apenas uma referncia para a classe Triangulo.
Triangulo t1;
t1 = new Triangulo();
Triangulo t2;
t2 = new Triangulo;
t1 = new Triangulo();
Memria Triangulo
Triangulo
t1 t2
Triangulo t3 = t1;
Triangulo
t3 t1 t2
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);
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-
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.
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?
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
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
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
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.
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 }
Objetivos
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.
class Conta {
int numero;
Cliente titular;
double saldo;
double limite;
// construtor
Conta() {
System.out.println(Construindo uma conta.);
}
// ..
}
Objetivos
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.
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.
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.3b: Classe simulador de caixa de banco com vrias instncias continuao
Fonte: Elaborada pelos autores
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.
Figura 5.9a: Mtodos estticos de outras classes chamados a partir do mtodo main
Fonte: Elaborada pelos autores
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.
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.
Objetivos
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.
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
SER VIVO
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:
Ser Vivo
Animal Vegetal
Figura 6.2: Classificao de SerVivo
Fonte: Elaborada pelos autores
Mtodos: Locomover.
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.
Alm disso, Java permite apenas herana simples, isto , uma classe pode
estender apenas de uma nica outra classe.
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.
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 ;
}
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.
...
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.
...
Animal animal = new Animal();
analisaSerVivo(animal);
...
...
Acessa o mtodo alimentar-se de SerVivo.
super.alimentar();
...
this.idade = idade;
}
e queremos que este construtor seja chamado quando a classe Animal for
instanciada ao invs do construtor padro SerVivo(), fazemos
Exemplo:
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.
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()
5. Crie uma classe Computador com dois atributos sua escolha. A classe
Computador dever herdar tudo da classe Equipamento.
SIERRA, Kathy; BATES, Bert. Use a cabea Java. Rio de Janeiro: Alta Books, 2007.
ISBN 978-85-67082-01-1
9 788567 082011