WQuestions

Parte III · Cómo funcionan juntas

12

Puentes: objetos, bits, grafos y cadenas

Nada de esto es magia, y nada es del todo nuevo. WQuestions se asienta sobre cuatro ideas que el lector técnico ya domina (la programación orientada a objetos, el bit, el grafo y la cadena de bloques). Este capítulo tiende los puentes, y marca dónde el puente sostiene y dónde se rompe.

Imagina a un programador con quince años de oficio leyendo este libro por encima del hombro de un colega. Hacia el capítulo 7 levanta una ceja.

«¿Tripletas? Eso ya existe. Yo modelo con clases y objetos desde que aprendí a programar. Mis datos viven en tablas que se consultan en milisegundos. Y eso de los hechos que no se pueden borrar suena a blockchain, una moda que ya pasó.»

Tiene razón en cada observación, y por eso vale la pena tomárselo en serio.

WQuestions no se inventó en el vacío. Respira el mismo aire que la programación orientada a objetos, los bits, las bases de grafos y los libros de cuentas inmutables.

Este capítulo se dedica a contestarle, una objeción a la vez.

El método será siempre el mismo.

Para cada tecnología conocida tenderemos un puente: un mapa que muestra qué pieza de WQuestions se corresponde con qué pieza que ya conoces.

Y luego marcaremos el punto exacto donde el puente deja de aguantar peso. Porque la analogía sirve para entrar, y engaña si se lleva demasiado lejos.

Cuatro puentes, cuatro secciones.

Puente uno · Objetos: la programación orientada a objetos

La primera reacción de cualquier ingeniero es la más natural: «esto ya lo hago con clases».

Y en parte lleva razón. La programación orientada a objetos lleva medio siglo organizando el software con la misma intuición que WQuestions: el mundo se describe con cosas que pertenecen a categorías y que se relacionan entre sí.

El parecido es tan hondo que conviene hacerlo explícito antes de señalar la grieta.

Tres conceptos de la programación orientada a objetos tienen un gemelo casi perfecto aquí.

Cuando un programador escribe v = Venta(...) está fabricando un individuo a partir de un molde. Nosotros decimos lo mismo con el cable instancia_de, que ata un sujeto del eje O a su clase del eje K.

Cuando una clase VentaOnline hereda de Venta, declara que todo lo que vale para una venta vale para una venta en línea. Nosotros lo escribimos con subtipo_de entre dos conceptos del eje K.

Y los atributos de un objeto (su monto, su vendedor) son nuestros cables del eje M.

tripletas
(venta_online,  subtipo_de,    venta)          ∈ M(K, K)   // herencia
(venta_001,     instancia_de,  venta_online)   ∈ M(O, K)   // instanciación
(venta_001,     vendedor,      vendedor_17)     ∈ M(O, Q)   // asociación
(venta_001,     monto_usd,     49.90)           ∈ M(O, N)   // atributo

Para fijar el paralelo, traduzcamos la misma entidad (nuestra venta canónica) a una clase de Python y, justo al lado, a las tripletas equivalentes. Mira primero el código que el programador escéptico reconoce a primera vista:

python
class Venta:
    def __init__(self, id, vendedor, cliente, articulo, monto, momento):
        self.id       = id
        self.vendedor = vendedor      # asociación  → Vendedor
        self.cliente  = cliente       # asociación  → Cliente
        self.articulo = articulo      # asociación  → Articulo
        self.monto    = monto         # atributo    (float)
        self.momento  = momento       # atributo    (datetime)

    def aplicar_descuento(self, pct):     # comportamiento, acoplado al dato
        self.monto *= (1 - pct / 100)

v = Venta("venta_001", vendedor_17, cliente_1042,
          camiseta_88, 49.90, "2026-05-14T16:32")

Y ahora la misma venta como hechos atómicos. Fíjate en que no hay método: el dato está separado de lo que se le hace.

