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

Aula 5 - Exercício 2 - Dificuldades com o Private

Estou com dificuldades em mudar o modificador de acesso na variável "dataEntrada" do tipo "Data" para Private. Sei que a lógica dele é diferente. O código abaixo está compilado, mas sem o Private no Data dataEntrada.

Se alguém puder ajudar, agradeço!

class Empresa{

    public String nomeEmp;
    public String cnpj;
    public String end;
    public String cid;
    public String pais;
    public int livre = 0;
    public Funcionario[] colaboradores;

    void adiciona(Funcionario f){        
        this.colaboradores[this.livre] = f;
        this.livre++;
    }

    boolean contem(Funcionario f) {
        for (int i = 0; i < this.livre; i++) {
            if (f == this.colaboradores[i]) {
                System.out.println("contem Funcionário");
                return true;
            }
        }
        return false;
    }

    void mostra(){

        System.out.println("\n\n++++++++++++++++++++++++++++++++++++++++++++\n\n");
        System.out.println("_______DADOS EMPRESA_______\n");
        System.out.println("Nome da empresa: " +this.nomeEmp);
        System.out.println("CNPJ:" +this.cnpj);
        System.out.println("Endereço: " +this.end);
        System.out.println("Cidade: " +this.cid);
        System.out.println("País: " +this.pais);
        System.out.println("\n\n++++++++++++++++++++++++++++++++++++++++++++\n\n");

        for (int i = 0; i < livre; i++){

            System.out.println("\n_______Funcionario na posição: "+i+"_______\n");
            System.out.println("Nome do funcionário: " +this.colaboradores[i].getNome());
            System.out.println("Cargo: " +this.colaboradores[i].getFunc());
            System.out.println("CPF: " +this.colaboradores[i].getCpf());
            System.out.println("Idade: " +this.colaboradores[i].getIdade());
            System.out.println("Salário: " +this.colaboradores[i].getAumentoSalario());
            System.out.println("Salário anual: " +this.colaboradores[i].calculoGanhoAnual());
            System.out.println("Data de entrada: " +this.colaboradores[i].dataEntrada.getDataFormatada());
            System.out.println("\n\n----------------------------------------\n\n");
        }
    }
}

class Funcionario{

    private String nome;
    private String func;
    private String cpf;
    private int idade;
    private double salario;
    public Data dataEntrada; // Mudar modificar de acesso para Private

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

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

    public void setFunc(String func){
        this.func = func;
    }

    public String getFunc(){
        return this.func;
    }

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

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

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

    public int getIdade(){
        return this.idade;
    }

    public void setAumentoSalario(double salario){    
        if(salario >= 788 && salario <= 1576){
            this.salario += salario + salario * 0.1;
        }
        else if(salario >= 3152 && salario <= 5516){
            this.salario += salario + salario * 0.07;
        }
        else if(salario >= 5516){
            this.salario += salario + salario * 0.05;
        }
        else
            System.out.println("Opção Inválida!");    
    }    

    public double getAumentoSalario(){
        return this.salario;
    }

    public double calculoGanhoAnual(){
        return this.salario * 12;
    }
}

class Data{

    int dia;
    int mes;
    int ano;

    void setPreencheData(int dia, int mes, int ano){
        this.dia = dia;
        this.mes = mes;
        this.ano = ano;
    }

    String getDataFormatada(){
        return this.dia+"/"+this.mes+"/"+this.ano;

        /*
        Date date = ...;  // wherever you get this
        DateFormat df = new SimpleDateFormat("dd\MM\YYYY");
        String text = df.format(date);
        System.out.println(text);
        */
    }
}

class A5_2_MF{

