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 en sí, 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 documento de conferencia [1] que luego fue reconocido como uno de los tres documentos más influyentes que se presentaron en la conferencia entre 1986 y 1996. [2] Como se ilustra en ese documento, 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 aplicados a los de software. Por ejemplo, si bien todos podemos percibir que un árbol tiene una altura, un peso, una masa foliar, etc. medibles, desde el punto de vista de un pájaro, un árbol también puede tener medidas de valor relativo con fines alimentarios o de nidificación, o desde el punto de vista de un tasador de impuestos, puede tener un cierto valor imponible en un año determinado. Ni la información adicional sobre el estado del ave ni la del tasador de impuestos deben considerarse intrínsecos al árbol, sino que se suman a las percepciones del ave y del tasador de impuestos, y según el análisis de Kant, lo mismo puede ser cierto incluso de 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 amplias. En los puntos de acceso a campos o métodos , se pueden componer las 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 ave y 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 de ocultación de representación (objeto).
Relaciones
Relación con la programación orientada a aspectos
La introducción de la programación orientada a aspectos en 1997 [4] planteó preguntas 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 se abordaron en la patente sobre programación orientada a aspectos presentada en 1999 [5] en la que dos puntos emergen como diferencias características del arte anterior:
- el programa de aspecto comprende tanto a) un corte transversal que comprende un punto en la ejecución donde se va a incluir el comportamiento transversal; yb) una acción de corte transversal que comprende una pieza de implementación asociada con el corte transversal, comprendiendo la pieza de implementación un código de programa legible por computadora que implementa el comportamiento de corte transversal.
- el aspecto fuerza de forma transparente el comportamiento transversal en clases de objetos y otras entidades de software
En la visión orientada al sujeto, el corte transversal puede colocarse por separado del aspecto (sujeto) y el comportamiento no está forzado por el aspecto, sino que se rige por reglas de composición. En retrospectiva [6] también es posible distinguir la programación orientada a aspectos por su introducción y explotación del concepto de un punto de acceso 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 al campo y a la llamada al método 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 cortes de puntos 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]
Relación con el desarrollo de software orientado a aspectos
Para el cambio de milenio, estaba claro que varios grupos de investigación estaban siguiendo diferentes tecnologías que empleaban la composición o la unión de estado y función 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 patentes particulares y para 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 Orientado a Aspectos Desarrollo de software , [9] y se inició una organización y un ciclo 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.
Dimensiones
Separación multidimensional de preocupaciones, Hyper / J y el entorno de manipulación de preocupaciones
La formulación original de la programación orientada a temas la concibió deliberadamente como una tecnología de empaquetado, lo que permite ampliar el espacio de funciones y tipos de datos en cualquier dimensión. Las primeras implementaciones habían sido 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 debe proporcionar una mejor base para el análisis y la composición del software no solo en términos de su empaque, sino en términos de las diversas preocupaciones que estos paquetes abordan, se desarrolló una organización explícita del material en términos de un "matriz" dimensional en la que las preocupaciones se relacionan con las unidades de software que las implementan. Esta organización se denomina separación multidimensional de preocupaciones , y el documento que la describe [12] ha sido reconocido como el documento más influyente de la Conferencia ICSE 1999. [13]
Este nuevo concepto se implementó para componer software Java , usando el nombre Hyper / J para la herramienta. [14]
La composición y el concepto de sujeto 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 apropiados 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:
- un lenguaje de consulta con unificación para identificar puntos de unión,
- un modelo flexible de fijación estructural,
- una especificación de gráfico anidado para ordenar los elementos identificados,
- y una especificación de orden de prioridad para resolver conflictos entre reglas en conflicto.
Tanto Hyper / J como CME están disponibles, en alphaWorks [18] o sourceforge, [19] respectivamente, pero ninguno de los dos tiene soporte activo.
La programación orientada a materias como una "tercera dimensión"
El envío de métodos en la programación orientada a objetos se puede considerar 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 puede contrastarse [20] con la programación procedimental, donde el nombre de un procedimiento se resuelve directamente, o unidimensionalmente, en una subrutina, y también con la programación orientada al sujeto, donde el remitente o sujeto también es relevante para el envío, constituyendo una tercera dimensión.
Ver también
Referencias
- ^ William Harrison y Harold Ossher, Programación orientada a objetos: una crítica de los objetos puros, Actas de la conferencia de 1993 sobre sistemas, lenguajes y aplicaciones de programación orientada a objetos, septiembre de 1993
- ^ http://www.sigplan.org/Awards/OOPSLA
- ^ Harold Ossher, Peri Tarr. Composición a nivel de operación: un caso en (Join) Point, en ECOOP '98 Workshop Reader, 406–409
- ^ Kiczales, G .; Lamping, J .; Mendhekar, A .; Maeda, C .; Lopes, C .; Loingtier, JM; Irwin, J. (1997). Programación orientada a aspectos (PDF) . ECOOP '97. Actas de la XI Conferencia Europea de Programación Orientada a Objetos . LNCS . 1241 . págs. 220–242. CiteSeerX 10.1.1.115.8660 . doi : 10.1007 / BFb0053381 . ISBN 3-540-63089-9.
- ^ Kiczales; Gregor J .; Lámparas; John O .; Lopes; Cristina V .; Hugunin; James J .; Hilsdale; Erik A .; Boyapati; Chandrasekhar, Programación Orientada a Aspectos, Patente de los Estados Unidos 6.467.086, 15 de octubre de 2002
- ^ William Harrison. De-construyendo y reconstruyendo Aspect-Orientation, Seventh Annual Workshop on Foundations of Aspect Languages, Bruselas, Bélgica, 1 de abril de 2008, editado por Gary T. Leavens, ACM Digital Library, 2008, págs. 43-50
- ^ Friedrich Steimann. El paradójico éxito de la programación orientada a aspectos, Actas de la 21a conferencia anual ACM SIGPLAN sobre sistemas, lenguajes y aplicaciones de programación orientada a objetos, Portland, Oregón, EE. UU., 2006, págs. 481 - 497
- ^ Comunicaciones de la ACM, vol. 44, núm. 10, octubre de 1994, págs. 28-95
- ^ http://aosd.net/
- ^ Harold Ossher, Matthew Kaplan, William Harrison, Alexander Katz y Vincent Kruskal, Reglas de composición orientadas al sujeto, Actas de la Conferencia de 1995 sobre sistemas, lenguajes y aplicaciones de programación orientada a objetos, octubre de 1995
- ^ Hafedh Mili, William Harrison, Harold Ossher, Apoyo a la programación orientada al sujeto en Smalltalk, Actas de TOOLS USA 96, agosto de 1996
- ^ Harold Ossher, Peri Tarr, William Harrison, Stanley Sutton, N Degrees of Separation: Multi-Dimensional Separation of Concerns, Proceedings of 1999 International Conference on Software Engineering, mayo de 1999
- ^ http://www.sigsoft.org/awards/mostInfPapAwd.htm
- ^ Harold Ossher, Peri Tarr. Hyper / J: Separación multidimensional de preocupaciones para Java, Actas de la 23a Conferencia Internacional sobre Ingeniería de Software, Toronto, Ontario, Canadá, 2001, Páginas: 821 - 822
- ^ William Chung, William Harrison, Vincent Kruskal, Harold Ossher, Stanley M. Sutton, Jr., Peri Tarr, Matthew Chapman, Andrew Clement, Helen Hawkins, Sian January. El entorno de manipulación de preocupaciones, Actas de la 27a conferencia internacional sobre ingeniería de software, tabla de contenido, St. Louis, MO, EE. UU., 2005
- ^ William Harrison, Harold Ossher, Stanley Sutton, Peri Tarr. Modelado de inquietudes en el entorno de manipulación de inquietudes, Actas del taller de 2005 sobre modelado y análisis de inquietudes en software, St. Louis, Missouri, 2005
- ^ William Harrison, Harold Ossher, Peri Tarr. Composición general de artefactos de software, Actas del taller de composición de software de 2006, marzo de 2006, Springer-Verlag, LNCS 4089, páginas 194-210
- ^ http://www.alphaworks.ibm.com/tech/hyperj
- ^ http://sourceforge.net/projects/cme/
- ^ Revista de tecnología de objetos: programación orientada al contexto
enlaces externos
- Características distribuidas de la programación orientada al sujeto: una evaluación con los paradigmas orientados al proceso y a los objetos
- alphaWorks: HyperJ
- Proyectos de tecnología archivados de Eclipse
- Amethyst: una biblioteca de JavaScript para programación orientada a temas