curso java 16.01.2013

5
1 Universidade Estadual do Piauí UESPI Centro de Tecnologia e Urbanismo CTU III Oficina de Férias Curso de Programação JAVA Ministrante: Prof. Msc. Guilherme Enéas Vaz Silva Aula 16.01.2013 3. Começando a programas em Java continuação Conforme discutido na aula anterior, vamos iniciar nossa programação em Java utilizando o bloco de notas e as linhas de comando do DOS. Para mostrarmos a lógica de compilação e execução, vamos escrever a classe HelloWorld no bloco de notas e salvala 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 execução utilizamos o comando java. Observe: Na aula anterior foi passado um exercício referente à criação do modelo Data. Convertendo o modelo para uma classe em Java, teríamos:

Upload: wesley-lima

Post on 25-Dec-2015

1 views

Category:

Documents


0 download

DESCRIPTION

java

TRANSCRIPT

Page 1: Curso Java 16.01.2013

  1  

Universidade  Estadual  do  Piauí  -­‐  UESPI  Centro  de  Tecnologia  e  Urbanismo  -­‐  CTU  III  Oficina  de  Férias    Curso  de  Programação  JAVA                                Ministrante:  Prof.  Msc.  Guilherme  Enéas  Vaz  Silva  

   

Aula  16.01.2013    

3.  Começando  a  programas  em  Java  -­‐  continuação    

-­‐   Conforme  discutido  na   aula   anterior,   vamos   iniciar   nossa   programação   em   Java   utilizando  o  bloco  de  notas  e  as   linhas  de  comando  do  DOS.  Para  mostrarmos  a   lógica  de  compilação  e  execução,  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  execução  utilizamos  o  comando  java.  Observe:                                                   -­‐  Na  aula  anterior  foi  passado  um  exercício  referente  à  criação  do  modelo  Data.  Convertendo  o  modelo  para  uma  classe  em  Java,  teríamos:        

Page 2: Curso Java 16.01.2013

  2  

class  DataSimples  {      byte  dia,  mês;        short  ano;            void  inicializaDataSimples(byte  d,  byte  m,  short  a)  {     if  dataÉVálida(d,m,a)  {       dia  =  d;      mês  =  m;      ano  =  a;        }             else  {       dia  =  0;      mês  =  0;      ano  =  0;     }      }        boolean  dataÉVálida(byte  d,  byte  m,  short  a)  {     if  ((d  >=  1)  &&  (d  <=  31)  &&  (m  >=  1)  &&  (m  <=  12))        return  true;     else        return  false;      }          void  mostraDataSimples()  {     System.out.print(dia);     System.out.print(“/”);     System.out.print(mês);     System.out.print(“/”);     System.out.print(ano);      }  }       -­‐  Escreva  o  código  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,   não   tem  método  main(),   logo   não   devemos  executá-­‐la.         -­‐  Vamos  criar  objetos  (instâncias)  da  classe  DataSimples.  Para  isso,  abra  um  novo  documento  no  bloco  de  notas  e  escreva  a  seguir.  Salve  o  arquivo  como  DemoDataSimples.java,  compile-­‐o  e  execute-­‐o.  Observe  o  resultado.    

        Exercício  1:  Faça  o  que  se  pede:     a)  Coloque  uma  data  não  válida.  Ao  executar  o  programa,  o  que  vai  acontecer?     b)   Crie   uma   segunda   instância   (objeto)   da   classe  DataSimples,   a   inicialize   com   a   data   do   seu  aniversário  e  em  seguida  a  mostre.      

!"#$%&'("')#*+#&',#+-+./(&'("'0"%"*+#/'1'!),0'2/.34(/("'("'!+5#.+/*'637/#/*8'9/:("8');/$/*'"'<3%=(+./*'("'0"%"*+#/'!3%*&>'!+5#.+/'(/'!&7?3$/@A&'B+*.+?4+#/>'C4D&%+$7&*'"'E%&D%/7/@A&'FF'''E%&-"**&%'>'G3+4H"%7"')#I/*'J/K'9+4L/''

'C34/'MMNOPNMOQQ'

