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

Problema de classes

Estou com dúvidas no momento eu utilizei de classe pessoa também em meus código não apenas Funcionário agora fica bem mais complicado dar um "public e um private "

segue o código

package funcionario;

public class Funcionario {
    String departamento;
    double salario;
    Data datadeentrada;
    Pessoa pessoa;
    double anual = 0;

    public void recebeaumento (double aumento){
        this.salario += aumento;
    }

    void salarioanual (double salario){
        this.anual += salario * 12;
    }

         void mostra (){
        System.out.println("Nome "+pessoa.nome);
        System.out.println("rg "+pessoa.rg);
        System.out.println("Cargo "+this.departamento);
        System.out.println("Salario "+this.salario);
//        System.out.println(getFormatada());
        System.out.println("Salario anual "+this.anual);
    }

}
8 respostas

O que é o mesmo com a classe Pessoa seus métodos também terão getters e setters e a mudança será no acesso também, depois de definir seus atributos como private e seus getters e setters

Você trocará isso:

System.out.println("Nome "+pessoa.nome); System.out.println("rg "+pessoa.rg);

Por:

System.out.println("Nome "+getPessoa().getNome()); System.out.println("rg "+getPessoa().getRg());

Espero ter ajudado.

package funcionario;

public class Pessoa { String nome; int rg; } Minha internet esta horrível não enviou a classe pessoa


package funcionario;

public class Pessoa { String nome; int rg; }


Ps ; o probleme que agora estou muito perdido com os get e sets não estou conseguindo aplicar essa nova matéria encapsulamento por conta das minhas classes um "private" acaba com o código todo e como sou novo não consigo trabalhar em cima .

Olá Lucas, tudo bom?

