• Nenhum resultado encontrado

M´aquinas de estado abstratas fornecem uma metodologia precisa para especifica¸c˜ao de algoritmos. Esta metodologia est´a baseada em s´olidos conceitos matem´aticos, mas ao mesmo tempo apresenta semelhan¸cas com linguagens de programa¸c˜ao, facilitando o aprendizado por n˜ao-especialistas. A linguagem Mach˘ına, com seu rico conjunto de instru¸c˜oes, e as pesquisas relacionadas a programa¸c˜ao orientada por aspecto formam o contexto para a elabora¸c˜ao do trabalho proposto.

Como a linguagem Mach˘ına ´e baseada no modelo ASM, um tipo de semˆantica ope- racional, uma especifica¸c˜ao em Mach˘ına pode ser executada. Este trabalho apresenta como a compila¸c˜ao de uma especifica¸c˜ao em Mach˘ına e suas novas constru¸c˜oes podem ser mapeadas em C++ e AspectC++.

Conforme visto neste cap´ıtulo, existem problemas na especifica¸c˜ao de interesses transversais, como pode ser observado nas especifica¸c˜oes da linguagem Tiny e da cadeira a valor. Cabe ressaltar que o entrela¸camento causado pelo c´odigo dos interesses transversais, como destacado no Cap´ıtulo 1, ocasiona os seguintes problemas:

• o entendimento do c´odigo fica mais dif´ıcil, uma vez que temos c´odigos com prop´ositos distintos misturados;

• como o c´odigo referente a um interesse transversal n˜ao ´e apropriadamente encap- sulado, ele encontra-se espalhado por todo o sistema, desta forma, uma altera¸c˜ao neste c´odigo provocar´a modifica¸c˜oes em v´arios lugares, tornando com isso dif´ıcil a manuten¸c˜ao/evolu¸c˜ao do sistema, que ´e a parte respons´avel pela maior parcela de custos no processo de desenvolvimento de software;

• visto que o c´odigo do interesse principal est´a misturado com o c´odigo do interesse transversal, a reusabilidade do componente fica prejudicada caso desejarmos fazer uso da sua funcionalidade b´asica em um contexto diferente;

Por isso, novas constru¸c˜oes fazem-se necess´arias. O trabalho proposto oferece novos recursos para a linguagem Mach˘ına com o objetivo de sanar estes problemas apresen- tados.

Cap´ıtulo 4

A Linguagem AspectM

Este cap´ıtulo apresenta a linguagem AspectM, uma linguagem de especifica¸c˜ao formal baseada no modelo ASM e orientada por aspectos. AspectM representa uma nova vers˜ao da linguagem Mach˘ına. Desta forma, al´em de possuir todas as caracter´ısticas da linguagem Mach˘ına, como, constru¸c˜oes de alto n´ıvel e cria¸c˜ao de novos tipos, possui suporte `a modulariza¸c˜ao dos interesses transversais. Assim, esta nova vers˜ao acrescenta `a linguagem Mach˘ına alguns benef´ıcios, dentre eles, a diminui¸c˜ao das responsabilidades dos m´odulos e a melhor modulariza¸c˜ao dos interesses.

4.1

Vis˜ao Geral

