Saltar la navegación

5.- El desface Objeto-Relacional

El desfase objeto-relacional, también conocido como impedancia objeto-relacional, consiste en la diferencia de aspectos que existen entre la programación orientada a objetos y la base de datos. Estos aspectos se puede presentar en cuestiones como:

  • Lenguaje de programación. El programador debe conocer el lenguaje de programación orientada a objetos (POO) y el lenguaje de acceso a datos.
  • Tipos de datos: en las bases de datos relacionales siempre hay restricciones en cuanto a los tipos de datos que se pueden usar, que suelen ser sencillos, mientras que la programación orientada a objetos utiliza tipos de datos más complejos.
  • Paradigma de programación. En el proceso de diseño y construcción del software se tiene que hacer una traducción del modelo orientado a objetos de clases al modelo Entidad-Relación (E/R) puesto que el primero maneja objetos y el segundo maneja tablas y tuplas o filas, lo que implica que se tengan que diseñar dos diagramas diferentes para el diseño de la aplicación.

El modelo relacional trata con relaciones y conjuntos debido a su naturaleza matemática. Sin embargo, el modelo de Programación Orientada a Objetos trata con objetos y las asociaciones entre ellos. Por esta razón, el problema entre estos dos modelos surge en el momento de querer persistir los objetos de negocio

La escritura (y de manera similar la lectura) mediante JDBC implica: abrir una conexión, crear una sentencia en SQL y copiar todos los valores de las propiedades de un objeto en la sentencia, ejecutarla y así almacenar el objeto. Esto es sencillo para un caso simple, pero trabajoso si el objeto posee muchas propiedades, o bien se necesita almacenar un objeto que a su vez posee una colección de otros elementos. Se necesita crear mucho más código, además del tedioso trabajo de creación de sentencias SQL.

Este problema es lo que denominábamos impedancia Objeto-Relacional, o sea, el conjunto de dificultades técnicas que surgen cuando una base de datos relacional se usa en conjunto con un programa escrito en con u lenguajes de Programación Orientada a Objetos.

Podemos poner como ejemplo de desfase objeto-relacional, un Equipo de fútbol, que tenga un atributo que sea una colección de objetos de la clase Jugador. Cada jugador tiene un atributo "teléfono". Al transformar éste caso a relacional se ocuparía más de una tabla para almacenar la información, implicando varias sentencias SQL y bastante código.

Las tendencias en la actualidad para rellenar el hueco existente entre un modelo relacional de almacenamiento y un modelo basado en objetos pasan por dos soluciones.

  1. Mapeadores Objeto-Relacional (ORM): ORM es una técnica que persiste de forma transparente los objetos de aplicación a las tablas en una base de datos relacional. Estas herramientas se encargan de convertir objetos de la capa de negocio a tablas en el modelo relacional de forma transparente al programador. Como ventajas se puede hablar de: mas productividad trabajando con un modelo estrictramente basado en objetos en la capa de negocio y posibilidad de usar SGBDR que tan eficientes son actualmente. Como desventaja podemos hablar de mas necesidad de procesamiento por añadir una capa mas, la que se encarga de hacer la traducción de objetos. Ejemplos de ORM son Hibernate y JPA.
  2. Bases de Datos Orientadas a Objetos (SGBDOO): son bases de datos constituidas por objetos de distintos tipos, sobre los que se definen una serie de operaciones para su interactuación, que a su vez se integran con las operaciones de un lenguaje de programación orientado a objetos (POO). Como ventajas podemos hablar de: ocultan información de objetos y sobre todo que es totalmente compatible con la capa de negocio. Como desventajas se puede hablar de que no existe un modelo teórico que los sustente y tampoco hay un modelo universalmente aceptado por todos los SGBD.  Una herramienta que se puede probar porque dispone de versión gratuita es Intersystem Caché.

Estas herramientas serán trabajadas en profundidad en módulos profesionales de 2º curso.

Es una propuesta tecnológica, un modelo, adoptada por una comunidad de programadores que unívocamente trata de resolver uno o varios problemas claramente delimitados. Tiene una estrecha relación con la formalización de determinados lenguajes en su momento de definición. Un paradigma de programación está delimitado en el tiempo en cuanto a aceptación y uso ya que nuevos paradigmas aportan nuevas o mejores soluciones que la sustituyen parcial o totalmente.