A motivação para este trabalho provém da dificuldade que se observa no desenvolvimento e manutenção de aplicações, que se pretendem programadas de forma transparente e onde várias entidades, objectos neste caso, devem ter a capacidade de evidenciar características específicas. Por características específicas devem entender-se propriedades dos próprios objectos ou funcionalidade por eles apresentada, que permitem que sejam manipulados de formas determinadas. Como exemplos podem tomar-se a persistência, distribuição, replicação, etc.
O trabalho desenvolve-se, no protótipo, em torno de duas dessas características, sem, no entanto, perder a visão e objectivo globais, que permitiriam a um programador, no futuro, proceder ao desenvolvimento de código com outra funcionalidade. As duas características consideradas são a distribuição e a persistência de objectos, que, além de darem o título ao trabalho, definem um denominador comum para o desenho homogéneo de uma aplicação, i.e., permitem ao programador de módulos ter uma noção dos problemas envolvidos na interacção deles com o resto da aplicação. Algumas das características podem ser construídas com base em outras, e.g. migração.
A razão da escolha das características a fornecer aos objectos não foi aleatória e assenta em motivos históricos, estando relacionada, nas etapas iniciais do estudo, com o trabalho do grupo de que o autor faz parte no INESC: a plataforma IK [Marques et al., 1988,Sousa et al., 1993,Castro et al., 1993].
A plataforma IK oferece, além de outras, a possibilidade de se terem objectos persistentes e distribuídos, de uma forma independente da linguagem de programação. A interface de programação directa sobre a plataforma é, no entanto, difícil de utilizar, já que se baseia num dialecto de C [Kernighan & Ritchie, 1988], no qual se utilizam macros, em lugar de em uma linguagem orientada para objectos (OO).
Cedo se verificou a necessidade de encontrar forma de utilizar uma linguagem OO ``normal'', por forma a permitir a escrita de código de mais alto nível. Foram definidas duas linguagens, uma baseada em C++, EC++ [Sequeira, 1991], outra em Objective-C [Antunes & Ferreira, 1991]. O primeiro caso, embora menos adaptado à arquitectura e interface de programação da plataforma que o segundo, foi previlegiado, em virtude da maior divulgação da linguagem mãe.
A programação do tradutor EC++/C+macros foi levada a cabo por alteração de um compilador de C++ já existente. A tarefa tornou-se mais complexa devido ao facto de o tradutor ter que analisar todo o do programa, uma vez que a invocação é uma primitiva da plataforma IK e é diferente da da linguagem. O tradutor tinha, assim, que substituir cada invocação. Outra complicação deve-se à necessidade de traduzir classes escritas como se fossem C++ para as primitivas da plataforma, que, de acordo com o seu modelo de objectos, separa dados de código: os objectos apenas contêm dados sobre os quais vão operar funções estáticas, correspondentes aos métodos da classe EC++. Ou seja, os objectos IK não são objectos C++, nem mesmo sob a linguagem EC++. Esta providencia uma certa uniformidade nos acessos aos objectos, que desaparece, no entanto, quando se vai além da camada EC++, i.e., o tratamento de objectos C++ e EC++ pode parecer idêntico ao nível da programação, mas, na realidade, a estrutura e modo de utilização de ambos tipos de objectos são muito diferentes.
A primeira fase do presente trabalho era construir um tradutor que eliminasse a necessidade de utilizar um compilador pré-existente e, através de uma ferramenta mais simples, manter a funcionalidade. Apesar da simplicidade da proposta inicial [de Matos, 1992], verificou-se que a construção de tal ferramenta não seria possível sem a reestruturação, pelo menos parcial, de partes da plataforma, em especial a parte de suporte à execução. Assim, alargaram-se os objectivos para que abrangessem a construção de aplicações, que em lugar de utilizarem uma plataforma de suporte à execução, como forma de obter para os objectos algumas das características mencionadas, utilizassem bibliotecas contendo módulos cuja funcionalidade providencia as mesmas características.
A relação estreita com a plataforma IK desapareceu, mantendo-se, contudo, alguma correspondência funcional entre os objectos de um e outro modelo. Ver-se-á, no capítulo 3, que o modelo de objectos é substancialmente diferente daquele que é definido no IK, assim como a forma de invocação de operações sobre objectos.