Atributos Primários e Secundários


Um Objeto pode ter Atributos Primários e Secundários.

Unsplash image

Introdução

Os atributos de um Objeto são a representação do seu conhecimento, ou seja, tudo que o Objeto encapsula é representado por atributos.

Assim como uma Classe pode ter 2 tipos de construtores, um Objeto pode ter 2 tipos de atributos: Primários e Secundários.

Primários

Atributos Primários são aqueles que fazem parte do Estado do Objeto.

São os atributos inicializados pela Classe, passados ao Objeto através do construtor com a finalidade de representar uma Entidade.

Vejamos um exemplo:

Na Classe TFile acima, há apenas 1 argumento no construtor. Esse argumento será parte do Estado do Objeto e, portanto, irá inicializar um Atributo Primário chamado FFilePath.

Secundários

Atributos Secundários são todos os atributos que não foram inicializados pelo construtor da Classe.

São atributos de suporte tecnológico.

Vejamos um exemplo:

Nesse exemplo acima a Classe TFile foi atualizada. Um novo atributo FStream foi adicionado.

Esse atributo não foi passado no construtor, então ele é um Atributo Secundário.

O método Stream irá retornar o stream do arquivo, no entanto os dados do arquivo em disco serão lidos apenas na primeira execução, pois após inicializar o atributo FStream ele não é mais atualizado.

A Classe TDataStream é irrelevante para o entendimento, mas veja que o path do arquivo é passado. Então essa Classe irá ler o arquivo em disco e retornar uma instância de IDataStream.

Conclusão

Atributos Primários são inicializados através do construtor da Classe e devem ser imutáveis.

Atributos Secundários podem ou não ser inicializados através do construtor da Classe, pois eles podem ser inicializados a qualquer momento e em qualquer lugar do Objeto.

Tudo são atributos, mas saber essa diferença sutil entre Atributos Primários e Secundários é essencial para construírmos Classes melhores.

Até logo.

Posts Relacionados

  • Injeção de Dependência sem XML, Atributos/Anotações ou Frameworks

  • Nomeando Classes em Libraries

  • Versionando e Organizando seus Pacotes

  • Xavier Package

  • Inter-process Communication

  • Porquê eu escolhi Delphi e então, Object Pascal

  • Redefinindo Classes

  • Git-work Project

  • Imutabilidade do Estado

  • Diretivas de Compilação