- 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 Portagem,
Veiculo e VeiculoPesado, cuja funcionalidade se descreve
de seguida:
- 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:
- obtemNumeroVeiculos que devolve o número total
de veículos que atravessaram a portagem;
- obtemNumeroCobrancas, que devolve o número
total de passagens cobradas;
- contabilizaPassagemGratuita que recebe um valor
inteiro, entre 0 e 9, identificando uma cabine e que incrementa o
contador que regista o número total de veículos que
atravessaram a portagem e o contador da cabine respectiva;
- contabilizaPassagemPaga, que recebe igualmente um
identificador da cabine incrementando o contador de veículos da
cabine e do total da portagem, bem como o contador de cobranças;
- Deve existir ainda um segundo método obtemNumeroVeiculos
que, recebendo um identificador de cabine, deverá devolver
apenas o número de veículos que fizeram a travessia da
portagem por via da cabine indicada.
- 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:
- acelera deverá simplesmente imprimir para o
ecrã a seguinte cadeia de caracteres: “VRUM VRUM”;
- trava deverá imprimir “GRRR GRRR”;
- buzina imprime “PII PII”;
- passaPortagem recebe uma referência para um
objecto do tipo Portagem, e um valor inteiro, entre 0 e 9,
que identifica uma cabine e deverá invocar o método
relevante da classe Portagem, tendo em conta que os veículos,
genericamente, pagam portagem;
- 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 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.
- 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:
- 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.