DEV Community

Paula Santana
Paula Santana

Posted on

Evite Classes Tagged

Dê preferência às hierarquias de classes em vez das classes tagged.

Esta é uma série baseada no entendimento de tópicos relacionados ao livro com foco no resumo.

O que é uma classe Tagged?

São classes que representam mais de um tipo de objeto e utilizando um atributo que identifique qual o objeto foi instanciado.
Vamos ver o exemplo citado no livro Java Efetivo que torna mais clara essa afirmação.
Veja que a classe representa tanto um circulo quanto um retângulo e que alguns campos só fazem sentido quando é um dos tipos das instâncias.

Image description

Problemas

  • Muito Boilerplate
  • Campos de tag ( campos de tem objetivo de identificar o tipo da instância do objeto)
  • Legibilidade ruim, pois tem muitas particularidade para cada tipo
  • Uso desnecessário de memória, visto que nem todos os campos serão utilizados para cada tipo
  • Mais difícil o uso de campos final
  • Criação de muitos construtores
  • Maior possibilidade de erros de execução

Resumindo

Classes Tagged são verbosas, sujeitas a erros e ineficientes.
Se analisarmos bem as classes tagged são uma forma de estrutura do que poderia ser uma hierarquia de classes.
Então o livro mostra como seria refatorar o exemplo para o caminho certo, usando hierarquia.
Vamos ver?

Passos

De maneira bem sútil é orientada uma sequência de passos:

  • Criar uma classe abstrata com os métodos que não possuem comportamento diferente de acordo com o tipo
  • Criar as classes concretas, considerando cada tipo do campo tag para uma implementação diferente.

Resultado

Image description

Image description

Image description

A nova estrutura permite:

  • Diminuir boilerplate
  • Evitar erros de excução
  • Fácil entendimento
  • Campos final
  • Felixibilidade

Ou seja, sempre pense ao criar uma classe tagged se não seria melhor utilizar a hierarquia de classes.

Top comments (1)

Collapse
 
dearrudam profile image
Maximillian Arruda

Muito boa a dica!!! Valeu por compartilhar com a comunidade!!! Abraços!!!