The introduction of aspect-oriented programming in 19974 raised questions about its relationship to subject-oriented programming, and about the difference between subjects and aspects. These questions were unanswered for some time, but were addressed in the patent on Aspect-oriented programming filed in 19995 in which two points emerge as characteristic differences from earlier art:
In the subject-oriented view, the cross-cut may be placed separately from the aspect (subject) and the behavior is not forced by the aspect, but governed by rules of composition. Hindsight6 makes it also possible to distinguish aspect-oriented programming by its introduction and exploitation of the concept of a query-like pointcut to externally impose the join-points used by aspects in general ways.
In the presentation of subject-oriented programming, the join-points were deliberately restricted to field access and method call on the grounds that those were the points at which well-designed frameworks were designed to admit functional extension. The use of externally imposed pointcuts is an important linguistic capability, but remains one of the most controversial features of aspect-oriented programming.7
By the turn of the millennium, it was clear that a number of research groups were pursuing different technologies that employed the composition or attachment of separately packaged state and function to form objects.8 To distinguish the common field of interest from Aspect-Oriented Programming with its particular patent definitions and to emphasize that the compositional technology deals with more than just the coding phase of software development, these technologies were organized together under the term Aspect-Oriented Software Development,9 and an organization and series on international conferences begun on the subject. Like aspect-oriented programming, subject-oriented programming, composition filters, feature-oriented programming and adaptive methods are considered to be aspect-oriented software development approaches.
The original formulation of subject-oriented programming deliberately envisioned it as a packaging technology – allowing the space of functions and data types to be extended in either dimension. The first implementations had been for C++,10 and Smalltalk.11 These implementations exploited the concepts of software labels and composition rules to describe the joining of subjects.
To address the concern that a better foundation should be provided for the analysis and composition of software not just in terms of its packaging but in terms of the various concerns these packages addressed, an explicit organization of the material was developed in terms of a multi-dimensional "matrix" in which concerns are related to the software units that implement them. This organization is called multi-dimensional separation of concerns, and the paper describing it12 has been recognized as the most influential paper of the ICSE 1999 Conference.13
This new concept was implemented for composing Java software, using the name Hyper/J for the tool.14
Composition and the concept of subject can be applied to software artifacts that have no executable semantics, like requirement specifications or documentation. A research vehicle for Eclipse, called the Concern Manipulation Environment (CME), has been described15 in which tools for query, analysis, modelling,16 and composition are applied to artifacts in any language or representation, through the use of appropriate plug-in adapters to manipulate the representation.
A successor to the Hyper/J composition engine17 was developed as part of CME which uses a general approach for the several elements of a composition engine:
Both Hyper/J and CME are available, from alphaWorks18 or sourceforge,19 respectively, but neither is actively supported.
Method dispatch in object oriented programming can be thought of as "two dimensional" in the sense that the code executed depends on both the method name and the object in question. This can be contrasted20 with procedural programming, where a procedure name resolves directly, or one dimensionally, onto a subroutine, and also to subject oriented programming, where the sender or subject is also relevant to dispatch, constituting a third dimension.
William Harrison and Harold Ossher, Subject-Oriented Programming - A Critique of Pure Objects, Proceedings of 1993 Conference on Object-Oriented Programming Systems, Languages, and Applications, September 1993 ↩
"Most Influential OOPSLA Paper Award". www.sigplan.org. https://www.sigplan.org/Awards/OOPSLA/ ↩
Harold Ossher, Peri Tarr. Operation-Level Composition: A Case in (Join) Point, in ECOOP '98 Workshop Reader, 406–409 ↩
Kiczales, G.; Lamping, J.; Mendhekar, A.; Maeda, C.; Lopes, C.; Loingtier, J. M.; Irwin, J. (1997). Aspect-oriented programming (PDF). ECOOP'97. Proceedings of the 11th European Conference on Object-Oriented Programming. LNCS. Vol. 1241. pp. 220–242. CiteSeerX 10.1.1.115.8660. doi:10.1007/BFb0053381. ISBN 3-540-63089-9. 3-540-63089-9 ↩
Kiczales; Gregor J.; Lamping; John O.; Lopes; Cristina V.; Hugunin; James J.; Hilsdale; Erik A.; Boyapati; Chandrasekhar, Aspect Oriented Programming, United States Patent 6,467,086, October 15, 2002 ↩
William Harrison. De-constructing and Re-constructing Aspect-Orientation, Seventh Annual Workshop on Foundations of Aspect Languages, Brussels, Belgium, 1 April 2008, edited by Gary T. Leavens, ACM Digital Library, 2008, pp. 43-50 ↩
Friedrich Steimann. The paradoxical success of aspect-oriented programming, Proceedings of the 21st annual ACM SIGPLAN conference on Object-oriented programming systems, languages, and applications, Portland, Oregon, USA, 2006, pp. 481 - 497 ↩
Communications of the ACM, Vol. 44, No. 10, October 1994, pp. 28-95 ↩
"Home". AOSD.net. https://aosd.net/ ↩
Harold Ossher, Matthew Kaplan, William Harrison, Alexander Katz and Vincent Kruskal, Subject-Oriented Composition Rules, Proceedings of 1995 Conference on Object-Oriented Programming Systems, Languages, and Applications, October 1995 ↩
Hafedh Mili, William Harrison, Harold Ossher, Supporting Subject-Oriented Programming in Smalltalk, Proceedings of TOOLS USA 96, August 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, May 1999 ↩
"SIGSOFT - ACM Special Interest Group on Software Engineering". http://www.sigsoft.org/awards/mostInfPapAwd.htm ↩
Harold Ossher, Peri Tarr. Hyper/J: Multi-dimensional separation of concerns for Java, Proceedings of the 23rd International Conference on Software Engineering, Toronto, Ontario, Canada, 2001, Pages: 821 - 822 ↩
William Chung, William Harrison, Vincent Kruskal, Harold Ossher, Stanley M. Sutton, Jr., Peri Tarr, Matthew Chapman, Andrew Clement, Helen Hawkins, Sian January. The concern manipulation environment, Proceedings of the 27th international conference on Software engineering table of contents, St. Louis, MO, USA, 2005 ↩
William Harrison, Harold Ossher, Stanley Sutton, Peri Tarr. Concern modeling in the concern manipulation environment, Proceedings of the 2005 workshop on Modeling and analysis of concerns in software, St. Louis, Missouri, 2005 ↩
William Harrison, Harold Ossher, Peri Tarr. General Composition of Software Artifacts, Proceedings of Software Composition Workshop 2006, March 2006, Springer-Verlag, LNCS 4089, pages 194-210 ↩
"Legacy Communities - IBM Community". http://www.alphaworks.ibm.com/tech/hyperj ↩
"Concern Manipulation Environment (CME)". 24 April 2015. http://sourceforge.net/projects/cme/ ↩
"Journal of Object Technology: Context Oriented Programming". http://www.jot.fm/issues/issue_2008_03/article4/ ↩