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. 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.
Compartilhar