• No results found

4.3 Data Validation Process

4.3.1 Member checking by stakeholders

La transformación de RIF a OMG‐PRR se realiza para facilitar la representación de las reglas en UML.  La  idea  es  que,  en  el  diseño  de  la  aplicación  empleando  UML,  se  identificarán  las  clases  que  corresponden a servicios de decisión, las cuales comprenderán las reglas de negocio necesarias para  la  definición  del  servicio.  Estas  reglas  se  incorporarán  a  través  de  descripciones  en  OCL  pero  el  diseñador únicamente indicará que se deben suministrar esas reglas, cuyos contenidos se generarán  posteriormente utilizando K‐Site Rules para la definición de la regla. 

La semántica operacional entre RIF y OMG‐PRR es equivalente, lo que facilita la transformación del  uno al otro. Por ejemplo, en motores de reglas con encadenamiento hacia adelante es necesario un  mecanismo  de  resolución  de  conflictos  para  elegir  la  instancia  de  regla  que  se  ejecutará  a  continuación,  que  puede  expresarse  en  ambos  estándares.  Es  importante  indicar  que  en  esta  propuesta no es necesaria una transformación bidireccional, basta con poder pasar de RIF a OMG‐ PRR.  El  caso  contrario  no  se  cubre,  aunque  resultaría  de  gran  interés.  También  se  hace  necesario  indicar que esta transformación es válida únicamente para reglas de producción, pero no para reglas  de tipo evento‐condición‐acción o reglas de derivación, que no han sido contempladas en el estándar  OMG‐PRR. Por otra parte, el estándar está más orientado a indicar la estructura que debe tener una  regla y a facilitar la especificación  de esa estructura frente a la definición de su contenido. 

Como se explicó en la sección II.4.2.5, una regla en OMG PRR se compone de tres partes: una zona de  declaración  de  variables,  que  se  introduce  mediante  la  palabra  reservada  'ruleVariable',  una  zona  para  expresar  las  condiciones  de  la  regla,  que  se  encabeza  con  la  palabra  'condition',  y  la  zona  de  acciones  de  la  regla,  que  se  ejecutan  si  se  cumplen  las  condiciones,  y  que  se  introducen  con  la  palabra 'action'. En OMG PRR, al igual que en RIF, no existe la oportunidad de definir una zona 'si no'  en la regla, es decir, no cabe la posibilidad de indicar, en una misma regla, qué sucede cuando no se  cumplen las condiciones incluidas.  A continuación se detalla el mecanismo de transformación de las distintas partes que componen una  regla de negocio de RIF a OMG PRR 

III.2.4.1.

Transformación de condiciones 

Las condiciones en OMG PRR se introducen tras la palabra reservada 'condition' y al igual que en RIF,  se permite la combinación de distintas condiciones de comparación entre atributos o entre atributos  y constantes mediante los operadores lógicos 'and', 'or' y 'not'. Los operadores de comparación que  se  definen  en  OMG  PRR  son:  ‘+,’  ‘‐,’  ‘*’,  ‘/,’  ‘<,’  ‘>,’  ‘<>’,  ‘<=’,  ‘>=’,  lo  que  proporciona  la  misma        

Introduciendo Semántica en un Proceso de Desarrollo Software a través de Reglas de Negocio

 

   

expresividad que RIF. Así por ejemplo, la expresión de la Figura III‐ 7 se representaría en OMG PRR  como la mostrada en la Figura III‐ 12. 

Para  el  caso  del  cuantificador  existencial  OMG  PRR  no  proporciona  un  operador  específico,  con  lo  que la implementación de este operador pasa por seleccionar los objetos de la memoria de trabajo  que  cumplan  una  determinada  condición  y  trabajar  con  el  primero  de  ellos.  Para  este  fin  puede  emplearse el operador 'select' que incorpora OMG PRR y que proporciona un conjunto con todos los  objetos  que  satisfacen  una  determinada  condición.  Bastaría  seleccionar  uno  de  los  objetos  del  conjunto resultado. 

ruleVariable:

?poliza : Poliza -> any(); condition:

poliza.PotenciaCoche = 120

Figura III- 12. Expresión en OMG PRR de la parte de regla representada en la Figura III- 7

III.2.4.2.

Transformación de acciones 

El estándar OMG PRR contempla la posibilidad de definir la parte de acción de una regla como una  lista de operaciones de actualización, inserción y eliminación de objetos, así como la invocación de  métodos externos. Para implementar estas acciones OMG PRR dispone de las clases: ImperativeExp,  que  implementa  todos  aquellos  efectos  colaterales  contemplados  en  el  estándar;  AssignExp,  que  permite  representar  una  expresión  de  asignación  de  un  valor  a  una  variable  o  a  una  propiedad;  InvokeExp,  que  permite  realizar  llamadas  a  funciones  externas  no  definidas  en  el  ámbito  del  estándar;  AssertExp, que permite añadir un objeto en el dominio del motor de reglas; RetractExp,  que  saca  a  un  objeto  determinado  del  ámbito  del  motor  de  reglas    y  UpdateExp,  que  facilita  la  actualización de objetos en el ámbito del motor de reglas. Como puede comprobarse tras la lectura  del apartado anterior sobre representación de acciones en RIF, estas clases permiten expresar toda  la funcionalidad definida ese estándar. En realidad, las clases mencionadas son abstractas, es decir,  no existen como tal y tienen su reflejo en los operadores 'assert' y 'retract' en OMG PRR, así como en  asignaciones  de  valores  a  propiedades  de  objetos  cuando  se  trate  de  modificaciones  o  actualizaciones. 

III.2.4.3.

Transformación de conjuntos de reglas 

Por último, el estándar también incluye la posibilidad de definir grupos de reglas o rulesets. Como se  explicaba  anteriormente,  estos  rulesets  no  son  más  que  agrupaciones  de  reglas  de  negocio  atendiendo  a  parámetros  funcionales.  Para  su  especificación  se  emplea  la  palabra  Ruleset,  permiténdose también la especificación de parámetros de entrada (objetos a los que se referenciará  en  la  definición  de  las  reglas  de  negocio)  y  de  variables,  mediante  la  palabra  reservada  'Variables',  que tendrán como ámbito todas las reglas que se incluyan en el ruleset. 

Por  otra  parte,  como  sucedía  en  el  caso  de  RIF,  no  existe  la  posibilidad  de  definir  distintas  combinaciones  de  estos  conjuntos  de  reglas,  es  decir,  el  estándar  no  dispone  de  ninguna  herramienta que permita definir flujos dentro de los servicios de decisión. 

A modo de ejemplo, la representación en OMG PRR de la regla expresada en RIF en la  Figura III‐ 11  quedaría como se muestra en la Figura III‐ 13. 

Introduciendo Semántica en un Proceso de Desarrollo Software a través de Reglas de Negocio

 

   

Rule ValidarPotenciayPrecio ruleVariable:

?poliza: Poliza = ShoppingCart->any() ?coche: Coche = ?poliza.coche

Condition:

?poliza.potenciacoche > 120 and coche.precio >= 15000

Action:

?poliza.precio = 500 

Figura III- 13. Expresión en OMG PRR de la regla representada en lenguaje RIF en la Figura III- 11

III.2.5. Transformación de OMG­PRR a lenguajes de reglas específicos