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:
o Identificador único: Dois objetos distintos não têm o mesmo identificador.
o 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:
o Identidade: Dois objetos são idênticos se, e apenas se, eles são o mesmo objeto.
o 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.
o 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:
o 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.
o 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 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:
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.
o Indireção: Existe uma entrada em uma tabela de objetos que identifica um objeto de forma única. Smalltalk utiliza esta técnica.
o 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).
o 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.
o Identificador de Tupla: Em alguns sistemas tal como o Sistema R ou Ingres, identificadores internos de tuplas são introduzidos.
o 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.
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:
o Identificador único: Dois objetos distintos não têm o mesmo identificador.
o 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:
o Identidade: Dois objetos são idênticos se, e apenas se, eles são o mesmo objeto.
o 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.
o 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:
o 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.
o 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 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:
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.
o Indireção: Existe uma entrada em uma tabela de objetos que identifica um objeto de forma única. Smalltalk utiliza esta técnica.
o 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).
o 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.
o Identificador de Tupla: Em alguns sistemas tal como o Sistema R ou Ingres, identificadores internos de tuplas são introduzidos.
o 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.