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

  1. Classe Portagem: Esta classe representa uma portagem. Uma portagem contabiliza o número de veículos que atravessam a portagem e ainda o número de cobranças efectuadas, isto porque nem todos os veículos pagam portagem. Os veículos podem atravessar a portagem por uma das dez (10) cabines disponíveis, numeradas de 0 a 9. O número de veículos que atravessam cada cabine é também contabilizado. Quando uma portagem é criada todos estes valores são inicializados a zero.

    Esta classe deve ainda implementar os seguintes métodos:
  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 passar a portagem. Assim, esta classe deverá conter 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 três 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. Em segundo lugar, ao abrigo de um acordo especial com a gestão da portagem, os veículos pesados não pagam a passagem. Por último, devido à necessidade de controlar a actividade deste tipo de veículos, deverá haver forma de contabilizar o número de passagens na portagem. Assim, esta classe deverá ainda disponibilizar o método o obtemNumeroPassagens que devolve a contagem respectiva.

  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 Portagem deve ainda possuir um método estático main. Neste método, declare e crie um objecto desta classe. Declare ainda 8 objectos da classe Veiculo. Construa os primeiros 3 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. Para cada uma das instâncias criadas, imprima o resultado da invocação do método obtemMarca e invoque ainda os métodos buzina, passaPortagem(referência para o objecto Portagem criado, id), trava e acelera. O identificador de bomba id deverá corresponder ao resto da divisão inteira do número do grupo que realizou o trabalho pelo número de cabines da portagem.

Na avaliação será tido em conta:

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