TrabalhosGratuitos.com - Trabalhos, Monografias, Artigos, Exames, Resumos de livros, Dissertações
Pesquisar

Trabalho

Por:   •  14/4/2015  •  Artigo  •  1.083 Palavras (5 Páginas)  •  237 Visualizações

Página 1 de 5

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);

  }

}

...

Baixar como (para membros premium)  txt (6.4 Kb)   pdf (135.8 Kb)   docx (20.9 Kb)  
Continuar por mais 4 páginas »
Disponível apenas no TrabalhosGratuitos.com