next up previous contents index
Next: Requisitos de Construção Up: O Gerador de Previous: Código dos Envelopes

Código Adicional

 

O gerador toma, como entrada, além da hierarquia original, código adicional que modifica a interface de cada classe de envelope, dependendo dos módulos funcionais que o programador da aplicação queira utilizar.

A classe Envelope, não está imune às modificações a introduzir, porque algumas delas podem ser suficientemente genéricas para não ser útil replicá-las em cada classe.

O código adicional prepara a interface por forma a que possa ser utilizada a partir do nível de suporte e, especialmente, na interacção com gestores de módulos. Além da interface, é também possível modificar a geração de cada método do envelope que tenha sido gerado a partir da hierarquia original. Como consequência, o envelope pode também passar a poder interagir directamente com o nível de suporte do módulo que provocou a introdução da modificação, e.g. no módulo de distribuição, o envelope pode passar a poder redirigir invocações para outros objectos que não a carta.

Cabe ao programador de cada módulo especificar o código a adicionar aos envelopes, sob o formato aceite pelo gerador de envelopes. A forma de realizar a operação é através do fornecimento ao gerador de informação por ele utilizável em tempo de execução. A alternativa de modificar o próprio gerador, embora possível, não é das mais elegantes.

O código adicional pode ser incluído sob uma das seguintes formas:

A figura 4.2 mostra a posição dos blocos de código inseridos pela acção de cada directiva. A figura mostra também um pequeno exemplo de código resultante da actuação das ferramentas. O exemplo utiliza C++ e é bastante simplista, ignorando muitos dos problemas que na realidade existem.

  
Figure 4.2: Blocos de codigo adicional.

Cada uma das modificações pode ser parametrizada de várias formas: pela classe e pelo método a serem modificados. Assim, SPM_quottype" representa o nome da classe que está a ser processada; SPM_quotmethod" é o nome do método que está a ser processado; SPM_quotargs" é a lista de argumentos do método, tal como apareceria numa invocação de um método da classe, podendo ser nula; SPM_quotletter" representa a variável que referencia a carta; a variável indicada por SPM_quotresult" é retornada no fim da execução do método, se for caso disso. O capítulo 6 mostra a concretização das directivas para C++. Note-se que, nesta versão não são suportadas listas de argumentos de dimensão variável ( varargs em C/C++).

É da responsabilidade do programador de serviços preparar os módulos funcionais para serem utilizados pelos envelopes e para que estes possam ser por eles contactados de forma útil, ou seja, deve ser o programador dos módulos a garantir o correcto funcionamento da interacção entre os níveis de ligação e suporte. A especificação da forma de comunicação e controlo pode corresponder à inclusão de métodos e/ou variáveis de instância nos envelopes, assim como código adicional em cada método já existente, em cada classe de envelope. Veja-se, como exemplo, o caso do módulo de distribuição (secção 5.1), onde ocorrem os três tipos de alterações.



next up previous contents index
Next: Requisitos de Construção Up: O Gerador de Previous: Código dos Envelopes



David M. M. de Matos
Thu Jun 29 14:58:09 MET DST 1995