Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Método Construtor - exercicio 1

class DadosFuncionario {
    String nomeFuncionario;
    String cpfFuncionario;
    String rgFuncionario;
}
class Funcionario {                                                                                                                           
    private int    idFuncionario;                                                                                                                         
    private String departamento;
//  String dataEntrada;
    private DataFuncionario   dataEntrada = new DataFuncionario(); //DataFuncionario vem da classe DataFuncionario
    private double salario;                                                                                                                       

    private DadosFuncionario nome = new DadosFuncionario();
    private DadosFuncionario cpf  = new DadosFuncionario();
    private DadosFuncionario rg   = new DadosFuncionario();

    private Endereco         rua    = new Endereco();   
    private Endereco         bairro = new Endereco();
    private Endereco         cidade = new Endereco();
    private Endereco         estado = new Endereco();
    private Endereco         cep    = new Endereco();   

   // Método Construtor (neste caso não é "void" por que não necessita de retorno, é apenas invocado)
     public Funcionario(String nome) {
               this.nome.nomeFuncionario = nome;
     }
restante do código ....

class AtualizaFuncionario {
        Funcionario f1 = new Funcionario();
        Funcionario f2 = new Funcionario();
    public static void main(String[] args) {

outra definições...
DadosFuncionario nome = new DadosFuncionario();
        nome.nomeFuncionario = "Joao das Coves";
        f1.setNome(nome);

nome.nomeFuncionario = "Luis das Coves";
        f2.setNome(nome);

O atributo nome pertence a classe DadosFuncionario, porem a classe construtora para nome foio criada na classe Funcionario.

Como faço referencia ao atributo nome na classe AtualizaFuncionario ?? para o funcionario f1 e funcionario f2 ??

3 respostas

Bom Dia,

Você deve passar o nome do funcionário ao instanciar a classe funcionário neste caso: Exemplo:.

Funcionario f1 = new Funcionario("Joao das Coves");

Funcionario f2 = new Funcionario("Luis das Coves");

Outra opção seria você criar o construtor dentro da classe DadosFuncionario.

// isto é um objeto                                                                                                                     
class Funcionario {                                                                                                                           
    private int    idFuncionario;                                                                                                                         
    private String departamento;
//  String dataEntrada;
    private DataFuncionario   dataEntrada = new DataFuncionario(); //DataFuncionario vem da classe DataFuncionario
    private double salario;                                                                                                                       

    private DadosFuncionario nome = new DadosFuncionario();
    private DadosFuncionario cpf  = new DadosFuncionario();
    private DadosFuncionario rg   = new DadosFuncionario();

    private Endereco         rua    = new Endereco();   
    private Endereco         bairro = new Endereco();
    private Endereco         cidade = new Endereco();
    private Endereco         estado = new Endereco();
    private Endereco         cep    = new Endereco();   

   // Método Construtor (neste caso não é "void" por que não necessita de retorno, é apenas invocado)
     public Funcionario(String nome) {
               this.nome.nomeFuncionario = nome;
     }

   // método recebe aumento
   public void recebeAumento(double valorAumento) {                                                                                                   
        this.salario += valorAumento; 
    }  

   //método calcula ganho anual
   // este metodo não pode ser void porque precisa retornar parametro.    
   public double getCalculaGanhoAnual() {
          double salarioAnual = this.salario * 12;
          return salarioAnual;   
    }

    public void mostra() {
         System.out.println("idFuncionario: "  + this.idFuncionario);                         
         System.out.println("departamento : "  + this.departamento);                        
         System.out.println("dataEntrada  : "  + this.dataEntrada);                        
         System.out.println("salario      : "  + this.salario);                        

//       System.out.println("nome         : "  + this.nome);
//       System.out.println("cpf          : "  + this.cpf);
//       System.out.println("rg           : "  + this.rg);
//                                               
//       System.out.println("rua          : "  + this.rua);
//       System.out.println("bairro       : "  + this.bairro);
//       System.out.println("cidade       : "  + this.cidade);
//       System.out.println("estado       : "  + this.estado);
//       System.out.println("cep          : "  + this.cep);

         System.out.println("nome         : "  + nome.nomeFuncionario);
         System.out.println("cpf          : "  + cpf.cpfFuncionario);   
         System.out.println("rg           : "  + rg.rgFuncionario);    

         System.out.println("rua          : "  + rua.ruaEndereco);      
         System.out.println("bairro       : "  + bairro.bairroEndereco);
         System.out.println("cidade       : "  + cidade.cidadeEndereco);
         System.out.println("estado       : "  + estado.estadoEndereco);
         System.out.println("cep          : "  + cep.cepEndereco);      


         System.out.println("salario atual: " + this.salario);          
         System.out.println("ganho anual:   " + this.getCalculaGanhoAnual());

         System.out.println("Dia: " + this.dataEntrada.diaDataFuncionario);
         System.out.println("Mês: " + this.dataEntrada.mesDataFuncionario);
         System.out.println("Ano: " + this.dataEntrada.anoDataFuncionario);

         System.out.println("Data de entrada: " + this.dataEntrada.getFormatada());
    }; 

    public int getIdFuncionario() {
        return this.idFuncionario;
    };

    public void setIdFuncionario (int idFuncionario) {
        this.idFuncionario = idFuncionario;
    };   

    public String getDepartamento() {
        return this.departamento;
    };

    public void setDepartamento (String departamento) {
        this.departamento = departamento;
    };   

    public DataFuncionario getDataEntrada() {
        return this.dataEntrada;
    };

    public void setDataEntrada (DataFuncionario dataEntrada) {
        this.dataEntrada = dataEntrada;
    };

    public DadosFuncionario getNome() {
        return this.nome;
    };

    public void setNome (DadosFuncionario nome) {
        this.nome = nome;
    };

    public DadosFuncionario getCpf() {
        return this.cpf;
    };

    public void setCpf (DadosFuncionario cpf) {
        this.cpf = cpf;
    };

    public DadosFuncionario getRg() {
        return this.rg;
    };

    public void setRg (DadosFuncionario rg) {
        this.rg = rg;
    };    

    public Endereco getRua() {
        return this.rua;
    };

    public void setRua (Endereco rua) {
        this.rua = rua;
    };

 public Endereco getBairro() {
        return this.bairro;
    };

    public void setBairro (Endereco bairro) {
        this.bairro = bairro;
    };

    public Endereco getCidade() {
        return this.cidade;
    };

    public void setCidade (Endereco cidade) {
        this.cidade = cidade;
    };

    public Endereco getEstado() {
        return this.estado;
    };

    public void setEstado (Endereco estado) {
        this.estado = estado;
    };

    public Endereco getCep() {
        return this.cep;
    };

    public void setCep (Endereco cep) {
        this.cep = cep;            
    };

    public double getSalario(){
        return this.salario;
    };
    public void setSalario(double salario) {
        this.salario = salario;
        };

};
----
este código esta danto erro de compilação por que não defini o atributo nome....mas como passo a informação para atulizar o nome
class AtualizaFuncionario {

        Funcionario f1 = new Funcionario("Joao das Coves");
        Funcionario f2 = new Funcionario("Luis das Coves");


        f1.setNome(nome);
        f2.setNome(nome);

    };

0k entendi, mas como passo o conteúdo de nome para atualizar a variavel com "set"

solução!

Olá Luis! Acho que entendi o que você quis dizer. Você quis criar um objeto para guardar os dados do seu funcionário não é? Fiz algumas modificações no seu código e acho que consegui fazer mais ou menos o que você queria.

class DadosFuncionario {
    private String nomeFuncionario;
    private String cpfFuncionario;
    private String rgFuncionario;

    public DadosFuncionario(String nome, String cpf, String rg) {
        this.nomeFuncionario = nome;
        this.cpfFuncionario = cpf;
        this.rgFuncionario = rg;
    }

    public void setNomeFuncionario(String x) {
        this.nomeFuncionario = x;
    }

    public String getNomeFuncionario() {
        return this.nomeFuncionario;
    }
}

class DataFuncionario {
    private int dia;
    private int mes;
    private int ano;

    public DataFuncionario(int x, int y, int z) {
        this.dia = x;
        this.mes = y;
        this.ano = z;
    }

}

class Funcionario {
    private int    idFuncionario;                                                                                                                         
    private String departamento;
    private DataFuncionario dataEntrada;
    private double salario;
    private DadosFuncionario dados;

   // Novo método construtor
    public Funcionario(int a, String b, DataFuncionario c, double d, DadosFuncionario e) {
               this.idFuncionario = a;
               this.departamento = b;
               this.dataEntrada = c;
               this.salario = d;
               this.dados = e;
     }

     //metodo setNome
     public void setNome(String x) {
         this.dados.setNomeFuncionario(x);
     }

     //metodo getNome
     public String getNome() {
         return this.dados.getNomeFuncionario();
     }
}

class AtualizaFuncionario {
    public static void main(String[] args) {
        //Vamos criar um funcionario. Primeiro, criaremos o objeto DadosFuncionario que guardará os dados referentes ao funcionario em questao. Inveitei valores.
        DadosFuncionario dados1 = new DadosFuncionario("José", "1", "2");

        //Agora criamos o objeto DataFuncionario referente a sua data de entrada. Também inventei valores.
        DataFuncionario data1 = new DataFuncionario(29, 12, 2016);

        //Agora criamos o funcionario em si com o novo construtor. Inventei id = 1, departamento = finanças e salario = 5000
        Funcionario f1 = new Funcionario(1, "finanças", data1, 5000, dados1);

        //Agora vamos testar se é possível modificar o nome do funcionario
        System.out.println(f1.getNome());
        f1.setNome("João");
        System.out.println(f1.getNome());
    }
}

No método main, você precisa criar os objetos que você necessita. No caso acima, você precisa criar um objeto para os dados do funcionário criado, um objeto para a sua data de entrada e um objeto Funcionario. Depois de criados os objetos dos dados, você pode "passá-los" como parâmetros para a classe Funcionario por meio do construtor (note que, no meu construtor do Funcionario, eu "passei" os objetos inteiros como parâmetros). E aí, nos métodos da classe Funcionario, você pode pegar e alterar informações dos objetos criados das classes DadosFuncionarios e DataFuncionario. Se você compilar esse código, verá que, com essa lógica, você consegue mudar o nome (e na verdade qualquer outro dado) do funcionário perfeitamente. O resultado da compilação será:

José
João

Como queríamos!

Obs: Se não entender ou encontrar algum erro no meu código, avise-me! =D