Subject-oriented programming: Difference between revisions

Content deleted Content added
m Structured by grouping headings
Multi-dimensional separation of concerns, Hyper/J, and the Concern Manipulation Environment: added anchor for "Multi-dimensional separation of concerns"; MOS:NOBOLD (the term doesn't redirect here); MOS:STRAIGHT quotes
Line 1:
{{Programming paradigms}}
In [[computing]], '''subject-oriented programming''' is an [[Object-oriented programming|object-oriented]] [[programming paradigm|software paradigm]] in which the state (fields) and behavior (methods) of objects are not seen as intrinsic to the objects themselves, but are provided by various subjective perceptions (“subjects”"subjects") of the objects. The term and concepts were first published in September 1993 in a conference paper<ref>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</ref> which was later recognized as being one of the three most influential papers to be presented at the conference between 1986 and 1996.<ref>http://www.sigplan.org/Awards/OOPSLA</ref> As illustrated in that paper, an analogy is made with the contrast between the philosophical views of [[Plato]] and [[Immanuel Kant|Kant]] with respect to the characteristics of “real”"real" objects, but applied to software ones. For example, while we may all perceive a tree as having a measurable height, weight, leaf-mass, etc., from the point of view of a bird, a tree may also have measures of relative value for food or nesting purposes, or from the point of view of a tax-assessor, it may have a certain taxable value in a given year. Neither the bird’sbird's nor the tax-assessor’sassessor's additional state information need be seen as intrinsic to the tree, but are added by the perceptions of the bird and tax-assessor, and from Kant’sKant's analysis, the same may be true even of characteristics we think of as intrinsic.
 
Subject-oriented programming advocates the organization of the [[Class (computer science)|classes]] that describe [[Object (computer science)|objects]] into “subjects”"subjects", which may be composed to form larger subjects. At points of access to fields or [[Method (computer science)|methods]], several subjects’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'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’sassessor's subjects with that of the tree’stree'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.
 
==Relationships==
Line 20:
 
==Dimensions==
==={{anchor|Multi-dimensional separation of concerns}}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</ref> and Smalltalk.<ref>Hafedh Mili, William Harrison, Harold Ossher, Supporting Subject-Oriented Programming in Smalltalk, Proceedings of TOOLS USA 96, August 1996</ref> 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”"matrix" in which concerns are related to the software units that implement them. This organization is called '''Multi{{em|multi-Dimensionaldimensional Separationseparation of Concerns'''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</ref> has been recognized as the most influential paper of the ICSE 1999 Conference.<ref>http://www.sigsoft.org/awards/mostInfPapAwd.htm</ref>
 
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</ref>