Aplicando os conceitos de Programação com Objectos que já conhece, concretize as classes EstacaoServico, Veiculo e VeiculoPesado, cuja funcionalidade se descreve de seguida:

  1. 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:
    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.

  2. 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:

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

  4. 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:

Serão aplicadas as penalizações genéricas associadas ao processo de submissão.