¿Cuáles son las diferencias entre programación orientada a aspectos, orientada a temas y orientada a roles?

14

Sé que hay muchos documentos que describen estos tres paradigmas, pero estoy buscando una explicación esquemática.

Aquí hay algunas descripciones muy buenas de la programación orientada a aspectos, así que hago esta pregunta con la esperanza de obtener el tipo de respuesta de alta calidad que las personas en Stack Overflow están acostumbradas a entregar.

Adam Lear
fuente
Probablemente se trate más de una pregunta de programmers.se, pero también es realmente abierta. Consulte stackoverflow.com/faq#dontask : "Sus preguntas deben tener un alcance razonable. Si puede imaginar un libro completo que responda a su pregunta, está preguntando demasiado".
Merlyn Morgan-Graham
Comenzaría leyendo el Thomas Kuhn original: amazon.com/Structure-Scientific-Revolutions-Thomas-Kuhn/dp/…
También puedo imaginar una respuesta corta a mi pregunta. Por ejemplo, así es como describiría la programación orientada a aspectos: es una forma de agregar "unidades de procesamiento" llamadas aspectos de forma modular antes y después de otras unidades de procesamiento por medio de puntos de corte. Para mí, se parece mucho a la programación basada en reglas, por ejemplo, el lenguaje de programación Inform7. inform7.com/learn/man/doc188.html

Respuestas:

9

Uno puede responder esto escribiendo un libro sobre esto. Sin embargo, aquí hay una comparación básica

1. Programación orientada a temas

La programación orientada al sujeto es una desviación radical del objeto orientado de la siguiente manera. En OO, los objetos se definen en términos de intrínsecos (es decir, basados ​​en un modelo que lo describe independientemente). y en base a esto se derivan sus atributos (propiedades) y métodos (comportamiento). La aplicación solo hace usode estas propiedades y comportamiento. Contrariamente a esto, en la programación orientada al sujeto, no existe ningún objeto (y modelado) en tal aislamiento. En el proceso, pero los diversos "sujetos" de los objetos proporcionan comportamientos de los objetos que están más allá del alcance y control del autor del objeto original. Piense en ello como una forma de extender varios "comportamientos definibles independientemente". "en el objeto. Creo que esto estaría más allá de definir plantillas de herencia en comparación con lo que se está discutiendo aquí.

El origen indiscutible de los términos (y concepto) proviene del documento " Programación orientada a temas: una crítica de objetos puros , William Harrison y Harold Ossher". Aquí hay otro buen artículo . Aunque personalmente creo que este es un marco teórico. No sé si hay algún idioma / implementación

Vea esto , esto y esto para más información.

2. Programación orientada a aspectos

La programación orientada a aspectos se originó a partir del concepto de " separación de oncerns ". Básicamente, extiende la programación orientada a procedimientos u objetos para asuntos que son transversales. Sobre simplificar uno puede decir que el software tiene requisitos funcionales y no funcionales . Estos requisitos transversales incluyen ejemplos como el registro, el manejo de excepciones, la sincronización de subprocesos, la administración de memoria, la optimización, etc. Estos ASPECTOS transversales deben expresarse e implementarse por separado e independientemente de cualquier otra parte funcional.
Un trabajo integral en esta área es de IBM ; básicamente cada una de esas preocupaciones olos aspectos pueden ser independientes entre sí formando un "espacio de preocupación" multidimensional. , (lee esto ).

Algunas de las buenas implementaciones prácticas de Aspect Oriented son AspectJ y AspectC ++ y muchas más . Mira esto .

3. Programación orientada a roles
A medida que evolucionamos hacia los agentes, muchas veces es necesario definir "roles" y objetivos donde las actividades exactas que el agente termina realizando dependen del entorno en el que se encuentre. Esto es análogo al entendimiento conceptual humano.

El objetivo principal es desacoplar el objetivo de la tarea de su capacidad de cooperación mediante la definición de una construcción explícita llamada procesos de cooperación . Un rol se modela como un conjunto de capacidades y un comportamiento esperado. sin embargo, estos enfoques también permiten modelar el entorno de ejecución y cómo el agente / objeto puede percibir el entorno también. Mira esto .

Hay varios marcos propuestos en la investigación para el modelado basado en roles y las implementaciones. Algunos de ellos son CUERDA , CEREBRO , ALAADIN y más .

Dipan Mehta
fuente