Exercícios
Tema: Herança e coleções
Exercício 1
Crie a seguinte hierarquia de classes, que representa o modelo de armas de um jogo e como estas são estruturadas.
Arma
é uma classe abstrata que reune atributos e métodos comuns a todas as armas.- O construtor
Arma(String, int)
recebe o nome da arma do tipoString
e a quantidade de dano máxima causada pela arma do tipoint
, respectivamente. - O método
disparar()
é abstrato e retorna umint
, que é a quantidade de dano causado pela arma. A quantidade de dano causado deverá sempre ser obtida a partir deste método, pois alguns tipos de armas podem causar menos dano que o dano máximo.
- O construtor
ArmaLancavel
é um tipo de arma que pode ser lançada, como uma lança ou uma shuriken.- O construtor
ArmaLancavel(String, int, int)
recebe o nome da arma do tipoString
, a quantidade de dano máxima causada pela arma do tipoint
e a chance de acerto, um númeroint
tal que 0 <= número <= 100, respectivamente. - Use a classe
java.util.Random
para gerar números aleatórios e simular eventos probabilisticos. Você deve deixar a instância deRandom
da classe acessíveis através de getter e setter, como especificado no diagrama, para que seja possível testar seu código. - Existe a chance menor que 100% de essa arma acertar o oponente e, por isso, o método
disparar()
nessa classe deve ser implementado para que o acerto seja probabilistico. Dado que o número aleatório gerado énum
, um acerto acontece quandonum <= chanceDeAcerto
.
- O construtor
ArmaRecarregavel
é um tipo de arma lançável que dispara projéteis, como um arco-e-flecha ou um revólver.- O construtor
ArmaRecarregavel(String, int, int, int)
recebe o nome da arma do tipoString
, a quantidade de dano máxima causada pela arma do tipoint
, a chance de acerto um númeroint
tal que 0 <= número <= 100 e quantidade inicial de projéteis, do tipoint
. - A cada disparo, o número de projéteis é reduzido em 1.
- O método
disparar()
deve ser implementado assim como na classeArmaLancavel
e, além disso, deve retornar 0 caso o número de projéteis seja 0.
- O construtor
- Crie suas classes dentro do pacote
br.edu.ifpb.poo.jogo
;
Exercício 2
As classes a seguir representam parte de um sistema de mercado.
Produto
um código (int
) que deve ser único entre outros produtos, um nome (String
) e uma unidade (String
), que representa a forma como o produto é vendido ("un"
, para unidade,"kg"
para quilo).- O preço é encapsulado pelos getter e setter, que devem retornar e receber
double
, respectivamente, mas provavelmente precisará ser representado internamente de outra forma.
- O preço é encapsulado pelos getter e setter, que devem retornar e receber
Item
representa uma determinada quantidade (double
) de um produto.- O valor de um item é obtido pela multiplicação da quantidade pelo valor do produto.
Compra
representa uma lista deitens
comprados por um cliente.- O construtor de
Compra
é vazio. Compra
possui uma lista de itens (Item
), que podem ser adicionados através do métodoadicionarItem(Produto, double)
, que recebe um produto e uma quantidade (double
).- Não existirão dois itens na lista com códigos iguais.
- Itens são removidos através do método
removerItem(int)
, para o qual é passado o código do produto a ser removido. getItem(int)
recebe o índice na lista de um determinado item e retorna esse item.contaritens()
conta a quantidade de itens na lista. Produtos cuja unidade é ‘kg’ sempre são contados como 1, independentemente da quantidade; mas se a unidade do produto for ‘un’, o valor da quantidade é o retornado porgetQuantidade()
.- O valor total da compra é a soma do valor de todos os itens.
- O construtor de
- Crie suas classes dentro do pacote
br.edu.ifpb.poo.mercado
;
Exercício 3
Crie uma implementação usando array para a interface MyList
, definida a seguir.
interface MyList {
void add(String item);
void remove(String item);
void remove(int index);
boolean contains(String item);
int size();
int indexOf(String item);
}