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

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

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

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

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

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