Actualización a MMS_0.6
Paquete y nueva nomenclatura
En la versión 0.6 hemos optado por dotar a MMS de una estructura más modular y convertir la herramienta en un paquete TOL que puede utilizarse simplemente solicitándolo mediante una sentencia:
#Require MMS
El paquete MMS consiste en un nameblock que contiene todas las funcionalidades y definiciones del sistema.
Clases
Las clases de MMS se renombran para evitar redundancia. Mientras en MMS_0.5 las clases eran globales y mostraban un prefijo que indicaban su pertenencia a MMS:
@MMS.<Class>
en MMS_0.6 el prefijo se elimina y las clases que ahora son locales al nameblock MMS
se acceden mediante:
MMS::@<Class>
Funciones de uso general
Las funciones de uso general creadas junto al desarrollo de MMS, forman parte de
un paquete TOL distinto LibraryMMS que puede ser publicado (UsingNameBlock
)
sin problemas al tratarse únicamente de un conjunto de funciones.
Esta librería de funciones se cargará junto a MMS aunque el objetivo final es que todas o al menos algunas de ellas pasen a formar parte de la StdLib o de otras librerias de índole general de acuerdo a la nueva modularización de TOL.
De este modo, las funciones serán accesibles como funciones globales, sin tener que localizarlas anteponiendo el nombre del nameblock donde se definieron.
El contenedor de MMS
En MMS_0.5 el contenedor principal, encargado de albergar el conjunto de objetos construidos,
se llamaba MMS
, sin embargo como hemos visto en MMS_0.6 éste es el nombre del
paquete, el nombre actual del contenedor es: MMS::Container
.
Nótese que durante un tiempo, mientras se desarrollaba la estructura modular de MMS_0.6
el contenedor principal se denominaba MMS.C
. Ya no.
Otros cambios generales
A continuación se citan otras diferencias entre las versiones 0.5 y 0.6 de MMS.
Métodos constructores
Las instancias de los nuevos objetos se crean llamando métodos constructores
(::Create<Object>
) de un objeto superior. Estos métodos en MMS_0.5 devolvían
un número indicando si la acción había tenido éxito o no.
En MMS_0.6 sin embargo devuelven la instancia creada.
Este cambio se introduce para facilitar la obtención de la nueva instancia sobre
la que podrían realizarse nuevas acciones.
Código en MMS_0.5
Real parent::Create<Object>([[ Text _.name = <nombre>; ... ]]); @MMS.<Object> object = parent::Get<Object>(<nombre>);
Código en MMS_0.6
MMS::@<Object> object = parent::Create<Object>([[ Text _.name = <nombre>; ... ]]);
Nombres y versiones
En MMS_0.6 todos los objetos principales (MMS::@DataSet
, MMS::@Model
, MMS::@Estimation
, ...)
se identifican por un par nombre-versión.
A diferencia de como ocurría en MMS_0.5 este par caracteriza tanto a modelos como
a estimaciones, previsiones o datasets.
El atributo versión intenta recuperar su diseño original e itera a partir de un objeto guardado al hacerle cambios.
Mientras el nombre puede ser cualquier tipo de nombre TOL mientras se evite el uso del separador "__
",
las versiones se esperan como un texto acabado en un entero precedido de un ".
".
El identificador del objeto será el compuesto "<nombre>__<version>
".
Aun así los métodos de acceso al objeto desde el contenedor principal: MMS::Container::Get[Object]
también admiten recibir sólo el nombre.
En el caso de existir diferentes versiones con el mismo nombre se advertirá
de este hecho y se devolverá la más avanzada.
Aunque la versión de un objeto puede acoger información complementaria al nombre se recomienda añadir este tipo de información en el nombre del objeto. Así es preferible:
name: "ModeloA_Pruebas", version: "1.0"
que:
name: "ModeloA", version: "Pruebas.1.0"
Para las estimaciones y previsiones que en 0.6 se identificaban por la terna: (1) nombre del modelo, (2) versión del modelo, (3) nombre de la estimación/previsión, se propone usar nombres similares a:
name: "ModeloA_EstimationBSR", version: "1.0" name: "ModeloA_PointForecast", version: "1.0"
En ocasiones puede desearse localizar el conjunto de estimaciones realizadas a partir de un determinado modelo e incluso las previsiones dada una estimación. Por ello puede ser interesante implementar unos atributos auxiliares capaces de recoger esto.