Content deleted Content added
m Dated {{Empty section}}{{Cleanup}}{{Expand}} x 3. (Build J/) |
m WP:CHECKWIKI error 61 fixes + general fixes using AWB (8037) |
||
Line 1:
{{Cleanup|reason=I added the empty Examples section to the top when I don't really know where it properly belongs. I wish I could have just used <nowiki>{{Expand|reason=needs examples|date=March 2012}}</nowiki> instead, but the template has been semi-deleted.|date=March 2012}}
{{Programming paradigms}}
In [[computing]], '''Subject-Oriented Programming''' is an [[Object-oriented programming|object-oriented]] [[programming paradigm
Subject-oriented programming advocates the organization of the [[Class (computer science)|classes]] that describe [[Object (computer science)|objects]] into “subjects”, which may be composed to form larger subjects. At points of access to fields or [[Method (computer science)|methods]], several subjects’ contributions may be composed. These points were characterized as the [[join-point]]s<ref>Harold Ossher , Peri Tarr. Operation-Level Composition: A Case in (Join) Point, in ECOOP ’98 Workshop Reader, 406–409</ref> of the subjects. For example, if a tree is cut-down, the methods involved may need to join behavior in the bird and tax-assessor’s subjects with that of the tree’s own. It is therefore fundamentally a view of the compositional nature of software development, as opposed to the algorithmic (procedural) or representation-hiding (object) nature.
Line 11:
==Relationship to aspect-oriented programming==
The introduction of [[aspect-oriented programming]] in 1997,<ref>Kiczales, Gregor; John Lamping, Anurag Mendhekar, Chris Maeda, Cristina Lopes, Jean-Marc Loingtier, and John Irwin (1997). "Aspect-Oriented Programming". Proceedings of the European Conference on Object-Oriented Programming, vol.1241. pp. 220–242.</ref>
* the aspect program comprises both a) a cross-cut that comprises a point in the execution where cross-cutting behavior is to be included; and b) a cross-cut action comprising a piece of implementation associated with the cross-cut, the piece of implementation comprising computer readable program code that implements the cross-cutting behavior.
* the aspect transparently forces the cross-cutting behavior on object classes and other software entities
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 by governed by rules of composition. Hindsight<ref>William Harrison. De-constructing and Re-constructing Aspect-Orientation, Seventh Annual Workshop on Foundations of Aspect Languages, Brussels, Belgium, 1 April
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.<ref>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</ref>
==Relationship to aspect-oriented software development==
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.<ref>Communications of the ACM, Vol. 44, No. 10, October 1994, pp. 28-95</ref>
==Multi-dimensional separation of concerns, Hyper/J, and the Concern Manipulation Environment==
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++,<ref>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
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 it<ref>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
This new concept was implemented for composing [[Java (programming language)|Java]] software, using the name '''Hyper/J''' for the tool.<ref>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
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 (software)|Eclipse]], called the '''Concern Manipulation Environment''' (CME), has been described<ref>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</ref> in which tools for query, analysis, modelling,<ref>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</ref>
A successor to the Hyper/J composition engine<ref>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</ref> was developed as part of CME which uses a general approach for the several elements of a composition engine:
Line 39:
* and a priority ordering specification to resolve conflicts among conflicting rules.
Both Hyper/J and CME are available, from alphaWorks<ref>http://www.alphaworks.ibm.com/tech/hyperj</ref> or sourceforge,<ref>http://sourceforge.net/projects/cme/</ref>
==See also==
|