Buscar

POO lista7

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 3 páginas

Prévia do material em texto

Unidade Acadêmica de Garanhuns 
Curso: Bacharelado em Ciência da Computação. 
Disciplina: Programação Orientada à Objetos. 
Semestre: 2014.1 
Professora: Thaís Alves Burity Rocha. 
 
7ª Lista de Exercícios 
Parte I - Exercícios teóricos de fixação 
1) Complete as frases a seguir: 
a. Se uma classe contém pelo menos um método abstrato, ela é uma classe _____________. 
b. Classes que podem ser instanciadas são chamadas de classes _____________. 
c. _____________ envolve a utilização de uma variável da superclasse para invocar métodos sobre 
objetos da superclasse ou da subclasse, permitindo a “programação genérica”. 
d. Métodos que não possuem implementação e não foram declarados em uma interface devem ser 
explicitamente declarados com a palavra-chave _____________. 
e. _____________ significa converter uma variável de referência do tipo da superclasse para o tipo da 
subclasse. 
f. _____________ indica que objetos de uma classe que a implementa exibem uma determinada 
propriedade. 
g. Ao invés de usar a palavra-chave _____________, a declaração de interfaces usa a palavra-chave 
_____________. 
h. Uma interface não pode ter _____________. 
i. Uma interface define um _____________, enquanto que as classes que a implementam definem 
_____________. 
j. É possível declarar uma interface como _____________, embora seja redundante. 
k. Métodos declarados em uma interface não podem ser marcados como _____________, uma vez que 
em algum momento deverão ser sobrescritos. 
2) Classifique cada afirmativa a seguir como verdadeira (V) ou falsa (F). No caso da afirmativa ser falsa, explique. 
a. ( ) É possível tratar objetos da superclasse e da subclasse de maneira similar. 
b. ( ) Todos os métodos em uma classe abstrata devem ser declarados como métodos abstratos. 
c. ( ) É perigoso tentar invocar um método específico de uma subclasse através de uma variável do tipo 
da subclasse. 
d. ( ) Se uma superclasse declara um método abstrato, sua subclasse deve implementá-lo. 
e. ( ) Um objeto de uma classe que implementa uma interface pode ser interpretado como um objeto do 
tipo da interface. 
f. ( ) É possível instanciar uma classe abstrata, mas não é possível instanciar uma interface. 
g. ( ) Para implementar uma interface, basta usar a palavra reservada implements na assinatura da 
classe. 
h. ( ) Se a superclasse implementa uma interface, as subclasses também a implementam. 
i. ( ) Uma interface é um tipo especial de classe abstrata. 
j. ( ) Uma interface não pode ter métodos e atributos static final. 
k. ( ) Os modificadores de acesso de interfaces são os mesmos de métodos. 
l. ( ) Uma classe só pode ter uma superclasse e só pode implementar uma interface. 
3) O que é classe abstrata? Quando o uso de classe abstrata é mais recomendado em relação ao uso de herança? 
4) Descreva de forma sucinta para que serve um método abstrato. 
5) No material da sala de aula foi mostrada uma hierarquia de classes de banco. Discuta formas alternativas de 
projetar tais classes e quais as vantagens e desvantagens de cada uma delas para o contexto do sistema bancário. 
6) Explique os resultados da execução do método main a seguir e quais são os conceitos OO que são aplicados. 
abstract class Ator { 
 public abstract void getAto(); 
} 
 
class AtorFeliz extends Ator { 
 public void getAto() { 
 System.out.println("Ator feliz"); 
 } 
} 
 
class AtorTriste extends Ator { 
 public void getAto() { 
 System.out.println("Ator triste"); 
 } 
} 
 
class Palco { 
 private Ator ator = new AtorFeliz(); 
 public void alterar() { ator = new AtorTriste(); } 
 public void atuar() { ator.getAto(); } 
} 
 