AspectM ´e uma linguagem orientada por aspectos e constitui-se de uma nova vers˜ao da linguagem de especifica¸c˜ao formal Mach˘ına [BTI+

07]. Esta vers˜ao acrescenta novas constru¸c˜oes `a linguagem, permitindo a implementa¸c˜ao de interesses transversais de forma modular. Por meio de AspectM, o usu´ario pode definir pontos espec´ıficos no fluxo de execu¸c˜ao das regras de transi¸c˜ao, como a chamada de a¸c˜oes ou o acesso a fun¸c˜oes, e a partir destes pontos, pode-se definir regras de transi¸c˜ao. Al´em disso, pode-se tamb´em alterar a ´algebra dos m´odulos de forma n˜ao intrusiva e transparente para os m´odulos afetados.

No projeto de AspectM, mantiveram-se as seguintes compatibilidades:

• compatibilidade superior - todas as especifica¸c˜oes v´alidas na vers˜ao antiga devem ser especifica¸c˜oes v´alidas em AspectM.

• compatibilidade de plataformas - todas as especifica¸c˜oes v´alidas em AspectM devem ser executadas de forma an´aloga a especifica¸c˜oes na vers˜ao antiga.

• compatibilidade de ferramentas - as ferramentas existentes, como [Ste07], podem ser usadas.

• compatibilidade de programador - os programadores de Mach˘ına devem se sentir confort´aveis programando em AspectM.

Baseado em Eos [RS03], AspectM n˜ao possui uma nova unidade de modulariza¸c˜ao para implementa¸c˜ao dos interesses transversais. Utilizando a id´eia de Classpects pro- posta por Rajan e Sullivan, em [RS05b], as novas constru¸c˜oes desta vers˜ao s˜ao definidas no pr´oprio m´odulo, em uma se¸c˜ao denominada aspect. Assim, os m´odulos s˜ao compi- lados por um compilador especial, que une os elementos e gera um c´odigo em C++ e AspectC++.

O compilador desenvolvido pode compilar especifica¸c˜oes escritas puramente em Mach˘ına. Quando existir alguma defini¸c˜ao de aspecto, esses s˜ao compilados junto ao c´odigo Mach˘ına, e uma etapa adicional ´e realizada durante a compila¸c˜ao, chamada costura de c´odigo. Nessa etapa, realizada pelo que se chama um combinador (weaver), as especifica¸c˜oes de comportamentos transversais, definidas na se¸c˜ao aspect, s˜ao costu- radas, ou combinadas, ao c´odigo gerado.

Simplificando o processo de compila¸c˜ao, pode-se dizer que o compilador front-end lˆe o c´odigo-fonte dos m´odulos e gera uma AST e um conjunto de informa¸c˜oes para a costura de c´odigo. O back-end ent˜ao usa a AST do programa e as informa¸c˜oes de costura para gerar um c´odigo em C++ e AspectC++. No Cap´ıtulo 5, o processo de compila¸c˜ao ´e mais bem detalhado.

An´alogo a AspectJ, esta vers˜ao acrescenta `a linguagem Mach˘ına dois tipos de im- plementa¸c˜ao de interesses transversais: transversalidade dinˆamica e transversalidade est´atica.

A transversalidade dinˆamica ´e restrita a um conjunto pr´e-definido de pontos especi- ficados por um modelo de pontos de jun¸c˜ao. Esse modelo concentra-se na execu¸c˜ao das regras de transi¸c˜ao de uma especifica¸c˜ao em Mach˘ına.

O modelo de ponto de jun¸c˜ao ´e o principal componente de uma linguagem orientada por aspectos e representa um arcabou¸co conceitual para descrever os tipos de pontos de jun¸c˜ao de interesse e as restri¸c˜oes associadas a seu uso. Ele ´e altamente dependente da linguagem de componentes adotada, neste caso, a linguagem Mach˘ına.

A transversalidade dinˆamica, em AspectM, permite definir regras adicionais em pontos espec´ıficos no fluxo de execu¸c˜ao das regras de transi¸c˜ao. Por exemplo, pode- se especificar que uma certa regra seja executada paralelamente `a execu¸c˜ao de outras regras ou a¸c˜oes de um conjunto de m´odulos. Para isso, basta especificar separadamente qual regra dever´a ser utilizada e os pontos de jun¸c˜ao onde a mesma ser´a inserida.

A transversalidade est´atica afeta as estruturas dos m´odulos de uma especifica¸c˜ao em Mach˘ına. Tem-se, por exemplo, a introdu¸c˜ao de algumas fun¸c˜oes ou tipos em um conjunto de m´odulos previamente especificados.

4.2. Novas Construc¸ ˜oes de Mach˘ına 67

Desta forma, AspectM permite a modulariza¸c˜ao adequada de uma grande varie- dade de interesses transversais, como verifica¸c˜ao e tratamento de erros, sincroniza¸c˜ao, distribui¸c˜ao, monitoramento e auditoria.

Palavras Reservadas

Os seguintes identificadores s˜ao declarados como palavras reservadas de AspectM, al´em dos j´a existente em Mach˘ına:

addition pointcut around introduction proceed execution

get after initialization

function transition args within withincode before

aspect target

Nota¸c˜ao para Sintaxe

Para descri¸c˜ao da gram´atica, utiliza-se a BNF estendida [Wir77], ou XBNF. As con- stru¸c˜oes utilizadas s˜ao semelhantes `a BNF tradicional, com as seguintes extens˜oes:

| Op¸c˜oes

{ X } Zero ou mais ocorrˆencias de X [ X ] Zero ou uma ocorrˆencia de X

Os caracteres que representam meta-s´ımbolos, se utilizados na gram´atica, s˜ao es- critos em aspas, por exemplo, “{”.