tripletas
(venta_001, instancia_de, venta)          ∈ M(O, K)
(venta_001, vendedor,     vendedor_17)    ∈ M(O, Q)
(venta_001, cliente,      cliente_1042)   ∈ M(O, Q)
(venta_001, objeto,       camiseta_88)    ∈ M(O, O)
(venta_001, monto_usd,    49.90)          ∈ M(O, N)
(venta_001, momento,      2026-05-14T16:32) ∈ M(O, T)

Línea por línea, los atributos de la clase reaparecen como tripletas. La figura siguiente pone las dos representaciones frente a frente: a la izquierda, el objeto como caja cerrada con sus casillas; a la derecha, el mismo hecho desplegado como estrella de nodos en el grafo.

POO · objeto = caja cerrada Venta · venta_001 vendedor = vendedor_17 cliente = cliente_1042 objeto = camiseta_88 monto = 49.90 momento = 16:32 aplicar_descuento() comportamiento acoplado se despliega WQuestions · grafo abierto venta_001 O vendedor_17 cliente camiseta 49.90 16:32 venta los datos son cables; el comportamiento vive aparte
Figura 12.1. La misma venta, dos veces. A la izquierda, el objeto de la POO: una caja que encierra datos y el método que los manipula, con su esquema fijado en el código. A la derecha, la venta desplegada como grafo: cada atributo es un cable tipado y el comportamiento ya no vive dentro del dato.

Dónde se rompe el puente

La analogía es buena para entrar, y traicionera si se la lleva más allá. Hay dos diferencias que no son de grado, sino de naturaleza, y conviene nombrarlas con precisión.

La primera: los objetos juntan dato y comportamiento; WQuestions los separa.

Un objeto Venta guarda el monto y sabe aplicarse un descuento. El dato y el código que lo toca viven en la misma caja.

Eso es elegante para programar, y ata la información a un lenguaje y a una versión del software.

Nuestras tripletas no saben hacer nada. Son afirmaciones inertes sobre el mundo. El comportamiento vive en otra capa.

Un dato que no carga lógica es un dato que cualquier sistema puede leer, sin importar en qué lenguaje fue escrito.

La segunda: los objetos fijan el esquema en el código; WQuestions lo deja abierto.

En cuanto compilas la clase Venta, sus campos quedan tallados en piedra.

Si mañana el negocio quiere registrar el lote de inventario, alguien debe abrir el archivo, añadir un atributo, recompilar y migrar los datos viejos.

Añadir un cable nuevo a un sujeto del grafo es escribir una tripleta más. No hay esquema que recompilar, porque el esquema nunca estuvo cerrado.

Es la diferencia entre un mundo que solo admite lo previsto y uno que admite lo que la realidad traiga.

Idea clave

Los objetos encierran dato y comportamiento en una caja cuyo esquema se fija al compilar. WQuestions deja los datos como tripletas inertes y manda el comportamiento a otra capa.

No es que una sea correcta y la otra no. Sirven a cosas distintas. Los objetos optimizan la ejecución de un programa. WQuestions optimiza que muchos programas distintos compartan los mismos hechos.

Un último hilo conecta esta sección con el capítulo anterior.

En programación, dos variables que apuntan al mismo objeto comparten su referencia: ese puntero invisible que distingue «el mismo objeto» de «un objeto igual».

Esa referencia es lo que en el capítulo 11 llamamos el identificador único.

El puntero del objeto y el identificador del grafo cumplen la misma función: dar identidad estable a una cosa.

Resumamos el puente entero en una sola tabla. A la izquierda, el vocabulario que el ingeniero ya domina; a la derecha, su correspondiente en el modelo.

Programación orientada a objetosWQuestionsComentario
ClaseConcepto del eje KEl molde, la categoría atemporal.
Instanciación (new Venta())Cable instancia_deFabricar un individuo del molde.
Herencia (extends)Cable subtipo_deEspecializar una categoría.
Atributo / campoPredicado funcional del eje MUn valor por sujeto.
Asociación / referenciaPredicado del eje M a otra entidadUn cable hacia otro nodo.
Referencia de objeto (puntero)Identificador único (UID)Misma función: identidad estable.
Método (comportamiento) (vive en otra capa)El modelo desacopla el dato del código.
Esquema fijado al compilarEsquema abierto y extensibleMundo cerrado vs. mundo abierto.