    public static void main (String[] args) {

        Empresa emp = new Empresa();
        emp.colaboradores = new Funcionario[10];

        emp.nomeEmp = "Tti";
        emp.cnpj = "xxx.xxx.xxx.xxx";
        emp.end    = "Rua Torvalds, 01";
        emp.cid = "Coromandel";
        emp.pais = "Brasil";

        Funcionario f1 = new Funcionario();
        f1.dataEntrada = new Data();

        f1.setNome("Maicon");
        f1.setFunc("T.I");
        f1.setCpf("xxx.xxx.xxx");
        f1.setIdade(25);
        f1.setAumentoSalario(13000);
        f1.dataEntrada.setPreencheData(22, 02, 2014);
        emp.adiciona(f1);


        Funcionario f2 = new Funcionario();
        f2.dataEntrada = new Data();

        f2.setNome("Dalila");
        f2.setFunc("Analista");
        f2.setCpf("xxx.xxx.xxx");
        f2.setIdade(30);
        f2.setAumentoSalario(5300);
        f2.dataEntrada.setPreencheData(17, 05, 2015);
        emp.adiciona(f2);

        Funcionario f3 = new Funcionario();
        f3.dataEntrada = new Data();

        f3.setNome("Túlio");
        f3.setFunc("Professor");
        f3.setCpf("xxx.xxx.xxx");
        f3.setIdade(25);
        f3.setAumentoSalario(15300);
        f3.dataEntrada.setPreencheData(22, 12, 2016);
        emp.adiciona(f3);

        emp.mostra();
    }
}
5 respostas

oi Maicon, tudo bem? Ao você mudar o dataEntrada você precisará criar um outro método para poder passar algum valor para este objeto. Semelhante ao método setCpf mas sendo setDataEntrada que recebe um objeto do tipo Data.

Depois você deve procurar onde dará erros no código e adapta-los a mudança. Onde você atribui valor, você passa a usar o método criado (setDataEntrada).

Talvez você precise de um getDataEntrada que retorna o objeto Data. E onde você estiver acessando a data, deve trocar para este novo método.

Conseguiu acompanhar? Espero ter ajudado. Bons estudos =)

Caro Wanderson, ótima noite! Agradeço sua atenção. Infelizmente, ainda não consegui resolver a atividade.

class Empresa{

    public String nomeEmp;
    public String cnpj;
    public String end;
    public String cid;
    public String pais;
    public int livre = 0;
    public Funcionario[] colaboradores;

    void adiciona(Funcionario f){        
        this.colaboradores[this.livre] = f;
        this.livre++;
    }

    boolean contem(Funcionario f) {
        for (int i = 0; i < this.livre; i++) {
            if (f == this.colaboradores[i]) {
                System.out.println("contem Funcionário");
                return true;
            }
        }
        return false;
    }

    void mostra(){

        System.out.println("\n\n++++++++++++++++++++++++++++++++++++++++++++\n\n");
        System.out.println("_______DADOS EMPRESA_______\n");
        System.out.println("Nome da empresa: " +this.nomeEmp);
        System.out.println("CNPJ:" +this.cnpj);
        System.out.println("Endereço: " +this.end);
        System.out.println("Cidade: " +this.cid);
        System.out.println("País: " +this.pais);
        System.out.println("\n\n++++++++++++++++++++++++++++++++++++++++++++\n\n");

        for (int i = 0; i < livre; i++){

            System.out.println("\n_______Funcionario na posição: "+i+"_______\n");
            System.out.println("Nome do funcionário: " +this.colaboradores[i].getNome());
            System.out.println("Cargo: " +this.colaboradores[i].getFunc());
            System.out.println("CPF: " +this.colaboradores[i].getCpf());
            System.out.println("Idade: " +this.colaboradores[i].getIdade());
            System.out.println("Salário: " +this.colaboradores[i].getAumentoSalario());
            System.out.println("Salário anual: " +this.colaboradores[i].calculoGanhoAnual());
            //System.out.println("Data de entrada: " +this.colaboradores[i].getData().getDataFormatada());
            System.out.println("\n\n----------------------------------------\n\n");
        }
    }
}

class Funcionario{

    private String nome;
    private String func;
    private String cpf;
    private int idade;
    private double salario;
    private Data dataEntrada;

    public void setData(Data dataEntrada){
        this.dataEntrada = dataEntrada;
    }

    public Data getData(){
        return this.dataEntrada;
    }

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

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

    public void setFunc(String func){
        this.func = func;
    }

    public String getFunc(){
        return this.func;
    }

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

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

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

    public int getIdade(){
        return this.idade;
    }

    public void setAumentoSalario(double salario){    
        if(salario >= 788 && salario <= 1576){
            this.salario += salario + salario * 0.1;
        }
        else if(salario >= 3152 && salario <= 5516){
            this.salario += salario + salario * 0.07;
        }
        else if(salario >= 5516){
            this.salario += salario + salario * 0.05;
        }
        else
            System.out.println("Opção Inválida!");    
    }    

