Instituto Federal de Educação, Ciência e Tecnologia da Bahia – Campus Irecê Disciplina: Linguagem Técnica I Profo Jonatas Bastos Nome: _________________________________________________________________ LISTA DE EXERCÍCIO 2 - Exercícios de Orientação a Objetos O objetivo aqui é criar um sistema para gerenciar os funcionários do Banco. 1) Modele um funcionário. Ele deve ter o nome do funcionário, o departamento onde trabalha, seu salário (double), a data de entrada no banco (String), seu RG (String) e um valor booleano que indique se o funcionário ainda está ativo na empresa ou se já foi mandado embora. Você deve criar alguns métodos de acordo com sua necessidade. Além deles, crie um método bonifica que aumenta o salario do funcionário de acordo com o parâmetro passado como argumento. Crie, também, um método demite, que não recebe parâmetro algum, só modifica o valor booleano indicando que o funcionário não trabalha mais aqui. A idéia aqui é apenas modelar, isto é, só identifique que informações são importantes e o que um funcionário faz. Desenhe no papel tudo o que um Funcionario tem e tudo que ele faz. 2) Transforme o modelo acima em uma classe Java. Teste-a, usando uma outra classe que tenha o main. Você deve criar a classe do funcionário chamada Funcionario, e a classe de teste você pode nomear como quiser. A de teste deve possuir o método main. Um esboço da classe: class Funcionario { double salario; // seus outros atributos e métodos void bonifica(double aumento) { // o que fazer aqui dentro? } void demite() { // o que fazer aqui dentro? } } Você pode (e deve) compilar seu arquivo java sem que você ainda tenha terminado sua classe Funcionario. Isso evitará que você receba dezenas de erros de compilação de uma vez só. Crie a classe Funcionario, coloque seus atributos e, antes de colocar qualquer método, compile o arquivo java. Funcionario.class será gerado, não podemos “executála” pois não há um main, mas assim verificamos que nossa classe Funcionario já está tomando forma. Esse é um processo incremental. Procure desenvolver assim seus exercícios, para não descob do caminho que algo estava muito errado. Um esboço da classe que possui o main: Um esboço da classe que possui o mai n: 1 cl ass Test aFunci onar i o { 2 3 4 5 6 7 8 9 10 11 12 13 } publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { Funci onar i o f 1 = new Funci onar i o( ) ; f 1. nome = " Fi odor " ; f 1. sal ar i o = 100; f 1. boni f i ca( 50) ; Syst em. out . pr i nt l n( " sal ar i o at ual : " + f 1. sal ar i o) ; } Incremente classe. FaçaFaça outrosoutros testes,testes, imprima outros atributos e invoque métodos Incrementeessa essa classe. imprima outros atributos e os invoque os métodos qu que você criou a mais. a mais. Lembre-sedede seguir a convenção é importantíssimo. Isto é, nomeDeAt r i but o , no Lembre-se seguir a convenção java, java, isso éisso importantíssimo. Isto é, nomeDeAtributo, nomeDeVar i avel nomeDeVariavel, , NomeDeCl asse , etc... nomeDeMetodo, NomeDeClasse, etc... 3) Crie um método mostra(), que não recebe nem devolve parâmetro algum e simplesmente imprime todos os atributos do nosso funcionário. Dessa maneira, você não precisa ficarTodas copiando e colando montearquivo? de System.out.println() para cada mudança e as classes noum mesmo teste que fizer com cada um de seus funcionários, você simplesmente vai fazer: Por enquanto, você pode colocar todas as classes no mesmo arquivo e apenas co arquivo. Ele vai gerar os dois . cl ass . Funcionario f1 = new Funcionario(); Porém, é f1.... boa prática criar um arquivo .java para cada classe e, em determinados caso //brincadeiras com f1.mostra();obrigado a declarar uma classe em um arquivo separado, como veremos no capítulo 10 importante para o aprendizado no momento. Veremos mais a frente o método toString, que é uma solução muito mais elegante para mostrar a representação de um objeto como String, além de não jogar tudo pro 3) System.out Crie um método most r a( ) , que não recebe nem devolve parâmetro algum e simplesmente im (só se você desejar). os atributos do nosso funcionário. Dessa maneira, você não precisa ficar copiando e colando Syst em.do outmétodo . pr i nt ficaria l n( ) para cada mudança e teste que fizer com cada um de seus funcion Odeesqueleto assim: simplesmente vai fazer: Funci onar i o f 1 = new Funci onar i o( ) ; / / br i ncadei r as com f 1. . . . Capítulo 4 - Orientação a objetos básica - Exercícios: Orientação a Objet f 1. most r a( ) ; Veremos mais a frente o método t oSt r i ng, que é uma solução muito mais elegante para mostrar a representação de um objeto como St r i ng, além de não jogar tudo pro Syst em. out (só se você desejar). O esqueleto do método ficaria assim: cl ass Funci onar i o { / / seus out r os at r i but os e mét odos voi d most r a( ) { Syst em. out . pr i nt l n( " Nome: " + t hi s. nome) ; / / i mpr i mi r aqui os out r os at r i but os. . . } } . 4) Construa dois funcionários com o new e compare-os o ==. E seoseles tiverem os 4) Construa dois funcionários com o new e compare-os com o ==. Ecom se eles tiverem mesmos atributos? Para isso você vai precisar criar outra referência: mesmos atributos? Para isso você vai precisar criar outra referência: Funci onar i o f 1 = new Funci onar i o( ) ; Funcionario f1 = new Funcionario(); f 1. nome = " Fi odor " ; f1.nome f 1. sal ar i = o "Fiodor"; = 100; f1.salario = 100; onar i o f 2 = new Funci onar i o( ) ; Funci Funcionario f2 = new Funcionario(); f 2. nome = " Fi odor " ; f2.nome f 2. sal ar i = o "Fiodor"; = 100; f2.salario = 100; f 1 == == ff2) 2) {{ i fif ((f1 Syst em. out . pr i nt l n( " i guai s" ) ; System.out.println("iguais"); } el se { } else Syst{em. out . pr i nt l n( " di f er ent es" ) ; } System.out.println("diferentes"); } 5) Crie duas referências para o mesmo funcionário, compare-os com o ==. Tire suas conclusões. Para criar duas referências pro mesmo funcionário: 5) Crie duas referências para o mesmo funcionário, compare-os com o ==. Tire suas Funci onar iPara o f 1 criar = newduas Funcireferências onar i o( ) : pro mesmo funcionário: conclusões. f 1. nome = " Fi odor " ; Funcionario f1 = new Funcionario(): f 1. sal ar i o = 100; f1.nome Funci onar= i o"Fiodor"; f 2 = f 1; f1.salario = 100; Funcionario f2 com = f1;o i f do exercício anterior? O que acontece 6) (opcional) Em vez de utilizar uma St r i ng para representar a data, crie uma outra classe, chamada Dat a. Ela Opossui que acontece o if do anterior? 3 campos com i nt , para dia,exercício mês e ano. Faça com que seu funcionário passe a usá-la. (é parecido com o último exemplo, em que a Cont a passou a ter referência para um Cl i ent e). . 6) EmFunci vez onar de i utilizar uma String para representar a data, crie uma outra classe, cl ass o { chamada Data. Ela possui 3 campos int, para dia, mês e ano. Faça com que seu funcionário passe a usá-la. (é parecido com o último exemplo, em que a Conta Dat a dat aDeEnt r ada; / / qual é o val or def aul t aqui ? passou a ter referência para um Cliente). Capítulo 4 - Orientação a objetos básica - Exercícios: Orientação a Objetos - Página 46 O que acontece com o i f do exercício anterior? 6) (opcional) Em vez de utilizar uma St r i ng para representar a data, crie uma outra classe, chamada Dat a. Ela possui 3 campos i nt , para dia, mês e ano. Faça com que seu funcionário passe a usá-la. (é parecido com o último exemplo, em que a Cont a passou a ter referência para um Cl i ent e). Material do Treinamento Java e Orientação a Objetos Material do Treinamento Java e Orientação a Objetos cl ass Funci onar i o { Material do Treinamento Java e Orientação a Objetos Dat a dat aDeEnt r ada; / / qual é o val or def aulMaterial t aqui ?do Treinamento Java e Orientação a Objetos Capítulo 4 - Orientação a objetos básica - Exercícios: Orientação a Objetos - Página 46 // // seus ététodos seus out out rros os at atrrii but butos os ee m m odos }} / / seus out r os at r i but os e mét odos / / seus out r os at r i but os e mét odos cl at aa {{ cl} ass ass D Dat } cl ass ii nt di ntDat di aa; a;{ i nt m es; cl assi nt Datm aes; { nt ano; di a; ii int nt ano; }} i intnt dimes; a; i intnt mano; es; } i nt ano; Modifique sua Test aFunci uma DDat at auma :: Modifique sua classe Test aFuncionar onari ioopara paraque quevocê você crie uma aeeatribua atribua ela aoFunci Funcionar onar o Modifique suaclasse classe TestaFuncionario para quecrie você crie Dataela e ao atribua elai oiao } Funcionario: Modifique Test aFunci onar Funci oo ff 1classe Funci onar i io( Funci onar onariisua 1 == new new Funci onar o()i );o; para que você crie uma Dat a e atribua ela ao Funci onar i o : Modifique sua classe Test aFunci onar i o para que você crie uma Dat a e atribua ela ao Funci onar i o : // //Funci .. .. .. onar i o f 1 = new Funci onar i o( ) ; D at aa dat aai == at a( ;; //// onar l li igação! Dat dat new Dat a())Funci gação! Funci onar o new f 1 =D new i o( ) ; . . aD ff /1. eEnt rrada 1./ .dat dat aDeEnt ada == dat data; a; /D / at ..a . dat a = new Dat a( ) ; / / l i gação! r adaDat=a(dat Dfat1.adat dataD aeEnt = new ) ; a;/ / l i gação! Faça Faça oo desenho desenho do do estado estado da damemória memóriaquando quandocriarmos criarmosum umFunci Funcionar onari ioo. . f 1. dat aDeEnt r ada = dat a; 7) (opcional) Modifique seu m ost rrquando aa para que ooi valor da eEnt r ada Façao odesenho desenho do estado estado da memória criarmos umimprima FunciFuncionario. onar ovalor . 7)Faça (opcional) Modifique seu método método m ostquando para que ele ele imprima da dat dataD aDeEnt r ada daquele daquele do da memória criarmos um Funci onar i o : Funci onar i o : Faça o desenho do estado da memória quando criarmos um Funci onar i o . 7) (opcional) Modifique seu método most r a para que ele imprima o valor da dat aDeEnt r ada daquele Modifique método mostra que que ele imprima o valor da dataDeEntrada Funci iModifique oonar :onarii oseu cl 7) assonar Funci o {{ seu 7) (opcional) método most rpara a para ele imprima o valor da dat aDeEnt r ada daquele cl ass Funci daquele Funcionario: Funci onar i o : cl ass Funci onar i o { cl ass o seus onar out rri os os {at atrrii but butos os ee m m odos // // Funci seus out ététodos Dat dat aD aDeEnt ada; D at aa dat eEnt rrada; / / seus out r os at r i but os e mét odos D dat aD eEnt /voi / atseus out r os r i but os e mét odos voi m ost a( dda m ost rra( )) {{ratada; Dat a Syst dat aD eEnt r ada; Syst em em out..pr pri i nt ntl ln( n(""NNom nom e); ; ..out ome:e: "" ++ t thihis.s.nom e) voi d/ /most r a( )i r{ aqui os out r os at r i but os. . . m pr m / / ii m pr ii m i r aqui os out r os at r i but os. . . voi d Syst most em r a(. out ) { . pr i nt l n( " Nome: " + t hi s. nome) ; / / i m pr i m.i .pr rpriaqui os""NDi outa: r os at r ihibut os. .e). ; Syst em . out s.dat nom Syst em em out ntll ln( n( dat aDeEnt ada.didia)a); ; Syst ..out . pr i int nt n( " Dom i a:e: """ +++ t tthihi s.s. aD eEnt r rada. /Syst / im pr i m i r aqui os out r os at r i but os. . . em out..pr pri i nt ntl ln( n(""M M ês: "" ++ t thihis.s.dat dataD aDeEnt ada.mm es); ; Syst em ..out ês: eEnt r rada. es) System em.out out .. pr pr i nt nt ll n( n( "Ano: Di a: "" ++ tt hi hi s. dat dat aDeEnt aDeEnt r ada. ada. ano) di a) ; Syst Syst em..out . pr i i nt l n( ""Ano: " + t hi s.s.dat aDeEnt r rada. ano) ; ; System em out. .prpri intntl ln(n(" D " iMa: ês: " " ++t hi t his.s.dat dataD aD eEntr ada. r ada.dima) es); ; Syst . .out eEnt }} Syst em . out . pr i nt l n( " Ano: " + t hi s. dat aD eEnt r ada. ano) Syst em . out . pr i nt l n( " M ês: " + t hi s. dat aD eEnt r ada. m es) ;; }} } Syst em. out . pr i nt l n( " Ano: " + t hi s. dat aDeEnt r ada. ano) ; } } Teste-o. }Teste-o. OTeste-o. que acontece acontece se se chamarmos chamarmosoométodo métodomm ostrraaantes antesde deatribuirmos atribuirmosuma umadata datapara paraeste esteFunci Funcionar onari oi ? o? O que ost Teste-o. O que acontece se chamarmos o método mostra antes de atribuirmos uma data 8)Teste-o. (opcional) O que que acontece acontece sevocê você tentaracessar acessar umatributo atributo diretamente na classe? Como, poronar exemplo: O que acontece se chamarmos o método most r a um antes de atribuirmos uma data para Como, este Funci i o? 8) (opcional) O se tentar diretamente na classe? por exemplo: para este Funcionario? O que acontece se chamarmos o método most r a antes de atribuirmos uma data para este Funci onar i o ? 8) (opcional) acontece se você tentar acessar um atributo diretamente na classe? Como, por exemplo: Funci onar onariiO o.que sal ar ar 1234; Funci o. sal ii oo == 1234; 8) (opcional) O que acontece se você tentar acessar um atributo diretamente na classe? Como, por exemplo: Funci onar i o. sal ar i o = 1234; Funci onar i o. sal ar i o = 1234; Esse código código faz faz sentido? sentido? EE este: este: Esse Esse sentido? Funci código onar i o.faz dem i t e( ) ; E este: Funcicódigo onar i o.faz dem i t e( ) ; E este: Esse sentido? Syst em. out . pr i nt l n( " Nome: " + t hi s. nome) ; / / i mpr i mi r aqui os out r os at r i but os. . . Syst em. out . pr i nt l n( " Di a: " + t hi s. dat aDeEnt r ada. di a) ; Syst em. out . pr i nt l n( " Mês: " + t hi s. dat aDeEnt r ada. mes) ; Syst em. out . pr i nt l n( " Ano: " + t hi s. dat aDeEnt r ada. ano) ; } } Teste-o. 8) acontece O que acontece se vocêo método tentar acessar um atributo diretamente na para classe? O que se chamarmos most r a antes de atribuirmos uma data esteComo, Funci onar i o ? por exemplo: 8) (opcional) O que acontece se você tentar acessar um atributo diretamente na classe? Como, por exemplo: Funci onar i o. sal ar i o = 1234; Esse código faz sentido? E este: Material do Treinamento Java e Orientação a Objetos Funci onar i o. demi t e( ) ; Faz sentido pedir para o esquema do Funcionario demitir? 4.13 - Desafios 9) Um método pode chamar ele mesmo. Chamamos isso de recursão. Você pode Capítulo 4 - Orientação a objetos básica Você - Exercícios: Orientaçãoa asérie Objetos Página 47 1) Um método podeachamar elefibonacci mesmo. Chamamos isso de recursão. pode resolver de-fibonacci resolver série de usando um método que chama ele mesmo. O objetivo usandoéum método mesmo. criar uma classe, que possa ser usada da você criar que umachama classe,eleque possa O serobjetivo usada édavocê seguinte maneira: seguinte maneira: Fi bonacci f i bo = new Fi bonacci ( ) ; i nt i = f i bo. cal cul aFi bonacci ( 6) ; Syst em. out . pr i nt l n( i ) ; Aqui imprimirá 8, que já que é o sexto número da série. Este método calculaFibonacci Aqui imprimirá 8, já esteeste é o sexto número da série. não pode ter nenhum laço, só pode chamar ele mesmo como método. Pensecomo nelemétodo. como Pense Este método cal cul aFi bonacci não pode ter nenhum laço, só pode chamar ele mesmo uma que usa aque própria calcular o resultado. nele função, como uma função, usa afunção própria para função para calcular o resultado. 2) Por10 quePor o modo é extremamente mais lento para calcular série do que o modo iterativo (que que acima o modo acima é extremamente mais lentoa para calcular a série do que o se usa um laço)? modo iterativo (que se usa um laço)? 3) Escreva o método recursivo novamente, usando apenas uma linha. Para isso, pesquise sobre o operador 11) Escreva o método recursivo novamente, usando apenas uma linha. Para isso, condicional ternário. (ternary operator) pesquise sobre o operador condicional ternário. (ternary operator) Exercícios para Fixação do Conhecimento. 4.14 - Fixando o conhecimento OO objetivo dosexercícios exercícios a seguir é fixar o conceito de eclasses objetos, emétodos objetivo dos a seguir é fixar o conceito de classes objetos,e métodos atributos. eDada a atributos. Dada a estrutura de uma classe, basta traduzí-la para a linguagem Java e fazer em um estrutura de uma classe, basta traduzí-la para a linguagem Java e fazer uso de um objeto da mesma uso de simples. um objeto da mesma em um programa simples. programa Se12) vocêPrograma está com dificuldade em alguma parteAtributos: desse capítulo, aproveite e treine tudo o quevoid vimos nos 1 Classe: Pessoa nome, idade. Método: pequenos fazAniversario(). programas abaixo: Crie uma pessoa, coloque seu nome e idade iniciais, faça alguns aniversários (aumentando a idade) e imprima seu nome e sua idade. 1) Programa 1 Classe: Pessoa Atributos: nome, idade. Método: void fazAniversario() Crie uma pessoa, coloque seu nome e idade iniciais, faça alguns aniversários (aumentando a idade) e imprima seu nome e sua idade. 2) Programa 2 13) Programa 2 Classe: Porta Atributos: aberta, cor, dimensaoX, dimensaoY, dimensaoZ Métodos: void abre(), void fecha(), void pinta(String s), boolean estaAberta() Crie uma porta, abra e feche a mesma, pinte-a de diversas cores, altere suas dimensões e use o método estaAberta para verificar se ela está aberta. 14) Programa 3 Classe: Casa Atributos: cor, porta1, porta2, porta3 Método: void pinta(String s), int quantasPortasEstaoAbertas() Crie uma casa e pinte-a. Crie três portas e coloque-as na casa; abra e feche as mesmas como desejar. Utilize o método quantasPortasEstaoAbertas para imprimir o número de portas abertas.