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

sentido no método mostraTodasAsInformacoes()

Eu não vejo muito sentido nesse método já que posso simplesmente deletar o método mostra() do meu código e colocar todas as informações dos funcionários no método mostraFuncionarios() dos exercício anterior. Fica muito mais organizado pra mim

é correto eu escrever o meu código dessa forma?

qual é a vantagem na relação do método mostraTodasAsInformacoes() com o método mostra() da classe Funcionarios?

Segue abaixo o meu código:

class Funcionario{
    String nome;
    String cargo;
    double salario;
    Data dataEntrada;

    void aumentoSalario(double quantidade){
        this.salario = this.salario + quantidade;
    }

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

class Data{
    int dia;
    int mes;
    int ano;

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

    String getDataEntrada(){
        return this.dia + "/" + this.mes + "/" + this.ano;
    }
}

class Empresa{
    String nomeEmpresa;
    Funcionario[] empregados;
    int vagas = 0;

    void adiciona(Funcionario f){
        this.empregados[this.vagas] = f;
        this.vagas++;
    }

    void mostraEmpregados(){
        for(int i = 0; i < this.empregados.length; i++){
            System.out.println("Funcionario:" + i);
            System.out.println("Nome: " + this.empregados[i].nome);
            System.out.println("Data de entrada: " + this.empregados[i].dataEntrada.getDataEntrada());
            System.out.println("Cargo: " + this.empregados[i].cargo);
            System.out.println("Salario:R$ " + this.empregados[i].salario);
            System.out.println("Salario anual: " + this.empregados[i].cauculaSalarioAnual());
            System.out.println("/////////////////////////////////////////////////////////");
        }
    }
}

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


        Funcionario matheus = new Funcionario();
        matheus.nome = "Matheus de Wit";
        matheus.cargo = "Caixa";
        matheus.salario = 1500.0;
        matheus.dataEntrada = new Data();
        matheus.dataEntrada.preencheData(01, 02, 2016);
        matheus.aumentoSalario(500.0);

        banco.adiciona(matheus);

        Funcionario adriano = new Funcionario();
        adriano.nome = "Adriano dos Santos";
        adriano.cargo = "Gerente";
        adriano.salario = 2000.0;
        adriano.dataEntrada = new Data();
        adriano.dataEntrada.preencheData(02, 04, 2015);
        adriano.aumentoSalario(200.0);

        banco.adiciona(adriano);


        banco.mostraEmpregados();
    }
}
5 respostas

Matheus, edita teu post e coloca teu código formatado, é mais fácil de entender

solução!

Oi Matheus, o método mostra que é esse aqui:

     void mostra() {
                System.out.println("Nome: " + this.nome);
                System.out.println("Departamento: " + this.departamento);
                System.out.println("Salário: R$" + this.salario);
                System.out.println("Data de entrada: " + this.dataEntrada);
                System.out.println("RG: " + this.rg);
                System.out.println("Ganho anual: R$" + this.calculaGanhoAnual());
            }
        }

Imprime todas as informações de um funcionário. Já o método mostraTodasAsInformacoes() vai mostrar todos os dados de todos os funcionários.

Digamos que queremos a informação de um funcionário então chamamos o método mostra();

Digamos que queremos as informações de todos os funcionários então chamamos o método mostraTodasAsInformacoes();

Se apagarmos o método mostra não teremos o recurso de mostrar as informações de um funcionário específico entende. Ajudei ?

Eu reescrevi o método mostra() no meu código, mas eu NÃO coloquei o método mostraTodasAsInformacoes(); e mantive as informações de funcionarios dentro do método mostraEmpregados();

Se eu escrecrever o comando "banco.mostraEmpregados();" eu irei receber as informações de todos os funcionarios.

Se eu escrever o comando banco.empregados[1].mostra() por exemplo, eu irei receber as informações de um único funcionário.

consigo executar cada função sem precisar do método mostraTodasAsInformacoes();

será que o código fica bom desse jeito?

eu tenho medo de estar complicando as coisas ou ignorando algo importante sem perceber.

Segue abaixo o código alterado:

class Funcionario{
    String nome;
    String cargo;
    double salario;
    Data dataEntrada;

    void mostra(){
        System.out.println("Nome: " + this.nome);
        System.out.println("Data de entrada: " + this.dataEntrada.getDataEntrada());
        System.out.println("Cargo: " + this.cargo);
        System.out.println("Salario: " + this.salario);
        System.out.println("Salario anual: " + this.cauculaSalarioAnual());
    }

