Lista de exercicio 2 – OO

Propaganda
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.
Download