15.04.2013 Views

A Model-Driven Software Reuse Approach (in portuguese)

A Model-Driven Software Reuse Approach (in portuguese)

A Model-Driven Software Reuse Approach (in portuguese)

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

208<br />

DSL. Um domínio no Draco <strong>in</strong>clui um <strong>in</strong>terpretador semântico (parser), que <strong>in</strong>corpora as regras<br />

gramaticais da l<strong>in</strong>guagem. Desta forma, ao se construir um sistema para esse domínio, um<br />

engenheiro de software pode utilizar essa DSL.<br />

Por exemplo, considere um analista do domínio de jogos eletrônicos. Ele def<strong>in</strong>e elementos<br />

como “placar”, “comando”, “fase”, “jogador”, entre outros, e os descreve utilizando regras<br />

gramaticais, que servem para a criação de um <strong>in</strong>terpretador (parser). O analista de um sistema<br />

utiliza esses elementos para construir seu próprio jogo, criando elementos como “Jogador 1”,<br />

“Jogador 2”, “comandoDireita”, “comandoEsquerda”, etc.<br />

Uma possível gramática para essa DSL, onde um jogo envolve vários jogadores, seria:<br />

<br />

<br />

<br />

<br />

<br />

Dessa forma, um novo jogo poderia ser def<strong>in</strong>ido por meio dessa l<strong>in</strong>guagem, por exemplo:<br />

<br />

<br />

<br />

<br />

No Draco, o analista do domínio também pode construir transformações que permitem<br />

que os elementos criados pelo analista do sistema sejam automaticamente transformados em<br />

domínios <strong>in</strong>termediários, até eventualmente chegar em l<strong>in</strong>guagem executável.<br />

É o que acontece quando, por exemplo, se deseja obter um modelo orientado a objetos deste<br />

jogo, para posteriormente implementá-lo utilizando uma l<strong>in</strong>guagem de programação orientada<br />

a objetos. No Draco, as transformações se baseiam nas regras gramaticais das l<strong>in</strong>guagem dos<br />

domínios, <strong>in</strong>terpretadas pelo seu próprio parser. Por isso é necessário existir uma gramática<br />

para a l<strong>in</strong>guagem de origem e uma gramática para a l<strong>in</strong>guagem dest<strong>in</strong>o. Neste caso, seria<br />

necessária uma gramática para esse modelo orientado a objetos <strong>in</strong>termediário, que poderia ser<br />

parecida com:

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!