'!"#$%&'()*+%#)#,-%.-)&)/#'&#0)1)#2#3%*45*6)(7%''' R'J/7&*'.%+/%'&ST"$&*'(/'.4/**"'8)4)95&,:'/N'' R'CS%/'&'S4&.&'("'#&$/*'"'.&?+"'&'.U(+D&'/'*"D3+%N'9/4L"'&'/%V3+L&'.&7&'8'&%8)4)95&,:'/N;)1)8'.&7?+4"R&'"'";".3$"R&N'WS*"%L"'&'%"*34$/(&N''

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"'*"'?"(">'' )A'!&4&V3"'37/'(/$/'*7%'LX4+(/N'C&'";".3$/%'&'?%&D%/7/8'&'V3"'L/+'/.&#$"."%Y'' =A' !%+"' 37/' *"D3#(/' +#*$Z#.+/' [&ST"$&\' (/' .4/**"'8)4)95&,:'/8' /' +#+.+/4+K"' .&7' /' (/$/' (&' *"3'/#+L"%*X%+&'"'"7'*"D3+(/'/'7&*$%"N''']NQ' ^&(+-+./(&%"*'("'/."**&'' R' !&7&' (+*.3$+(&' /#$"%+&%7"#$"8' 37/' (/*' ?%+#.+?/+*' L/#$/D"#*' (&' ?/%/(+D7/' &%+"#$/(&' /'&ST"$&*'I'/'?&**+S+4+(/("'("'"#./?*34/%'./7?&*'"'7I$&(&*'./?/K"*'("'7/#+?34/%'"**"*'./7?&*'"7'37/'.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&,:'/>''

# B%;'"+5)#C#ME## B%;'"&I/#C#NE## B%;'")*%#C#KMMNE## B%;'"&%/4-)8)4)95&,:'/>AE##'

' 2/K"#(&' +**&' #U*' "*$/7&*' /4$"%/#(&' (+%"$/7"#$"' &*' /$%+S3$&*' (&' &ST"$&'B%;'N' E"%."S/' V3"' /'(/$/'#A&'I'LX4+(/8'?&%I78'/&'";".3$/%'&'?%&D%/7/8'&'V3"'L/+'/?/%"."%Y'''' R' E/%/' "L+$/%' ?%&S4"7/*' ("**"' $+?&8' 3*/%"7&*' 7&(+-+./(&%"*' ("' /."**&N' F#+.+/47"#$"8' L/7&*'/?%"#("%'(&+*'7&(+-+./(&%"*>'

Page 3: Curso Java 16.01.2013

  3  

3.1   Modificadores  de  acesso     -­‐   Como   discutido   anteriormente,   uma   das   principais   vantagens   do   paradigma   orientado   a  objetos  é  a  possibilidade  de  encapsular  campos  e  métodos  capazes  de  manipular  esses  campos  em  uma  classe.   É   desejável   também  que   os   campos   das   classes   sejam   ocultos   dos   programadores   para   evitar  manipulação  direta  em  vez  de  por  intermédio  dos  métodos  da  classe.     -­‐  Para   iniciar  nossos  estudos  a  respeito  dos  modificadores  de  acesso,  vamos   inserir  o  seguinte  trecho  de  código  na  classe  DemoDataSimples:    

  hoje.dia  =  0;     hoje.mês  =  1;     hoje.ano  =  2001;     hoje.mostraDataSimples();      

  Fazendo   isso   nós   estamos   alterando   diretamente   os   atributos   do   objeto  hoje.   Perceba   que   a  data  não  é  válida,  porém,  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  método   da   classe   declarado   com   esse  modificador   pode   ser  acessado  ou  executado  a  partir  de  qualquer  outra  classe       b)  private  –  o  campo  ou  método  declarado  com  esse  modificador  só  pode  ser  acessado,  modificado   ou   executado   por   métodos   da   mesma   classe,   sendo   oculto   quando   o   programador   usar  instâncias  dessa  classe  ou  criar  classes  herdeiras  ou  derivadas       -­‐  Na  classe  DataSimples,  vamos  declarar  os   três  atributos  como  private   (por  exemplo:  private  short  ano;).   Salve  a  alteração  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   métodos   geralmente   são   declarados   como   públicos!   Altere   a   classe  DataSimples  de  forma  que  todos  os  métodos  sejam  public  (observe  que,  nesse  caso,  nenhuma  mudança  deve  ser  observada)           -­‐  Bom,  digamos  agora  que  queiramos  ver  o  valor  somente  do  campo  dia  (ao   invés  do  formato  dia/mês/ano).  Podemos  criar  o  seguinte  método  na  classe  DataSimples:    

       public  byte  retornaDia()  {         return  dia;              }      

  O  método   retornaDia(),   ao   ser   chamado,   retorna  o  valor  do  dia  em  questão!  Para   testar  esse  método  vamos  até  a  classe  DemoDataSimples  para  escrever  o  seguinte  código:    

  System.out.println(hoje.retornaDia());    

  O  comando  acima  está  mandando  escrever  o  retorno  do  método  retornaDia()  do  objeto  hoje.  Dúvida:  o  código  abaixo  funcionaria?  Por  quê?      

  System.out.println(hoje.dia);      

  Exercício  2:  Faça  métodos  de  retorno  semelhante  para  o  mês  e  o  ano  e  teste-­‐os.         -­‐  Para   finalizar,   imagine  que  queiramos  criar  um  método  que  recebe  uma   instância  da  própria  classe  DataSimples  como  argumento  e  verificar  se  a  data  representada  pela  classe  e  pela  instância  que  

