Difuculdade em encapsulamento, polimorfismo

10 respostas
programaçãojava
L

Objetivo Geral:
➔ Criar programa para simular um sistema de recursos humanos.

Objetivos Específicos:
➔ Crie uma Classe Empregado, contendo os atributos encapsulados, com seus respectivos seletores (getters) e modificadores (setters), e ainda o construtor padrão e pelo menos mais duas opções de construtores.
➔ Atributos: String nome; Integer matricula; Double salario; Integer idade, String cargo;
➔ Métodos: gerarPagamento, alterarCargo (este método recebe um objeto Empregado e altera o cargo do empregado atual conforme o do objeto recebido).
➔ Crie as subclasses de Empregado, sendo Chefe e Subordinado.
➔ Utilize de polimorfismo para que a conta Chefe tenha um comportamento diferente no método gerarPagamento de forma que ganhe um adicional de 15% sobre o salário.
➔ Crie a classe Main que irá executar o código e imprimir os menus para o usuário.
➔ Todos valores inseridos pelo usuário devem ser verificados sua validade.
➔ Todo código deve utilizar das regras e convenções de programação ensinadas conforme slides das aulas.

Telas de Exemplo:
➔ O sistema deve apresentar opções de interação com o usuário similares, mas não necessariamente iguais as seguintes:


************* EMPRESA XXX **************
Bem vindo ao sistema de recursos humanos!
Digite a opção correspondente a operação desejada:

1 - Cadastrar empregado
2 - Definir/Alterar salário
3 - Alterar cargo

➔ Caso o usuário selecione a opção Cadastrar empregado, serão pedidos os dados de cadastro e será criado o respectivo empregado;
➔ Caso selecione Alterar cargo será pedido um usuário e o cargo do usuário atual será igualado ao do modelo.


package recursoshumanos;

/**
*

  • @author Lívia Gonçalves, Gabriel Galvão, Wanessa Diniz
    */

import java.util.Scanner;

public class Empregado {

private String nome;

private Integer matricula;

private Double salario;

private Integer idade;

private String cargo;
public Empregado(String nome, Integer matricula, Double salario, Integer idade, String cargo){
    this.nome = nome;
    this.matricula = matricula;
    this.salario = salario;
    this.idade = idade;
    this.cargo = cargo;
}

public Empregado() {
    
}
/**
 * @return the nome
 */
public String getNome() {
    return nome;
}
public void setNome(String nome) {
    this.nome = nome;
}
public Integer getMatricula() {
    return matricula;
}
public void setMatricula(Integer matricula) {
    this.matricula = matricula;
}
public Double getSalario() {
    return salario;
}
public void setSalario(Double salario) {
    this.salario = salario;
}
public Integer getIdade() {
    return idade;
}


public void setIdade(Integer idade) {
    this.idade = idade;
}


public String getCargo() {
    return cargo;
}


public void setCargo(String cargo) {
    this.cargo = cargo;
}
public double gerarPagamento(String cargo){

if(cargo.equalsIgnoreCase(Chefe)){

return salario + (salario * 0.15);

}else

return salario;

}
}

public alterarCargo(Empregado empregado){

this.cargo = empregado.cargo;

}

}

agora não sei mais o q fazer alguem poderia me ajudar

10 Respostas

darlan_machado

Qual a tua dificuldade, especificamente.
Muito código, não vou ler tudo isso não. hahahaha

L

depois de fazer os gets e os sets não sei o q fazer…

darlan_machado

Vamos lá:
O conceito de polimorfismo diz que, numa relação de herança ou implementação (classe concreta ou interface, respectivamente), a subclasse tem um modo diferente de executar determinado método.
Exemplo:

public class Animal {
    public void falar(){}
}

public class Cachorro extends Animal{
    @Override
    public void falar() {
        System.out.println("Au au");
    }
}

public class Gato extends Animal{
    @Override
    public void falar() {
        System.out.println("Miau");
    }
}

