next up previous contents index
Next: Conclusões Up: Programação Previous: Programação

Exemplos

Este ponto mostra alguns exemplos significativos da programação e manipulações de objectos utilizando acessores.

Seguindo o exemplo dado anteriormente, para uma lista, a classe do acessor para a classe do objecto de dados seria declarada da seguinte forma. listA L;

Dois acessores podem partilhar um mesmo objecto. Por exemplo, existindo um acessor K, L poderia partilhar o objecto fazendo a atribuição: listA L = K;

A atribuição a L de um objecto igual ao acedido por K, mas independente, poderia ser levada a cabo através do método especial makeCopy, pertencente ao acessor. Esta forma é claramente diferente da que seria utilizada se não existisse a indirecção e mostra o nível a que a não transparência na programação pode chegar. listA L = K.makeCopy();

A inicialização de um acessor com um novo objecto é feito através de um método do acessor, make, que é utilizado para criar o objecto acedido. O exemplo seguinte mostra como inicializar um acessor para listas com um objecto que é uma lista duplamente ligada. A necessidade de se ter esta operação é uma consequência directa do facto de um acessor não inicializar automatica e transparentemente o objecto encapsulado. Pode dar origem a ``esquecimentos'' e, consequentemente, à existência de acessores nulos, i.e., que não possuem nenhum objecto. listA L = dlListA::make();

A conversão de tipos é feita através de safe casts, que utilizam o método estático da classe do acessor is. Se dois tipos não estiverem relacionados o valor nulo, Nil, é retornado. Como exemplo, considere-se a declaração bagA B. A tentativa de atribuição: listA L = listA::is(B);

falha se B não for realmente uma lista, obtendo-se o retorno Nil para a chamada a is. Esta operação seria desnecessária se os acessores fossem algo mais sofisticados e substituissem, no programa, qualquer referência aos tipos originais. Nesse caso, as referências a tipos poderiam ser completamente controladas pelo compilador, não havendo necessidade de verificações em tempo de execução (embora estas possam ser úteis, mesmo quando existe suporte de compilador).



next up previous contents index
Next: Conclusões Up: Programação Previous: Programação



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