A
Identidade de um Objeto
Autor: Dante Carlos
Antunes
Para começar a falar
sobre a identidade de um objeto, daremos algumas definições deste
termo encontradas na literatura.
- "identidade de
um objeto - uma característica de um objeto que provê os meios
de unicamente denotar ou referi-lo independentemente de seu estado
ou comportamento" [X3/S-91]
- "identidade de
um objeto - identidade é aquela propriedade de um objeto que distingue
um objeto de todos os outros" [Khos-86]
- "identidade de
um objeto - a idéia é a seguinte: em um modelo com identificação
de objetos, um objeto tem uma existência que é independente de
seu valor" [Atki-89]
Em um sistema orientado
a objetos, cada objeto é único. Esta unicidade de um objeto é alcançada
pela introdução de um identificador para os objetos. Este identificador
é independente dos valores dos atributos dos objetos. Isto significa
que os objetos podem ser distinguidos entre si sem a necessidade
de comparar seus valores e seu comportamento. A identidade dos objetos
é gerada pelo sistema e não pode ser influenciada pelo usuário.
O grupo OODBTG [X3/S-91a]
além disto, também distingue OID (Object Identifier) de LID (Logical
Identifier):
- "LID é um identificador
conceitual independente de implementação que é de forma única
associada a um objeto específico"
- "OID é a implementação
física de um identificador lógico usando um formato fixo"
Entretanto, de agora
em diante não distinguiremos entre LID e OID como definido acima.
Nós usaremos o termo OID (object identifier / identificador do objeto)
como meio de identificar de forma única um objeto, independentemente
dos aspectos de implementação.
Alguns aspectos importantes
concernentes à identidade dos objetos serão descritos abaixo:
- [Kosh-86] define
um sistema de objetos como sendo um conjunto de objetos. Um sistema
consistente de objetos deve reunir as duas seguintes condições:
- Identificador
único: Dois objetos distintos não têm o mesmo identificador.
- Nenhum identificador
"solto": Para cada identificador existe um objeto
com este identificador.
- O conceito de identidade
de objetos em adição ao conceito de objetos complexos (objetos
compostos de outros objetos) conduz a diferentes possibilidades
de comparação de objetos. [Kosh-86] define os três seguintes
termos:
- Identidade: Dois
objetos são idênticos se, e apenas se, eles são o mesmo objeto.
- Igualdade superficial
(Shallow Equality): Dois objetos são superficialmente iguais
se os atributos dos objetos são idênticos. O importante é
que esta definição não é recursiva.
- Igualdade profunda:
Dois objetos são profundamente iguais se seus valores são
recursivamente iguais. Esta definição examina os valores de
um objeto recursivamente.
- [Kosh-86] fala
sobre o grau de suporte à identidade. Distinguem-se em suporte
fraco à identidade e suporte forte. Há duas dimensões que influenciam
o grau de suporte à identidade. Nós podemos identificar uma dimensão
de representação e uma dimensão temporal. Há três tipos de suporte
à identidade na dimensão de representação. A forma mais fraca
ocorre se um objeto é identificado por um valor de um dado tal
qual valores de chaves em modelos relacionais. Um nome suprido
pelo usuário é um forte suporte à identidade. Um exemplo é um
nome de variável em linguagens de programação como o Pascal. O
suporte à identidade mais forte de todos é a identificação construída
internamente. Ambientes de orientação a objetos do tipo do Smalltalk
suportam esta terceira forma de representação da identidade (o
Smalltalk gera por sua conta um OID interno a cada criação de
um objeto novo). Ao longo da segunda dimensão, a dimensão temporal,
nós podemos encontrar três tipos de suporte à identidade. O mais
fraco deles ocorre quando a identidade é preservada apenas dentro
do programa ou transação (terminado o programa o objeto é destruído).
Uma forma mais forte ocorre se a identidade é preservada entre
transações (mesmo após o término da transação, o objeto persiste).
Por fim a mais forte de todas as formas de preservação da identidade
ao longo do tempo necessita que a identidade seja preservada também
entre reorganizações estruturais.
- Em seguida consideraremos
as possíveis informações contidas em um identificador de objeto.
Uma referência neste contexto é [Bert-91] onde listam-se as diferentes
possibilidades de informação que um identificador de objeto pode
apresentar:
- Em alguns ambientes
o identificador de objetos (OID) contém um identificador da
classe à qual o objeto pertence e um identificador do objeto
dentro desta classe. Um exemplo de tal sistema é o Orion.
- Em outros ambientes
o OID não contém qualquer outra informação exceto aquela que
identifica de forma única um objeto. Um exemplo é Iris.
- O OID de um objeto
pode conter informação sobre a localização do objeto em uma
memória secundária. No gerenciador de banco de dados orientado
a objetos O2 [Banc-92] por exemplo o OID contém um identificador
de registro.
- Agora vamos examinar
aspectos de implementação da identidade de objetos. [Kosh-86]
lista diferentes possibilidades de implementar identidade de objetos.
Diferentes técnicas de implementação incorporam diferentes níveis
de independência de dados (de que forma mudanças nos atributos
afetam a identidade) e de localização dos dados (trata da possibilidade
de mover objetos de um local para outro). São seis as alternativas
de implementação:
- Endereço Físico:
o endereço real e o virtual de um objeto é usado como identificador.
Um exemplo desta forma de implementação é o record em Pascal.
- Indireção:
Existe uma entrada em uma tabela de objetos que identifica
um objeto de forma única. Smalltalk utiliza esta técnica.
- Identificador
Estruturado: Uma parte da estrutura captura o aspecto
da localização de um objeto. Esta técnica é freqüentemente
utilizada para identificar arquivos em servidores de arquivos
(ex: diretório/subdiretório/...../arquivo).
- Chave Identificadora:
Chaves de identificação fornecidas pelo usuário são diretamente
implementadas. Esta é a abordagem utilizada pelos sistemas
de banco de dados relacionais.
- Identificador
de Tupla: Em alguns sistemas tal como o Sistema R ou Ingres,
identificadores internos de tuplas são introduzidos.
- Surrogates:
Esta é a mais poderosa técnica de implementação da identidade.
Surrogates são identificadores únicos gerados globalmente
pelo sistema, independentemente de qualquer localização física
(e da filiação às classes).
- O último ponto da
nossa visão geral do conceito de identidade de objetos diz respeito
a um importante aspecto, conhecido como compartilhamento de objetos
e atualizações de objetos. [Atki-89] descreve estas questões.
Compartilhamento de objetos significa que duas ou mais referências
podem apontar para o mesmo (idêntico) objeto. Dois ou mais outros
objetos compartilham o mesmo objeto. Por exemplo dois objetos
da classe pessoa (mãe e pai) podem apontar para uma outra pessoa
(filho). Eles compartilham um objeto. Atualizações no objeto filho
podem ser visto pelos outros dois objetos, portanto apenas uma
atualização é necessária. Quando o objeto filho é armazenado dentro
dos objetos pai e mãe, duas operações de atualização são necessárias.
Referências
[Atki-89] Atkinson,
M.; Bancilhon, F.; Dewitt, D.; Dittrich, K.; Maier, D.; Zdonik,
S. The Object-Orientede Database System Manifesto. DOOD, 1989.
[Banc-92] Bancilhon,
F. et al (eds). Building an Object-Oriented Database System: The
Story of O2. Morgan Kaufmann, 1992.
[Bert-91] Bertino,
Elisa. An Indexing Technique for Object-Oriented Databases. IEEE
Data Engineering Conference, 1991.
[Khos-86] Khoshafian
Setrag N.; Copeland, George P. Object Identity. OOPSLA'86 Proceedings.
[X3/S-91] ANSI/X3/SPARC,
Study Group On Data Base Management Systems.
antunes@inf.ufrgs.br

|