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:
- 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:
- obtemNumeroVendas, que devolve o número de
vendas efectuadas;
- obtemVolumeVendas, que devolve o valor total dos
produtos vendidos;
- obtemNumeroReclamacoes, que devolve o número de
reclamações recebidas de clientes;
- registaVenda, que recebe um montante relativo a uma
venda (valor de vírgula flutuante de precisão dupla), e
deve, portanto, incrementar o contador de vendas e a variável
que contabiliza o volume de vendas;
- registaReclamacao, que deverá incrementar o
contador de reclamações recebidas de clientes.
- 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:
- consultaCatalogo deverá simplesmente imprimir
para o ecrã a seguinte cadeia de caracteres: "Catalogo de
Vendas";
- reclama deverá invocar o método
relevante da loja e deverá ainda imprimir para o ecrãn o
seguinte: "Estou a reclamar";
- compraProduto recebe uma referência para um
objecto do tipo Loja e recebe um valor de vírgula
flutuante de precisão dupla e invoca o método
registaVenda da loja;
- obtemNome devolve o nome do cliente.
- 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.
- 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:
- 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.