
En V7 aparece el revolucionario concepto de caja. En este artículo vamos a analizar el aspecto práctico de las cajas y las relaciones de conocimiento, obtenidas a través de la herencia, que se establecen entre ellas y como nos afecta a nuestro estilo de programación.
Cajas
Una caja es un fichero contenedor de código fuente V7.
Es probablemente la novedad más importante a nivel de análisis y programación de V7. Hasta ahora nuestros proyectos tenian el handicap de la modularización y de la integración de mapas, es decir, se programaba sobre un único fichero y en caso de programar en equipo, al final era preciso unir en un sólo mapa todo el código generado.
Existen 2 tipos de cajas en V7, de datos y de objetos.
Cajas de datos
Podemos asociar el concepto de caja de datos a lo que hasta ahora era la parte izquierda del Edmap:
- Tablas.
- Tablas estáticas.
- Variables globales.
Cajas de objetos
La caja de objetos equivale a la parte derecha del Edmap:
- Carpetas.
- Objetos visuales.
Antes de V7, después de V7
Con la versión actual, antes de V7, nuestros desarrollos son monolíticos, es decir, una aplicación (.map) es equivalente en el nuevo sistema de cajas a:
- Una sola caja de datos y
- Una sola caja de objetos.
Sin embargo, a partir de V7 podremos tener tantas cajas de datos y de objetos como queramos. El servidor de edición se encargará de gestionar las cajas y de controlar los bloqueos en su edición.
La herencia aporta la relación de conocimiento
Las cajas no son entidades aisladas. Entre ellas se pueden establecer relaciones de conocimiento, a través de la herencia, que permiten a la caja usar los objetos de la caja conocida y, por lo tanto, usar dichos objetos de forma directa.
Un ejemplo:
1.- Cuando una caja “A” hereda a otra caja “B”, pasa a conocer todos sus objetos.
2.- Desde ese momento en la caja “A” se podrán usar todos los objetos de la caja “B” como si estuviesen declarados dentro de la caja “A”.
3.- Una caja puede ser heredada por muchas cajas que reutilizan su código. En nuestro ejemplo la caja “B” también puede ser heredada por la caja “C”.
4.- Una gran ventaja de la herencia es que los objetos sólo existen en la caja “B” y, de esta forma el mantenimiento de los mismos será mucho más sencillo, cualquier cambio en un objeto de “B” será reflejado directamente en “A” y en “C”.
Conocimiento inverso: Las relaciones de histórico son dinámicas
En un mapa de la versión 6.x o anterior las relaciones de histórico se creaban entre tablas que debían estar incluidas en el mismo mapa.
En V7 las cajas de datos pueden heredar otras cajas de datos. Y en cualquier tabla se puede crear un relación de maestro contra otra tabla de su propia caja o de otra caja heredada.
¿Qué pasa con las relaciones de histórico?
Pensemos que el programador que ha creado las tablas de la caja heredada no sabe ni que cajas la van a conocer ni que tablas tendrán enlaces a alguna de sus tablas. Además hoy puede estar siendo heredada por una caja y mañana por varias, cada una con sus tablas y enlaces.
¿Cómo tener actualizadas en todo momento las relaciones de histórico en la caja conocida?
Muy sencillo, el programador no tiene que hacer nada ya que el gestor de cajas del servidor de edición es capaz de crear dichas relaciones, tanto en tiempo de edición como de ejecución cuando usamos la caja. Es decir, el gestor de cajas analiza todas las relaciones de las tablas entre las cajas conocidas y crea dinámicamente la relaciones de histórico.
Conocimiento recíproco
Si una caja “A” hereda la caja “B”, ¿Puede la caja “B” a su vez heredar la caja “A”?
La respuesta es SÍ.
Será habitual que en una aplicación modular, por ejemplo, en una aplicación de gestión comercial se pueden crear los módulos de ventas y compras en la cajas vVentas y vCompras.
Será habitual tener funcionalidad del tipo: “Desde el pedido de ventas tengo que poder generar uno o varios pedidos de compra”. Para hacer esto en V7 la caja vVentas deberá heredar la caja vCompras, una vez creado el conocimiento, en el formulario de pedido de ventas podremos añadir un botón que muestre el formulario de alta de un pedido de compra.
Pero también quiero desde el pedido de compras poder ver el pedido de ventas que lo originó, esto es posible gracias al conocimiento recíproco que nos permite que vVentas también pueda ser heredada por vCompras y por lo tanto se pueda, desde el formulario de pedido de compra, lanzar el formulario de pedido de venta al que está enlazado.
Lo más importante es que todo se puede hacer desde 2 cajas distintas: Sin código duplicado, con la posibilidad de reutilizar dicho código desde otras cajas y sabiendo que cualquier cambio que haga en estas cajas se reflejará de forma automática en todas las que la conocen.
En el próximo artículo sobre la herencia en V7 hablaremos de la alteración de objetos heredados, que nos permitirá además del conocimiento y el uso la personalización de los objetos que sean configurados como heredables.
Los objetos ahora tienen nombre y apellido
Todo lo que se ha contado en este artículo es posible debido a que el gestor de cajas conoce todas las cajas con un identificador único y todos los objetos contenidos dentro de una caja vienen definitidos por:
- El identificador de la caja (nombre) +
- El identificador del objeto (apellido)
Esto garantiza que dos cajas distintas pueden tener un objeto con el mismo identificador, sin que esto produzca ningún conflicto, ya que cada objeto es distinto para el gestor.
Termino con el que esperamos sea el lema de los programadores de V7
CON V7… TODO EN-CAJA.

Etiquetas: cajas de datos, cajas de objetos, conocimiento, Velneo V7