Diagrama de Clases del Módulo de Wiring
Enlaces relacionados
La información relativa al módulo se encuentra en: Arquitectura y Diseño de Wiring
Diagrama de clases
Ésta versión del diagrama de clases módulo de wiring se corresponde a lo definido en los Interfaces entre Módulos. En él se han tenido en cuenta, de momento, los requisitos de gestión del módulo y los relativos al Diseño inicial Interfaz wiring de cara al usuario. El fichero de proyecto para realizar modificaciones sobre la versión del diagrama actual, hecho mediante la herramienta Argo, ha sido añadido a la página.
La estructura de clases se ha definido conforme a dos criterios: la clase wiring será la que realice la gestión de las operaciones dentro del módulo y el resto de las clases heredan de una clase llamada Connectable, la cual tiene tres tipos de out: los de entrada (In), los de salida (Out) y los de interconexión (InOut). Las clases, con sus correspondientes atributos y métodos, se describen a continuación.
La clase Wiring
Es la clase principal del módulo y se encarga de la gestión de las estructuras necesarias para la gestión de los objetos interconectables relacionados con las instancias de los gadgets asociados a los mismos. Sigue el patrón singleton.
Atributos
Los atributos considerados básicos hasta el momento en esta clase son:
- iGadgetElementHash: se trata de un Hash en el cual se almacena las listas de variables conectables definidas en los templates de los gadgets vinculadas a las instancias de los mismos mediante el uso de los identificadores de dichas instancias como claves.
- inOutHash: es una estructura en la cual se organizan los diferentes objetos de la clase InOut que son gestionados por el módulo de wiring.
Métodos
Los métodos de esta clase deben ser invocados por los módulos correspondientes que aparecen en el diagrama de Interfaces entre Módulos. Los métodos que en él no aparecen están relacionados con la interfaz de usuario. En el caso de los métodos que devuelven un elemento de tipo resultCode seguirán el siguiente criterio, salvo que se especifique otra opción posteriormente: devolveran 0 si se han ejecutado sin errores y -1 en otro caso. Hasta el momento los métodos identificados para esta clase son:
- getInstance():Wiring -> devuelve un único objeto de esta clase.
- addInstance(id: idInstanciaGadget, template: template): resultCode -> método que ha de ser invocado por parte del OpManager en el momento en el que se añada una instancia de un gadget. Este método se encarga de vincular las instancias de gadgets con sus variables creando la lista de objetos In y Out a partir de sus templates para poder luego establecer los canales de forma automática.
- removeInstance(id:idInstanciaGadget):void -> método que ha de ser invocado por parte del OpManager en el momento en el que se borre una instancia de un gadget. Se encarga de eliminar la relacion entre la instancia de gadget y los correspondientes objetos In y Out, así como las interconexiones que en las que participan.
- createChannel(name: string): resultCode -> es un método que se proporciona a la interfaz de usuario con el fin de que éste pueda crear sus propios canales e identificarlos.
- removeChannel(name: string): resultCode -> es un método que se proporciona a la interfaz de usuario con el fin de que éste pueda eliminar canales que no considere necesarios.
- viewValue(name: string): value_type-> es un método que se proporciona al usuario con el fin de que éste pueda consultar el valor de la información que hay vinculada a un canal en un determinado instante.
- sendEvent(id: idInstanciaGadget, eventName: string, value: value_type): resultCode -> este método debe ser invocado por el VarManager cada vez que se desee actualizar el valor de un event, el cual debe propagarse a través de los objetos InOut a los cuales esté conectado hasta alcanzar los elementos de tipo Slot finales, los cuales invocaran el correspondiente método writeSlot del VarManager.
- addChannelInput(id: idInstanciaGadget, inputName: string, channelName: string): resultCode -> este método debe ser invocado con el fin de conectar un objeto de la clase In en el canal que se indique.
- addChannelOutput(id: idInstanciaGadget, outputName: string, channelName: string): resultCode -> este método debe ser invocado con el fin de conectar un objeto de la clase Out en el canal que se indique.
- addChannelInput(inputName: string, channelName: string):void -> este método debe ser invocado con el fin de conectar un objeto de la clase In o InOut a la entrada del canal especificado.
- addChannelOutput(inputName: string, channelName: string):void -> este método debe ser invocado con el fin de conectar un objeto de la clase Out o InOut a la salida del canal especificado.
- removeChannelInput(id: idInstanciaGadget, inputName: string, channelName: string): resultCode -> este método debe ser invocado con el fin de eliminar objeto de la clase In de la entrada de un determinado canal.
- removeChannelOutput(id: idInstanciaGadget, outputName: string, channelName: string): resultCode -> este método debe ser invocado con el fin de eliminar objeto de la clase Out de la entrada de un determinado canal.
- removeChannelInput(inputName: string, channelName: string): resultCode -> este método debe ser invocado desde el interfaz de usuario con el fin de eliminar objeto de la clase In o InOut de la entrada de un determinado canal.
- removeChannelOutput(outputName: string, channelName: string): resultCode -> este método debe ser invocado desde el interfaz de usuario con el fin de eliminar objeto de la clase Out o InOut de la entrada de un determinado canal.
- getGadgetsId(): idList -> devuelve una lista de identificadores de gadgets que posteriormente utilizará el interfaz de edición del módulo.
- getInOutId(): idList -> devuelve una lista de identificadores de objetos InOut que posteriormente utilizará el interfaz de edición del módulo
- connections(): connectionList -> devuelve una estructura con las conexiones asociadas a un objeto de clase InOut para que posteriormente lo utilice el interfaz de edición del módulo.
- gadgetConnection(): connectionList -> devuelve una estructura con los identificadores de event y slot vinculados a una instancia de gadget para que posteriormente lo utilice el interfaz de edición del modulo.
La clase Connectable
Es una clase de la cual heredaran los elementos conectables mediante el módulo de wiring.
Atributos
Los atributos, todos de tipo protegido para permitir la herencia, presentes en esta clase son:
- id: identificador correspondiente a la instancia del gadget vinculada al objeto conectable.
- type: define el tipo de la información que maneja el elemento conectable (en teoría se refiere a "friend code").
- value: es el valor actual de la información que existe en el elemento conectable.
- string: nombre del objeto conectable.
A la hora de identificar el objeto conectable se seguirá el siguiente criterio: si es un objeto de tipo InOut? el atributo id será nulo y el identificador sera el atributo name, en otro caso se identificará mediante el id y el name conjuntamente.
Métodos
El constructor de esta clase requerirá un parámetro id y un nombre, y opcionalmente, un tercer parámetro, que en caso de aparecer será un objeto procedente de la evaluación de una cadena json que contendrá el estado de un objeto de este tipo.
Los métodos de los que dispone este tipo de objetos son los de modificación y consulta de todos sus atributos menos del nombre.
- setId(value: int):void -> método de modificacion del Id.
- getId(): int -> método de consulta del Id.
- setType(value: string):void -> método de modificacion del tipo.
- getType(): string -> método de consulta del tipo.
- setValue(value: value_type):void -> método de modificacion del valor, será sobreescrito en las clases hijas.
- getValue(): value_type -> método de consulta del valor.
- getName(): string -> método de consulta del nombre.
- clear(): void -> método que en las clases hijas se utilizará para eliminar las referencias procedentes de los objetos con conexiones entrantes al objeto Connectable. Este método se redefinira en todas y cada una de las clases hijas pero en este caso su funcionalidad es nula.
- serialize(): string -> método que serializa el objeto mediante la gramática de json.
La clase In
A esta clase pertecerán los objetos que generen información destinada a ser transmitida mediante el módulo de wiring. El único tipo de objetos conectables definido en esta clase hasta el momento son los events, pero este diseño deja abierta la puerta a que en el futuro puedan añadirse otros elementos adicionales.
Atributos
El único atributo necesario en esta clase son:
- outputHash: se trata de una estructura que almacena la conexión del objeto con los objetos de tipo InOut a los cuales se conecta (de momento sólo se utilizan canales).
Métodos
Los métodos que proporciona esta clase son los relativos a la interconexión:
- addOutput(output: InOut):int -> método que permite conectar a un objeto de clase InOut a la salida de un objeto de clase In. Devuelve los sisguientes valores dependiendo del caso: -2 si los tipos son incompatibles, -1 si el objeto que se desea conectar no es de tipo InOut, 0 en caso de éxito, 1 si el objeto ya estuviese conectado.
- removeOutput(output: InOut):int -> método que permite desconectar un objeto de clase InOut de la salida de un objeto de clase In. Devuelve los sisguientes valores dependiendo del caso: -1 si el objeto que se desea desconectar no es de tipo InOut, 0 en caso de éxito, 1 si el objeto no estuviese conectado.
Además se redefinen los siguientes métodos:
- setValue: se añade la funcionalidad de propagación del valor de su correspondiente atributo a todos los elementos conectados a la salida del mismo y devuelve una lista con la identificación de los canales que han propagado el evento.
- clear: su función es eliminar las conexiones de tipo input almacenadas en los objetos conectados a la salida del objeto In.
- serialize: además de serializar los atributos simples, serializa una lista con los identificadores de los objetos conectados a la salida del objeto In.
La clase Event
No se han definido características específicas para esta clase.
La clase Out
A esta clase pertecerán los objetos que reciban información transmitida mediante el módulo de wiring. El único tipo de elementos conectables definido en esta clase hasta el momento son los slots, pero este diseño deja abierta la puerta a que en el futuro puedan añadirse otros elementos adicionales.
Atributos
Para esta clase se necesita el siguiente atributo:
- inputHash: se trata de una estructura destinada a almacenar las referencias a los objetos a cuyas salidas esta conectado el objeto Out, con el fin de evitar situaciones inconsistentes en los casos de borrado.
Métodos
Los métodos necesarios para gestionar esta clase son:
- addInput(input: InOut):int -> permite añadir a un objeto a cuya salida esta conectado el propio objeto out. Devuelve los sisguientes valores dependiendo del caso: -1 si el objeto que se desea conectar no es de tipo InOut, 0 en caso de éxito, 1 si el objeto ya estuviese conectado.
- removeInput(input: InOut):int -> se encarga de realizar el proceso necesario para el borrado del propio objeto out, invocando al correpondiente método de los objetos InOut presentes en el inputHash para eliminar las referencias a si mismo. Devuelve los sisguientes valores dependiendo del caso: -1 si el objeto que se desea desconectar no es de tipo InOut, 0 en caso de éxito, 1 si el objeto no estuviese conectado.
Además se redefinen los siguientes métodos:
- setValue: al invocarlo efectuará la correspondiente llamada write al VarManager con el fin de actualizar el valor en el gadget.
- clear: su función es eliminar las conexiones de tipo output almacenadas en los objetos conectados a la entrada del objeto Out.
- serialize: además de serializar los atributos simples, serializa una lista con los identificadores de los objetos conectados a la entrada del objeto Out.
La clase Slot
Representa a las variables de las instancias de gadgets que reciben actualizaciones. La única peuliaridad de esta clase es que sobreescribe el método setValue con el fin de que tras actualizar su valor propaga el valor a la instancia del gadget a través del método write del VarManager.
La clase InOut
Esta clase representa a todos los objetos que se pueden conectar entre un objeto de clase In y un objeto de clase Out.
Atributos
Para definir estos objetos son necesarias las siguientes estructuras en los atributos:
- outputList: se trata de una estructura que contiene objetos conectados a la salida del objeto InOut. Los objetos presentes en ella sólo pueden ser de clase Out o InOut, por ello se opta por que la estructura sea de tipo lista, lo cual evita posteriores problemas con librerias que redefinen la estructura de los arrays.
- inputList: es una estructura necesaria para realizar borrados, ya que almacena las referencias a los objetos a cuya salida se encuentra conectado.
Métodos
Los métodos para estos objetos son:
- addOutput(output: Out):int -> este método debe ser invocado cada vez que se desee conectar un objeto Out a la salida del objeto al cual pertenece el método. Devuelve los sisguientes valores dependiendo del caso: -2 si los tipos son incompatibles, -1 si el objeto que se desea conectar es de tipo In, 0 en caso de éxito, 1 si el objeto ya estuviese conectado y 2 si al realizar la conexión se produciría un bucle.
- addOutput(output: InOut):int -> este método debe ser invocado cada vez que se desee conectar un objeto InOut a la salida del objeto al cual pertenece el método. Devuelve los sisguientes valores dependiendo del caso: -2 si los tipos son incompatibles, -1 si el objeto que se desea conectar es de tipo In, 0 en caso de éxito, 1 si el objeto ya estuviese conectado y 2 si al realizar la conexión se produciría un bucle.
- removeOutput(outputId: idOut):int -> este método debe ser invocado cada vez que se desee desvincular un objeto de la salida del objeto InOut. Devuelve los sisguientes valores dependiendo del caso: -1 si el objeto que se desea desconectar es de tipo In, 0 en caso de éxito, 1 si el objeto no estuviese conectado.
- addInput(input: In):int -> este método debe ser invocado cada vez que se desee conectar un objeto In a la entrada del objeto al cual pertenece el método. Devuelve los sisguientes valores dependiendo del caso: -1 si el objeto que se desea conectar es de tipo Out, 0 en caso de éxito, 1 si el objeto ya estuviese conectado y 2 si al realizar la conexión se produciría un bucle.
- addInput(input: InOut):int -> este método debe ser invocado cada vez que se desee conectar un objeto InOut a la entrada del objeto al cual pertenece el método. Devuelve los sisguientes valores dependiendo del caso: -1 si el objeto que se desea conectar es de tipo Out, 0 en caso de éxito, 1 si el objeto ya estuviese conectado y 2 si al realizar la conexión se produciría un bucle.
- removeInput(inputId: idIn):int -> este método debe ser invocado cada vez que se desee desvincular un objeto de la entrada del objeto InOut. Devuelve los sisguientes valores dependiendo del caso: -1 si el objeto que se desea desconectar es de tipo Out, 0 en caso de éxito, 1 si el objeto no estuviese conectado.
- setTypeBack(value: string):void -> asigna el tipo al objeto InOut y lo propaga a todas sus entradas de forma "recursiva".
- setTypeBack(value: string):void -> asigna el tipo al objeto InOut y lo propaga a todas sus salidas de forma "recursiva".
- searchCycle(name: string):boolean -> realiza una búsqueda en profundidad para localizar a través de sus salidas una conexión al objeto identificado por name, si esta existe devuelve true.
Además se redefinen los siguientes métodos:
- setValue: al invocarlo se propaga el valor a todos los objetos conectados a la salida del mismo y construye la parte correspondiente a la connectionList que devuelve.
- clear: su función es eliminar las conexiones de tipo output almacenadas en los objetos conectados a la entrada del objeto InOut y todas las conexiones de tipo input al macenadas en los objetos conectados su salida.
- serialize: además de serializar los atributos simples, serializa una lista con los identificadores de los objetos conectados a la entrada del objeto InOut y otra con los pertenecientes a los objetos conectados a su salida.
La clase Channel
Al no haberse definido ninguna característica específica de los mismos, no se ha optado por definirlos como una clase (de momento con objetos de la clase InOut es suficiente), no obstante, se deja abierta la posibilidad de caracterizarlos mediante esta clase.
La clase Filter
Es una clase que se prevee para el futuro cuyo fin será las transformación de la información que intercambien las instancias de los gadgets.
Attachments
- clases_wiring_v1.7.2.zargo (10.9 kB) - added by miglesia on 10/25/07 16:26:14.
- DiagramaClasesWiring_v1.7.2.png (27.9 kB) - added by miglesia on 10/25/07 16:26:36.

