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

Outra maneira de manipular datas com a exclusão de classes.

Oi pessoal tudo bem?

Só estou passando aqui para mostrar que eu fiz a "manipulação de datas" de um jeito diferente. Ao invés de colocar o método da data dentro de uma outra classe, eu a fiz dentro da própria classe "class Funcionario". Me pareceu menos verboso e mais fácil de entender, pois assim, você não precisaria olhar dentro de outras classes e/ou precisar entender que uma classe está dentro de outra, etc.

class Funcionario{
    String nome;
    String departamento;
    double salario;
    int dia;
    int mes;
    int ano;
    String rg;

    void recebeAumento(double valor){
        this.salario += valor;
    }

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

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

    void mostra(){
            System.out.println("Nome: " + this.nome);
            System.out.println("Departamento " + this.departamento);
            System.out.println("Salário atual: " + this.salario);
            System.out.println("Data de entrada: " + this.dia + "/" + this.mes + "/" + this.ano);
            System.out.println("RG: " + this.rg);
            System.out.println("Ganho anual " + this.calculaGanhoAnual());
        }
}


class TestaFuncionario {

    public static void main(String[]args){
        Funcionario f1 = new Funcionario();
        f1.nome = "Hugo";
        f1.departamento = "Programação";
        f1.salario = 100;
        f1.preencheData(11,12,2017);
        f1.rg = "MG-123456789";
        f1.recebeAumento(50);

        f1.mostra();

    }
}
2 respostas
solução!

Olá Diego, esse é uma forma de solucionar o problema, e olhando assim, parece ser mais simples, mas vamos supor que você resolva implementar uma classe Empresa (essa classe realmente irá existir, porém não igual ao meu exemplo), e vamos supor que você queira colocar uma variável dataAbertura para representar a data em que a empresa foi fundada, aí você teria que implementar esse método nessa classe também, e no fim você acabou duplicando esse método.

E indo um pouco mais além, você resolve imprimir essas datas, nesse caso você iria criar um método para imprimir essa data com uma formatação em específico. E acaba duplicando para as duas classes... e pode ser que você esqueça onde alterar, as vezes você quer mudar a formatação e tem que sair buscando no código onde deve alterar.

É interessante manter a separação, Funcionario é Funcionario ele não tem que tratar datas, ele simplesmente usa a classe Data, e Dataé Data, sem precisar da interferência da classe Funcionario.

E olha como ficou os seus atributos, int dia, int mes, int ano, o que seriam essas datas? A data de contratação, a data de aniversário? É difícil saber... e supondo que você resolva diferenciar

int diaEntrada;
int mesEntrada;
int anoEntrada;

e agora vai ter o mês de aniversário, o código ficaria maior ainda;

int diaEntrada;
int mesEntrada;
int anoEntrada;
int diaAniversario;
int mesAniversario;
int anoAniversario;

Imagina se precisar de outra data, um código que seria:

Data dataEntrada;
Data dataAniversaio;

virou aquilo tudo acima.

Espero ter ajudado e não confundido muito =)

Cara, não me confundiu. Na verdade eu não tinha visto por esse lado e o que você disse faz muito sentido no que tange manutenção de código. (Acredito que seja isso. Sou leigo extreme no mundo da programação). Mas obrigado por mostrar como meu modelo poderia ser um pesadelo no final das contas. Muito, muito obrigado :)