En informática, el modelo de clase de rol es un patrón de análisis de roles [ 1 ] descrito (pero no inventado [ 2 ] ) por Francis G. Mossé en su artículo sobre modelado de roles. [ 3 ] El patrón de clase de rol proporciona la capacidad para que una clase desempeñe múltiples roles e incorpore la característica del rol en una clase dedicada.
En nuestra sociedad, tal como la hemos construido, los roles están presentes en todas partes. Cualquiera que trabaje en equipo para crear algo tiene un rol. En la cinematografía , muchas personas diferentes participan en la creación de una película: el director , el productor , los actores , el/los guionista /s, etc. Incluso nuestras organizaciones estatales se basan en diversos roles. En una República , hay un Presidente , Ministros, Diputados, etc.
Abordar estas situaciones es uno de los problemas más frecuentes en el análisis orientado a objetos. Francis G. Mossé identificó cinco patrones de análisis de roles que pueden utilizarse para resolver la mayoría de los problemas relacionados con roles: herencia de roles, roles de asociación, clases de roles, clases de roles generalizadas y roles de clase de asociación. Todos ellos presentan distintos grados de restricciones, flexibilidad o potencia, que en conjunto ofrecen una solución completa a la mayoría de los problemas relacionados con roles.
Intención
Un modelo que permite que una clase desempeñe uno o más roles al mismo tiempo. Un rol, tal como lo define Francis Mossé en Modelling Roles [ 3 ] , es un concepto de propósito que una clase podría tener en un contexto determinado.
Contexto
Se proporciona el siguiente ejemplo:
Muchas personas trabajan en una película, cada una con un rol diferente. A diferencia de otros conceptos, una persona no está limitada a un solo rol. Alguien podría ser a la vez director y actor. Para modelar roles en este contexto, sería necesario que una clase pudiera desempeñar más de un papel.
No es posible utilizar la herencia para conceptualizar un rol —véase el Modelo de Rol de Herencia—, ya que esto permitiría que una persona interpretara un único rol. Como se observa en la Figura 1, el modelo de rol de herencia indica que un personaje, que es una persona, actúa en una película. Sin embargo, no hay forma de afirmar que la persona que interpreta al personaje sea también el director. Esto se debe a que la herencia convierte a un personaje en una persona en general, no en una persona en particular.

Problema
Como se explica en Contexto , no se puede considerar el uso de la herencia para desempeñar más de un rol, porque una clase no podría desempeñar dos roles al mismo tiempo en tal contexto (véase el Modelo de Roles de Herencia).
Se espera contar con un modelo en el que una clase pueda considerarse como más de un concepto o rol, y donde se puedan especificar atributos específicos para cada uno de esos conceptos.
Solución
Una posible solución al problema anterior sería utilizar el modelo de roles de asociación, que permite establecer una relación entre una persona y una película. Sin embargo, en ese caso no sería posible almacenar información específica sobre cada rol. El modelo de clases de roles ofrece la flexibilidad necesaria para la asociación, con atributos específicos para cada rol e incluso operaciones de clase, si se requiere.

Este metamodelo (Figura 2) muestra la clase de rol como un elemento que vincula al Cliente con la Clase Base . Para el Cliente , interactuar con el Rol es como interactuar con la Clase Base , pero desde la perspectiva del Cliente, se espera una interacción. La ventaja de tener el rol como una clase es que se le pueden vincular atributos.
Otra situación en la que el patrón Role resulta interesante es cuando se presenta la siguiente situación:

Entonces te das cuenta de que, como titular de un contrato, la Persona tiene atributos específicos. El rol UML del titular se convierte en una clase dedicada, ContractHolder, con estos atributos específicos. Ten en cuenta que, en ese caso, la multiplicidad cerca de Persona y Contrato siempre es 1. Esto significa que tienes un objeto ContractHolder por cada asociación entre un Contrato y una Persona.

Ejemplo del mundo real
Cine

Una aplicación sencilla del modelo de clases de roles en un ejemplo real se encuentra en el séptimo arte (véase la Figura 3 ), la cinematografía. Este arte implica una creación (la película) y personas para crearla. Cada persona tiene un rol diferente en la película: pueden ser actores e interpretar personajes, pueden ser directores o guionistas , etc. Una persona no se limita a un solo rol en una película; puede ser actor y director a la vez, e incluso más. Por ejemplo, la película Scoop (2006) fue dirigida por Woody Allen , quien también es el guionista e interpreta el papel de Sid Waterman .

