En informática , la programación orientada a sujetos es un paradigma de software orientado a objetos en el que el estado (campos) y el comportamiento (métodos) de los objetos no se consideran intrínsecos a los objetos mismos, sino que son proporcionados por diversas percepciones subjetivas ("sujetos") de los objetos. El término y los conceptos se publicaron por primera vez en septiembre de 1993 en un artículo de conferencia [1] que luego fue reconocido como uno de los tres artículos más influyentes presentados en la conferencia entre 1986 y 1996. [2] Como se ilustra en ese artículo, Se hace una analogía con el contraste entre las visiones filosóficas de Platón y Kant con respecto a las características de los objetos "reales", pero aplicadas a los de software. Por ejemplo, si bien todos podemos percibir que un árbol tiene una altura, peso, masa foliar, etc. mensurables, desde el punto de vista de un pájaro, un árbol también puede tener medidas de valor relativo para fines alimentarios o de anidación, o desde el punto de vista de un tasador fiscal, puede tener un determinado valor imponible en un año determinado. Ni la información adicional sobre el estado del pájaro ni la del tasador de impuestos necesitan considerarse intrínsecas al árbol, sino que son añadidas por las percepciones del pájaro y del tasador de impuestos, y según el análisis de Kant, lo mismo puede ser cierto incluso para las características que pensamos. como intrínseco.
La programación orientada a materias aboga por la organización de las clases que describen objetos en "materias", que pueden componerse para formar materias más grandes. En los puntos de acceso a campos o métodos , se pueden componer contribuciones de varios sujetos. Estos puntos se caracterizaron como los puntos de unión [3] de los sujetos. Por ejemplo, si se tala un árbol, los métodos involucrados pueden necesitar unir el comportamiento del pájaro y de los sujetos del tasador de impuestos con el del propio árbol. Por lo tanto, es fundamentalmente una visión de la naturaleza compositiva del desarrollo de software, en contraposición a la naturaleza algorítmica (procedimental) o que oculta la representación (objeto).
La introducción de la programación orientada a aspectos en 1997 [4] planteó dudas sobre su relación con la programación orientada a materias y sobre la diferencia entre materias y aspectos. Estas preguntas estuvieron sin respuesta durante algún tiempo, pero fueron abordadas en la patente sobre programación orientada a aspectos presentada en 1999 [5] en la que dos puntos emergen como diferencias características con respecto al arte anterior:
En la visión orientada al sujeto, el corte transversal puede colocarse separado del aspecto (sujeto) y el comportamiento no está obligado por el aspecto, sino que se rige por reglas de composición. En retrospectiva [6] también hace posible distinguir la programación orientada a aspectos por su introducción y explotación del concepto de un punto de corte similar a una consulta para imponer externamente los puntos de unión utilizados por los aspectos de manera general.
En la presentación de la programación orientada a temas, los puntos de unión se restringieron deliberadamente al acceso a campos y llamadas a métodos con el argumento de que esos eran los puntos en los que se diseñaron marcos bien diseñados para admitir una extensión funcional. El uso de puntos de corte impuestos externamente es una capacidad lingüística importante, pero sigue siendo una de las características más controvertidas de la programación orientada a aspectos. [7]
Con el cambio de milenio, estaba claro que varios grupos de investigación estaban siguiendo diferentes tecnologías que empleaban la composición o unión de estados y funciones empaquetados por separado para formar objetos. [8] Para distinguir el campo de interés común de la Programación Orientada a Aspectos con sus definiciones de patente particulares y enfatizar que la tecnología de composición se ocupa de algo más que la fase de codificación del desarrollo de software, estas tecnologías se organizaron juntas bajo el término Orientada a Aspectos. Desarrollo de Software , [9] y se inició una organización y una serie de conferencias internacionales sobre el tema. Al igual que la programación orientada a aspectos, la programación orientada a temas, los filtros de composición, la programación orientada a características y los métodos adaptativos se consideran enfoques de desarrollo de software orientados a aspectos.
La formulación original de la programación orientada a temas la concibió deliberadamente como una tecnología de empaquetado, que permitía ampliar el espacio de funciones y tipos de datos en cualquier dimensión. Las primeras implementaciones fueron para C++, [10] y Smalltalk. [11] Estas implementaciones explotaron los conceptos de etiquetas de software y reglas de composición para describir la unión de sujetos.
Para abordar la preocupación de que se debería proporcionar una mejor base para el análisis y la composición del software, no sólo en términos de su empaquetado sino en términos de las diversas preocupaciones que estos paquetes abordaban, se desarrolló una organización explícita del material en términos de una multi- "matriz" dimensional en la que se relacionan las preocupaciones con las unidades de software que las implementan. Esta organización se llama separación multidimensional de preocupaciones , y el artículo que la describe [12] ha sido reconocido como el artículo más influyente de la Conferencia ICSE de 1999. [13]
Este nuevo concepto se implementó para componer software Java , utilizando el nombre Hyper/J para la herramienta. [14]
La composición y el concepto de tema se pueden aplicar a artefactos de software que no tienen semántica ejecutable, como especificaciones de requisitos o documentación. Se ha descrito un vehículo de investigación para Eclipse , llamado Concern Manipulation Environment (CME), [15] en el que se aplican herramientas de consulta, análisis, modelado [16] y composición a artefactos en cualquier lenguaje o representación, mediante el uso de adaptadores enchufables adecuados para manipular la representación.
Se desarrolló un sucesor del motor de composición Hyper/J [17] como parte de CME, que utiliza un enfoque general para los diversos elementos de un motor de composición:
Tanto Hyper/J como CME están disponibles en alphaWorks [18] o sourceforge, [19] respectivamente, pero ninguno cuenta con soporte activo.
El envío de métodos en la programación orientada a objetos puede considerarse como "bidimensional" en el sentido de que el código ejecutado depende tanto del nombre del método como del objeto en cuestión. Esto se puede contrastar [20] con la programación de procedimientos, donde el nombre de un procedimiento se resuelve directamente, o unidimensionalmente, en una subrutina, y también con la programación orientada a sujetos, donde el remitente o el sujeto también es relevante para el envío, constituyendo una tercera dimensión.