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

  1. Classe Operadora: Esta classe representa uma operadora de telecomunicações móveis. Uma operadora contabiliza o número total de minutos de conversação gastos pelos clientes, bem como o número total de mensagens escritas entregues. Quando uma operadora é criada todos estes valores são inicializados a zero.

    Esta classe deve ainda implementar os seguintes métodos:
  2. Classe Telemovel: Esta classe representa um telemóvel. Um telemóvel tem uma marca, que corresponde a uma cadeia de caracteres arbitrária, e uma dada Operadora. Garanta a existência de um construtor desta classe que permita especificar a marca do telemóvel e a sua Operadora. Um telemóvel pode tocar, telefonar ou enviar uma mensagem. Assim, esta classe deverá conter os métodos:
  3. Classe TelemovelPrePago: Esta classe representa um telemóvel pré-pago. Um telemóvel pré-pago é, para todos os efeitos, um telemóvel, no entanto, existem diferenças importantes. Em primeiro lugar, um telemóvel pré-pago guarda um valor correspondente ao seu saldo. Quando é criada uma instância desta classe, o valor do saldo é inicializado a 10. Ao invocar o método telefona, para além do comportamento descrito para o telemóvel genérico, o valor do saldo deverá ser decrementado tanto quantos os minutos consumidos. Se o valor de saldo não for suficiente para completar a chamada, serão apenas consumidos os minutos que o saldo permita, devendo este valor reflectir-se no consumo comunicado à operadora. O envio de mensagens não consome saldo, isto é, o envio de mensagens é gratuito, mas um telemóvel pré-pago só pode enviar uma mensagem se o seu saldo não for nulo. Assim, a tentativa de enviar uma mensagem quando o saldo é zero não terá qualquer efeito. Esta classe deverá ainda disponibilizar os métodos obtemSaldo, que devolve o valor de saldo actual e carregaTelemovel, que recebe um valor inteiro (carregamento) e incrementa o valor do saldo tanto quanto a quantia indicada.

  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 Operadora deve ainda possuir um método estático main. Neste método, declare e crie um objecto da classe Operadora declare 12 objectos da classe Telemovel. Construa os primeiros 6 como sendo telemóveis genéricos e os restantes como telemóveis pré-pagos. Cada telemóvel está associado ao objecto Operadora criado. A marca de cada um dos telemóveis 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 telefona(10), enviaMensagem e toca.

Na avaliação será tido em conta:

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