next up previous contents index
Next: Mecanismo de Transporte Up: Distribuição Previous: Serviço de Nomes

Polimorfismo

As linguagens OO, especialmente as que definem classes, apresentam, de uma forma natural, polimorfismo universal [Cardelli & Wegner, 1985], algumas apenas sob a forma de polimorfismo de inclusão (e.g. Smalltalk [Goldberg & Robson, 1983], ou as primeiras versões de C++ [Stroustrup, 1986]), outras evidenciando também polimorfismo genérico (e.g. versões recentes de C++ [Stroustrup, 1992]).

No desenho do módulo da distribuição e do protocolo de comunicação, procuram suportar-se, de alguma forma, as características polimórficas da linguagem utilizada. Todavia, restringiu-se o suporte ao polimorfismo de inclusão. O caso de polimorfismo genérico não foi considerado.

Quando se passa um objecto através de uma interface menos especializada que a sua própria, isto é, quando se passa uma instância de uma subclasse passada em lugar de a de uma superclasse, e.g. como parâmetro na invocação de um método, tal não deve constituir motivo, tanto no caso de uma chamada local, como no de uma invocação remota, para que o objecto não possa ser tratado como se tivesse sido declarado com a sua própria classe. Assim, quando se passa uma referência para um objecto, entre contextos, o representante, do lado do cliente, deve ter em conta o tipo real do objecto e não o que foi declarado, no contexto onde o programa foi criado. Deste modo, consegue-se um efeito semelhante ao que que se obteria no caso local, automaticamente suportado pela linguagem, uma vez que em ambos os lados do canal o objecto é visto com o seu tipo real, embora em algum deles possa ser visto através de uma interface que não a sua (pelo menos, não completa).

A forma de poder garantir o correcto funcionamento deste mecanismo passa por conseguir fazer conversões de tipos em tempo de execução, com base em informação dinâmica. A funcionalidade pode ser difícil de assegurar se a linguagem utilizada não permitir manipulações flexíveis de tipos em tempo de execução.

Ver-se-á, no capítulo 6, como a presença de herança múltipla, e suas possíveis variantes, provoca problemas na gestão dos objectos, em especial nas conversões que são permitidas pela linguagem. Será apresentada uma aproximação que permite resolver o problema.



next up previous contents index
Next: Mecanismo de Transporte Up: Distribuição Previous: Serviço de Nomes



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