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

Código do exercício com algumas coisas a mais.


// Classe "principal"
class Funcionario2 {

    // 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.
    // Crio aqui uma variavel aumento e por isso o metodo é vásio (void).
    // Quando alguém chama recebeAumento é necessário passar um parâmetro
    // de valor.
    // fazemos isso dentro das chaves, e criamos uma variavel (double aumento) 
    // para receber esse valor.
    // Tem que ficar claro que esse é o comportamento deste metodo.
    // Não podemos devolver nada, ele apenas irá manipular o que recebe
    // Por isso usamos o void.
    void recebeAumento(double aumento){

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

    }

     double calculaGanhoAnual(){

         return this.salario * 12; // usamos o this. porque pegamos 
         // de forma inteligente o salario do usuario Pessoa titular 
         // automaticamente, o java nos da essa vantagem.
         // invez de usarmos o nome aqui podemos fazer isso para
         // automatizar essa tarefa a tornando mais facil.

    }

    // Metodo salarioMaisVale.
    // Como existe a variavel salario e valeRefeicao
    // Eu apenas a calculo elas somando.
    // Diferente de um metodo void este usa variaveis
    // ja predetermiadas com valores afizados.
    // por isso dizemos que salarioMaisVale alem de ser um metodo
    // pode ser considerado uma variavel.
    // dizemos que salarioMaisVale, quando evocado,
    // recebe salario + valeRefeicao.
    double salarioMaisVale(){

        return this.salario + this.valeRefeicao;

    }

}

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

    // Atributos desta classe.
    int anoAtual = 2017; // criei a variavel anoAtual para 
    // facilitar o  calculo que necessitam do ano, assim,
    // quando precisar alterar o ano só precisarei mecher aqui.
    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 metodo que a classe irá funcionar.
    public static void main(String[] args){

        // Crio um funcionario pablo usando a classe principal.
        Funcionario2 pablo = new Funcionario2(); 
            //pablo.nome = "Pablo Lukan";
            pablo.setor = "TI";
            pablo.salario = 2000;
            pablo.valeRefeicao = 800;

        // Aqui faço o pablo usar a classe Pessoa passando pela 
        // classe principal.
        pablo.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...";
            pablo.titular.nome = "Pablo de Abreu Vieira";
            pablo.titular.anoDeNascimento = 1988;
            //pablo.titular.idade = 2017 - anoDeNascimento;
            pablo.titular.estadoCivil = "não";
            pablo.titular.anoDeAdesao = 2011;

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

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

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


        // Impressões de meu programa.
        System.out.println(); // Usando um salto de linha para melhorar a visualização da informação.
        System.out.println("O funcionario " + pablo.titular.nome + " Tem salario atual de: " + pablo.salario);
        System.out.println(); // Usando um salto de linha para melhorar a visualização da informação.
        System.out.println("Ele recebe: " + pablo.calculaGanhoAnual() + " por ano.");
        System.out.println();
        System.out.println("O vale refeicao de " + pablo.titular.nome + " e de: " + pablo.valeRefeicao);
        System.out.println();
        System.out.println("Somando o salario com o vale que ele recebe da: " + pablo.salarioMaisVale());
        System.out.println();
        System.out.println("Tendo " + pablo.titular.quantosAnosTem() + " anos.");
        System.out.println();
        System.out.println("ja estando na empresa a " + pablo.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 (pablo.titular.estadoCivil == "sim" || pablo.titular.estadoCivil == "SIM"){

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

Quem tiver algumas dicas de melhorias ou adição seria muito legal!

solução!

`

O código de inicio está bom. Futuramente com as outras aulas você poderá melhora-lo com:

  1. Encapsulamento colocando os atributos private, protected e definindo métodos de acesso a eles.
  2. Poderá utilizar da Herança entre suas classes Pessoa e Funcionario.
  3. Utilizar das classes Date, Calendar e LocalDateTime para trabalhar com datas até mesmo para pegar o ano atual e facilitar sua vida de não ter de ficar alterando a variável ano toda vez .
  4. Utilizar de Enums para criar valores de dominio. (Exemplo: SIM, NAO, ATIVO, INATIVO)
  5. No seu condicional IF (pablo.titular.estadoCivil == "sim" || pablo.titular.estadoCivil == "SIM"). Tente fazer assim: "SIM".equalsIgnoreCase(pablo.titular.estadoCivil )

    É melhor comparar Strings com equals e usando o equalsIgnoreCase você não precisa fazer uma validação para letra maiúscula e outra para letra minuscula

`

Boa Vinicius, é isso mesmo sempre fazendo aquela melhoria continua para deixar o código mais enxuto.

Muito bom! Vou tocando o barco pra chegar nesse conteúdo! Obrigado pela dica Vinicius!

Tranquilo, precisando estamos aqui. Não esquece de fechar o tópico ein!