6 de novembro de 2017


O inline class é um método de refatoração utilizado para unir duas classes que sejam muito pequenas e possuam atividades em comum. Esta é mais uma forma de simplificar o sistema e diminuir o número de arquivos. É sempre importante modularizar o máximo possível um aplicativo, mas, se duas classes são muito pequenas e uma utiliza a outra, elas podem ser unidas em apenas uma.

O inline class pode ser útil para diminuir a complexidade, pois, se for notada a existência de duas ou mais classes muito pequenas e que se pareçam em suas tarefas, pode ser um indício de que o número de arquivos no aplicativo é maior do que poderia ser. Com a existência de um número de arquivos desnecessário, pode se tornar complicada a tarefa de encontrar um procedimento ou outro item e dificultar a manutenção. Isso ocorre porque, se você tem classes muito pequenas com tarefas parecidas, quando for necessário encontrar um atributo x, você pode imaginar que ele esteja em várias daquelas classes com tarefas parecidas. Mas, se o aplicativo é bem organizado e não possui esse tipo de classe, é fácil encontrar, por exemplo, o atributo telefone acessando diretamente a classe Pessoa como vamos verificar no exemplo a seguir.

Veja a classe Pessoa que após a refatoração foi unida a classe Telefone:

Antes da refatoração:

public class Pessoa {
   
    private String nome;
    private String cpf;
    private String endereco;
    private String estadoCivil;
    private String sexo;
    private String telefone1;
    private String telefone2;
   
    public Pessoa(String nome, String cpf, String endereco,
    String estadoCivil, String sexo){
        this.nome = nome;
        this.cpf = cpf;
        this.endereco = endereco;
        this.estadoCivil = estadoCivil;
        this.sexo = sexo;   
    }

   
    public void telefones(){
       
        Telefone telefone = new Telefone();       
        telefone1 = telefone.retornarTelefone("telefoneFixo");
        telefone2 = telefone.retornarTelefone("telefoneCelular");
    }   
}
public class Telefone {
   
    private String telefoneFixo;
    private String telefoneCelular;

    public Telefone(String telefoneFixo,
    String telefoneCelular){
        this. telefoneFixo = telefoneFixo;
        this. telefoneCelular = telefoneCelular;
    }

   
    public String retornarTelefone(String telefone){
       
        String tel;

        if(telefone == "telefoneFixo")
            tel =  telefoneFixo;
       
        else if(telefone == "telefoneCelular")
            tel =  telefoneCelular;
       
        return tel;
       
    }

}

No exemplo dado, a classe Telefone existia fora da classe Pessoa de forma incoerente, pois, geralmente no mesmo ato de cadastrar uma pessoa são incluídos seus telefones. Nesse caso, a classe pessoa pode possuir um ou mais atributos de telefone para que não seja necessário criar uma classe somente para incluí-los.

Após a refatoração:

public class Pessoa {
   
    private String nome;
    private String cpf;
    private String endereco;
    private String estadoCivil;
    private String sexo;
    private String telefoneFixo;
    private String telefoneCelular;
   
    public Pessoa(String nome, String cpf, String endereco,
    String estadoCivil, String sexo, String telefoneFixo,
    String telefoneCelular){
        this.nome = nome;
        this.cpf = cpf;
        this.endereco = endereco;
        this.estadoCivil = estadoCivil;
        this.sexo = sexo;   
        this.telefoneFixo = telefoneFixo;
        this.telefoneCelular = telefoneCelular;
    }
   
}

Agora a classe pessoa possui dois campos de telefone e não mais necessita recorrer à classe Telefone para obter os telefones de uma pessoa específica. Essa refatoração diminiu a complexidade do código simplesmente criando dois atributos a mais na classe Pessoa.

Referência:

FOWLER, M. Refactoring: Improving the Design of Existing Code. 1. ed. Boston: Addison- Wesley Professional, 1999.

0 comentários:

Postar um comentário

Comentários:

Perfil

Formada em Sistemas de Informação e pós-graduada em Engenharia de Software.

Facebook

Views