• Nenhum resultado encontrado

2.2 APLICAÇÕES ADAPTATIVAS

2.2.5 Reflexão

Para que as aplicações possam ser dinamicamente adaptadas, é necessário que elas sejam projetadas para isso. Um passo importante nesse sentido corresponde à concepção de uma aplicação como uma composição de unidades que possam ser dinamicamente substituídas. Embora as seções anteriores tenham apresentado diferentes paradigmas que podem ser utilizados nesse sentido, elas não apresentaram como, efetivamente, as reconfigurações dinâmicas podem ser realizadas. Nesse contexto, um mecanismo essencial consiste no uso do padrão arquitetural reflexão (SMITH, 1982;BUSCHMANN et al., 1996).

Em sua essência, a computação reflexiva permite que os sistemas computacionais ma- nipulem representações deles mesmos, de forma similar às manipulações que estes realizam nas representações do seu domínio de negócio. Estas representações próprias, referencia- das como meta-representações, devem compreender aspectos relativos ao seu estado e/ou comportamento. Um sistema computacional é dito reflexivo se existe uma conexão causal entre o próprio sistema em execução e a sua meta-representação, de forma que altera- ções nesta representação promovam modificações equivalentes no sistema em execução e vice-versa (MAES, 1987).

O processo de exposição das características e comportamentos de um sistema atra- vés da criação das meta-representações é denominado reificação. O processo inverso, que corresponde à adaptação do sistema de forma a refletir alterações efetuadas na sua meta- representação é denominado reflexão. Ainda em termos de terminologia, a utilização de uma meta-representação para fins de observação e análise é referenciada como intros- pecção, enquanto que a intersecção corresponde à utilização da meta-representação para promover modificações no estado e/ou comportamento da aplicação em execução.

Como observado em Ferber (1989), a concepção de sistemas reflexivos no paradigma de orientação a objetos pode ser realizada de forma natural utilizando o conceito de objetos

Figura 6 – Torre de Reflexão

Fonte: baseada em (COSTA, 2001)

tanto na construção da lógica de negócio, onde os objetos devem representar elementos do domínio da aplicação, quanto na construção da meta-representação, onde objetos (nesse contexto referenciados como meta-objetos) são utilizados para representar os objetos que compõem a aplicação. Nesse sentido, as computações realizadas pelos meta-objetos, re- ferenciadas como meta-computações, tem a finalidade de observar, analisar e, eventual- mente, modificar os objetos representados, modificando, assim, a própria aplicação. Uma evolução natural desse conceito consiste na utilização de componentes como unidades ele- mentares de composição, tanto no nível base quanto no nível meta (HNETYNKA; PLASIL, 2011).

A estruturação dos sistemas em termos de objetos e meta-objetos (ou componentes e meta-componentes) leva à proposição de uma arquitetura organizada em níveis. Neste contexto, o nível mais baixo da hierarquia, chamado de nível base, é composto pelo con- junto de objetos (ou componentes) responsáveis por realizar as funcionalidades relaciona- das ao domínio de negócio da aplicação. O nível acima do nível base é composto pelos meta-objetos (ou meta-componentes), os quais integram a meta-representação, sendo res- ponsáveis por prover a capacidade reflexiva do sistema. Esta organização em níveis pode ser naturalmente estendida, uma vez que meta-meta-objetos podem ser utilizados para representar os próprios meta-objetos, levando à constituição de torres de reflexão, onde cada nível define uma representação causalmente conectada com o nível abaixo (vide Fi- gura 6). É importante destacar que a estruturação da arquitetura em camadas permite uma separação natural de preocupações, sendo o nível base responsável pela realização dos requisitos de negócio, e os níveis meta responsáveis por realizar as características não-funcionais.

de acesso implícito permite que invocações no nível base sejam reificadas de forma que o controle da sua execução seja transferido para o nível meta sem que o nível base tenha ciência desse fato. Este tipo de acesso é normalmente implementado através da utilização de interceptadores.

A disponibilização de um mecanismo de acesso explícito é responsável por possibilitar a meta-programação, ou seja, é através dele que são expostas as interfaces dos meta-objetos (referenciadas como meta-interfaces). Estas interfaces são normalmente organizadas em meta-espaços que, em conjunto, compõem o que se chama de protocolo de meta-objetos, ou seja, uma API para acesso às funcionalidades do nível meta, que pode ser utilizada para fins de introspecção e/ou intersecção.

Nos sistemas adaptativos, a manipulação das meta-representações pode ser realizada por seres humanos através de ferramentas/scripts de administração, viabilizando a recon- figuração da aplicação sem a necessidade de interromper inteiramente a sua execução. No contexto dos sistemas auto-adaptativos, os próprios sistemas conduzem o seu processo de adaptação. Como veremos na seção seguinte, o projeto desses sistemas é complexo, uma vez que envolve, além da lógica de negócio em si, a lógica responsável pela condução da adaptação.

Considerando-se a relevância dos mecanismos de reflexão, eles são normalmente em- butidos em diferentes níveis, desde as linguagens de programação até os modelos de com- ponentes (e.g., Fractal (BRUNETON, 2009) e SOFA2 (HNETYNKA; PLASIL, 2011)). No contexto dos modelos de componentes, o recurso da reflexão é responsável por expor as propriedades de configuração dos componentes através de elementos do nível meta, e por permitir que essas representações sejam manipuladas, promovendo alterações das pro- priedades dos componentes em execução no nível base. Desta forma, o uso de reflexão viabiliza a realização da adaptação paramétrica.

Do ponto de vista da adaptação composicional, os mecanismos de reflexão embutidos nos modelos de componentes são responsáveis por permitir que uma aplicação adicione, remova, ou substitua dinamicamente componentes. Em suma, as capacidades reflexivas embutidas nos modelos de componentes fazem com que esses modelos tenham papel de destaque nas pesquisas relacionadas ao desenvolvimento das aplicações adaptativas.