Escolar Documentos
Profissional Documentos
Cultura Documentos
Aula
16.01.2013
3.
Comeando
a
programas
em
Java
-
continuao
-
Conforme
discutido
na
aula
anterior,
vamos
iniciar
nossa
programao
em
Java
utilizando
o
bloco
de
notas
e
as
linhas
de
comando
do
DOS.
Para
mostrarmos
a
lgica
de
compilao
e
execuo,
vamos
escrever
a
classe
HelloWorld
no
bloco
de
notas
e
salva-la
como
HelloWorld.java
class
HelloWorld
{
public
static
void
main(String[]
args)
{
System.out.println("Hello
World!");
}
}
-
Digamos
que
voc
tenha
instalado
o
JDK
em
C:\Java\jdk
e
o
programa
acima
em
C:\Java\programas
(e,
de
forma
similar,
o
JRE
em
C:\Java\jre).
Para
compilarmos
nosso
HelloWorld
devemos
abrir
o
prompt
de
comando
e
utilizar
o
comando
javac.
Para
execuo
utilizamos
o
comando
java.
Observe:
-
Na
aula
anterior
foi
passado
um
exerccio
referente
criao
do
modelo
Data.
Convertendo
o
modelo
para
uma
classe
em
Java,
teramos:
class
DataSimples
{
byte
dia,
ms;
short
ano;
void
inicializaDataSimples(byte
d,
byte
m,
short
a)
{
if
dataVlida(d,m,a)
{
dia
=
d;
ms
=
m;
ano
=
a;
}
else
{
dia
=
0;
ms
=
0;
ano
=
0;
}
}
boolean
dataVlida(byte
d,
byte
m,
short
a)
{
if
((d
>=
1)
&&
(d
<=
31)
&&
(m
>=
1)
&&
(m
<=
12))
return
true;
else
return
false;
}
void
mostraDataSimples()
{
!"#$%&'("')#*+#&',#+-+./(&'("'0"%"*+#/'1'!),0'
System.out.print(dia);
2/.34(/("'("'!+5#.+/*'637/#/*8'9/:("8');/$/*'"'<3%=(+./*'("'0"%"*+#/'
System.out.print(/);
!3%*&>'!+5#.+/'(/'!&7?3$/@A&'
System.out.print(ms);
B+*.+?4+#/>'C4D&%+$7&*'"'E%&D%/7/@A&'FF'''
System.out.print(/);
System.out.print(ano);
E%&-"**&%'>'G3+4H"%7"')#I/*'J/K'9+4L/'
}
'
}
'
C34/'MMNOPNMOQQ'
-
Escreva
o
cdigo
acima
no
bloco
de
notas
(escreva
o
c' digo
linha
a
linha,
evite
copiar
e
colar)
e
compile.
Note
que
estamos
criando
apenas
uma
classe,
no
tem
mtodo
main(),
logo
no
devemos
!"#$%&'()*+%#)#,-%.-)&)/#'�)1)#2#3%*45*6)(7%'
execut-la.
'
-
V'amos
criar
objetos
(instncias)
da
classe
DataSimples.
Para
isso,
abra
um
novo
documento
no
R'J/7&*'.%+/%'&ST"$&*'(/'.4/**"'8)4)95&,:'/N'
bloco
de
n'otas
e
eR'CS%/'&'S4&.&'("'#&$/*'"'.&?+"'&'.U(+D&'/'*"D3+%N'9/4L"'&'/%V3+L&'.&7&'8'&%8)4)95&,:'/N;)1)8'
screva
a
seguir.
Salve
o
arquivo
como
DemoDataSimples.java,
compile-o
e
execute-o.
Observe
o
.&7?+4"R&'"'";".3$"R&N'WS*"%L"'&'%"*34$/(&N'
resultado.
'
3:)//#8'&%8)4)95&,:'/#<#
###,6=:53#/4)453#1%5+#&)5*>94-5*.?@#)-.6&'*4%/A#<# #
#
#
8)4)95&,:'/#B%;'#C#*'D#8)4)95&,:'/>AE#
#
#
#
#
=F4'#6&85)G6&HI/E#/B%-4#6&J*%E#
#
6&85)#C#KKE#6&HI/#C#LE#6&J*%#C#KMNNE#
#
#
#
#
B%;'"5*535):5O)8)4)95&,:'/>6&85)G6&HI/G6&J*%AE#
#
B%;'"&%/4-)8)4)95&,:'/>AE# #
#
#
###P#
P#
#
#
#
#
'
'
QR'-3S35%#NT'2/@/'&'V3"'*"'?"(">'
Exerccio
1)A'!&4&V3"'37/'(/$/'*7%'LX4+(/N'C&'";".3$/%'&'?%&D%/7/8'&'V3"'L/+'/.&#$"."%Y'
:
Faa
o
que
se
pede:
'
a)
'Coloque
=A'
uma
data
no
vlida.
+#*$Z#.+/'
Ao
executar
o
programa,
o
que
vai
acontecer?
!%+"'
37/'
*"D3#(/'
[&ST"$&\'
(/' .4/**"'
8)4)95&,:'/8'
/' +#+.+/4+K"' .&7' /' (/$/' (&' *"3'
b)
/#+L"%*X%+&'"'"7'*"D3+(/'/'7&*$%"N''
Crie
uma
segunda
instncia
(objeto)
da
classe
DataSimples,
a
inicialize
com
a
data
do
seu
aniversrio
' e
em
seguida
a
mostre.
]NQ'
^&(+-+./(&%"*'("'/."**&'
'
R' !&7&' (+*.3$+(&' /#$"%+&%7"#$"8' 37/' (/*' ?%+#.+?/+*' L/#$/D"#*' (&' ?/%/(+D7/' &%+"#$/(&' /'
&ST"$&*'I'/'?&**+S+4+(/("'("'"#./?*34/%'./7?&*'"'7I$&(&*'./?/K"*'("'7/#+?34/%'"**"*'./7?&*'"7'37/'
2
.4/**"N' _' ("*"TXL"4' $/7SI7' V3"' &*' ./7?&*' (/*' .4/**"*' *"T/7' &.34$&*' (&*' ?%&D%/7/(&%"*' ?/%/' "L+$/%'
7/#+?34/@A&'(+%"$/'"7'L"K'("'?&%'+#$"%7I(+&'(&*'7I$&(&*'(/'.4/**"'
'
R'E/%/'+#+.+/%'#&**&*'"*$3(&*'/'%"*?"+$&'(&*'7&(+-+./(&%"*'("'/."**&8'L/7&*'+#*"%+%'&'*"D3+#$"'
$%".H&'("'.U(+D&'#/'.4/**"'8'&%8)4)95&,:'/>'
3.1
Modificadores
de
acesso
-
Como
discutido
anteriormente,
uma
das
principais
vantagens
do
paradigma
orientado
a
objetos
a
possibilidade
de
encapsular
campos
e
mtodos
capazes
de
manipular
esses
campos
em
uma
classe.
desejvel
tambm
que
os
campos
das
classes
sejam
ocultos
dos
programadores
para
evitar
manipulao
direta
em
vez
de
por
intermdio
dos
mtodos
da
classe.
-
Para
iniciar
nossos
estudos
a
respeito
dos
modificadores
de
acesso,
vamos
inserir
o
seguinte
trecho
de
cdigo
na
classe
DemoDataSimples:
hoje.dia
=
0;
hoje.ms
=
1;
hoje.ano
=
2001;
hoje.mostraDataSimples();
Fazendo
isso
ns
estamos
alterando
diretamente
os
atributos
do
objeto
hoje.
Perceba
que
a
data
no
vlida,
porm,
ao
executar
o
programa,
o
que
vai
aparecer?
-
Para
evitar
problemas
desse
tipo,
usaremos
modificadores
de
acesso.
Inicialmente,
vamos
aprender
dois
modificadores:
a)
public
o
campo
ou
mtodo
da
classe
declarado
com
esse
modificador
pode
ser
acessado
ou
executado
a
partir
de
qualquer
outra
classe
b)
private
o
campo
ou
mtodo
declarado
com
esse
modificador
s
pode
ser
acessado,
modificado
ou
executado
por
mtodos
da
mesma
classe,
sendo
oculto
quando
o
programador
usar
instncias
dessa
classe
ou
criar
classes
herdeiras
ou
derivadas
-
Na
classe
DataSimples,
vamos
declarar
os
trs
atributos
como
private
(por
exemplo:
private
short
ano;).
Salve
a
alterao
na
classe
DataSimples
e
a
compile
novamente.
Agora,
tente
executar
a
classe
DemoDataSimples,
o
que
aconteceu?
-
Dessa
forma,
estamos
protegendo
os
campos
(atributos)
da
classe
DataSimples!
-
Por
outro
lado,
os
mtodos
geralmente
so
declarados
como
pblicos!
Altere
a
classe
DataSimples
de
forma
que
todos
os
mtodos
sejam
public
(observe
que,
nesse
caso,
nenhuma
mudana
deve
ser
observada)
-
Bom,
digamos
agora
que
queiramos
ver
o
valor
somente
do
campo
dia
(ao
invs
do
formato
dia/ms/ano).
Podemos
criar
o
seguinte
mtodo
na
classe
DataSimples:
O
mtodo
retornaDia(),
ao
ser
chamado,
retorna
o
valor
do
dia
em
questo!
Para
testar
esse
mtodo
vamos
at
a
classe
DemoDataSimples
para
escrever
o
seguinte
cdigo:
System.out.println(hoje.retornaDia());
O
comando
acima
est
mandando
escrever
o
retorno
do
mtodo
retornaDia()
do
objeto
hoje.
Dvida:
o
cdigo
abaixo
funcionaria?
Por
qu?
System.out.println(hoje.dia);
Exerccio
2:
Faa
mtodos
de
retorno
semelhante
para
o
ms
e
o
ano
e
teste-os.
-
Para
finalizar,
imagine
que
queiramos
criar
um
mtodo
que
recebe
uma
instncia
da
prpria
classe
DataSimples
como
argumento
e
verificar
se
a
data
representada
pela
classe
e
pela
instncia
que
'
'
'
'
'
9F/4'&"%64",-5*4:*>B%;'"+5)AE'
'
QR'-3S35%#K>'2/@/'7I$&(&*'("'%"$&%#&'*"7"4H/#$"'?/%/'&'75*'"'&'/#&'"'$"*$"R&*N'
'
'
'
R'E/%/'-+#/4+K/%8'+7/D+#"'V3"'V3"+%/7&*'.%+/%'37'7I$&(&'V3"'%"."S"'37/'+#*$Z#.+/'(/'?%U?%+/'
.4/**"'8)4)95&,:'/'.&7&'/%D37"#$&'"'L"%+-+./%'*"'/'(/$/'%"?%"*"#$/(/'?"4/'.4/**"'"'?"4/'+#*$Z#.+/'V3"'
foi
passada
mesma.
Observe-o
abaixo
com
ateno!
Em
seguida,
incorpore
esse
mtodo
classe
-&+'
?/**/(/'
I'
/' a
7"*7/N'
WS*"%L"R&'
/S/+;&'
.&7'
/$"#@A&a'
)7'
*"D3+(/8'
+#.&%?&%"'
"**"'
7I$&(&'
d'
.4/**"'
DataSimples.
8)4)95&,:'/N'
''
##
#
#
#
#
#
##=%%:')*#UV.6):#>8)4)95&,:'/#%64-)8)4)95&,:'/A#<#
#
5W#>>+5)#CC#%64-)8)4)95&,:'/"+5)A#XX#>&I/#CC#%64-)8)4)95&,:'/"&I/A#XX#>)*%#CC#%64-)8)4)95&,'/")*%AA#
###
#
-'46-*#4-6'E#
#
':/'#
#
#
-'46-*#W):/'E#
##P##
#
#
'
':/'#
System.out.println(As
datas
so
iguais);
####9F/4'&"%64",-5*4:*>ZJ/#+)4)/#/7%#+5W'-'*4'/ZAE#
else
System.out.println(As
datas
so
diferentes);
'
'
-
O
teste
desse
mtodo
pode
ser
feito
da
seguinte
forma
na
classe
DemoDataSimples
'
W'$"*$"'("**"'7I$&(&'?&("'*"%'-"+$&'(/'*"D3+#$"'-&%7/'#/'.4/**"'8'&%8)4)95&,:'/>'
'
(considerando
meuNiver
um
objeto
da
classe
em
questo):
#
5W#>B%;'"UV.6):>5*+','*+I*35)8%Y-)/5:AA#
#
####9F/4'&"%64",-5*4:*>ZJ/#+)4)/#/7%#5.6)5/ZAE#
if
(hoje.Igual(meuNiver))
-
Para
reforar
a
idia
de
referncias
e
instncias
e
para
conhecer
a
palavra-chave
null,
vamos
analisar
a
classe
Demo2DataSimples.
class
Demo2DataSimples
{
public
static
void
main(String[]
argumentos)
{
//
declaramos
duas
referncias
a
instncias
da
classe
DataSimples
no
inicializadas
DataSimples
data1;
DataSimples
data2;
DataSimples
data5
=
null;
//inicializamos
data5
com
null
//criamos
duas
instncias
da
classe
Data
DataSimples
data3
=
new
DataSimples();
DataSimples
data4
=
new
DataSimples();
byte
d,m;
short
a;
//variveis
auxiliares
d
=
4;
m
=
3;
a
=
2011;
data3.inicializaDataSimples(d,m,a);
d
=
11;
m
=
11;
a
=
2011;
data4.inicializaDataSimples(d,m,a);
//podemos
ter
duas
referncias
para
a
mesma
instncia:
data1
=
data3;
data1.mostraDataSimples();
//mostra
4/3/2011
//a
linha
abaixo
resulta
em
erro,
ja
que
nao
tem
instancia
para
a
referencia
data2.mostraDataSimples();
//a
linha
abaixo
nao
resulta
em
erro
de
compilacao,
mas
resulta
em
erro
em
tempo
de
execucao
data5.mostraDataSimples();
}
}
Detalhes
importantes:
-
Podemos
criar
inicialmente
s
referncias
s
instncias
(data1
e
data2)
-
Podemos
inicializar
referncias
com
null
(data5)
a
classe
compilar,
mas
poder
dar
erro
em
tempo
de
execuo
-
Podemos
ter
duas
referncias
apontando
para
a
mesma
instncia
(data1
e
data3)
-
Caso
uma
referncia
no
esteja
associada
a
alguma
instncia,
a
classe
no
compilar
(data2)
Faa
1:
Tente
compilar
a
classe
e
verifique
o
erro
referente
no
inicializao
de
data2.
Comente
a
linha,
salve
e
compile
novamente
(
para
compilar!).
Agora,
tente
executar
e
verifique
um
novo
erro
(erro
em
tempo
de
execuo
ocasionado
pelo
fato
de
que
data5
foi
inicializado
com
null).
Novamente,
comente
a
linha
em
questo
e
salve.
Observe
que
agora
a
classe
ir
executar
normalmente.
-
Na
chamada
do
mtodo
inicializaDataSimples()
podemos
passar
os
argumentos
diretamente
utilizando
a
operao
de
cast.
Faa
2:
vide
o
exemplo
abaixo
(cast)
e
faa
testes
na
classe.
data3.inicializaDataSimples((byte)4,(byte)3,(short)2011);
Exerccio
3:
com
base
nos
modelos
feitos
em
sala,
faa:
a) Crie
a
classe
Lampada
e,
e
seguida,
crie
DemoLampada
para
teste.
b) Crie
a
classe
ContaBancariaSimplificada
e,
e
seguida,
crie
DemoContaBancariaSimplificada
para
teste.