Roteiro de Herança e Agregação (2) - IC

Propaganda
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.
Download