Mapage relacional d'objectes
El mapage relacional d'objectes o ORM (també O/RM, sigla en anglés de object-relational mapping), és una tècnica de programació per a convertir senyes entre el sistema de tipos utilisat en un llenguage de programació orientat a objectes i l'utilisació d'una base de senyes relacional com a motor de persistència. En la pràctica açò crea una base de senyes orientada a objectes virtual, sobre la base de senyes relacional. Açò possibilita l'us de les característiques pròpies de l'orientació a objectes (bàsicament herència i polimorfisme). Hi ha paquets comercials i d'us lliure disponibles que desenrollen el mapage relacional d'objectes, encara que alguns programadors preferixen crear les seues pròpies ferramentes ORM.[1]
El problema
[editar | editar còdic]En la programació orientada a objectes, les tasques de gestió de senyes són implementades generalment per la manipulació d'objectes, els quals són casi sempre valors no escalares. Per a ilustrar-ho, considere l'eixemple d'una entrada en una llibreta de direccions, que representa a una sola persona en zero o més números telefònics i zero o més direccions. En una implementació orientada a objectes, açò pot ser modelat per un "objecte persona" en "camps" que almagasenen les senyes de dita entrada: el nom de la persona, una llista de números telefònics i una llista de direccions. La llista de números telefònics estaria composta per "objectes de números telefònics" i aixina successivament. L'entrada de la llibreta de direccions és tractada com un valor únic pel llenguage de programació (pot ser referenciada per una sola variable, per eixemple). Es poden associar varis métodos a l'objecte, com un que torne el número telefònic preferit, la direcció de la seua casa, etc..[2]
No obstant, molts productes populars de base de senyes, com els Sistemes de Gestió de Bases de Senyes SQL, solament poden almagasenar i manipular valors escalares com a sancers i cadenes, organisats en taules normalisades. El programador deu convertir els valors dels objectes en grups de valors simples per a almagasenar-los en la base de senyes (i tornar-los a convertir després de recuperar-los de la base de senyes), o usar només valors escalares simples en el programa. El mapage relacional d'objectes és utilisat per a implementar la primera aproximació.
El núcleu del problema residix en traduir estos objectes a formes que puguen ser almagasenades en la base de senyes per a recuperar-les fàcilment, mentres es preserven les propietats dels objectes i les seues relacions; estos objectes es diu llavors que són persistents.
Implementacions
[editar | editar còdic]Els tipos de bases de senyes usades majoritàriament són les bases de senyes SQL, l'aparició de les quals va precedir al creiximent de la programació orientada a objectes en els anys 1990. Les bases de senyes SQL usen una série de taules per a organisar senyes. Les senyes en distintes taules estan associats a través de l'us de restriccions declarativas en lloc de busques o enllaços explícits. Les mateixes senyes que poden almagasenar-se en un sol objecte podrien requerir ser almagasenats a través de vàries taules.
Una implementació del mapage relacional d'objectes podria necessitar elegir de manera sistemàtica i predictiva quines taules usar i generar les sentències SQL necessàries.
Molts paquets han segut desenrollats per a reduir el tediós procés de desenroll de sistemes de mapage relacional d'objectes proveint biblioteques de classes que són capaces de realisar mapages automàticament. Donada una llista de taules en la base de senyes, i objectes en el programa, ells poden automàticament mapear solicituts d'un sentit a un atre. Preguntar a un objecte persona pels seus números telefònics resultarà en la creació i enviament de la consulta apropiada a la base de senyes, i els resultats són traduïts directament en objectes de números telefònics dins del programa.
Des del punt de vista d'un programador, el sistema deu lluir com un almagasén d'objectes persistents. Un pot crear objectes i treballar normalment en ells, els canvis que sofrixquen terminaran sent reflectits en la base de senyes.
No obstant, en la pràctica no és tan simple. Tots els sistemes ORM tendixen a fer-se visibles en vàries formes, reduint en cert grau la capacitat d'ignorar la base de senyes. Pijor encara, la capa de traducció pot ser llenta i ineficiente (comparada en térmens de les sentències SQL que escriu), provocant que el programa siga més llent i utilise més memòria que el còdic "escrit a mà".
Un bon número de sistemes de mapage relacional d'objectes s'han desenrollat a lo llarc dels anys, pero la seua efectivitat en el mercat ha segut diversa. NeXT's Enterprise Objects Framework (EOF) va ser una de les primeres implementacions, pero no va tindre èxit degut a que estava estretament lligat a tot el kit de NeXT's, OpenStep cita requerida. Va ser integrat més vesprada en NeXT's WebObjects, el primer servidor web d'aplicacions orientat a objectes. Des de que Apple va comprar NeXT's en 1997, EOF va proveir la tecnologia darrere dels llocs web de comerç electrònic d'Apple: els servicis .Mac i la tenda de música iTunes. Apple proveïx EOF en dos implementacions: l'implementació en Objective-C que ve en Apple Developers Tools i l'implementació Pure Java que ve en WebObjects 5.2. Inspirat per EOF és el open source Apache Cayenne. Cayenne té metes similars a les de EOF i intenta estar concorde als estàndarts JPA.
Una aproximació alternativa ha segut presa per tecnologies com RDF i SPARQL, i el concepte de "triplestore". RDF és una serialización del concepte objecte-subjecte-predicat, RDF/XML és una representació en XML d'allò, SPARQL és un llenguage de consulta similar a el SQL, i un "triplestore" és una descripció general d'una base de senyes que treballa en un tercer component.
Més recentment, un sistema similar ha començat a evolucionar en el món Java, conegut com Java Data Objects (JDO). A diferència de EOF, JDO és un estàndart, i moltes implementacions estan disponibles per part de distints distribuïdors de software. L'especificació 3.0 de Enterprise Java Beans (EJB) també cobrix la mateixa àrea. Han existit alguns conflictes d'estàndarts entre abdós especificacions en térmens de preeminència. JDO té moltes implementacions comercials, mentres que EJB 3.0 està encara en desenroll. No obstant, recentment un atre estàndart ha segut anunciat per JCP per a comprendre estos dos estàndarts de manera conjunta i conseguir que el futur estàndar treballe en diverses arquitectura de Java. Un atre eixemple a mencionar és Hibernate, el framework de mapage relacional d'objectes més usat en Java que va inspirar l'especificació EJB 3.
En el framework de desenroll web Ruby on Rails, el mapage relacional d'objectes juga un rol preponderant i és manejat per la ferramenta ActiveRecord. Un rol similar és el que té el mòdul DBIx::Class per al framework basat en Perl Catalyst, encara que atres eleccions també són possibles.
Referències
[editar | editar còdic]- ↑ «Object-relational Mapping Revised - A Guideline Review and Consolidation. M Lorenz, G Hesse, JP Rudolph. International Joint Conference on Software Technologies (ICSOFT), 157-168». Archivat des d'el original, el 23 d'octubre de 2019. Consultat el 23 d'octubre de 2019.
- ↑ Object-Relational Mapping with Laravel’s Eloquent Luis Atencio
- Este artícul conté una traducció derivada de «Mapeo relacional de objetos» de Wikipedia en castellà publicada baix la Llicència de documentació lliure de GNU i la Llicència Creative Commons Reconeiximent-CompartirIgual 4.0 Internacional.