- 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 Metropolitano,
Utente e UtentePasse, cuja funcionalidade se descreve de
seguida:
- Classe Metropolitano: Esta classe representa um meio de
transporte. Este meio de transporte contabiliza o número de
viagens efectuadas pelos seus utentes. Os utentes podem iniciar as
viagens numa das dez (10) estações disponíveis,
numeradas de 0 a 9. O metropolitano contabiliza também o
número de viagens iniciado em cada uma das suas
estações. Quando um objecto desta classe é criado
todos estes valores são inicializados a zero.
Esta classe deve ainda implementar os seguintes métodos:
- obtemNumeroViagens que devolve o número total
de viagens servidas;
- contabilizaViagem, que recebe um valor inteiro, entre
0 e 9, que identifica a estação onde se inicia a viagem e
incrementa o contador que contabiliza o número total de viagens
efectuadas, bem como o contador associado à
estação indicada;
- Deve haver também um outro método obtemNumeroViagens
que recebe um valor inteiro, entre 0 e 9, identificando uma
estação e que devolve o número de viagens que se
iniciaram na estação indicada.
- Classe Utente: Esta classe representa um utente do
sistema de metropolitano. Um utente tem um nome, que corresponde a uma
cadeia de caracteres arbitrária. Garanta a existência de
um construtor desta classe que permita especificar o nome do utente. Um
utente pode viajar e pedir informações. Assim, esta
classe deverá conter os métodos:
- pedeInformacoes deverá imprimir para o
ecrã a seguinte cadeia de caracteres: “Como vou para o IST?”;
- viaja recebe um valor inteiro, entre 0 e 9, que
identifica uma estação de metropolitano e deverá
invocar o método relevante da classe Metropolitano, mas antes
disso deverá fazer a validação do título de
transporte;
- validaTitulo procede à validação
do título e não deverá ter acesso
público;
- passaPortagem recebe 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. Ao invocar este método,
deverá aparecer no ecrã a seguinte cadeia de caracteres:
“Titulo Valido”;
- obtemNome devolve o nome do utente.
- Classe UtentePasse: Esta classe representa um utente com
passe. Um cliente com passe é, para todos os efeitos, um utente,
no entanto, existem duas diferenças importantes. Em primeiro
lugar, quando um utente com passe valida o seu título,
deverá aparecer no ecrã o mesmo que aparece ao utente
genérico acrescido de uma nova linha, com a seguinte cadeia de
caracteres: “Valido ate ao final do mes corrente”. Em segundo lugar,
admitimos que o utente com passe contabiliza o número de viagens
efectuadas com o seu título, para efeitos estatísticos.
Assim, esta classe deverá incluir na sua interface o
método obtemNumeroViagens que devolve o número de
viagens efectuadas pelo utente com passe.
- 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 3 inteiros (tipo int[]). O primeiro elemento do vector deve
estar preenchido com o número do grupo que realizou o
exercício e os outros dois 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 Metropolitano deve ainda possuir um método
estático main. Neste método, declare 20 objectos
da classe Utente. Construa os primeiros 7 como sendo utentes
genéricos e os restantes como utentes com passe. O nome de cada
um dos utentes 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 obtemNome e invoque
ainda os métodos viaja(id) e pedeInformacoes. O
identificador de estação id deverá
corresponder ao resto da divisão inteira do número do
grupo que realizou o trabalho pelo número de
estações de metropolitano.
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.