PONTIFÍCIA UNIVERSIDADE CATÓLICA DO RIO GRANDE DO SUL
FACULDADE DE INFORMÁTICA – Algoritmos e Programação II
Professora Isabel Harb Manssour
Exercícios de Revisão para P1
Considerando as classes Circulo e Ponto apresentadas abaixo, responda às questões 1 à 7.
Circulo
-centrox: int
-centroy: int
-raio: int
+Circulo(x:int, y:int, r:int)
+Circulo()
+area():double
+circunferencia():double
+diametro():int
+ toString() : String
Ponto
-x: int
-y: int
+Ponto(x:int, y:int)
+ setX (x: int)
+ getX ( ) : int
+ setY (y: int)
+ getY ( ) : int
+ deslocar (dx: int, dy: int)
+ toString ( ) : String
1. Apresente a implementação de um novo construtor para a classe Circulo que receba por parâmetro um objeto Ponto e
um raio para inicializar todos os seus atributos. Portanto, a assinatura do método deve ser: public Circulo(Ponto p, int r).
2. Faça a sobrecarga do método deslocar, considerando que ele irá receber um objeto Ponto por parâmetro. A assinatura
do método fica: public void deslocar (Ponto p). Este método irá alterar o valor dos atributos x e y, acrescentado à eles,
respectivamente, o valor x e y recebido por parâmetro.
3. Quando o método toString é implementado, considera-se que está sendo feita uma sobrecarga ou uma sobrescrita?
Explique.
4. Implemente o método equals na classe Ponto, considerando que um ponto é igual ao outro se as suas coordenadas x e
y, respectivamente, são iguais.
5. Implemente uma classe cadastro de pontos que tenha um arranjo de pontos como atributo e métodos para: incluir pontos
no cadastro; consultar se um ponto está no cadastro ou não; retornar o tamanho do cadastro (size); retornar o i-ésimo
elemento do cadastro(get(i)).
6. Apresente uma implementação para a classe Ponto em que o tipo dos atributos seja genérico, ou seja, no momento de
instanciar um ponto, o usuário escolhe se quer que as coordenadas x e y sejam do tipo Integer, Float ou Double.
7. Inclua um método de classe chamado getAreaCirculo na classe Circulo que recebe o valor do raio de um círculo por
parâmetro e retorna o valor da área deste círculo.
8. Implemente uma classe Pessoa para armazenar os seguintes dados de uma pessoa: idade, peso e altura. A classe deve
ter métodos set, get e toString. Implemente também um cadastro de Pessoas que permita apresentar os dados das
pessoas cadastradas ordenados por idade.
9. Implemente uma classe Produto para armazenar os seguintes dados de um produto: código, descrição e preço unitário.
Depois, implemente uma hierarquia de classes capaz de armazenar os produtos de um supermercado. Além do código,
descrição e preço unitário, para os produtos perecíveis é necessário ainda armazenar a data de validade. No caso dos
produtos de bazar é necessário armazenar o número máximo de vezes pelo qual o mesmo pode ser parcelado e a taxa
de juros a ser aplicada para cada mês de prazo.
10. Considerando a questão anterior, e utilizando polimorfismo, mostre como poderia ser criado um cadastro de produtos
capaz de adicionar e remover produtos, e apresentar uma listagem completa de todos os produtos, independente do seu
tipo.
11. Escreva um método em Java que recebe por parâmetro um arranjo de Pontos (considere a classe Ponto apresentada do
exercício 1) e retorna a média das coordenadas x dos pontos. A assinatura do método deve ser: public double
getMediaX(Ponto []array).
12. Implemente um método que recebe um arranjo de números inteiros por parâmetro e retorna este arranjo com os valores
na ordem inversa do que foram recebidos.
13. Considere uma classe abstrata Funcionario capaz de armazenar o nome, o CPF, o salário bruto e o número de filhos
de um funcionário. Esta classe possui um construtor que recebe por parâmetro os valores para inicializar os atributos e
um método abstrato getSalarioLiquido, além de gets, sets e toString. Uma empresa possui três tipos de
funcionários: caixa, vendedor e gerente. No cadastro da empresa existem dados que são específicos a cada tipo de
funcionário: número do caixa, percentual de vendas para o vendedor, e adicional pelo cargo de confiança para gerente.
Considerando a utilização da classe Funcionario e os dados fornecidos sobre a empresa, modele e implemente um
sistema que suporte um cadastro de funcionários. Indique claramente na sua implementação onde são usados
os conceitos de polimorfismo, herança e métodos abstratos. Na hierarquia de classes que deve ser criada considere
a sobrecarga do construtor da classe Funcionario, que recebe por parâmetro apenas os valores para inicializar os
atributos nome e cpf. É preciso implementar o corpo dos construtores, mas os demais métodos não é preciso
implementar, apenas apresentar a sua assinatura. Não será aceito apenas o diagrama de classes, é necessário
apresentar o código Java para especificação das classes.
14. Escreva um programa Java que cria dois arranjos de valores inteiros inicializadas com 100 valores aleatórios. Em
seguida o programa deverá imprimir qual é o maior valor que está armazenado nas duas listas simultaneamente. No
exemplo abaixo, com arranjos de 5 elementos, o maior valor armazenado nas duas é 07.
A1: 04,12,07,30,20
A2: 50,07,04,21,33
Obs: Para gerar um número aleatório, pode ser utilizado o método Math.random().
Para gerar um número entre 0 e (n - 1), utilize Math.random() * n.
Exemplo: para gerar um número entre 0 e 10 o trecho de código seria:
int numero;
numero = (int)(Math.random() * 11);
15. Considere a implementação de uma classe Filme, que possui como atributos titulo, ano e diretor, e métodos gets, sets,
equals e toString, e uma classe CadastroDeFilmes que possui como atributo um ArrayList<Filme> listaFilmes. O
construtor da classe CadastroDeFilmes deve ser private e ela deve possuir um método de classe chamado getInstance.
Apresente a implementação desta classe, sabendo que ela possui também um método public String
getFilmesOrdenadosPorAno(), que retorna em uma String as informações de todos os filmes (toString da classe Filme)
ordenados por ano. Apresente também que alterações deveriam ser feitas na classe Filme para facilitar esta ordenação.
DICA: o método Collections.sort() é o responsável por ordenar uma lista recebida por parâmetro.
16. Considerando a questão 15, explique o que deveria ser feito para que a classe CadastroDeFilmes também tenha um
método public String getFilmesOrdenadosPorTitulo() sem que seja necessário alterar as implementações feitas na
questão 15. Apresente as implementações necessárias.
17. Para que servem e quando devem ser usados os atributos de acesso: public, private e protected? Para ilustrar, ligue as
classes Classe2 e SubClasse1 (que é subclasse de Classe1) aos atributos da Classe1 que elas podem acessar
diretamente.
Pacote 1
Classe 2
Pacote 2
Classe1
int x;
private int y;
protected int z;
public int w;
Pacote 3
SubClasse1
18. Um clube de futebol possui 3 categorias de sócios: Branco, Amarelo e Vermelho. O tipo de evento que os diferentes tipos
de sócio têm direito bem como o valor que eles pagam por cada um deles varia conforme a categoria. O clube promove 3
tipos de eventos: partidas de futebol, shows e eventos Vip. Para entrar em um evento os sócios tem de carregar sua
carteirinha (que possui chip) com um certo número de créditos. Sócios categoria Amarela ganham um bônus de 10%
sempre que compram créditos e sócios categoria Vermelha ganham um bônus de 20%. Sócios categoria Branca só
podem entrar em partidas de futebol, categoria Amarela podem entrar em partidas de futebol e shows enquanto que os
categoria vermelha podem entrar em qualquer tipo de evento. Os eventos futebol, show e festa vip custam,
respectivamente, 20, 40 e 80 reais. As classes SocioBranco, SocioVermelho e SocioAmarelo modelam cada um dos três
tipos de sócio e são derivadas da classe abstrata Socio definida a seguir:
public abstract class Socio {
public enum CatEvento {Futebol,Show,EventoVip};
private String nome;
private double creditos;
public Socio(String nome){
this.nome = nome; creditos = 0;
}
public double getCreditos(){ return(creditos); }
public void insereCreditos(double valor){
creditos += valor;
}
private double custoEvento(CatEvento tipoEvento){
switch(tipoEvento){
case Futebol:
return(20);
case Show:
return(40);
case EventoVip:
return(80);
}
return(0);
}
// Verifica se o sócio pode entrar no evento (testa o tipo de
// sócio e o tipo de evento) e se tem créditos suficientes.
// Se puder entrar já debita os creditos.
public abstract boolean podeEntrar(CatEvento tipoEvento);
}
I.
II.
Escreva o código das classes SocioBranco, SocioVermelho e SocioAmarelo.
Crie uma classe chamada ControleEntrada que será usada no software de controle das roletas que controlam a
entrada nos eventos. Esta classe recebe por parâmetro no construtor a categoria do evento que vai ocorrer. A classe
deve oferecer os seguintes métodos:
a. “boolean podeEntrar(Socio s)” que recebe um sócio por parâmetro e devolve true ou false conforme o sócio
pode ou não entrar no evento. Os sócios autorizados a entrar devem ser armazenados em uma lista interna
da classe.
b. “int qtdadeVermelhos()” que retorna a quantidade de sócios categoria Vermelha que entraram no estádio
até então.
c. “int qtdadeComCreditos(Double valor)” que retorna a quantidade de sócios que entraram no estádio e que
possuem mais de “valor” créditos.
d. “int removeBrancos()” que remove todas as ocorrências de sócios categoria Branca da lista dos que já
entraram e retorna a quantidade de sócios removidos.
OBS: Não se restrinja às aulas do professor ou a apostilas e tutoriais. Vá à biblioteca, consulte os livros!
Download

Simulação de Sistemas