3. Sistema Basado en Reglas para el reconocimiento de gestos
4.5. Relación entre los elementos de los paquetes
Ahora que todos los elementos de los paquetes están bien definidos y las jerarquías de las clases de los paquetes se encuentran explicadas procederemos a presentar la relación que hay entre los elementos incluidos en los paquetes. Con el fin de Simplificar el diagrama, sólo se presentarán las clases GestureListener del paquete Listeners Package,
AbstractCondition del paquete Conditions Package y AbstractGesture del paquete Gestures Package. La figura 4.6 muestra lo mencionado. En esta figura se puede apreciar que GestureListener contiene un objeto de tipo AbstractGesture (gesture), un objeto de tipo
AbstractCondition (condition) y un objeto de tipo UnityEvent (action). Estos tres objetos forman la materialización de una regla descrita en el capítulo anterior. El objeto de tipo
AbstractCondition es el encargado de ver si la condición se cumple, el objeto de tipo
AbstractGesture el encargado de ver si el gesto fue realizado y el objeto de tipo UnityEvent
Figura 4.6. Relación entre los elementos de los paquetes.
Con el fin de explicar la secuencia de llamados desde que el usuario cumple con una de las reglas del motor de reglas y el mismo usuario puede apreciar la respuesta asociada en esa regla se presenta un diagrama de secuencias entre el usuario, el mundo VR y los distintos componentes que intervienen en la secuencia. La figura 4.6 muestra el diagrama antes mencionado.
A continuación, se muestra el diagrama de secuencias que representa el flujo de la evaluación de la regla Condition_NearCube/Gesture_LookDown ->Acción(Figura 4.7). El evento que inicia al GestureListener es el movimiento del usuario. Cuando el usuario se mueve en el mundo virtual el objeto GestureListener llama al método satisfied() del objeto de tipo
Condition_NearCube que tiene asociado. El objeto de tipo Condition_NearCube consulta la posición del usuario al VR World y devuelve una respuesta al GestureListener. Si la respuesta de Condition_NearCube fue verdadera GestureListener llama al método
isDetected() del objeto Gesture_LookDown. Al ser llamado este método, el objeto de tipo
Gesture_LookDown se activa y comienza a tomar datos del acelerómetro (En este caso representado como un objeto de tipo input). Si se ha detectado el gesto luego de
contrario un falso. Si el método isDetected() retornó un valor verdadero entonces se procede a ejecutar la action. Esta action normalmente modificará al VR World.
4.6. Resumen
A lo largo del capítulo se presentó la arquitectura general de la implementación propuesta y su consecuente división en paquetes: el paquete de gestos, el paquete de condiciones y el paquete de los Listeners. Finalmente, se estableció la relación entre los elementos de dichos paquetes. Para concluir con este capítulo, se brindará un resumen con las principales ventajas de la implementación propuesta para la materialización del enfoque planteado en el capítulo 3.
En cuanto a la Arquitectura general seleccionada podemos decir que la dificultad de implementarla fue considerable, pero nos parece que la opción elegida fue la correcta. Esto pudimos apreciarlo luego de llevar a cabo la implementación del diseño del framework ya que nos permitió agregar gestos que fueron surgiendo durante el desarrollo más fácilmente y realizar pequeñas modificaciones a las condiciones sin mucho esfuerzo. Además, estos cambios se pudieron agregar sin interferir en el resto de lo implementado.
En cuanto al paquete Gestures Package, podemos decir que es posible agregar nuevos gestos al paquete fácilmente, dado que basta con sólo heredar de la clase AbstractGesture, e implementar los métodos abstractos ya explicados en la sección 4.2. Esto permite que cualquier desarrollador logre extenderlo y ajustarlo a sus necesidades.
En cuanto al paquete Conditions Package, podemos decir que, al igual que con el paquete de gestos, resulta fácil extender este paquete. La dificultad reside simplemente en heredar de la clase base AbstractCondition y poder codificar la condición deseada en la especialización de su método abstracto. Esto no quita el hecho de que el código de la condición será muy similar al código que hubiese resultado sin utilizar el framework, pero implementarlo heredando de la clase base de este paquete permite que dicho gesto pueda aprovechar las bondades del framework.
En cuanto al paquete Listeners Package, podemos decir que la forma en que fue implementado facilita el uso del sistema. Esto es debido a que se sigue el concepto de sistema basado en reglas, donde cada regla tiene partes bien diferenciadas y fáciles de utilizar. Esto deriva en que la utilización del sistema se puede resumir en cuatro pasos. En primer lugar, el desarrollador selecciona un gesto del paquete Gestures Package, lo implementa y lo configura según sus necesidades. En segundo lugar, selecciona y configura una condición del paquete Conditions Package, la cual va a limitar el lugar o el momento en el cual va a evaluarse el gesto seleccionado. En tercer lugar, implementa la respuesta que espera que se ejecute al realizar el gesto en el lugar o momento deseado. Y finalmente, en cuarto lugar, se utiliza el Listeners Package para vincular todo lo anterior. Con esto el desarrollador ya tiene una regla definida, que va a ser evaluada y ejecutada cuando sea necesario.
Entre otras ventajas que pueden mencionarse se encuentra que, al realizar en primer lugar la evaluación de las condiciones, se evita que se utilicen los sensores de forma indiscriminada, lo cual reduce el consumo de energía del dispositivo que se esté utilizando.