    void aumentoSalario(double quantidade){
        this.salario = this.salario + quantidade;
    }

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

class Data{
    int dia;
    int mes;
    int ano;

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

    String getDataEntrada(){
        return this.dia + "/" + this.mes + "/" + this.ano;
    }
}

class Empresa{
    String nomeEmpresa;
    Funcionario[] empregados;
    int vagas = 0;


    void adiciona(Funcionario f){
        this.empregados[this.vagas] = f;
        this.vagas++;
    }

    void mostraEmpregados(){
        for(int i = 0; i < this.empregados.length; i++){
            System.out.println("Funcionario:" + i);
            System.out.println("Nome: " + this.empregados[i].nome);
            System.out.println("Data de entrada: " + this.empregados[i].dataEntrada.getDataEntrada());
            System.out.println("Cargo: " + this.empregados[i].cargo);
            System.out.println("Salario:R$ " + this.empregados[i].salario);
            System.out.println("Salario anual: " + this.empregados[i].cauculaSalarioAnual());
            System.out.println("//////////////////////////////////////////////////////////");        
        }
    }
}

class Registro{
    public static void main(String[] args) {

        Empresa banco = new Empresa();
        banco.empregados = new Funcionario[2];


        Funcionario matheus = new Funcionario();
        matheus.nome = "Matheus de Wit";
        matheus.cargo = "Caixa";
        matheus.salario = 1500.0;
        matheus.dataEntrada = new Data();
        matheus.dataEntrada.preencheData(01, 02, 2016);
        matheus.aumentoSalario(500.0);

        banco.adiciona(matheus);

        Funcionario adriano = new Funcionario();
        adriano.nome = "Adriano dos Santos";
        adriano.cargo = "Gerente";
        adriano.salario = 2000.0;
        adriano.dataEntrada = new Data();
        adriano.dataEntrada.preencheData(02, 04, 2015);
        adriano.aumentoSalario(200.0);

        banco.adiciona(adriano);

        banco.mostraEmpregados();
        ou
        banco.empregados[1].mostra();                
    }
}

Ok então vamos simplificar talvez deixe mais claro, observa o seu método mostra:

void mostra(){
        System.out.println("Nome: " + this.nome);
        System.out.println("Data de entrada: " + this.dataEntrada.getDataEntrada());
        System.out.println("Cargo: " + this.cargo);
        System.out.println("Salario: " + this.salario);
        System.out.println("Salario anual: " + this.cauculaSalarioAnual());
    }

e agora vamos ver o seu método mostraEmpregados():

 void mostraEmpregados(){
        for(int i = 0; i < this.empregados.length; i++){
            System.out.println("Funcionario:" + i);
            System.out.println("Nome: " + this.empregados[i].nome);
            System.out.println("Data de entrada: " + this.empregados[i].dataEntrada.getDataEntrada());
            System.out.println("Cargo: " + this.empregados[i].cargo);
            System.out.println("Salario:R$ " + this.empregados[i].salario);
            System.out.println("Salario anual: " + this.empregados[i].cauculaSalarioAnual());
            System.out.println("//////////////////////////////////////////////////////////");        
        }
    }

Percebeu a similaridade ? Temos código repetido, sempre quando temos muito código repetido temos que considerar a criação de um método que execute aquele código. Aplicando a limpeza teríamos:

 public void mostraTodasAsInformacoes() {
        for (int i = 0; i < this.empregados.length; i++) {
            System.out.println("Funcionario " + i);
            this.funcionarios[i].mostra();
        }
    }

Além disso se fosse adicionada qualquer outra informação de funcionário comoint idade por exemplo teríamos que adicionar apenas no método mostra() e isso já refletiria no método mostraTodasAsInformacoes() ; Já dessa outra forma não, teria que implementar nos dois métodos.Além de várias outras coisas relacionadas a orientação a objetos que vamos dominando com o tempo.

Ok entendi, nessa forma eu não preciso colocar o mesmo código em vários lugares e também posso coletar informações de vários métodos de uma vez!

uma outra dúvida que tenho é que se por engano eu colocar o mesmo código nos dois métodos o prompt de comando vai repetir informações!

Será que existe alguma técnica que posso fazer para o prompt filtrar códigos repetidos?

desde já agradeço a sua ajuda!!!!!!