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 Loja, Cliente e ClienteVip, cuja funcionalidade se descreve de seguida:

  1. Classe Loja: Esta classe representa uma loja. Uma loja contabiliza o número de vendas efectuadas, o valor total dos produtos vendidos (volume de vendas) e ainda o número de reclamações recebidas de clientes. Quando uma loja é criada todos estes valores são inicializados a zero.

    Esta classe deve ainda implementar os seguintes métodos:
  2. Classe Cliente: Esta classe representa um cliente da loja. Um cliente 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 cliente. Um cliente pode consultar o catálogo de produtos, pode pedir o livro de reclamações e pode comprar um produto. Assim, esta classe deverá conter os métodos:
  3. Classe ClienteVip: Esta classe representa um cliente importante (cliente vip). Um cliente vip é, para todos os efeitos, um cliente, no entanto, existem três diferenças importantes. Em primeiro lugar, quando um cliente vip pede o catálogo de produtos vê tudo o que um cliente vê, acrescido de uma lista de promoções. Represente isso mesmo imprimindo o seguinte: "Lista de promocoes". Em segundo lugar, ao efectuar a compra de um produto, um cliente vip tem sempre direito a um desconto de 10% sobre o valor do produto. Assim, o volume de vendas contabilizado deverá corresponder ao preço do produto menos o valor do desconto. Por fim, um cliente vip acumula pontos (valor inteiro). Assim, recebe cinco pontos por cada compra de montante superior a 10. Implemente um método obtemPontos que permite consultar o saldo actual de pontos de um cliente vip.

  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 Loja deve ainda possuir um método estático main. Neste método, crie um onjecto ada classe Loja e declare 22 objectos da classe Cliente. Construa os primeiros 7 como sendo clientes genéricos e os restantes como clientes vip. O nome de cada um dos clientes 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 consultaCatalogo, reclama e compraProduto(referência para a loja criada, 15.0).

Na avaliação será tido em conta:

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