Gato e Cachorro são animais, mas “falam” de modo diferente.

Quando ao encapsulamento, primeiro, tudo que é atributo deve ser private. Depois, métodos assessores. Não tem muito o que fazer depois disso.

staroski

Crie as subclasses de Empregado, sendo Chefe e Subordinado.

Está errado dessa forma, o enunciado diz o seguinte:
Utilize de polimorfismo para que a conta Chefe tenha um comportamento diferente no método gerarPagamento de forma que ganhe um adicional de 15% sobre o salário.

O método gerarPagamento() da classe Empregado fica assim:

public double gerarPagamento(){
    return salario;
}

E o método gerarPagamento() da classe Chefe fica assim:

@Override
public double gerarPagamento() {
    return super.gerarPagamento() * 1.15;
}
L

quando faço método alterar cargo

public alterarCargo(Empregado empregado){

this.cargo = empregado.cargo;

}

porem fica com erro o q fiz de errado

staroski

Quando postar código, formate ele adequadamente usando o botão de texto pré formatado, identificado pelo símbolo </>

O compilador costuma dizer o que está errado.
Qual a mensagem de erro?

Posta o seu código.

L
public class Empregado {
    private String nome;
    private Integer matricula;
    private Double salario;
    private Integer idade;
    private String cargo;
public Empregado(String nome, Integer matricula, Double salario, Integer idade, String cargo){
    this.nome = nome;
    this.matricula = matricula;
    this.salario = salario;
    this.idade = idade;
    this.cargo = cargo;
}

public Empregado() {
    
}
/**
 * @return the nome
 */
public String getNome() {
    return nome;
}
public void setNome(String nome) {
    this.nome = nome;
}
public Integer getMatricula() {
    return matricula;
}
public void setMatricula(Integer matricula) {
    this.matricula = matricula;
}
public Double getSalario() {
    return salario;
}
public void setSalario(Double salario) {
    this.salario = salario;
}
public Integer getIdade() {
    return idade;
}


public void setIdade(Integer idade) {
    this.idade = idade;
}


public String getCargo() {
    return cargo;
}


public void setCargo(String cargo) {
    this.cargo = cargo;
}


   public double gerarPagamento(){
   return salario;
   
      
}
   public alterarCargo(Empregado empregado){
   this.cargo = empregado.cargo;
   }
   
   
   }

o erro q aparece é invalid method declaration; return type required

staroski

Você escreveu seu método assim:

public alterarCargo(Empregado empregado){
    this.cargo = empregado.cargo;
}

Faltou dizer o tipo de retorno dele, se ele não retorna nada, tem que ser void
Se retorna algo, tem que ser o tipo de dado que ele retorna.

L

fiz umas mudanças mais mesmo assim não roda direito

package recursoshumanos;

/**
 *
 * @author Lívia Gonçalves, Gabriel Galvão, Wanessa Diniz
 */

import java.util.Scanner;

public class Empregado {
    private String nome;
    private Integer matricula;
    private Double salario;
    private Integer idade;
    private String cargo;
    
    public Empregado(String nome, Integer matricula, Double salario, Integer idade, String cargo){
        this.nome = nome;
        this.matricula = matricula;
        this.salario = salario;
        this.idade = idade;
        this.cargo = cargo;
    }

    public Empregado() {
        
    }
    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }
    public Integer getMatricula() {
        return matricula;
    }
    public void setMatricula(Integer matricula) {
        this.matricula = matricula;
    }
    public Double getSalario() {
        return salario;
    }
    public void setSalario(Double salario) {
        this.salario = salario;
    }
    public Integer getIdade() {
        return idade;
    }

    
    public void setIdade(Integer idade) {
        this.idade = idade;
    }

    
    public String getCargo() {
        return cargo;
    }

    
    public void setCargo(String cargo) {
        this.cargo = cargo;
    }

    
   public double gerarPagamento(){
       return salario;
   
          
}
   public void alterarCargo(Empregado empregado ){
       this.cargo = empregado.cargo;
       
       System.out.println(this.cargo);
   }
   
