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

Dúvida em Começando com Orientação a Objetos

Pessoal, quanto eu tenho uma classe Funcionario e uma classe Departamento, qual das duas alternativa abaixo é a melhor declaração a ser feita:

1) Primeira situação: quando eu declarar a classe Funcionario eu já crio um objeto departamento:

class Departamento {
    String nome;
}

class Funcionario {
    String nome;
    Departamento departamento = new Departamento();
}

2) Segunda situação: quando eu declarar a classe Funcionario eu não crio um objeto departamento:

class Departamento {
    String nome;
}

class Funcionario {
    String nome;
    Departamento departamento;
}
3 respostas
solução!

Não precisa criar um novo objeto departamento logo no início, pode ir criando de acordo com a necessidade.

Veja o exemplo:

// Classe Departamento
public class Departamento {

    String nome;

    public String getNome() {
        return nome;
    }

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

}

//Classe Funcionário
public class Funcionario {

    String nome;
    Departamento departamento;

    public String getNome() {
        return nome;
    }

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

    public Departamento getDepartamento() {
        return departamento;
    }

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

// Classe Teste

public class Teste {

    public static void main(String[] args) {

        Funcionario funcionario = new Funcionario();
        // Setamos o nome para o objeto funcionário que criamos acima.
        funcionario.setNome("Paulo");

        // Agora só podemos setar um departamento se criarmos um novo objeto departamento.
        Departamento  departamento = new Departamento();
        departamento.setNome("Financeiro");

        // Agora é só setar o novo objeto departamento no funcionário.
        funcionario.setDepartamento(departamento);

        System.out.println("Nome do funcionário: " + funcionario.getNome());
        System.out.println("Departamento do funcionário: " + funcionario.getDepartamento().getNome());

    }    
}

Boa tarde, lembrando um pouco de encapsulamento ,lembre-se que se você não definir suas variáveis como "private" sua classe vai ficar vulnerável.

Levando em consideração que você os métodos getters e setters ficaria assim

public class Funcionario {
    private String nome;
    private Departamento departamento;

    public String getNome() {
        return nome;
    }

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

    public Departamento getDepartamento() {
        return departamento;
    }

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

Se você tem um "setDepartamento" que recebe um departamento obviamente, não faz sentido você instanciar o objeto na declaração, pois ele vai ser sobreposto quando você chamar o "setDepartamento".

Vamos criar a class Departamento.

public class Departamento {
    private String nome;

    public String getNome() {
        return nome;
    }

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

Vamos criar uma classe para testar agora.

public class TestePrograma {
    public static void main(String[] args) {
        Funcionario funcionario = new Funcionario();
        Departamento departamento = new Departamento();

        departamento.setNome("RH");

        funcionario.setNome("Fulano");
        funcionario.setDepartamento(departamento);

        System.out.println(funcionario.getDepartamento().getNome());
    }
}

Quando o método "setDepartamento" é chamado já recebe um objeto instanciado.

Espero que eu tenha ajudado..

OK, entendido! Obrigado pelas respostas pessoal!