Trabalho
Por: trouxa • 14/4/2015 • Artigo • 1.083 Palavras (5 Páginas) • 237 Visualizações
CONSIDERAÇÕES INICIAIS (DICAS):
- Siga as instruções exatamente como escrito no texto da prova;
- Quando a questão fornecer nomes de classes, métodos e atributos, utilize os nomes fornecidos, sob pena de perda de pontos;
- Todas as questões desta prova solicitam a definição de classes que não devem interagir com o usuário, logo, não usem System.out nem Scan;
- Caso alguma informação não esteja completa, você deverá tomar suas próprias decisões para resolver conflitos. Use os conhecimentos adquiridos nas aulas e nos seus estudos ;
- Caso haja alguma inconsistência em alguma questão, nenhum aluno será prejudicado. Considere cuidadosamente o texto da prova, é com base nele que você poderá solicitar revisão, caso haja problemas.
INSTRUÇÕES:
- A prova deve ser resolvida individualmente.
- Respostas devem ser enviadas, até a data limite, para scbs@cin.ufpe.br, em um e-mail cujo assunto deve ser “[MPROF-POO]” (sem as aspas). O e-mail deve incluir um arquivo .zip com o projeto Eclipse que responde as questões abaixo.
- O corpo do seu e-mail deve indicar os nomes e endereços de e-mail (@cin.ufpe.br) dos membros da dupla (ou da pessoa) que resolveu as questões.
1) (4 pontos) Considere uma aplicação de folha de pagamento que possui a relação de todos os funcionários de uma empresa. Atualmente a aplicação armazena apenas dados sobre os funcionários da empresa. Considere a classe Funcionario definida na página 2. Agora, você foi contratado para fazer uma modificação na aplicação de controle de pagamento. Agora, a empresa cresceu e possui diferentes políticas de salário para diferentes tipos de funcionário, e a folha de pagamento deve considerar os mesmos. Além dos funcionários que possuem nome, cpf e salário, a empresa tem vendedores, que possuem o total de vendas realizadas (em reais) e o percentual de comissão (um valor real), e diretores, que possuem uma gratificação fixa (em reais) sobre o salário. O cálculo do salário dos funcionários deve ser feito por um método calcularSalario, que no caso do funcionário comum apenas retorna o salario, para o vendedor retorna a soma do salário ao percentual da comissão sobre as vendas, e para o gerente retorna a soma do salário a gratificação. Além disso, o funcionário tem um método iniciaMes que zera o valor das vendas do funcionário.
2) (2 pontos) Ao implementar a 1a versão da aplicação de folha de pagamento, os desenvolvedores não se preocuparam em tornar o código de negócio independente dos código de armazenamento de dados. Considerando a definição da classe RepositorioFuncionariosArray na página 2, implemente uma interface para a classe repositório, de modo que a classe possa ser desacoplada do CadastroFuncionarios (também na página 2). O que se espera é que a classe cadastro possa usar apenas a interface declarada, mudando apenas a declaração do atributo e seu construtor (linhas 3 e 4), sem mudar mais nenhuma das linhas.
3) (2 pontos) Implemente as classes de exceção FuncionarioNaoEncontradoException, utilizada pela classe RepositorioFuncionariosArray, e FuncionarioJaCadastradoException, utilizada pela classe CadastroFuncionarios, vide a página 2.
4) (2 pontos) Descreva um outro exemplo de subclasse para Funcionario ou Vendedor justificando por que o exemplo é de subclasse. Implemente a subclasse.
package folhaPagamento; public class Funcionario { private String nome; private String cpf; private double salario; public Funcionario(String nome, String cpf, double salario) { this.nome = nome; this.cpf = cpf; this.salario = salario; } public String getNome() { return this.nome; } public void setNome(String nome) { this.nome = nome; } public String getCPF() { return this.cpf; } public void setCPF(String cpf) { this.cpf = cpf; } public double getSalario() { return this.salario; } public void setSalario(double salario) { this.salario = salario; } } | package folhaPagamento; public class RepositorioFuncionariosArray { private Funcionario[] funcionarios; private int indice; public RepositorioFuncionariosArray(int tamanho) { this.funcionarios = new Funcionario[tamanho]; this.indice = 0; } public void inserir(Funcionario funcionario) { this.funcionarios[this.indice] = funcionario; this.indice = this.indice + 1; } public Funcionario procurar(String cpf) throws FuncionarioNaoEncontradoException { int i = this.getIndice(cpf); return this.funcionarios[i]; } public void remover(String cpf) throws FuncionarioNaoEncontradoException { int i = this.getIndice(cpf); this.funcionarios[i] = this.funcionarios[this.indice - 1]; this.indice = this.indice - 1; } public boolean existe(String cpf) { boolean resposta = true; try { this.getIndice(cpf); } catch (FuncionarioNaoEncontradoException ex) { resposta = false; } return resposta; } private int getIndice(String cpf) throws FuncionarioNaoEncontradoException { int resposta = -1; for (int i = 0; i < this.indice; i++) { if (this.funcionarios[i].getCPF().equals(cpf)) { resposta = i; } } if (resposta == -1) { throw new FuncionarioNaoEncontradoException(); } return resposta; } } |
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: | package folhaPagamento; public class CadastroFuncionarios { private RepositorioFuncionariosArray funcionarios; public CadastroFuncionarios(RepositorioFuncionariosArray funcionarios) { this.funcionarios = funcionarios; } public void cadastrar(Funcionario funcionario) throws FuncionarioJaCadastradoException { if (!funcionarios.existe(funcionario.getCPF())) funcionarios.inserir(funcionario); else throw new FuncionarioJaCadastradoException(); } public Funcionario procurar(String cpf) throws FuncionarioNaoEncontradoException { return funcionarios.procurar(cpf); } public void remover(String cpf) throws FuncionarioNaoEncontradoException { funcionarios.remover(cpf); } } |
...