Puente dos · Bits

Pasada la primera objeción, el programador afina la segunda, y es más visceral.

«Entiendo el mapa con los objetos. Pero descomponer cada venta en veinte tripletas parece un caos. Donde yo guardaba una fila ahora tengo veinte líneas. Es muchísimo más espacio, y leer veinte líneas para entender una venta es agotador.»

La objeción es legítima. La respuesta exige cambiar de escala mental.

Las tripletas son al conocimiento lo que los bits son a todo lo digital: atómicas, uniformes, abrumadoras de a una, e imprescindibles en masa.El principio del bit

Detengámonos ahí, porque es la clave de la sección.

Una fotografía, por dentro, son millones de unos y ceros. A ningún ingeniero se le ocurriría quejarse de que «un bit no dice nada» o de que «son demasiados para leerlos».

El bit no se diseñó para que un humano lo lea de uno en uno. Se diseñó para ser la unidad uniforme sobre la que se construye todo lo digital, porque su simplicidad permite operar billones a velocidad de máquina.

La tripleta aspira a ser eso mismo para el conocimiento: el átomo uniforme del significado.

una foto millones de bits 0110100101110010 1011001110100101 misma idea una escena miles de tripletas (venta_001, vendedor, …) (venta_001, monto_usd, …)
Figura 12.2. Una foto se digitaliza en millones de bits; una escena se digitaliza en miles de tripletas. En ambos casos, la unidad es minúscula y abrumadora de a una, pero es justo esa atomicidad uniforme la que vuelve la información operable a escala de máquina.

Queda el miedo al almacenamiento, que es el más concreto. ¿No ocupa una barbaridad guardar cada hecho como una tripleta de texto larga, con su sujeto y su predicado repetidos miles de veces? La respuesta es que no, y la razón merece detallarse, porque deshace un malentendido común.

Las bases especializadas en tripletas jamás guardan el texto que tú escribes.

Usan un diccionario: cada cadena que se repite, un cable como monto_usd o un valor como vendedor_17, se guarda una sola vez y de ahí en adelante se referencia con un número corto.

Donde tú ves vendedor_17 mil veces, la máquina ve un número mil veces. Y los números repetidos se comprimen casi a la nada.

A eso se suma guardar juntos todos los valores de una misma posición, donde la repetición es máxima y la compresión, brutal.

En la práctica

El cable instancia_de puede aparecer en cien millones de tripletas. En disco no son cien millones de copias de la palabra: es un número, repetido en una columna que el compresor reduce a casi nada.

La máquina nunca lee la tripleta como texto. Opera sobre números. Lo que para ti es prosa, para ella son índices. El miedo al tamaño nace de imaginar el grafo como un archivo de texto gigante, y esa imagen es falsa.

El programador escéptico empieza a aflojar. Las tripletas no son un derroche: son la versión del bit aplicada al significado, y la industria del almacenamiento ya resolvió hace décadas el problema de comprimir cosas atómicas y repetidas. Lo cual nos lleva, naturalmente, a las bases de datos que hacen justo esto.

Puente tres · Grafos: bases ya no relacionales, sino dirigidas al dato

«Está bien, pero ¿en qué motor corro todo esto? Yo tengo PostgreSQL.»

Aquí la respuesta es la más alentadora del capítulo: no hace falta inventar nada.

La industria lleva veinte años construyendo bases que abandonaron las tablas para abrazar la red de nodos y enlaces.

WQuestions no compite con ellas. Encuentra en ellas su casa. El contraste con el modelo de tablas ya lo vimos en el capítulo 8; aquí miramos las que sí encajan.

Esas tecnologías se agrupan en tres familias, y conviene conocerlas por su nombre, porque la afinidad con WQuestions varía mucho de una a otra.

Almacenes de tripletas(8). Son las más cercanas en espíritu: guardan el mundo como tripletas, igual que nosotros. Nacieron del estándar RDF de la web semántica.

Aquí están Apache Jena, GraphDB, Blazegraph, Virtuoso, Amazon Neptune y Stardog.

