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

Meu código ficou assim:

Olá depois de muito esforço meu código ficou assim, demorei muito a entender a lógica, então, resolvi compartilhar com vocês.

// Classe "principal"
class Funcionario3 {

    // Atributos dessa classe;
    Pessoa titular; // Ligação da classe Funcionario2 a classe Pessoa.
    String setor;
    double salario;
    double valeRefeicao;

    // Metodos utilizados diretamente nesta classe 

    // Metdodo para aumento de salario.
    void recebeAumento(double aumento){

        aumento += salario; // Uso o += em subistituição de (n = n + n).

    }

     double calculaGanhoAnual(){

         return (this.salario + this.valeRefeicao) * 12; 
     }

    double salarioMaisVale(){

        return this.salario + this.valeRefeicao;

    }

    // Metodo para mostrar.
    // Uso esse metodo para não precisar ficar usando o System.out.println(); sempre que quiser imprimir
    // Ele vai mais além evitando ter que ficar digitando o nome do usuario sempre para se ter o que quer dele.
    // usando o this. eu automatizo essa função.
    void mostra(){

        // Impressões de meu programa.
        // Usando um salto de linha para melhorar a visualização da informação.
        System.out.println("=================================================================================="); 
        System.out.println();
        System.out.println("O funcionario " + this.titular.nome + " Tem salario atual de: " + this.salario);
        System.out.println(); // Usando um salto de linha para melhorar a visualização da informação.
        System.out.println("O vale refeicao de " + this.titular.nome + " e de: " + this.valeRefeicao);
        System.out.println();
        System.out.println("Somando o salario com o vale que ele recebe da: " + this.salarioMaisVale() + " por mes.");
        System.out.println();
        System.out.println("Ele recebe: " + this.calculaGanhoAnual() + " por ano.");
        System.out.println();
        System.out.println("Tendo " + this.titular.quantosAnosTem() + " anos.");
        System.out.println();
        System.out.println("ja estando na empresa a " + this.titular.quantosAnosNaEmpresa() + " anos.");
        System.out.println();
        // Usando um iff para testar se a pessoa é casada e dai fazer a impressão correta
        // do estado civil.
        if (this.titular.estadoCivil == "sim" || this.titular.estadoCivil == "SIM"){

            System.out.println("sendo casado");
        } else {
            System.out.println("Sendo Solteiro");

        }
        System.out.println();
        System.out.println("=================================================================================="); 
    }

}

// Classe Pessoa.
// Criamos a classe Pessoa que é setada a classe principal.
class Pessoa {

    int anoAtual = 2017; // criei a variavel anoAtual para 
    // facilitar o  calculo que necessitam do ano, assim,
    String nome;
    int anoDeNascimento;
    int idade = 2017 - anoDeNascimento;
    String estadoCivil;
    int anoDeAdesao;

    // Metodo quantosAnosTem.
    int quantosAnosTem(){

        return anoAtual - anoDeNascimento;
    }

    // Metodo quantosAnosNaEmpresa.
    int quantosAnosNaEmpresa(){

        return anoAtual - anoDeAdesao;

    }

}

// Classe Programa2
// Aqui é onde eu realmente utilizo os dados das classe anteriores.
class Programa2 {

    // Defino o método que a classe irá funcionar.
    public static void main(String[] args){

        // Crio um funcionario f1  usando a classe principal.
        Funcionario3 f1 = new Funcionario3(); // Aqui uso Funcionario f1 = new...
        // faço isso porque quando uso o f1.mostra(); digo que quero usar a função mostra
        // e quero que ela use o f1 em todos os thi. da função mostra, quer seria o antigo pablo.
        // que deveria ser digitado em todos os System.ou... 
        // Se quiser criar outro usuário tenho que usar o Funcionario3 f2 (por ex) = new Funcionario3();
        // assim meu this quando solicitado será subistiuido pelo f1 e f2 que são pessoa diferentes.
            f1.setor = "TI";
            f1.salario = 2000;
            f1.valeRefeicao = 800;

        // Aqui faço o pablo usar a classe Pessoa passando pela 
        // classe principal.
        f1.titular = new Pessoa();
            // A diferença da lincagem desta classe com anterior
            // É que uso pablo. mais o link entre a classe principal e pessoa
            // que é o titular. dai sigo com o atributo que quero utilizar
            // ex: pablo.titular.nome =  "pablo...";
            f1.titular.nome = "Pablo de Abreu Vieira";
            f1.titular.anoDeNascimento = 1988;
            //pablo.titular.idade = 2017 - anoDeNascimento;
            f1.titular.estadoCivil = "sim";
            f1.titular.anoDeAdesao = 2011;

        // Fazendo os metodos funcionarem (metodos que se usam da classe principal).

        f1.recebeAumento(300); // incremento um valor para o aumento.
        f1.calculaGanhoAnual(); // chamo o metodo calculaGanhoAnual.
        f1.salarioMaisVale(); //chamos o metodo salarioMaisVale.

        // Metodos que se usam da classe pessoa.
        f1.titular.quantosAnosTem();
        f1.titular.quantosAnosNaEmpresa();

// Usando a função mostra
        f1.mostra();
    }
}
3 respostas
solução!

Para adicionar novos "funcionários" e fazer uso do "legado" do código fiz assim:

// Criando funcionario f3
        Funcionario3 f3 = new Funcionario3(); // Aqui uso Funcionario f3 = new...

            f3.setor = "Universidade de Granada";
            f3.salario = 9000;
            f3.valeRefeicao = 950;

        // classe principal.
        f3.titular = new Pessoa();
            // A diferença da lincagem desta classe com anterior
            // É que uso pablo. mais o link entre a classe principal e pessoa
            // que é o titular. dai sigo com o atributo que quero utilizar
            // ex: pablo.titular.nome =  "pablo...";
            f3.titular.nome = "Luzana Leite Brasileiro";
            f3.titular.anoDeNascimento = 1983;
            //pablo.titular.idade = 2017 - anoDeNascimento;
            f3.titular.estadoCivil = "sim";
            f3.titular.anoDeAdesao = 2007;

        // Fazendo os metodos funcionarem (metodos que se usam da classe principal).

        f3.recebeAumento(450); // incremento um valor para o aumento.
        f3.calculaGanhoAnual(); // chamo o metodo calculaGanhoAnual.
        f3.salarioMaisVale(); //chamos o metodo salarioMaisVale.

        // Metodos que se usam da classe pessoa.
        f3.titular.quantosAnosTem();
        f3.titular.quantosAnosNaEmpresa();

/*====================================================================================================*/

        // Usando a função mostra
        f1.mostra();
        f2.mostra();
        f3.mostra();

    }

}

Espero ter ajudado quem ficou com duvida...

Oi Pablo, tudo bom?

Obrigado por compartilhar sua solução =)

Abraço!