lundi 4 septembre 2023

Use IF or Polymorphism?

I have a question about Java. I've been working with Java for less than a year, and I'm starting to have interesting doubts about design patterns:

For example, I want to improve my code with Object-Oriented (OO) principles to make it cleaner, but it raised a question: won't I increase the processing time?

In the code below:

import java.util.ArrayList;
import java.util.List;


public class EscritorioContabilidade {
    
    //metodo para recuperar a informacao salarial utilizando os IF´s da pior maneira....rsrsr
    public double getSalarioFuncionario(String tipoFuncionario){
        double salario = -1;
        if("gerente".equals(tipoFuncionario)){
            salario = 1000;
        }
        else if("balconista".equals(tipoFuncionario)){
            salario = 900;
        }
        else if("faixineiro".equals(tipoFuncionario)){
            salario = 550;
        }
        return salario;
    }
    
    //metodo para recuperar a informacao salarial utilizando os IF´s. Nao melhoramos muito
    public double getSalarioFuncionario(Object funcionario){
        double salario = -1;
        if(funcionario instanceof Gerente){
            salario = 1000;
        }
        else if(funcionario instanceof Balconista){
            salario = 900;
        }
        else if(funcionario instanceof Faixineiro){
            salario = 550;
        }
        return salario;
    }
    
    //metodo para recuperar a informacao salarial utilizando polimorfismo. Agora sim!
    public double getSalarioFuncionario(Funcionario funcionario){
        return funcionario.informarSalario();
    }
    
    public static void main(String [] asdf){
        EscritorioContabilidade escritorioContabilidade = new EscritorioContabilidade();
        double folhaPagamento = 0;
        
        List<Funcionario> listaFuncionario = new ArrayList<Funcionario>();
        
        //adicionando os funcionarios 
        listaFuncionar
io.add(new Gerente());
        listaFuncionario.add(new Balconista());
        listaFuncionario.add(new Faixineiro());
        
        //usando o polimorfismo para determinar a folha de pagamento
        for (Funcionario funcionario : listaFuncionario) {
            folhaPagamento += escritorioContabilidade.getSalarioFuncionario(funcionario);
        }
        System.out.println("folha de pagamento: "+folhaPagamento);
        
        //agora vamos usar um dos metodos que utilizam os IFs e voces podem ver a clareza em ambos os trechos de codigo
        folhaPagamento = 0;
        folhaPagamento +=  escritorioContabilidade.getSalarioFuncionario("gerente");
        folhaPagamento +=  escritorioContabilidade.getSalarioFuncionario("balconista");
        folhaPagamento +=  escritorioContabilidade.getSalarioFuncionario("faixineiro");
        
        System.out.println("folha de pagamento: "+folhaPagamento);
    }
}


public abstract class Funcionario {
    public abstract double informarSalario();
}


public class Gerente extends Funcionario {

    @Override
    public double informarSalario() {
        return 1000;
    }

}

class Balconista extends Funcionario{

    @Override
    public double informarSalario() {
        return 900;
    }
    
}

class Faixineiro extends Funcionario{

    @Override
    public double informarSalario() {
        return 550;
    }
    
}

In this code, if I use polymorphism, my code certainly becomes more elegant. However, if I use if statements, wouldn't it have better performance because it doesn't create memory pointers and such?

I hope to clarify a question about Java and design patterns.

Aucun commentaire:

Enregistrer un commentaire