Si WQuestions tuviera que elegir un motor de fábrica, sería uno de estos. La unidad de almacenamiento ya es la tripleta.

Grafos de propiedades. En vez de tripletas puras, modelan el mundo como nodos y flechas a los que se les cuelgan propiedades.

Son rapidísimos recorriendo relaciones: amigos de amigos, rutas, cadenas de suministro. Los referentes son Neo4j, Memgraph y TigerGraph.

Encajan bien, aunque colgar propiedades de la flecha exige una traducción menor respecto de nuestra tripleta.

Inmutables y temporales. Aquí ocurre la coincidencia más asombrosa del capítulo.

Datomic y XTDB guardan la información como datoms: hechos con la forma [entidad, atributo, valor, momento].

Léelo de nuevo. Es nuestra tripleta más una marca de tiempo. Casi exactamente lo que el modelo propone.

Y XTDB distingue de fábrica entre cuándo ocurrió un hecho en el mundo y cuándo el sistema se enteró, que es justo la vigencia de la regla D6 del capítulo 9.

El datom de Datomic merece quedar escrito al lado de nuestra tripleta, porque el parecido es difícil de exagerar:

tripletas
// WQuestions — tripleta tipada
(venta_001, monto_usd, 49.90)                       ∈ M(O, N)

// Datomic / XTDB — datom: tripleta + tiempo de transacción
[venta_001  :monto_usd  49.90   tx-2026-05-14T16:32]

// la única diferencia: ellos añaden el "cuándo lo supo el sistema" de fábrica

Pongamos las tres familias en una tabla, marcando con claridad cuáles son las más afines al modelo. La afinidad alta significa que adoptar WQuestions sobre ese motor casi no exige traducción.

FamiliaUnidad de datoEjemplosAfinidad con WQuestions
Triple / RDF stores Tripleta (s, p, o) Jena/Fuseki, GraphDB, Blazegraph, Virtuoso, Amazon Neptune, Stardog Muy alta · la unidad ya es la tripleta
Datalog · inmutables · temporales Datom [e, a, v, t] Datomic, XTDB (bitemporal de fábrica) Máxima · tripleta + tiempo, casi idéntica
Property graphs Nodo + arista con propiedades Neo4j, Memgraph, TigerGraph Alta · recorrido veloz, traducción menor
Relacional (referencia, ver cap. 8) Fila en una tabla de esquema fijo PostgreSQL, MySQL, Oracle Posible, pero forzada · tablas rígidas

Precedente

Datomic, ideado por Rich Hickey, y su sucesor libre XTDB son los precedentes industriales más directos de WQuestions en lo que toca al almacenamiento.

Comparten tres convicciones: el dato es una tripleta; los hechos no se sobrescriben, se acumulan; y el tiempo es de primera clase, no una columna más.

Donde WQuestions añade algo es en el significado: tipar cada cable por los ejes de las preguntas, para que el grafo no solo se pueda consultar, sino que se entienda entre dominios y lo lea una IA sin manual.

Puente cuatro · Cadenas: lo que tomamos de la blockchain

Queda la objeción que el programador soltó al principio, casi con desdén: «esto de los hechos que no se borran suena a blockchain, y eso fue una burbuja». Aquí conviene separar la tecnología de moda de la idea que la hizo valiosa, porque la idea es excelente y WQuestions la hereda casi de oficio.

Lo notable es que el modelo ya tiene, sin buscarlo, los dos cimientos de un libro de cuentas al estilo blockchain.

El primero: los hechos no se tocan. Aquí nunca se borra ni se sobrescribe nada. Corregir el mundo es afirmar un hecho nuevo que deja en evidencia al anterior, no pisarlo.

El segundo: la vigencia de la regla D6, que fecha cada situación con su rango.

Junta las dos piezas y tienes, sin añadir una línea, un libro que solo crece y se puede auditar: la historia completa de cómo el sistema fue creyendo lo que cree.

Idea clave

Inmutabilidad de los hechos + bitemporalidad (D6) = un libro mayor append-only y auditable, gratis. No es algo que WQuestions deba construir: es lo que ya es. La blockchain hizo célebre la idea de un registro que solo crece y nunca se reescribe; el modelo la tenía desde su primera decisión de diseño.

