next up previous contents index
Next: Gerador de Envelopes Up: Gerador de Descrições Previous: Representação de Tipos

Representação de Tipos de Envelopes

 

Nas duas secções anteriores foi visto como eram processados os tipos básicos e não básicos que podem ocorrer na interface C++ de uma classe. As traduções para CIDL limitavam-se a encontrar uma representação para os tipos básicos em CIDL e a fazer as conversões, onde necessário, nas representações dos não básicos. Como se irá ver de seguida, o tratamento das ocorrências de declarações de envelopes é levado a cabo de modo diferente.

As declarações que correspondam a classes de envelopes nas interfaces dos métodos são eliminadas, sendo substituídas pelas declarações dos DEs correspondentes. Como os DEs são simples estruturas C++, sem significado especial, do ponto de vista do tradutor, o seu tratamento é simples e enquadra-se no conjunto de situações descritas na secção anterior.

Existem limitações em relação aos envelopes e à sua representação utilizando DEs. Uma delas relaciona-se com a ambiguidade da semântica de ponteiros em C++: quando um objecto é passado por referência, supõe-se previamente inicializado e é alterado dentro de um método; alternativamente, pode ser criado dentro de um método e retornado através do endereço fornecido. Segundo a semântica CIDL, a declaração correspondente ao primeiro caso seria inout, enquanto que a correspondente ao segundo seria out.

O tradutor, no entanto, nunca gera código capaz de passar envelopes através da sua interface, seja qual for a semântica. Procede-se desta forma porque um envelope nunca precisa de abandonar um contexto e, por isso, de passar pelo sistema de RPC. Em lugar dos envelopes passam os DEs, que, nunca sendo alterados uma vez construídos, têm a direcção na interface CIDL declarada sempre como in. Uma consequência desta aproximação é a impossibilidade de passagem de objectos apontados por envelopes. A alterações devem ser sempre feitas sobre o objecto local e utilizando os métodos deste.

Exemplos de utilização de DEs para representar envelopes serão dados quando for descrito o gestor do módulo de distribuição. Este actua sobre a interface escrita em CIDL e produz classes C++, algumas das quais, entre outras, têm a função de criar e invocar envelopes em tempo de execução.



next up previous contents index
Next: Gerador de Envelopes Up: Gerador de Descrições Previous: Representação de Tipos



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