Exerccios sobre orientao a objetos
Estes exerccios podem ser desenvolvidos no BlueJ:
1) Da Wikipedia, temos: O tamagotchi um brinquedo em que se cria um animal de estimao virtual. O tamagotchi foi lanado pela Bandai em 1996 no Japo. A motivao do brinquedo consiste em cuidar do animalzinho virtual como se fosse real, dando-lhe carinho virtual, comida virtual, banho virtual, cuidados virtuais etc. Ns queremos programar uma verso simplificada do mascote digital, como o Tamagotchi, que fez muito sucesso entre as crianas. Ele ter duas caractersticas marcantes:
Vidas (0 a 7) Energia (0 a 100)
a) Construa uma classe Mascote, com as duas caractersticas como atributo. b) Faa um mtodo construtor, que atribua 7 vidas e 100 unidades de energia para o mascote. c) Construa mtodos de acesso adequados. d) Construa um mtodo que imprima o estado do objeto. e) Implemente um mtodo que aumente ou reduza a energia do Mascote, de um valor passado por parmetro (que pode ser positivo ou negativo). No permitida energia acima do limite mximo especificado acima. Caso tenha atingido 0 ou menos de energia, uma vida ser perdida; este mtodo deve anunciar a morte do bichinho caso a ltima vida seja perdida, ou ento, ele deve anunciar quantas vidas ainda tem e deve voltar a ter energia mxima. Soluo: /** * A classe Tamagotchi modela um mascote virtual. * * @author Carlos Menezes * @version 0.1 */ public class Tamagotchi { // Vidas e Energia so as duas caractersticas marcantes private int vidas, energia; * Construtor inicializaes da classe Tamagotchi, que /** faz as
public vidas energia = =
*/ Tamagotchi() { 7; 100; } para
* * @return virtual
Mtodo
/** vidas * retorna o nmero de vidas do mascote de acesso int return */ acesseVidas() { vidas; } para
public
/** energia * * @return retorna a energia do mascote virtual */ public int acesseEnergia() { return energia; } * Mtodo de acesso * /** mascote * */ public void imprimeEstado() { [Link]("Nmero de vidas = " + vidas); [Link]("Energia atual = " + energia); } Mtodo para imprimir o estado do
/** * Mtodo modificador que atualiza energia e vidas * * @param x valor a aumentar ou diminuir na energia */ public void atualizeEnergia(int x) { energia = energia + x; if(energia > 100) { energia = 100; } if(energia <= 0)
vidas
infelizmente
{ 1; > 0) { energia = 100; imprimeEstado(); } else { imprimeEstado(); [Link]("Seu mascote morreu..."); } } } = if(vidas vidas -
} 2) War um jogo de tabuleiro, lanado no Brasil pela Grow. O jogo disputado com um mapa do mundo dividido em 6 regies (Europa, sia, frica, Amrica do Norte, Amrica do Sul e Oceania). Cada jogador recebe uma carta com um determinado objetivo e quem completar primeiro o seu e declar-lo cumprido o vencedor, diz a Wikipdia. Queremos fazer um jogo deste tipo. Para isso contamos com a sua ajuda! Os territrios so atores das batalhas que se desenrolam e eles tm as seguintes caractersticas marcantes: nome e poder (0 a 10). Os territrios s podem fazer duas coisas: receber reforo e lutar com outro territrio. Construa uma classe em Java chamada Territrio que siga as especificaes: a) os atributos so privativos. b) no construtor, tanto o nome como o poder so carregados por parmetros. c) h um mtodo de acesso para o poder. d) h um mtodo chamado incremento, que aumenta o poder em 1 ponto, mas este no pode passar do mximo (10).
e) h um mtodo chamado decremento que reduz em 1 ponto o poder do territrio. Caso este chegue a zero, uma mensagem ser emitida dizendo que o mesmo foi conquistado. f) o mtodo receberReforo deve aumentar o poder em 1 ponto (use o mtodo incremento do item d). g) o mtodo lutar simula uma batalha entre 2 territrios (h interao entre objetos!) da seguinte maneira: o mtodo recebe 2 parmetros inteiros que representam 2 jogadas de dados, uma do prprio territrio e a outra do oponente; quem conseguir valor maior vence, sendo que o perdedor sofre uma reduo de poder em 1 ponto (use o mtodo decremento do item e). Repare que necessrio um terceiro parmetro, a referncia ao objeto oponente (caso contrrio no poderia reduzir o poder deste objeto).
Nos exerccios abaixo, onde aparecer "Java", voc poder tambm usar C++/STL. 1. Defina o que feito na etapa de Anlise e o que feito na etapa de Projeto ao desenvolver software. 2. Enumere as vantagens da abordagem Orientada a Objetos para o desenvolvimento de software. 3. Qual o motivo de levantar Requisitos Funcionais para desenvolver software e o que faz parte de uma descrio de Requisitos Funcionais? 4. Mostre como instanciar um objeto da classe ContaBancria em Java fornecendo o CPF (um string) do titular como argumento. Com o objeto resultante, faa um depsito de R$100,00 e imprima o saldo. Voc pode escolher nomes apropriados para os mtodos. 5. Explique o que um Iterator em Java. Qual sua principal vantagem? 6. Mostre a implementao de uma classe ContaBancria. Invente atributos e mtodos. 7. Explique a diferena de funcionamento entre um "return" e um "throw". Seja especfico. 8. Mostre, usando Java, como especializar uma classe ContaBancria para criar uma ContaCorrente e uma ContaPoupana. 9. Explique as vantagens e desvantagens do polimorfismo. D exemplos. 10. Explique a afirmao: "Em Java, o conceito de interfaces permite obter mais polimorfismo do que seria possvel com classes abstratas". 11. Qual a diferena entre "herana de tipo" e "herana de implementao"? 12. Quais so as vantagens e desvantagens de acoplamento forte entre objetos?
13. Ao falar de boa programao, fala-se: "A decomposio deve esconder algo." O que poderia ser escondido, por exemplo? 14. O que uma "responsabilidade de uma classe"? Por que queremos minimizar o nmero de responsabilidades? "Mais" no seria melhor? 15. Por que modelar papeis (roles) atravs de herana inferior a modellos atravs de composio?