Sobre esa base, importar el resto de la maquinaria de la blockchain es directo, y son tres piezas que se agregan encima de lo que ya existe.

Procedencia por hecho. Cada tripleta puede llevar pegada su credencial: quién la afirmó, cuándo, y una firma que lo prueba.

No es adorno. Es la diferencia entre un dato y un dato del que alguien responde.

Se modela como todo lo demás: el acto de afirmar se vuelve una situación con su agente, su instante y su firma.

JSON
{
  "hecho":      ["venta_001", "monto_usd", 49.90],
  "afirmado_por": "vendedor_17",
  "momento":      "2026-05-14T16:32:00-05:00",
  "firma":        "0x9f2a…c4",
  "hash_previo":  "0x71be…08",
  "hash":         "0xa3d0…11"
}

Cadena de huellas. Si cada hecho guarda la huella del anterior, como el campo hash_previo de arriba, la cadena entera delata cualquier manipulación.

Alterar un hecho viejo rompe todas las huellas posteriores, y la falsificación salta a la vista. Es la misma garantía que sostiene una blockchain, aplicada a nuestro libro de hechos.

Consenso y federación. Cuando el grafo deja de ser de una sola empresa y pasa a compartirse entre varias, hace falta un protocolo que decida qué hechos entran al registro común y quién puede afirmar qué.

Eso ya es terreno de la seguridad del grafo compartido, que el capítulo 30 trata a fondo.

Q vendedor_17 Q auditor_03 Q sistema_pos hecho #1 monto_usd = 49.90 prev: 0x00 hash: 0x71be hecho #2 corrige → 47.90 prev: 0x71be hash: 0xa3d0 hecho #3 medio_pago = … prev: 0xa3d0 hash: 0xc4f1 cada bloque encadena el hash del anterior · alterar uno rompe la cadena
Figura 12.3. Tres hechos sucesivos sobre una misma venta, cada uno firmado por su agente (arriba) y encadenado por el hash del anterior. El hecho #2 corrige el monto sin borrar el #1; el #3 añade información. Manipular cualquiera de ellos rompería el encadenamiento, y la alteración quedaría a la vista.

Fíjate en el hecho número 2 de la figura: corrige el monto a 47,90 sin borrar el 49,90 original.

Eso es la inmutabilidad del modelo en acción, atada a la vigencia del capítulo 9. El hecho viejo cierra su rango, el nuevo abre el suyo, y la cadena de huellas deja constancia firmada de quién corrigió y cuándo.

Un auditor que llegue dentro de cinco años podrá reconstruir la verdad completa.

El escéptico, convencido

Volvamos al programador del comienzo, que ya no levanta la ceja.

Las cuatro objeciones tenían fundamento, y las cuatro tienen respuesta.

WQuestions se parece a los objetos en cómo piensa las cosas y las categorías, y los supera al separar el dato del comportamiento y dejar el esquema abierto.

Se parece a una avalancha de bits, y funciona por la misma razón que ellos: la uniformidad es lo que vuelve la información operable y comprimible a gran escala.

Vive en las bases de grafos que la industria ya construyó, y en Datomic y XTDB casi sin traducción.

Y hereda lo mejor de la blockchain, el registro inmutable y auditable, sin pagar el precio de la moda.

WQuestions no pide tirar lo que ya sabes. Pide reconocer que las preguntas estaban debajo de todo eso desde el principio.El sentido de los cuatro puentes

Ninguno de estos puentes es decorativo.

Cada uno responde a un lector que llega con su herramienta favorita y una pregunta legítima: «¿esto qué me aporta sobre lo que ya tengo?».

La respuesta, repetida cuatro veces, es la misma. WQuestions no reemplaza tu pila tecnológica. Le pone debajo una capa de significado que hace que tus objetos, tus bits, tus grafos y tus cadenas por fin se entiendan entre sí.

Con los cuatro puentes tendidos, queda la última pieza del camino del lenguaje a los hechos: cómo el verbo de una frase se convierte en la regla de un cable.