Antes de iniciar, gostaria de parabenizar dois profissionais, os quais têm sido uma referência nesta fase inicial dos meus estudo em Flex e ActionScript. Ambos atendem prontamente quando solicitamos, sempre muito atenciosos e detalhistas em suas respostas, o que ajuda e muito, além de passar uma grande confiança. E ressalto o trabalho que desenvolvem através de seus sites e fórum. São eles: Mário Santos, da msdevstudio.com e o Julio da flexpernambucano.com.br. Queria aproveitar este meu primeiro post sobre Flex e Actionscript para de público agradecer e parabenizar aos dois. Obrigado!

Mas vamos ao post!!

Reflexão ou introspecção é a capacidade de um programa de investigar fatos sobre si próprio. É uma técnica para determinar os elementos de uma classe em tempo de execução, tais como suas propriedades e métodos. Existem duas maneiras de fazer instrospecção em Actionscript.

A primeira maneira é usando o laço for..in. Esta técnica somente funciona para objetos dinâmicos, pois
ela enumera apenas as propriedades adicionadas dinamicamente. Ou seja, variáveis e métodos declarados não são enumerados em laços for..in. Veja exemplo:

<?xml version="1.0"?>
<!-- IntrospectionForIn.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initApp()">
<mx:Script><![CDATA[
private var obj:Object = new Object();

private function initApp():void {
// propriedades adicionadas dinamicamente.
obj.a = "Schotten Totten";
obj.b = "Taj Majal";
obj.c = "Durche die Wuste";
}

public function dumpObj():void {
for (var p:String in obj) {
ta1.text += p + ":" + obj[p] + "\n";
}
}
]]></mx:Script>
<mx:TextArea id="ta1" width="400" height="200"/>
<mx:Button label="Dump Object" click="dumpObj()"/>
</mx:Application>
Exemplo retirado da documentação da adobe Flex.

A segunda maneira é usando a API de Instrospecção. Ela é apropriada quando se quer listar todas as propriedades e métodos públicos de uma classe não-dinâmica. Aqui destaco o método flash.utils.describeType(), o qual retorna um XML com a descrição da classe (E4X API). Veja exemplo:

<?xml version="1.0"?>
<!-- IntrospectionAPI.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="getDetails()">
<mx:Script><![CDATA[
import flash.utils.*;

public function getDetails():void {
// Fornece a descrição do Botão em E4X XML.
var classInfo:XML = describeType(button1);

// Lista o nome da classe.
ta1.text = "Class " + classInfo.@name.toString() + "\n";

// Lista as variáveis do objeto, seus valores e seus respectivos tipos.
for each (var v:XML in classInfo..variable) {
ta1.text += "Variable " + v.@name + "=" + button1[v.@name] + " (" + v.@type + ")\n";
}

// Lista os acessores como propriedades.
for each (var a:XML in classInfo..accessor) {
// Não fornece o valor da propriedade se for "write only".
if (a.@access == 'writeonly') {
ta1.text += "Property " + a.@name + " (" + a.@type +")\n";
}
else {
ta1.text += "Property " + a.@name + "=" + button1[a.@name] + " (" + a.@type +")\n";
}
}

// Lista os métodos do objeto.
for each (var m:XML in classInfo..method) {
ta1.text += "Method " + m.@name + "():" + m.@returnType + "\n";
}
}
]]></mx:Script>

<mx:Button label="This Button Does Nothing" id="button1"/>
<mx:TextArea id="ta1" width="400" height="200"/>
</mx:Application>
Exemplo retirado da documentação da adobe Flex.


Saiba mais nas referências abaixo.

Referências
1. http://livedocs.adobe.com/flex/3/html/help.html?content=usingas_8.html
2. http://jsatriani.wordpress.com/2008/06/10/introspeccao-performance-java-x-action-script3/
3. http://www.as3dp.com/2007/05/05/runtime-checks-for-abstract-classes-and-methods-in-actionscript-30/

0 comentários

Postar um comentário