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

  • Memória Segura Utilizando Instâncias de Interfaces

  • Classes Mutáveis vs Objetos Imutáveis

  • Implementando Interfaces Utilizando Diferente Assinaturas de Métodos

  • Usando Paths ao invés de Diretivas de Compilação

  • Trabalhando com Exceções em Requisições HTTP

  • Tipo object Continua Vivo

  • Array de Objetos

  • Variáveis Locais Deveriam ter Nomes Curtos

  • Como Dividir e Organizar o Código em Formulários com Muitos Widgets

  • Pascal Deveria ser Modernizado?