Clases de MMS
Introducción
MMS está diseñado y construido utilizando la programación orientada a objetos de TOL. Las clases de MMS están agrupadas, como el resto del sistema, en torno a módulos dedicados a distintos aspectos de la modelación.
Sin embargo, las clases de MMS disponen de un diseño y unas características comunes. A continuación describimos estas características con el fin de facilitar la comprensión y el manejos de los objetos (sus instancias) en MMS.
Nombres de las clases
Todas las clases de MMS, de acuerdo a la nomenclatura TOL de clases, comienzan con el símbolo @
.
Para la elección de sus nombres se han utilidado los siguientes criterios:
- Usar los términos en inglés.
- No usar abreviaturas (salvo algunas excepciones).
- Hacer uso de mayúsculas para la separación de palablas, al estilo CamelCase.
- A pesar de la ambigüedad que esto pueda producir, construir del mismo modo tanto los nombres compuestos como los de clases derivadas. Por ejemplo:
@HierarchyTerm
ha de leerse como "término de la jerarquía" mientras que@ParameterMissing
ha de leerse como "parámetro de tipo omitido".
Las clases de MMS están definidas en el nameblock MMS
del paquete, de modo que el usuario de MMS podrá acceder a ellas anteponiendo el nombre del paquete MMS::
, sin embargo en la documentación usaremos indistintamente un nombre (@ClassName
) u otro (MMS::@ClassName
) asumiendo que el usuario está familiarizado con este punto.
Descripción
Los objetos de MMS están diseñados para su utilización por parte de los usuarios como si de un nuevo conjunto de objetos TOL se tratase. De modo que una gran parte de sus métodos están diseñados para interaccionar con ellos, tanto para obtener información como para modificarlos.
Desde el punto de vista del desarrollador de MMS, una clase está compuesta por:
- Atributos: objetos TOL de sólo lectura que contienen la información elemental de cada objeto o instancia de la clase.
- Métodos: funciones TOL que permiten acceder o modificar la información de estos atributos, así como lanzar algunos mecanismos o procesos.
- Métodos de clase: métodos declarados como
Static
que están a disposición desde la clase (sin necesidad de instancia alguna) como puede ser los constructores de objetos.
Desde el punto de vista del usuario de MMS, los objetos pueden verse como entidades capaces de gestionar la información correspondiente al concepto de la modelación al que representan.
Los atributos de los objetos no están diseñados para su edición directa, de modo que para ello se facilitan métodos tanto de lectura como de escritura.
Por ejemplo, para un atributo _.name
dispondríamos de dos métodos GetName(?)
y SetName(newName)
para leerlo o modificarlo respectivamente.
Atributos de usuario
A menudo hay atributos que no deben ser modificados, digamos que son de "sólo lectura" y no disponen de métodos de escritura o edición. Aún más en ocasiones hay "atributos" que no tienen su par entre los atributos de la clase, pero que pueden leerse o incluso modificarse mediante los métodos del objeto. De este modo, definimos como atributos de usuario a aquellos atributos (con su par en la clase o no) que se ponen a disposición del usuario a través de métodos de lectura y escritura.
En general hablaremos de atributos pudiéndonos referirnos tanto a unos como a otros, de modo que es importante que seamos conscientes de esta doble naturaleza de los atributos en MMS. Salvo que se indique explícitamente, una pista que puede ayudarnos a entender de cual de ellos se trata es el nombre con el que nos estemos refiriendo a él: (i) si estamos usando su nombre "sólo lectura" (comenzado en minúscula y precedido por _.
) o (ii) si por el contrario usamos su nombre de usuario (comenzado en mayúscula). Por ejemplo: _.name
sería el atributo de la clase y Name
sería el atributo de usuario.
Podemos distinguir dos tipos de atributos en los objetos de MMS: (i) los atributos individuales y (ii) los atributos colectivos, de conjunto o contenedores. Mientras los primeros representan una característica del objeto dada por un único elemento, los segundos contienen un conjunto de elementos (habitualmente del mismo tipo) que están vinculados o que pertenecen al objeto.
A continuación anumeramos los métodos más comunes en los atributos de usuario. Como es lógico si el atributo es de sólo lectura, los métodos de escritura no existirán.
Atributos individuales
Los atributos individuales se caracterizan por disponer de los siguientes métodos:
- Lectura:
Anything Get[UserAttribute](Real void)
Permite obtener el valor del atributo[True|False] Has[UserAttribute](Real void)
Permite conocer si dispone de dicho atributo cuando éste es opcional
- Escritura:
Real Set[UserAttribute](Anything userAttribute)
Permite modificar al valor del atributo dondeuserAttribute
es un valor para el atributo.Real Remove[UserAttribute](Real void)
Permite eliminar el valor del atributo cuando éste es opcional
Atributos colectivos
Los atributos colectivos o contenedores se caracterizan por disponer de métodos para el acceso en conjunto o de manera individual:
- Lectura:
Set Get[UserAttribute]s(Real void)
Permite obtener el valor de todos los elementosAnything Get[UserAttribute](Anything userAttributeInfo)
Permite obtener el valor de un elemento.userAttributeInfo
es algún identificador del elemento como su nombre o su índice en el conjunto.Real Find[UserAttribute](Anything userAttributeInfo)
Permite obtener el índice del elemento en el conjunto.
- Escritura:
Anything Create[UserAttribute](NameBlock arguments)
Permite crear y añadir un nuevo elemento al conjunto.Anything Append[UserAttribute](Anything userAttribute)
Permite añadir un nuevo elemento al conjunto.Real Remove[UserAttribute](Anything userAttributeInfo)
Permite eliminar un elemento del conjunto.Real Remove[UserAttribute]s(Real void)
Permite eliminar todos los elementos del conjunto.
Nótese que la existencia de un método "append" o "create" suele depender de la naturaleza de los elementos del atributo colectivo.
Métodos de atributo extendidos
En ocasiones los métodos anteriores se extienden, ofreciendo una gama más amplia. A continuación anotamos algunos de los casos que se pueden encontrar:
Anything Get[UserAttribute].[UserAttribute2](Real void)
(Lectura) Cuando el atributo es un nuevo objeto permite obtener un determinado atributo de dicho objeto que es atributo. Nótese sin embargo que esta opción suele evitarse ya que los métodos pueden encadenarse del siguiente modo:
Anything Get[UserAttribute](Real void)::Get[UserAttribute2](Real void)
Anything Create[UserAttribute]_Constructor(...)
(Escritura) Permite crear y añadir un nuevo elemento usando un determinado constructor o un mecanismo específico.
Métodos de usuario
Además de los métodos relativos a los atributos de usuario, los objetos de MMS disponen de otros métodos destinados a la interacción con el objeto.
Constructores
Las clases de MMS disponen de métodos de clase para la construcción de objetos, sin embargo, dada la estructura arbórea de los objetos de MMS, la construcción de nuevos objetos se realiza mediante los métodos de tipo "create" del objeto que los contiene:
MMS::@[Object] object = <parentObject>::Create[Object](Nameblock arguments)
Los objetos principales de MMS, aquéllos que son independientes o que están en la parte más alta del árbol, se construyen desde el contenedor principal de MMS.