Você está na página 1de 5

Universidade

Estadual do Piau - UESPI


Centro de Tecnologia e Urbanismo - CTU
III Oficina de Frias
Curso de Programao JAVA


Ministrante: Prof. Msc. Guilherme Enas Vaz Silva



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
!"#$%&'()*+%#)#,-%.-)&)/#'&#0)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:

public byte retornaDia() {



return dia;
}


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.

Você também pode gostar