Prova Prática de Programação Orientada a Objetos em Java
Instruções
Esta prova prática avalia seu conhecimento sobre Herança, Classes, Objetos, Sobrescrita,
Classes Abstratas, Interfaces e Generics. Leia atentamente as instruções e implemente cada
requisito corretamente. Utilize boas práticas de programação, com código bem estruturado e
comentado. Ao finalizar, envie os arquivos do código-fonte no Moodle.
Contexto
Uma empresa de transportes precisa de um sistema para gerenciar diferentes tipos de
veículos. Os veículos podem ser carros e motos, ambos possuem características em comum,
mas também particularidades. Além disso, a empresa precisa de um sistema genérico para
gerenciar sua frota de veículos.
1. Tarefa: Criar uma Classe Abstrata Veiculo
Crie uma classe abstrata chamada Veiculo que será a classe base para os veículos do sistema.
Essa classe deve possuir três atributos protegidos: marca (String), ano (int) e velocidadeAtual
(double).
O construtor da classe deve inicializar esses atributos, e ela deve conter os seguintes métodos:
Um método abstrato exibirDetalhes( ), que será implementado pelas subclasses.
Um método public void acelerar(double incremento), que aumenta a velocidade do
veículo.
Um método public void frear(double decremento), que reduz a velocidade do veículo,
mas não pode deixá-la menor que zero.
Um método public double getVelocidadeAtual( ), que retorna a velocidade atual do
veículo.
2. Tarefa: Criar as Classes Carro e Moto
Crie as classes Carro e Moto, que devem herdar de Veiculo e implementar o método
exibirDetalhes( ), exibindo todas as informações do veículo.
A classe Carro deve possuir um atributo quantidadePortas(int) e um atributo
arCondicionadoLigado (boolean). Além disso, deve conter os seguintes métodos:
public void ligarArCondicionado( ), que liga o ar-condicionado.
public void desligarArCondicionado( ), que desliga o ar-condicionado.
public boolean isArCondicionadoLigado( ), que retorna o estado do ar-condicionado.
A classe Moto deve possuir um atributo cilindrada (int) e um atributo capaceteObrigatorio
(boolean), que sempre deve ser true. Além disso, deve conter um método chamado public void
empinar( ), que exibe uma mensagem informando que a moto está empinando.
3. Tarefa: Criar uma Interface Transportavel
Crie uma interface chamada Transportavel, que deverá ser implementada pelas classes Carro e
Moto. A interface deve conter os seguintes métodos:
void transportar(String destino);, que exibe uma mensagem informando que o veículo
está transportando algo até o destino informado.
double calcularCustoTransporte(double distancia);, que retorna o custo do transporte
baseado na distância.
o A implementação desse método deve considerar os seguintes valores:
Carro: R$2,50 por km.
Moto: R$1,50 por km.
4. Tarefa: Criar uma Classe Genérica Garagem<T>
Crie uma classe genérica chamada Garagem<T>, que poderá armazenar veículos de qualquer
tipo. Essa classe deve conter um atributo private List<T> veiculos; para armazenar os veículos.
A classe deve fornecer os seguintes métodos:
void adicionarVeiculo(T veiculo), que adiciona um veículo à lista.
void listarVeiculos( ), que exibe os veículos armazenados.
T obterVeiculoMaisVelho( ), que percorre a lista e retorna o veículo com o ano mais
antigo.
A classe Garagem<T> deve ser restrita para aceitar apenas objetos que herdam de Veiculo,
garantindo que apenas veículos possam ser armazenados.
5. Tarefa: Criar o Programa Principal (Main)
Crie uma classe Main, onde será implementado o programa principal. Nele, você deve:
Criar objetos das classes Carro e Moto, fornecendo valores reais para seus atributos.
Chamar os métodos exibirDetalhes( ), acelerar( ), frear( ) e exibir a velocidade atual dos
veículos.
Usar os métodos específicos, como ligarArCondicionado( ) e empinar( ), verificando
seu funcionamento.
Implementar a interface Transportavel, chamando transportar( ) para diferentes
destinos e calculando o custo do transporte para distâncias variadas.
Criar um objeto Garagem<Veiculo>, adicionar veículos à garagem e listar os veículos
armazenados.
Obter e exibir o veículo mais antigo da garagem, utilizando o método
obterVeiculoMaisVelho( ).