Atenção: esse artigo tem um vídeo complementar. Clique e assista!
Uma visão geral de Bancos de Dados Orientados a Objetos (BDOOs), e um exemplo de integração em aplicações Java através da implementação de um mesmo diagrama de classes em duas ferramentas (db4o e ObjectDB). Exploramos ainda as APIs e utilitários que elas fornecem para manipulação de objetos.
Para que serve:
Proporcionar uma alternativa à utilização de frameworks objeto-relacionais, unificando os modelos de classes e de dados de uma aplicação Java através da persistência dos próprios objetos manipulados.
Em que situação o tema é útil:
Em projetos onde se considere a adoção de BDOOs como engine de persistência de dados, em contraposição às ferramentas e produtos tradicionais que seguem o paradigma relacional. Em aplicações onde se objetive uma maior naturalidade entre o modelo de classes e o modelo de dados, sem necessidade de mapeamento entre eles.
Na área de desenvolvimento de software, aplicações invariavelmente acessam bancos de dados para registro permanente de informações. Tradicionalmente utiliza-se o paradigma do modelo relacional na estruturação destes repositórios, onde os dados são armazenados em tabelas, constituídas de linhas e colunas, relacionadas através da associação entre “chaves” (um ou mais campos que unificam um determinado registro). Vários Sistemas Gerenciadores de Bancos de Dados Relacionais (SGBDRs) são representativos deste paradigma: entre eles, produtos pagos já consolidados no mercado como Oracle, SQL Server e Sybase; ou gratuitos, mas igualmente eficientes como MySQL e PostgreSQL. Todavia, com o advento do paradigma orientado a objetos, criou-se uma “ponte” entre estas duas formas de se representar um problema real em um sistema de informação, o que acarretou na necessidade de se “mapear” estes dois modelos.
Surgiram então os frameworks objeto-relacionais (Hibernate e TopLink, por exemplo) e, mais recentemente, a opção do uso de anotações no próprio código da aplicação (JPA) para transpor esta barreira. No entanto, além de se perder a “naturalidade” – ao se representar objetos como uma ou mais tabelas, e vice-versa, o acréscimo de uma nova camada na aplicação aumenta a sua complexidade, tanto na fase de desenvolvimento como na de manutenção.
Bancos de Dados Orientados a Objetos fornecem uma forma de se minimizar esta impedância (ler Nota DevMan 1), persistindo os próprios objetos da aplicação e fornecendo maneiras de manipulá-los de forma semelhante aos comandos SQL (select, insert, update e delete), que trabalham com tabelas relacionais. Veremos na prática os benefícios deste mecanismo de persistência, implementando um modelo de classes em duas ferramentas.
Conceito derivado da Física Elétrica. Aplicado aos modelos relacional e de objetos, indica a resistência ou os obstáculos na transposição entre eles.
Um pouco sobre BDOOs
Bancos de Dados Orientados a Objetos (BDOOs) podem ser utilizados como alternativa aos Bancos de Dados Relacionais para armazenar objetos compartilhados entre diferentes aplicações. Estes meios de armazenamento se tornaram conhecidos com o crescente uso de linguagens OO. BDOOs partem de uma premissa simples: o que se persiste são os objetos e, portanto, o seu “estado”, representado pelos atributos. Os atributos seriam equivalentes aos campos – ou colunas – de uma tabela. Já as associações entre objetos (atributos que referenciam outros objetos) podem ser comparadas aos relacionamentos em SGBDRs, criados como restrições de integridade referencial (“chaves estrangeiras”). Assim, o correspondente a uma “tabela-filha” em um BDOO seria um atributo que tenha como valor outro objeto.
Uma vez armazenado um objeto em um meio físico, este pode ser recuperado para que as informações de seu estado sejam manipuladas. Este processo seria análogo à seleção de um registro em uma tabela, através de uma consulta. Normalmente, BDOOs utilizam serialização como mecanismo de gravação e leitura de objetos, mas para o usuário isto ocorre de forma transparente, já que ele apenas necessita manipular o estado dos objetos em memória (ler Nota DevMan 2).
Processo de conversão de um objeto em um fluxo de bytes para persistência temporária ou permanente.
Assim como em SGBDRs, ferramentas de BDOOs também fornecem ambientes gráficos para administração dos bancos de dados, além de bibliotecas (APIs) para integração com aplicações. Estas APIs fornecem métodos de manipulação de objetos que representam as operações típicas de SQL e permitem ainda a criação de ...