Artigo Clube Delphi 111 - RTTI

Artigo da Revista Clube Delphi Edição 111.

Fique por dentro
Reflexão de objetos. Toda classe deve saber quais são suas propriedades, métodos, campos e atributos. A reflexão, que no Delphi é chamada de RTTI, é um framework interno da ferramenta de desenvolvimento que disponibiliza meios para obtenção de tais informações. Outras plataformas de desenvolvimento, como o .NET e Java, possuem um framework de reflexão muito rico, e só agora, na versão 2010, o Delphi traz recursos melhorados em sua RTTI.

Através da RTTI podemos obter todos os métodos e propriedades, com seus valores, de uma classe instanciada. Por classe entenda-se as suas, que você pode vir a criar, ou até mesmo as existentes no Delphi, como TEdit, TClientDataSet. De posse dessas informações, podemos utilizá-las da forma que for necessário, podendo até mesmo alterar seus valores (no caso de propriedades), usando RTTI.

O uso da RTTI está quase sempre ligado a frameworks que venham a ser desenvolvidos para centralização e otimização dos sistemas. Esses frameworks, grandes ou não, tem por objetivo trazer maior flexibilidade a um sistema e produtividade ao desenvolvedor. Um exemplo seria um framework de validação, onde centralizaríamos na classe a ser validada todo o código responsável por isso, ao invés de replicar por todo sistema uma regra de negócio.

O Delphi sempre ofereceu recursos de reflexão, porém estes eram limitados quando comparados com a reflexão existente no .Net ou Java. Agora, na versão 2010, a RTTI passou por uma grande atualização trazendo benefícios esperados pelos programadores Delphi. Neste artigo vamos entender o que é reflexão e como ela foi implementada no Delphi. Também veremos como utilizar na prática o novo recurso adicionado, chamado Custom Attribute, além de conhecer novas perspectivas de desenvolvimento.

Runtime Type Information (RTTI) é um paradigma de programação em que a informação sobre um tipo pode ser obtido em tempo de execução. As versões anteriores do Delphi já davam suporte à RTTI, porém de uma forma limitada. As propriedades deveriam ser colocadas na seção published. As classes deveriam ter as diretivas {$M+} para que pudessem ser lidas via RTTI ou herdar de uma classe que a possuísse. Alguns tipos não podiam ser publicados como o Real48, array, entre outros.

Sem falar que o compilador não nos dava informações como, por exemplo, quais propriedades foram declaradas no objeto que está sendo lido e quais são herdadas. Pode não parecer, mas esta informação é de extrema importância quando pensamos em Mapeamento Objeto Relacional."

[...] continue lendo...

Artigos relacionados