next up previous contents index
Next: Invocação de Operações Up: O Nível de Previous: Envelopes e seus

Representação de Tipos em Tempo de Execução

 

Como se deixou antever nas secções anterior, os tipos dos objectos referenciados em tempo de execução podem não ser mantidos directamente pelos mecanismos da linguagem, mas sim através de um identificador exterior: TypeId. A representação independente da linguagem requer tratamento assistido por código especializado. Esta secção descreve os mecanismos utilizados para manipular tipo em tempo de execução, desde a criação de objectos até às operações de conversão entre tipos. Os identificadores de tipos serão designados por TID.

Quando a hierarquia de classes original é processada, são criados TIDs, um por cada tipo de envelope e de possíveis objectos que ele venha a guardar. Cada TID pode ser referenciado através de uma variável global de nome SPM_quot__" classnameSPM_quot__TypeName", em que classname é o nome da interface da classe.

Para um sistema contendo a classe Line e um módulo de distribuição, um envelope poderia incluir a carta, da classe LineLetter ou o seu representante, da classe LineClient. Os TIDs possíveis seriam SPM_quot__Line__TypeName", SPM_quot__LineLetter__TypeName" e SPM_quot__LineClient__TypeName", respectivamente, para o envelope, para a carta, e para o representante.

Os TIDs são criados e destruídos automaticamente e apenas existem duas operações que, sobre um, se podem efectuar. A primeira, SPM_quotLL_TYPEID_INI(tid,var)", permite ``declarar uma variável'', consistindo em associar um TID a uma CAGE. Esta operação é realizada quando o envelope cria a carta. A segunda operação, SPM_quotLL_TYPEID_CMP(tid1,tid2)", permite verificar se dois TIDs são iguais e é utilizada sempre que se pretende recuperar o tipo de um objecto que está no interior de uma CAGE.

A recuperação dos tipos reais dos objectos em tempo de execução será apresentada quando se descrever a forma de invocação de cada um.



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