public class Programa { 
 public static void main(String[] args) { 
 Palco palco = new Palco(); 
 palco.atuar(); 
 palco.alterar(); 
 palco.atuar(); 
 } 
} 
7) Discuta a importância do conceito de interface em programação orientada a objetos. 
8) Faça uma análise comparativa entre classes abstratas e interfaces. Por que você usaria uma classe abstrata? Por 
que você usaria uma interface? 
Parte II - Exercícios práticos 
Observação: Nenhuma questão pede explicitamente para ser utilizado comentários de código, embora o uso 
seja fortemente recomendado. 
9) Atualize o sistema bancário para implementar a hierarquia de contas bancárias (ContaAbstrata, Conta, 
Poupanca, ContaBonificada, ContaImposto) tal como visto em sala de aula. 
10) Atualize o sistema bancário para que as classes de repositório de contas implementem a interface 
IRepositorioContas, tal como visto em sala de aula. 
11) Atualize o sistema bancário para incluir uma interface de repositório de clientes, de maneira similar ao que foi 
feito com o repositório de contas. 
12) Escreva uma classe abstrata chamada CartaoWeb, que representa todos os tipos de cartões web e que contém 
apenas o atributo destinatario (String) e o método abstrato exibirMensagem(). Em seguida, 
escreva as subclasses DiaDosNamorados, Natal e Aniversario, cujos construtores devem receber o 
nome do destinatário do cartão como parâmetro. Lembre-se que tais classes devem implementar o método 
exibirMensagem(), mostrando uma mensagem com o nome do destinatário e que seja específica para a 
data comemorativa do cartão. Então, a fim de testar seu código, crie um vetor de CartaoWeb no método 
main, insira instâncias dos 3 tipos de cartões neste vetor e, percorrendo-o com um laço, exiba as mensagens de 
cada cartão chamando o método exibirMensagem(). Por fim, responda: Em que linha(s) acontece 
polimorfismo? 
13) Considere uma classe BandeiraBrasil. Ela possui quatro atributos primeiraCor, segundaCor, 
terceiraCor, quartaCor, que devem ser preenchidas com os valores VERDE, AMARELO, AZUL e 
BRANCO, respectivamente. A interface Cor define um conjunto de constantes que representam as cores básicas. 
Utilizando tais constantes, ajuste o construtor da classe BandeiraBrasil para ele inicializar os valores dos 
atributos com os devidos valores. 
14) Atualize a classe Cliente no sistema bancário, fazendo-a implementar a interface Comparable, tal como 
visto para ContaAbstrata, de maneira ser possível ordenar um vetor de Cliente pela idade (se este 
atributo não existia na classe, adicione-o), através do método Arrays.sort(). Em seguida, crie um 
código de teste, demonstrando o uso do referido método de ordenação. 
15) Atualize a interface IRepositorioContas para incluir o método ordenar (sem retorno e sem 
parâmetros). Em seguida, atualize as classes RepositorioContasVetor e 
RepositorioContasArrayList, a fim de implementar o método ordenar. Para tanto, utilize os 
métodos Arrays.sort() e Collections.sort(). Não esqueça de atualizar a classe ContaAbstrata 
para implementar a interface Comparable e fazer com que as contas sejam ordenadas pelo saldo, tal como 
visto em sala de aula. 
16) A hierarquia a seguir representa o vínculo empregatício das pessoas em um sistema de gestão hospitalar. 
 
Com base nos conceitos OO estudados (herança, classes abstratas e interfaces), implemente essa hierarquia de 
classes, o que envolve a definição de atributos e métodos para cada classe. Também implemente uma ou mais 
classes de repositório, além de uma classe para testar seu código, demonstrando o comportamento polimórfico. 
17) Implemente uma hierarquia de classes que atenda às requisições a seguir. Crie também uma classe para testar o 
seu código. 
 Armazenar informações sobre veículos: Chassi, placa, marca, modelo, revendedor, endereço do revendedor 
e telefone do revendedor. Caso seja um veículo de passeio: A velocidade máxima e a quantidade de 
passageiros. Caso seja um veículo de carga: A carga máxima. Observação: Cadastrar até10 veículos. 
 Armazenar informações sobre motoristas: Matrícula, nome, correção visual, validade da habilitação e tipo 
(A, B ou C). Observação: O cadastro será de no máximo 10 motoristas. 
 Registrar movimentações para os veículos, onde em cada movimentação será necessário registrar: O 
motorista, a quilometragem inicial e final e a data. Observação: Só armazenar as 5 últimas movimentações. 
 Registrar as manutenções realizadas nos veículos, onde para cada manutenção deverá ser registrado: Uma 
descrição da manutenção e a data. Observação: Apenas as 5 últimas manutenções devem ser armazenadas. 
 Listar as últimas movimentações para todos os veículos 
 Listar as últimas manutenções para todos os veículos 
18) Crie a seguinte hierarquia de classes: 
 Uma interface para representar qualquer forma geométrica, definindo métodos para cálculo do perímetro e 
cálculo da área da forma; 
 Uma classe abstrata para representar quadriláteros. Seu construtor deve receber o tamanho dos 4 lados e o 
método de cálculo do perímetro já pode ser implementado; 
 Classes para representar retângulos e quadrados. A primeira deve receber o tamanho da base e da altura no 
construtor, enquanto a segunda deve receber apenas o tamanho do lado; 
 Uma classe para representar um círculo. Seu construtor deve receber o tamanho do raio. 
No programa principal, pergunte ao usuário quantas formas ele deseja criar. Em seguida, para cada forma, 
pergunte se deseja criar um quadrado, um retângulo ou um círculo, solicitando os dados necessários para criar a 
forma. Todas as formas criadas devem ser armazenadas em um vetor. Finalmente, imprima: (a) os dados (lados 
ou raio); (b) os perímetros; e (c) as áreas de todas as formas. Para (b) e (c), tire vantagem do polimorfismo, 
enquanto que para (a) utilize instanceof e downcast.

Outros materiais