En la Figura 4 , se puede apreciar con mayor detalle el rol que cada persona puede desempeñar en una película. A partir de la película, es posible solicitar la lista de equipos y reparto que contribuyeron a su elaboración. Cada persona tiene uno o más roles (por ejemplo, actor, director, productor, camarógrafo , etc.) en la película y puede participar en más de una. Incluso, una persona podría ser actor en una película y productor en otra. Una ventaja de utilizar una clase de rol en el caso del rol de actor es que las cualidades del personaje pueden almacenarse dentro del rol. Esto es válido para el rol de actor, y también para otros roles, aunque quizás no para todos.
En la Figura 4 solo se han modelado algunos de los posibles roles . Es evidente que no todos los roles requieren atributos, y que el uso del modelo de clases de roles para todos ellos es innecesario (como en el caso del rol de Director ). Además, existe mucha redundancia entre las distintas clases de roles. En informática, la redundancia implica más trabajo de mantenimiento, lo cual no es deseable.
Fortalezas y debilidades
El empleo de este modelo depende del proceso de negocio . El patrón de análisis "Modelo de Clase de Rol" ofrece la posibilidad de emplear un modelo con vinculación entre una clase base y el cliente. Además, la herencia no forma parte de la solución debido a la flexibilidad de cero o múltiples roles (atributos y operaciones específicos de cada rol). La fortaleza implica también la debilidad de su contraparte. El problema del modelo de clase de rol es la redundancia; por ejemplo, el método getName es visible en todas las clases de rol descritas en la Figura 4. Si esto se considera inconveniente, el modelo de generalización de clases de rol, tal como se define en Modelling Roles [ 3 ], es una posible alternativa.
Véase también
Francis G. Mossé [ 3 ] ha descrito otras soluciones al problema del rol.
- Herencia de roles
- Funciones de la asociación
- Clases de roles generalizadas
- Roles de clase de la asociación
- Roles de clase de asociación con tipo de rol, que es un perfeccionamiento de lo anterior.
- Transparencia referencial
Referencias
- ↑ Fowler, Martin (1997-07-20). "Dealing with Roles" (PDF) . Analysis Pattern . Recuperado el 2007-01-16 .
- ↑ Hay una cita al respecto en el libro Business Modeling With UML: Business Patterns at Work de Magnus Penker (Autor), capítulo de Hans-Erik Eriksson :
Se desconoce su origen, pero este patrón se ha utilizado para modelar sistemas de desminado empleados por las Naciones Unidas. Una descripción de los conceptos subyacentes a este patrón se puede encontrar en el libro de Murray R. Cantor, Object-Oriented Project Management with UML (John Wiley & Sons, Inc., 1998).
- 1 2 3 4 Francis G. Mossé (septiembre de 2002). "Modelado de roles: una serie práctica de patrones de análisis" . Journal of Object Technology, vol. 1, n.º 4, págs. 27-37 . Recuperado el 28 de diciembre de 2006 .
Lecturas adicionales
- Fowler, Martin (27 de noviembre de 1996). Patrones de análisis: modelos de objetos reutilizables . Addison-Wesley . ISBN 0-201-89542-0.Introducción al análisis orientado a objetos con modelos conceptuales
- Raventós, Ruth y Cabot, Jordi (2006). "Patrones de modelado conceptual para roles" (PDF) . Journal on Data Semantics V. Recuperado el 16 de enero de 2007 .
{{cite journal}}: La cita de la revista requiere|journal=( ayuda ) CS1 maint: nombres múltiples: lista de autores ( enlace ) - Departamento de Ciencias de la Computación (2004). "Uso de roles en patrones" . Patrón de análisis . Universidad de Illinois en Urbana-Champaign. Archivado del original el 1 de enero de 2007. Recuperado el 16 de enero de 2007 .
- cromático (31 de agosto de 2006). "Uso de roles en patrones" . Técnico . O'Reilly Media . Recuperado el 16 de enero de 2007 .
{{cite web}}: Enlace externo en( ayuda )|work=
Enlaces relacionados
- Patrón Actor-Rol, una implementación de JPA https://web.archive.org/web/20071105232543/http://www.ibstaff.net/fmartinez/?p=16
- Patrones de análisis de software
- Lenguaje Unificado de Modelado