Artigo Clube Delphi 113 - RTTI no dia�a�dia
Persist�ncia de dados e formul�rios personalizados pelo usu�rio	0
ClubeDelphi 113
> Clique aqui para ler todos os artigos da ClubeDelphi 113
Boa IdeiaRTTI no dia�a�diaPersist�ncia de dados e formul�rios personalizados pelo usu�rio Do que trata o artigoReflex�o ou introspec��o � a capacidade que muitas linguagens de programa��o modernas t�m de permitir que se criem classes com o conhecimento de sua pr�pria estrutura. Quando as classes �sabem� como s�o feitas, voc� pode obter valores de propriedades atrav�s de strings, sem necessariamente ter certeza de que a classe em quest�o realmente tem tal propriedade. Faremos isso usando o mecanismo de RTTI (Runtime Type Information � Informa��o em tempo de execu��o) do Delphi, que nos permite obter informa��es sobre a estrutura dos objetos instanciados. Mas n�o exploraremos apenas a RTTI, mas mostraremos como ela pode ser utilizada na flexibiliza��o de projetos orientados a objetos.Para que servePerguntando para um objeto se ele tem determinada propriedade e depois obtendo o seu valor nos permite criar em nossas classes m�todos gen�ricos, que podem trabalhar literalmente com qualquer tipo de par�metro.Em que situa��o o tema � �tilEssa t�cnica pode ser muito �til quando o programador tem um objeto instanciado do tipo TForm, mas n�o sabe exatamente que form � e precisa consultar ou modificar o valor de determinado atributo.Resumo do DevMan Ser�o expostas algumas t�cnicas de RTTI para se obter informa��es de objetos e persistir essas informa��es em banco de dados. Ser�o mostrados desde a cria��o das tabelas aos m�todos para inserir, alterar e excluir registros. Tamb�m ser� apresentado como podemos criar interfaces que o pr�prio usu�rio possa alterar, diminuindo assim os custos de manuten��es simples como trocar a cor ou posi��o de controles no formul�rio.Trabalhando com desenvolvimento de software nos deparamos com in�meras situa��es em que nossos clientes nos pedem customiza��es. Algumas vezes estas s�o mudan�as significativas, mas interessantes, que podemos incorporar em nossos produtos e agregar valor aos nossos projetos. Entretanto a maioria das vezes essas altera��es s�o �teis para apenas um cliente, �s vezes nos for�ando a trabalhar com dois projetos em paralelo. Essa tend�ncia nos leva a criar sistemas bastante customiz�veis, com muitos par�metros de configura��o. Estamos nos habituando a programar orientado a objetos criando classes cada vez mais gen�ricas para que possamos trocar livremente os objetos, unidades e componentes do nosso sistema. Quando precisamos passar como par�metro para um m�todo de uma classe um objeto de uma classe qualquer j� instanciado, numa vari�vel do tipo TObject, para ser �gen�rico�, dentro do escopo do m�todo precisamos saber de que tipo esse objeto �, para podermos alterar seguramente as suas propriedades e invocar suas fun��es e procedimentos. H� uma maneira mais elegante de tratar esses objetos gen�ricos do que fazer Typecasts, muitas vezes inseguros, ou uma lista intermin�vel de desvios condicionais com muitos if's e cases. As linguagens de programa��o modernas fornecem um recurso chamado Introspec��o, ou Reflex�o, que � a habilidade de uma classe de �conhecer� detalhes sobre sua estrutura, seus metadados, m�todos e propriedades. O Delphi prov� essa habilidade na sua RTTI (Runtime Type Information - Informa��o em Tempo de Execu��o). Criada h� mais de 10 anos, a RTTI tinha o objetivo inicial de facilitar o desenvolvimento da pr�pria IDE do Delphi, para que ela pudesse cumprir com uma de suas miss�es que � �conhecer� as classes que est�o sendo criadas ou usadas pelo desenvolvedor. Ela � amplamente utilizada na nossa ferramenta, por isso que o Object Inspector sabe de cada propriedade, valor e evento do componente que selecionamos, n�o importando qual componente seja. Embora a RTTI nunca tenha sido bem documentada fora da equipe de desenvolvimento do Delphi, ela sempre p�de ser usada por programadores para facilitar algumas de suas tarefas na programa��o orientada a objetos. Vamos ver como essa tecnologia pode nos ajudar a economizar bastante tempo, criar interfaces customiz�veis para nossos clientes e usar a RTTI no dia-a-dia.Conhecendo o b�sicoTalvez o leitor j� use RTTI e n�o sabe. Sempre que usamos os operadores �is� para perguntar se um objeto � de um determinado tipo e �as� para fazer um Typecast seguro estamos usando na verdade RTTI.Vamos ao c�digo, que fala muito melhor a nossa l�ngua. Usaremos neste exemplo o Turbo Delphi 2006, que pode ser obtido pelo site da Embarcadero. Fique � vontade para usar vers�es mais atuais do Delphi, apenas fique atento ao usar a vers�o 7 ou 2010. A vers�o 7 possui algumas diferen�as, e o a 2010 teve a RTTI bastante modificada, assunto que j� foi abordado aqui na revista e n�o focaremos neste artigo.Crie uma nova aplica��o Delphi VCL Forms para win32, renomeie o Form1 para frmTesteRTTI. Esta ser� nossa form principal e todos os nossos testes e exemplos partir�o dela. Salve o projeto como ExemploRTTI.dpr e a Unit1 como uFrmTesteRTTI.pas. Inclua um Edit com o nome de edTeste e um Button com o nome de btTesteEdit. Crie uma procedure chamada AlteraTexto, que receba 2 par�metros, um TObject e uma string. Essa procedure ser� respons�vel por mudar o texto de nosso Edit e de qualquer outro componente que colocarmos no formul�rio. E depois vamos codificar o evento onClick do bot�o btTesteEdit para chamar esse procedimento passando como primeiro par�metro o edTeste e como segundo par�metro a mensagem super original �Al� Universo!�.Neste m�todo usaremos os operadores �is� para saber o tipo do objeto passado como par�metro e o operador �as� para converter para o tipo que precisamos. Esse c�digo pode ser visto na Listagem 1.Listagem 1. Procedure AlteraTexto e bot�o btTesteEdit//m�todo p�blico deste form: AlteraTextoprocedure TfrmTesteRTTI.AlteraTexto(obj: TObject; texto: string);begin if obj is TEdit then //verifica: obj � mesmo um edit? (obj as TEdit).Text := texto; //ent�o, sendo um edit, modificamos a propriedade Textend;procedure TfrmTesteRTTI.btTesteEditClick(Sender: TObject);begin AlteraTexto(edTeste, 'Ol� Universo!');end;Este c�digo n�o faz nada mais que usar o operador �is� para saber de que classe que � o objeto e o operador �as� para fazer typecast seguro e acessar suas propriedades. Uma das v�rias vantagens do Typecast seguro � que, se voc� tentar converter para o tipo errado, a instru��o n�o vai passar deste ponto e causar um access violation depois da convers�o, mas vai disparar uma exce��o do tipo EinvalidCast com a mensagem �Invalid class typecast� no momento da convers�o. At� agora, nenhuma novidade. Esta procedure que criamos n�o � muito �til, mas repare que ela n�o necessariamente precisaria estar neste formul�rio. Ela poderia estar em qualquer uma das nossas classes de neg�cio, servindo inclusive para preencher nossos forms. Vamos criar um outro bot�o, com o nome de btTesteCombo e adicionar um ComboBox com o nome cmbTeste. Nosso formul�rio ficar� como a Figura 1. Figura 1. Form com Edit, ComboBox e bot�esVamos fazer a mesma coisa agora para verificar o ComboBox. No c�digo do btTesteCombo, repetimos o mesmo c�digo do bot�o anterior, apenas passando o cmbTeste como primeiro par�metro. A procedure AlteraTexto deve ser mudada para suportar o ComboBox, adicionando um if para verificar se o tipo � um TEdit ou um TComboBox, conforme a Listagem 2."	A exibi��o deste artigo foi interrompida.
Este � um post dispon�vel para assinantes MVPEste post tamb�m est� dispon�vel para assinantes da ClubeDelphi DIGITAL ou para quem possui Cr�ditos DevMedia. Clique aqui para saber mais!Saiba como acessar este post atrav�s de Cr�ditos DevMedia:Assinatura de Cr�ditos � Aqui este post custa R$ 1,47Com esse plano voc� compra R$ 180,00 em cr�ditos e ganha, em m�dia, 80% de desconto no pre�o do post. Assine agoraPlano ocasional - Aqui este post custa: R$ 1,96 (assinante) ou R$ 2,45 (n�o-assinante)Voc� compra um m�nimo de R$ 60,00 em cr�ditos e ganha, em m�dia, 50% de desconto no pre�o do post. Compre agoraPlano conveni�ncia � Neste plano este post custa R$ 4,90Neste plano voc� compra somente um post, pagando seu pre�o sem desconto. Compre agora Vitor Rubio
Tecn�logo em Processamento de Dados pela FATEC-SP e MCP. Atua como analista de Sistemas S�nior na Editora Revista dos Tribunais. Programa com Delphi desde a vers�o 3. O que voc� achou deste post? Gostei
Vinicius Pedrosa De Oliveira.
Teria como disponibilizar o c�digo-fonte deste artigo?
Wesley Yamazack	Ol� Vinicius, voc� pode baixar o c�digo fonte no link: http://www.devmedia.com.br/revista-clube-delphi-edicao-113/15250