Poo Exercicios 04 Polimorfismo v02
Poo Exercicios 04 Polimorfismo v02
Poo Exercicios 04 Polimorfismo v02
Questão 1
Dada as seguintes interfaces:
duplica Recebe como parâmetro dois objetos que implementam a interface Repositorio A e B
e copia todas as pessoas do repositório A para o repositório B.
diferenca Recebe como parâmetro três objetos que implementam a interface Repositorio A, B e
C e coloque no repositório C todas as pessoas de A que não estiverem em B.
Questão 2
Um órgão de levantamento meteorológico possui equipamentos para medir a pluviosidade
(pluviômetros), onde cada unidade é representada em um programa de computador por um objeto da
classe:
public class Pluviometro
{
1
protected String tipo;
public Pluviometro(String tipo)
{
:
}
public String getTipo()
{
:
}
public int getPeso()
{
:
}
public int getCapacidade()
{
:
}
}
Os pluviômetros são carregados por caminhões que, no programa de computador, são representados
genericamente por objetos da classe Caminhao (esta classe não deve ser implementada nesta questão). A
classe define os seguintes métodos:
Construtor Recebe como parâmetro a quantidade de equipamentos que o caminhão irá
carregar.
inserePluviometro Recebe como parâmetro um objeto da classe Pluviometro e o coloca
dentro do caminhão se a capacidade do mesmo permitir.
Cada objeto da classe representa um caminhão. Esta classe não possui nenhum atributo e seus
métodos não possuem implementação, pois serão implementados nas subclasses.
Escreva duas classes herdeiras da classe Caminhao que representam dois tipos deste veículo com
capacidades diferentes:
Caminhão Alfa
Consegue carregar no máximo 5 toneladas de pluviômetros, independente da quantidade e tipo.
Caminhão Beta
Consegue carregar qualquer quantidade e peso de pluviômetros, no entanto, não é capaz de carregar
mais do que um pluviômetro de cada tipo.
2
Questão 3
Dada uma classe denominada Controle, definida em um sistema de controle de transporte de
pluviômetros, que possui dois métodos estáticos:
leString() Solicita ao usuário uma String pelo teclado e retorna através do método (função tipo
String).
leInteito() Solicita ao usuário um valor inteiro pelo teclado e retorna através do método (função
tipo int).
Escreva uma classe herdeira de Controle que acrescente um método estático responsável pela
seleção do caminhão mais apto a distribuição de pluviômetros. O caminhão será aquele capaz de conduzir
pluviômetros cuja soma de capacidade seja a maior, independente do tipo de cada um deles.
O programa irá solicitar uma lista de caminhões. Para cada caminhão ele pergunta:
ú Tipo do caminhão (‘Alfa’ ou ‘Beta’);
ú número de pluviômetros a ser transportados;
ú lista dos pluviômetros a ser transportados no caminhão (para cada pluviômetro é digitado
apenas seu tipo).
A lista encerra quando é digitado ‘Fim’ para o Tipo do caminhão.
Depois de digitada toda a lista o programa imprime na tela (System.out) os seguintes dados do
caminhão mais apto:
ú tipo do caminhão (Alfa ou Beta);
ú lista dos pluviômetros transportados no caminhão.
Em ambas as questões, devem ser criados os atributos que se fizerem necessários.
3
Bloco de Questões A
Dadas as seguintes interfaces:
Representa um animal
public interface Animal {
public String getNomeEspecie();
public String getNomeAnimal();
}
getNomeEspecie Retorna o nome da espécie do animal.
getNomeAnimal Retorna o nome do animal.
Questão A.1
Escreva um método que receba dois parâmetros:
ú um vetor A de objetos que implementam a interface Animal representando diversos
animais
ú um objeto que implementa a interface Ferramentas
O método deve contabilizar o número de animais disponíveis em cada uma das espécies e
retornar os resultados como um vetor de objetos da classe Resultado (apresentada abaixo).
Cada objeto conterá uma espécie e o número de animais da mesma contabilizados. Devem ser
consideradas apenas as espécies cujos animais estão presentes no vetor.
4
public class Resultado {
private String nomeEspecie; // nome da especie
private int quantidade; // quantidade de animais da especie
public Resultado(String nomeEspecie, int quantidade) {
this.nomeEspecie = nomeEspecie;
this.quantidade = quantidade;
}
public String getNomeEspecie() {
return nomeEspecie;
}
public int getQuantidade() {
return quantidade;
}
}
Nesta questão basta implementar o método, não é necessária a especificação da classe.
Questão A.2
Construtor Além dos parâmetros da superclasse, recebe como parâmetro o vetor com os
subitens de orçamento.
getValor Sobrescreve o método da superclasse, retornando a soma de valores de todos os
subitens de orçamento.
encontraItem Recebe como parâmetro o histórico de um subitem (String) e retorna o objeto
correspondente ao subitem que possui este histórico, se existir. Se não existir
retorna null.
5
Questão A.3
Um jardim zoológico definiu a seguinte interface que estende a interface Animal:
public interface AnimalOrcamento extends Animal {
public ItemOrcamentoComplexo orcamentoGastosAnimal();
}
6
Bloco de Questões B
Um banco possui um sistema onde é definida a seguinte classe que representa um correntista e o
saldo de sua conta bancária:
public class Correntista {
private String cpfCliente; // cpf do correntista
private float saldo; // saldo da conta
public Correntista(String cpfCliente, float saldo) {
this.cpfCliente = cpfCliente;
this.saldo = saldo;
}
public String getCPFCliente() {
return cpfCliente;
}
public float getSaldo() {
return saldo;
}
public void setSaldo(float saldo) {
this.saldo = saldo;
}
}
Questão B.4
Escreva um método que receba três parâmetros:
ú um vetor C de objetos da classe Correntista representando os correntistas de um
banco;
ú um vetor M de objetos que implementam a interface MovimentoConta representando o
movimento de diversos correntistas em um banco;
ú um objeto que implementa a interface OperacoesBanco.
O método deve atualizar o saldo dos correntistas do vetor C com os movimentos que estão
no vetor M. Observe que cada movimento é referente a apenas um dos correntistas.
7
Nesta questão basta implementar o método, não é necessária a especificação da classe.
Questão B.5
Dada as classes a seguir:
Representa o total de despesas de um mês
public class DespesaMes {
private int mes; // mes da despesa
private float valor; // valor da despesa
public DespesaMes(int mes, float valor) {
this.mes = mes;
this.valor = valor;
}
public int getMes() {
return mes;
}
public float getValor() {
return valor;
}
}
Escreva uma classe que representa todas as despesas de um indivíduo. Ela mantém um
vetor onde podem ser registradas tanto despesas de um dia (DespesaDia), quanto despesas de
um mês (DepesaMes). A classe implementa os seguintes métodos:
Construtor Recebe como parâmetro o CPF e um vetor com as despesas de um
indivíduo e as guarda.
getCPF Retorna o CPF do indivíduo.
totalizaMes Recebe um parâmetro com um mês (int) e retorna um objeto da
classe DespesaMes onde estará registrada a soma de todas as
despesas que o indivíduo fez naquele mês.
Questão B.6
Dada a seguinte classe que representa os dados de um correntista, mais as despesas previstas para o
mesmo.
8
public class CorrentistaDespesa extends Correntista {
private DespesasIndividuo despesasPrevistas; // despesas previstas
public CorrentistaDespesa(String cpfCliente, float saldo,
DespesasIndividuo despesas) {
super(cpfCliente, saldo);
this.despesasPrevistas = despesas;
}
public DespesasIndividuo getDespesasPrevistas() {
return despesasPrevistas;
}
}