Page 4: Curso Java 16.01.2013

  4  

foi   passada   é   a  mesma.  Observe-­‐o   abaixo   com  atenção!   Em   seguida,   incorpore   esse  método   à   classe  DataSimples.      

' ' /\' ,6=:53' 1' &' ./7?&' &3'7I$&(&' (/' .4/**"' (".4/%/(&' .&7' "**"'7&(+-+./(&%' ?&("' *"%'/."**/(&'&3'";".3$/(&'/'?/%$+%'("'V3/4V3"%'&3$%/'.4/**"'' ' S\',-51)4''1'&'./7?&'&3'7I$&(&'(".4/%/(&'.&7'"**"'7&(+-+./(&%'*U'?&("'*"%'/."**/(&8'7&(+-+./(&' &3' ";".3$/(&' ?&%' 7I$&(&*' (/' 7"*7/' .4/**"8' *"#(&' &.34$&' V3/#(&' &' ?%&D%/7/(&%' 3*/%'+#*$Z#.+/*'("**/'.4/**"'&3'.%+/%'.4/**"*'H"%("+%/*'&3'("%+L/(/*''' R'`/'.4/**"'8)4)95&,:'/8'L/7&*'(".4/%/%'&*' $%5*'/$%+S3$&*'.&7&',-51)4'' [?&%'";"7?4&>',-51)4'#/B%-4#)*%E\N' 9/4L"'/'/4$"%/@A&'#/'.4/**"'8)4)95&,:'/' "'/' .&7?+4"'#&L/7"#$"N'CD&%/8' $"#$"'";".3$/%'/'.4/**"'8'&%8)4)95&,:'/8'&'V3"'/.&#$"."3Y'' R' B"**/' -&%7/8' "*$/7&*' ?%&$"D"#(&' &*' ./7?&*' [/$%+S3$&*\' (/' .4/**"'8)4)95&,:'/a' E&%' &3$%&'4/(&8'&*'7I$&(&*'D"%/47"#$"'*A&'(".4/%/(&*'.&7&'?:S4+.&*a'C4$"%"'/'.4/**"'8)4)95&,:'/'("'-&%7/'V3"'$&(&*'&*'7I$&(&*'*"T/7',6=:53'[&S*"%L"'V3"8'#"**"'./*&8'#"#H37/'73(/#@/'("L"'*"%'&S*"%L/(/\'' ''' R'b&78'(+D/7&*'/D&%/'V3"'V3"+%/7&*'L"%'&'L/4&%'*&7"#$"'(&'./7?&'(+/'[/&' +#LI*'(&'-&%7/$&'(+/c75*c/#&\N'E&("7&*'.%+/%'&'*"D3+#$"'7I$&(&'#/'.4/**"'8)4)95&,:'/>''

# # ##,6=:53#=F4'#-'4%-*)85)>A#<## # # -'46-*#+5)E## ### ##P##'

' W'7I$&(&' -'4%-*)85)[\8' /&' *"%' .H/7/(&8' %"$&%#/'&'L/4&%'(&'(+/'"7'V3"*$A&a'E/%/' $"*$/%'"**"'7I$&(&'L/7&*'/$I'/'.4/**"'8'&%8)4)95&,:'/'?/%/'"*.%"L"%'&'*"D3+#$"'.U(+D&>''

# 9F/4'&"%64",-5*4:*>B%;'"-'4%-*)85)>AAE#'

' W'.&7/#(&'/.+7/'"*$X'7/#(/#(&'"*.%"L"%'&'%"$&%#&'(&'7I$&(&'-'4%-*)85)[\'(&'&ST"$&'H&T"N'B:L+(/>'&'.U(+D&'/S/+;&'-3#.+&#/%+/Y'E&%'V35Y'' '

' 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"'-&+' ?/**/(/' I' /'7"*7/N'WS*"%L"R&' /S/+;&' .&7'/$"#@A&a' )7' *"D3+(/8' +#.&%?&%"' "**"'7I$&(&' d' .4/**"'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##' '' W'$"*$"'("**"'7I$&(&'?&("'*"%'-"+$&'(/'*"D3+#$"'-&%7/'#/'.4/**"'8'&%8)4)95&,:'/>''

# 5W#>B%;'"UV.6):>5*+','*+I*35)8%Y-)/5:AA## ####9F/4'&"%64",-5*4:*>ZJ/#+)4)/#/7%#5.6)5/ZAE## ':/'## ####9F/4'&"%64",-5*4:*>ZJ/#+)4)/#/7%#+5W'-'*4'/ZAE#'

    -­‐   O   teste   desse   método   pode   ser   feito   da   seguinte   forma   na   classe   DemoDataSimples  (considerando  meuNiver  um  objeto  da  classe  em  questão):       if  (hoje.éIgual(meuNiver))              System.out.println(“As  datas  são  iguais”);     else              System.out.println(“As  datas  são  diferentes”);         -­‐  Para  reforçar  a   idéia  de  referências  e   instâncias  e  para  conhecer  a  palavra-­‐chave  null,  vamos  analisar  a  classe  Demo2DataSimples.      

class  Demo2DataSimples  {      public  static  void  main(String[]  argumentos)  {            //  declaramos  duas  referências  a  instâncias  da  classe  DataSimples  não  inicializadas          DataSimples  data1;                      DataSimples  data2;          DataSimples  data5  =  null;      //inicializamos  data5  com  null            //criamos  duas  instâncias  da  classe  Data              DataSimples  data3  =  new  DataSimples();                      DataSimples  data4  =  new  DataSimples();            byte  d,m;  short  a;  //variáveis  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  referências  para  a  mesma  instância:          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();                  }      }        

Page 5: Curso Java 16.01.2013

  5  

 Detalhes  importantes:       -­‐  Podemos  criar  inicialmente  só  referências  às  instâncias  (data1  e  data2)       -­‐  Podemos  inicializar  referências  com  null  (data5)  –  a  classe  compilará,  mas  poderá  dar  erro  em  tempo  de  execução         -­‐  Podemos  ter  duas  referências  apontando  para  a  mesma  instância  (data1  e  data3)       -­‐  Caso  uma  referência  não  esteja  associada  a  alguma   instância,  a  classe  não  compilará  (data2)       Faça   1:   Tente   compilar   a   classe   e   verifique   o   erro   referente   à   não   inicialização   de   data2.  Comente  a   linha,  salve  e  compile  novamente   (é  para  compilar!).  Agora,   tente  executar  e  verifique  um  novo  erro   (erro   em   tempo  de   execução  ocasionado  pelo   fato  de  que  data5   foi   inicializado   com  null).  Novamente,  comente  a  linha  em  questão  e  salve.  Observe  que  agora  a  classe  irá  executar  normalmente.           -­‐  Na  chamada  do  método   inicializaDataSimples()  podemos  passar  os  argumentos  diretamente  utilizando  a  operação  de  cast.         Faça  2:  vide  o  exemplo  abaixo  (cast)  e  faça  testes  na  classe.       data3.inicializaDataSimples((byte)4,(byte)3,(short)2011);         Exercício  3:  com  base  nos  modelos  feitos  em  sala,  faça:  

a) Crie  a  classe  Lampada  e,  e  seguida,  crie  DemoLampada  para  teste.  b) Crie   a   classe   ContaBancariaSimplificada   e,   e   seguida,   crie   DemoContaBancariaSimplificada  

para  teste.