Curso de Programação Básica em Java Instituto de Computação – UNICAMP Elaborado por: Cecília Mary Fischer Rubira Fernando Castor Filho Última revisão: 14/04/2004 Roteiro de Herança e Agregação (2) Nota: Os exercícios devem ser executados na ordem apresentada pois o nível de dificuldade é crescente. 1. Leia as seções 7.3 e 7.4 do livro-texto. Nos itens de 1 a 3 deste roteiro, o código deve ser compilado e executado a partir do diretório documento, ou seja, o diretório documento deve ser o diretório corrente. Obtenha os arquivos documento/Documento.java, documento/Carta.java, documento/Telegrama.java e documento/ExemploDocumento2.java. Compile-os, execute o último e observe o seu comportamento. 2. Defina uma classe CartaRegistrada, subclasse de Carta. Essa classe deve ter dois atributos: a data e local de envio. Defina também uma classe Encomenda, subclasse de CartaRegistrada, com um único atributo correspondente ao conteúdo da encomenda (pode ser um String). Compile as duas classes. 3. Implemente um programa que cria objetos dos tipos CartaRegistrada e Encomenda e chama a operação imprimir( ) de cada um desses objetos. Compile esse programa e execute-o. 4. Nos itens 4 e 5 deste roteiro, o código deve ser compilado e executado a partir do diretório conta. Obtenha os arquivos conta/Conta.Java, conta/ContaDePoup.Java e conta/ExemploConta.Java. Compile as três classes e execute a última. O que acontece? Você sabe explicar o porquê? 5. Modifique a visibilidade do atributo saldo da classe Conta para private. Recompile o arquivo Conta.java. Por que a compilação não funciona? 6. Leia com atenção a seção 7.6 do livro-texto. Neste item, o código deve ser compilado e executado a partir do diretório fila. Obtenha os arquivos fila/Lista.java, fila/Fila.java e fila/ExemploFila.java. Compile-os e execute a classe ExemploFila. O resultado mostrado não respeita o comportamento padrão de uma fila (primeiro que entra/primeiro que sai). Por quê? Introduza uma relação de agregação entre as classes Fila e Lista de modo que a política “primeiro que entra/primeiro que sai” passe a valer. Compile as classes modificadas e recompile ExemploFila. O que acontece? 7. Nos itens de 7 a 9 deste roteiro, o código deve ser compilado e executado a partir do diretório veiculos. Obtenha o arquivo veiculos/Carro.java. Defina classes correspondendo ao motor do carro (Motor) e ao seu tanque de combustível (TanqueCombustivel) e agregue esses elementos à classe Carro. A classe Motor deve guardar informação indicando se o motor está ou não ligado e a classe TanqueCombustivel deve guardar a quantidade de combustível disponível e a sua capacidade máxima, sendo que a quantidade disponível nunca pode ser maior que a capacidade máxima. Defina uma operação ligar( ) na classe Carro que ativa o motor e gasta parte do combustível do tanque. Defina também operações na classe Carro para verificar se o motor está ou não ligado e qual a quantidade de combustível disponível no tanque. 8. Defina uma classe Caminhao com dois atributos: número de eixos (numEixos) e carga suportada (capacidade). Os valores de numEixos e capacidade devem ser passados para objetos do tipo Caminhao através do construtor da classe. Implemente operações para obter os valores desses dois atributos. Defina uma classe ExemploCaminhao que cria um objeto do tipo caminhão e imprime seu número de eixos e sua capacidade. Caminhões e carros são veículos bastante parecidos, embora não seja completamente preciso afirmar que um caminhão é um subtipo de carro. O que você faria para evitar que o mesmo código esteja repetido tanto na classe Carro quanto na classe Caminhão, tendo em vista que carros e caminhões têm características em comum? 9. Implemente uma classe Aviao. Agregue a essa classe um tanque de combustível, duas turbinas e um compartimento de carga. O tanque de combustível funciona da mesma forma que a classe TanqueCombustivel definida no Item 7. Cada turbina funciona como um motor do item 7, mas inclui informação adicional que indica o nível de potência (em percentagem) com o qual a turbina está funcionando, dado que ela está ligada. O compartimento de carga define a sua capacidade máxima e a quantidade atual, sendo que a quantidade atual jamais ultrapassa a capacidade máxima. Inclua em Aviao um construtor sem parâmetros que inicializa seus atributos com valores padrão. Além disso, inclua operações para obter as seguintes informações: capacidade máxima do tanque de combustível, quantidade atual de combustível no tanque, capacidade máxima do compartimento de carga, quantidade de carga atual, se as turbinas estão ou não ligadas e qual o nível de potência atual das turbinas (é razoável considerar que elas funcionam sempre com a mesma potência e são sempre ligadas e desligadas ao mesmo tempo). Crie uma classe principal ExemploAviao que cria um objeto do tipo Aviao e imprime suas informações.