    public double getAumentoSalario(){
        return this.salario;
    }

    public double calculoGanhoAnual(){
        return this.salario * 12;
    }
}

class Data{

    int dia;
    int mes;
    int ano;

    public void setPreencheData(int dia, int mes, int ano){
        this.dia = dia;
        this.mes = mes;
        this.ano = ano;
    }

    public String getDataFormatada(){
        return  this.dia+"/"+this.mes+"/"+this.ano;

        /*
        Date date = ...;  // wherever you get this
        DateFormat df = new SimpleDateFormat("dd\MM\YYYY");
        String text = df.format(date);
        System.out.println(text);
        */
    }
}

class A5_2_MF{

    public static void main (String[] args) {

        Empresa emp = new Empresa();
        emp.colaboradores = new Funcionario[10];

        emp.nomeEmp = "Tti";
        emp.cnpj = "xxx.xxx.xxx.xxx";
        emp.end    = "Rua Torvalds, 01";
        emp.cid = "Coromandel";
        emp.pais = "Brasil";

        Funcionario f1 = new Funcionario();
        //f1.dataEntrada = new Data();
        //Data data = new Data();
        //f1.dataEntrada = data;

        f1.setNome("Maicon");
        f1.setFunc("T.I");
        f1.setCpf("xxx.xxx.xxx");
        f1.setIdade(25);
        f1.setAumentoSalario(13000);
        //data.setPreencheData(12, 12, 12);
        //f1.setData(data.setPreencheData(12, 12, 12));
        //f1.setPreencheData(20, 12, 2222);
        //f1.dataEntrada.setPreencheData(22, 02, 2014);
        emp.adiciona(f1);


        Funcionario f2 = new Funcionario();
        //f2.dataEntrada = new Data();

        f2.setNome("Dalila");
        f2.setFunc("Analista");
        f2.setCpf("xxx.xxx.xxx");
        f2.setIdade(30);
        f2.setAumentoSalario(5300);
        //f2.dataEntrada.setPreencheData(17, 05, 2015);
        emp.adiciona(f2);

        Funcionario f3 = new Funcionario();
        //f3.dataEntrada = new Data();

        f3.setNome("Túlio");
        f3.setFunc("Professor");
        f3.setCpf("xxx.xxx.xxx");
        f3.setIdade(25);
        f3.setAumentoSalario(15300);
        //f3.dataEntrada.setPreencheData(22, 12, 2016);
        emp.adiciona(f3);

        emp.mostra();
    }
}

Resolvido! Gostaria de saber outra maneira de resolver o problema.

Classe Funcionario

private Data dataEntrada;

    public void setData(Data dataEntrada){
        this.dataEntrada = dataEntrada;
    }

    public Data getData(){
        return this.dataEntrada;
    }

Classe Data

public void setPreencheData(int dia, int mes, int ano){
        this.dia = dia;
        this.mes = mes;
        this.ano = ano;
    }

    public String getDataFormatada(){
        return  this.dia+"/"+this.mes+"/"+this.ano;
    }

Classe Principal ( A5_2_MF)

        Data dataEntrada1 = new Data();

        f1.setNome("Maicon");
        f1.setFunc("T.I");
        f1.setCpf("xxx.xxx.xxx");
        f1.setIdade(25);
        f1.setAumentoSalario(13000);
        dataEntrada1.setPreencheData(16,12,2013);
            f1.setData(dataEntrada1);
solução!

Oi Maicon, tudo bem? Outra forma seria que a classe Data tivesse um construtor que recebesse os valores de forma direta. Assim no setData você poderia passar o objeto data direto criado pelo construtor. Assim:

Classe Data:

public Data(int dia, int mes, int ano){
        this.dia = dia;
        this.mes = mes;
        this.ano = ano;
}
public Data(){
  // construtor vazio padrão
}

Classe Principal ( A5_2_MF)


f1.setNome("Maicon");
f1.setFunc("T.I");
f1.setCpf("xxx.xxx.xxx");
f1.setIdade(25);
f1.setAumentoSalario(13000);            
f1.setData(new Data(16,12,2013));

Entendeu a idéia? Espero ter ajudado! Bons estudos

Muito obrigado, Wanderson! Me ajudou bastante! Abraço.