Primeiramente, se você quiser que colar código aqui você pode colocar ``` antes e depois do código. Alterei seu primeiro post para você ver como fica =)

Quanto a sua duvida, quando implementamos encapsulamento em um código que não estava encapsulado precisamos refatorar o código. Ou seja, não tem jeito, precisamos mudar todos os lugares que acessavam os atributos diretamente. Mas em compensação ganhamos segurança no código =)

Você precisará procurar no seu código os lugares onde você acessa os atributos que agora são privados e utilizar o getter para pegar o valor do atributo e o setter para atribuir um valor ao atributo. Ou seja, onde você faria:

Pessoa pessoa = new Pessoa();
pessoa.nome = "Joãozinho";

System.out.println("Imprimindo o nome da pessoa "+pessoa.nome);

Agora com encapsulamento você fará:

Pessoa pessoa = new Pessoa();
pessoa.setNome("Joãozinho"); //implemente o método setNome em Pessoa

System.out.println("Imprimindo o nome da pessoa "+pessoa.getNome(); //implemente o método getNome em Pessoa

Espero ter ajudado. Qualquer dificuldade, compartilhe com a gente =)

public Pessoa {

private String nome; private int rg;

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

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

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

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

Foram definidos os getters e setters de Pessoa e lembrando que a CLASSE é public.

quando a classe Funcionario for utilizar os dados

Atributo private Pessoa pessoa

public void setPessoa(Pessoa pessoa){ this.pessoa = pessoa; }

public Pessoa getPessoa(){ return this.pessoa; }

System.out.println("Nome: "+ getPessoa().getNome());

Exemplo da utilização.

package funcionario;

public class Principal {

public static void main(String[] args) {

   Funcionario Lucas = new Funcionario();
   Lucas.departamento = "producao";
   Lucas.salario = 1193.30;
   Lucas.anual = 0;

   Lucas.pessoa = new Pessoa();
   Lucas.pessoa.nome = "Lucas Alves Cardoso";
   Lucas.pessoa.rg = 123456789;

   Lucas.datadeentrada = new Data();
   Lucas.datadeentrada.datadia = 13;
   Lucas.datadeentrada.datames = 05;
   Lucas.datadeentrada.dataano = 1994;

   System.out.println(Lucas.pessoa.nome);

   Lucas.recebeaumento(100);
   System.out.println(Lucas.salario);

   Lucas.salarioanual(Lucas.salario);
   System.out.println(Lucas.anual);
   Lucas.monstra();

   Funcionario Karine = new Funcionario();
   Karine.departamento = "Saude";
   Karine.salario = 1200.50;
   Karine.anual = 0;

   Karine.pessoa = new Pessoa();
   Karine.pessoa.nome = "Karine Fonseca";
   Karine.pessoa.rg = 987654321;

   if(Lucas != Karine){
       System.out.println("Não são iguais");
   }else{
       System.out.println("São iguais");
   }
   Funcionario Alex = new Funcionario ();
   Alex = Lucas;
   System.out.println(Alex.salario);

   Funcionario Ruan = new Funcionario ();
   Ruan.EstadoCivil = "Solteiro";

}

}

Funcionario

package funcionario;

public class Funcionario {
    String departamento;
    double salario;
    Data datadeentrada;
    Pessoa pessoa;
    double anual = 0;
    String EstadoCivil;

    Funcionario (){}

    Funcionario(String EstadoCivil){
           this.EstadoCivil = EstadoCivil;
    }

    void recebeaumento (double aumento){
        this.salario += aumento;
    }

    void salarioanual (double salario){
        this.anual += salario * 12;
    }

    void monstra (){
        System.out.println("Nome "+pessoa.nome);
        System.out.println("rg "+pessoa.rg);
        System.out.println("Cargo "+this.departamento);
        System.out.println("Salario "+this.salario);
//        System.out.println(getFormatada());
        System.out.println("Salario anual "+this.anual);
    }
}

Pessoa

package funcionario;

public class Pessoa {
    String nome;
    int rg;
}

Empresa

package funcionario;

public class Empresa {
    String nome;
    String cnpj;
    Funcionario [] empregados; //aqui eu criei um array do tipo funcionario sem um tamanho definido
    String email;
    String endereço;
    int livre = 0;

    void adicionar (Funcionario func){
        this.empregados[this.livre] = func; //o atributo empregados dessa classe e livre dessa classe 
        this.livre ++;
    }

    void mostraEmpregados (){
        for(int i = 0 ; i < this.livre ; i ++){
            System.out.print("Esse eh o funcionario da posicao  " + i);
            System.out.print(this.empregados[i].salario);
        }
    }
    void mostrarTudo(){
        for(int i = 0 ; i < this.livre ; i ++){
            System.out.println("Funcionario : "+empregados[i].pessoa.nome);
//            System.out.println("Departamento : "+empregados[i].departamento);
//            System.out.println("Salario : "+empregados[i].salario);
//            System.out.println("Rg : "+empregados[i].pessoa.rg);
//            System.out.println("Salario anual : "+empregados[i].anual);  
        this.empregados[i].monstra();
        }
    }    
    boolean procurar(Funcionario procura) {
        for (int i = 0; i < this.livre; i++) {
            if (procura == this.empregados[i]) {
                System.out.println("Encontrou ");
                    return true;
                }  
            }
        System.out.println("Nao encontrou");
        return false;
}

}

Data

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package funcionario;

/**
 *
 * @author a
 */
public class Data {
    int datadia;
    int datames;
    int dataano;
}

TesteEmpresa

package funcionario;

public class TesteEmpresa {
    public static void main(String[] args) {
    Empresa empresa = new Empresa();
    empresa.empregados = new Funcionario [2];


    Funcionario Lucas = new Funcionario();
    Lucas.anual = 12000;
    Lucas.departamento = "qual quer um";
    Lucas.salario = 1650.00;
    Lucas.pessoa = new Pessoa();
    Lucas.pessoa.nome = "Lucas Alves ";
    Lucas.pessoa.rg = 5648949;

    empresa.adicionar(Lucas);

    Funcionario Alves = new Funcionario();
    Alves.anual = 12000;
    Alves.departamento = "qual quer um";
    Alves.salario = 1650.00;
    Alves.pessoa = new Pessoa();
    Alves.pessoa.nome = "Alves Cardoso";
    Alves.pessoa.rg = 5648949;

    empresa.adicionar(Alves);

    Funcionario Cardoso = new Funcionario();
    Cardoso.anual = 12000;
    Cardoso.departamento = "qual quer um";
    Cardoso.salario = 1650.00;
    Cardoso.pessoa = new Pessoa();
    Cardoso.pessoa.nome = "Cardoso de jesus";
    Cardoso.pessoa.rg = 5648949;

    empresa.adicionar(Cardoso);
    empresa.mostraEmpregados();
    empresa.procurar(Lucas);
    }
}

Espero ter feito certo . Esse era meu código até então porém não consigo aplica os modificadores de maneira correta .

solução!

Opa, muito boa sua ideia de colocar uma pessoa como atributo da classe funcionario! Apenas lembre-se de encapsular os atributos da sua classe Pessoa também. Você também precisaria refatorar os lugares onde você está acessando diretamente os atributo da classe Pessoa. Exemplo:

void monstra (){
        System.out.println("Nome "+pessoa.getNome()); //implemente o metodo getNome e setNome na classe Pessoa
        System.out.println("rg "+pessoa.getRg()); //implemente o metodo getRg e setRg na classe Pessoa
        System.out.println("Cargo "+this.departamento);
        System.out.println("Salario "+this.salario);
//        System.out.println(getFormatada());
        System.out.println("Salario anual "+this.anual);
    }

Hmm entendo vou tentar por em prática

E aí Lucas, conseguiu fazer o encapsulamento funcionar direitinho? Se sim, marque a resposta que te ajudou como solução!

Se não, posso tentar ajudar um pouco mais! Descreva qual foi sua última dificuldade! ;)

Abraços!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software