- Concepção de (três) classes em Java que
integram
alguns conceitos básicos da Programação com
Objectos, como a
herança e a redefinição de métodos.
- Utilização das ferramentas que permitem compilar
(javac), executar (java) e facilitam a
produção de documentação de programas
(javadoc).
Aplicando os conceitos de Programação com Objectos que
já conhece, concretize as classes EstacaoServico,
Veiculo e VeiculoPesado, cuja funcionalidade se descreve
de seguida:
- Classe EstacaoServico: Esta classe representa uma
estação de serviço. A estação de
serviço armazena combustível. Os veículos podem
abastecer-se numa das 10 bombas disponíveis, numeradas de 0 a 9.
A estação de serviço contabiliza o
combustível consumido em cada uma das bombas. Quando uma
estação de serviço é criada armazena 1000
litros de combustível. Considere que o combustível
é armazenado centralmente e que é partilhado por todas as
bombas.
Esta classe deve ainda implementar os métodos:
- retiraCombustivel, que recebe um valor inteiro,
correspondente à quantidade de combustível a retirar e
outro valor inteiro, entre 0 e 9, que identifica a bomba por onde o
combustível é retirado e devolve a quantidade de
combustível efectivamente retirado;
- obtemQuantidadeCombustivel, que devolve a quantidade
de combustível disponível para abastecimento;
- obtemConsumo, que recebe um valor inteiro, entre 0 e
9, identificando uma bomba, e que devolve a última quantidade de
combustível consumido por via da bomba indicada.
Note que, ao invocar o método retiraCombustivel,
deverá verificar se existe combustível suficiente para
satisfazer o pedido. Caso contrário, deverá apenas
retirar o restante e devolver a quantidade de combustível
efectivamente retirada.
- Classe Veiculo: Esta classe representa um veículo.
Um veículo tem uma marca, que corresponde a uma cadeia de
caracteres arbitrária. Garanta a existência de um
construtor desta classe que permita especificar a marca do
veículo. Um veículo pode acelerar, travar, buzinar e
abastecer. Assim, esta classe deverá contém os
métodos:
- acelera deverá simplesmente imprimir para o
ecrã a seguinte cadeia de caracteres: “VRUM VRUM”;
- trava deverá imprimir “GRRR GRRR”;
- buzina imprime “PII PII”;
- abastece recebe um valor inteiro correspondente
à quantidade de combustível (em litros) que se pretende
consumir, uma referência para um objecto da classe EstacaoServico
e ainda um valor inteiro identificando a bomba onde se
pretende fazer o abastecimento e deverá invocar o método
relevante da classe EstacaoServico;
- obtemMarca devolve a marca do veículo;
- Classe VeiculoPesado: Esta classe representa um
veículo pesado. Um veículo pesado é, para todos os
efeitos, um veículo, no entanto existem duas diferenças
importantes. Em primeiro lugar, quando um veículo pesado buzina
dever-se-á imprimir no ecrã a cadeia de caracteres “POO
POO”, ao invés do que ocorre num veículo genérico.
Por último, devido à necessidade de controlar a
actividade deste tipo de veículos, deverá haver forma de
contabilizar o número de acelerações e travagens.
Assim, esta classe deverá ainda
disponibilizar os métodos obtemNumeroAceleracoes e obtemNumeroTravagens
que devolvem as contagens
respectivas.
- Todas as classes referidas devem ter na sua interface um
método público estático obtemAutoria. Este
método
não deve receber qualquer parâmetro e deve devolver um
vector de inteiros (tipo int[]). O primeiro elemento do vector deve
estar preenchido com o número do grupo que realizou o
exercício e os restantes elementos devem corresponder aos
números dos alunos que realmente colaboraram na
execução deste trabalho. Se este trabalho tiver sido
executado por um único aluno, este método deve devolver
um vector com dois inteiros.
A classe EstacaoServico deve ainda possuir um método
estático main. Neste método, declare 10 objectos
da classe Veiculo. Construa os primeiros 5 como sendo
veículos genéricos e os restantes como veículos
pesados. A marca de cada um dos veículos deverá ser
“XPTOn”, em que n corresponde à ordem de
criação de cada um dos objectos, iniciando a contagem
para n = 1. Crie ainda um objecto da classe EstacaoServico.
Para cada uma das instâncias criadas, imprima o
resultado da invocação do método
obtemMarca e invoque ainda os métodos buzina,
abastece(150, referência para o objecto da classe
EstacaoServico criado, id), trava e acelera.
Relativamente
ao método abastece, deve
ser sempre abastecido 150 litros, na estação de
serviço criada e o dentificador de bomba deverá
corresponder ao resto
da divisão inteira do número do grupo que realizou o
trabalho pelo número de bombas da estação de
serviço.
Na avaliação será tido em conta:
- A qualidade dos comentários que acompanham a
definição de todas as classes e métodos
(máximo 5 valores);
- O correcto funcionamento do programa (máximo 15 valores).
Serão aplicadas as penalizações genéricas associadas ao processo de submissão.