package recursoshumanos;

/**
 *
 * @author Lívia Gonçalves, Gabriel Galvão, Wanessa Diniz
 */
public class Chefe extends Empregado {
    
    Double salario = super.getSalario();
    @Override
    public double gerarPagamento() {
        return super.gerarPagamento() * 1.15;
}
    public void alterarCargo(){
        
      
   }
}

 
package recursoshumanos;

/**
 *
 * @author Lívia Gonçalves, Gabriel Galvão, Wanessa Diniz
 */
public class Subordinado extends Empregado {
 Double salario = super.getSalario();
 String cargo = super.getCargo();
@Override
public double gerarPagamento() {
return super.gerarPagamento();
}

public void alterarCargo(){
    
  
   }
}

package recursoshumanos;

import java.util.Scanner;

/**
 *
 * @author Lívia Gonçalves, Gabriel Galvão, Wanessa Diniz
 */
public class Main {
    
/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
   Integer opcao;
   String nome;
   Integer matricula;
   Double salario;
   Integer idade;
   String cargo;
   
   Scanner teclado = new Scanner(System.in);
   
   Empregado e = new Empregado();
   Chefe c = new Chefe();
   Subordinado s = new Subordinado();
   Empregado empregado1 = new Empregado();
   Empregado empregado2 = new Empregado();
    
    System.out.println("************* EMPRESA WLG **************");
    System.out.println("Bem vindo ao sistema de recursos humanos!");
    System.out.println("Digite a opção correspondente a operação desejada:");
    System.out.println("");
    System.out.println("1 - Cadastrar empregado");
    System.out.println("2 - Definir/Alterar salário");
    System.out.println("3 - Alterar cargo");
    System.out.println("Sair");
    System.out.println("Digite sua opção: ");
    
    opcao = teclado.nextInt();
    
    switch (opcao){
        case 1:
            System.out.println("Digite o nome do funcionario: ");
            nome = teclado.next();
            e.setNome(nome);
            System.out.println("Nome: "+nome);
            
            System.out.println("Digite a Matricula: ");
            matricula = teclado.nextInt();
            e.setMatricula(matricula);
            System.out.println("Matricula: "+matricula);
            
            System.out.println("Digite a idade: ");
            idade = teclado.nextInt();
            e.setIdade(idade);
            System.out.println("Idade: "+idade);
            
            System.out.println("Digite cargo");
            cargo = teclado.next();
            e.setCargo(cargo);
            System.out.println("Cargo: "+cargo);
            
            System.out.println("Digite Salario");
            salario = teclado.nextDouble();
            e.setSalario(salario);
            System.out.println("Salario: "+salario);
            break;
        case 2:
            System.out.println("Qual o que deseja fazer? ");
            System.out.println("1 - Altera");
            System.out.println("2- Definir");
            
            Integer op;
            op = teclado.nextInt();
            
            switch (op){
                case 1:
                    c.gerarPagamento();
                    break;
                case 2:
                    s.gerarPagamento();
                    break;
            }
           
            break;
        case 3:
            System.out.println("ESCOLHA A OPÇÃO:");
            System.out.println("1 - Chefe para Subordinado");
            System.out.println("2 - Subordinado para chefe");
            
            Integer opc;
            opc = teclado.nextInt();
            switch (opc){
                case 1: {
                    System.out.println("Altera de Chefe para Subosrdinado");
                    c.alterarCargo(s);
                    break;
                }
                case 2:
                    System.out.println("Altera de Subordinado para chefe ");
                    s.alterarCargo(c);
                    break;
            }
            //e.alterarCargo(cargo);
            break;
            
    }
}

}
darlan_machado

Não roda direito significa o que, exatamente?
Erro na execução?
Exceções?
Executa, mas não faz o esperado?

Criado 28 de junho de 2019
Ultima resposta 30 de jun. de 2019
Respostas 10
Participantes 3