Baixe o app para aproveitar ainda mais
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. 6ª Lista de Exercícios Parte I - Exercícios teóricos de fixação 1) Complete as frases a seguir: a. _____________ é uma forma de reutilização de software em que novas classes adquirem os membros de classes existentes e aprimoram essas classes com novas capacidades. b. Em um relacionamento _____________, um objeto de uma subclasse também pode ser tratado como um objeto de sua superclasse. c. Em um relacionamento _____________, um objeto de uma dada classe possui como atributo referências a objetos de outras classes. d. Membros _____________ de uma superclasse são acessíveis em qualquer lugar em que o programa tem uma referência para o objeto daquela superclasse ou para um objeto de uma de suas subclasses, considerando que a superclasse e a subclasse são ambas public. e. O construtor da subclasse pode chamar construtores da superclasse via palavra-chave _____________. f. A classe que é criada usando o mecanismo de herança é chamada de _____________. g. A classe que é usada como base para criar a classe herdeira é chamada de _____________. h. Em Java, para estender uma classe é necessário utilizar a palavra-chave _____________ na declaração da subclasse. i. O _____________ define os métodos que podem ser invocados, em tempo de compilação. j. O operador _____________ é utilizado para verificar a que classe pertence um objeto. k. A _____________ é a possibilidade de uma subclasse possuir um método com mesma assinatura de um método definido na superclasse. l. O _____________ permite a manipulação de instâncias de classes que herdam de uma mesma classe ancestral de forma unificada. m. Em Java, toda classe estende automaticamente a classe _______________. n. O método ____________ sinaliza se dois objetos são semanticamente equivalentes. o. O método ____________ retorna uma representação em String do objeto. 2) Classifique cada afirmativa a seguir como verdadeira (V) ou falsa (F). No caso da afirmativa ser falsa, explique. a. ( ) Os construtores de superclasse não são herdados por subclasses. b. ( ) Um relacionamento tem-um é implementado via herança. c. ( ) Uma subclasse herda todos os atributos e métodos da sua superclasse. d. ( ) O construtor da subclasse não necessariamente chama o construtor da superclasse. e. ( ) Quando há sobrescrita, a versão do método a ser executada é definida em tempo de execução. f. ( ) Em métodos, somente é possível haver polimorfismo na passagem de parâmetros. g. ( ) Em Java, uma classe pode estender apenas uma superclasse diretamente. h. ( ) Toda classe em Java possui uma superclasse. i. ( ) Métodos declarados com o modificador final não podem ser sobrescritos. 3) Discuta os benefícios de herança. 4) Alguns programadores preferem não utilizar acesso protected, porque acreditam que ele “quebra” o encapsulamento da superclasse. Discuta os méritos relativos de utilizar acesso protected versus utilizar acesso private em superclasse. 5) Qual a função do modificador final quando aplicados a classes? Em que ocasiões ele pode ser útil? 6) Diferencie herança múltipla e herança simples. Justifique porque Java não suporta herança múltipla. 7) Defina polimorfismo e qual a sua relação com herança. 8) Diferencia sobrecarga (overloading) de sobrescrita (overriding) de métodos. 9) Há programadores que consideram o uso de instanceof uma má prática. Você concorda? Justifique. 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. 10) Implemente a classe Poupanca utilizando herança. Em seguida, teste a inserção de poupanças em um repositório do tipo RepositorioContasVetor. 11) Utilizando a classe RepositorioContasVetor, procure por uma conta e tente chamar o método renderJuros(), específico de poupanças. O que acontece se a procura retornar um objeto do tipo Conta e não do tipo Poupanca? Em caso de ocorrência de erro, ajuste a sua implementação para preveni-lo. 12) Implemente a classe ContaBonificada. Lembre-se que o método creditar() deve ser sobrescrito. 13) Sobrescreva o método equals no sistema bancário a fim de ser possível verificar se duas contas são iguais. Em seguida, atualize a classe RepositorioContasVetor para prevenir que sejam adicionadas contas iguais e também para que o método de consultar uma conta faça a busca utilizando o método equals. 14) Sobrescreva o método toString no sistema bancário, a fim de prover uma representação textual de qualquer conta informando o número da conta e o nome do titular. 15) Crie uma classe chamada Pessoa, considerando que toda pessoa tem nome e idade. Crie uma classe Amigo, que herda de Pessoa e possui uma data de aniversário. Crie uma classe Conhecido, que herda de Pessoa e possui um e-mail. Todas essas classes devem ter 2 construtores: um que inicializa os atributos com valores passados como parâmetro e outro que não recebe parâmetros. Por fim, crie uma classe Agenda, que armazena pessoas em um vetor e que contém dois atributos que controlam a quantidade de amigos e a quantidade de conhecidos. Crie uma classe de teste para a classe Agenda, utilizando apenas a saída padrão, que deve: Adicionar informações à agenda Imprimir a quantidade de amigos e de conhecidos na agenda Imprimir todos os aniversários dos amigos presentes na agenda Imprimir todos os e-mails dos conhecidos na agenda 16) Escreva uma superclasse Funcionario e duas subclasses, Gerente e Atendente. A classe Funcionario deve possuir os atributos nome, CPF, salario e dataNascimento. A classe Atendente deve ter ainda o atributo comissao. Crie um método getSalario que deve retornar o salário do Funcionario. No caso de Gerente, deve ser retornado o salário acrescido de uma bonificação de R$2000,00. Crie uma classe de RepositorioFuncionarios1, similar ao repositório de contas do sistema bancário. Utilizando a entrada e a saída padrão, bem como o conceito de polimorfismo, crie também uma classe para testar o seu código que exibe um menu solicitando a operação a ser realizada: Adicionar gerente Adicionar atendente Listar todos os funcionários Mostrar salário de funcionário (o usuário deve informar o CPF do funcionário) Sair 1 A classe pode ser escrita utilizando vetor ou ArrayList.
Compartilhar