|WikiProject Computer science||(Rated Start-class, Low-importance)|
|WikiProject Java||(Rated Start-class, Low-importance)|
Don't know if this is a copyvio or not, as I didn't check it out, but I do know it was copied from the IBM site, at least much of it. Zuiram 00:53, 27 April 2007 (UTC)
Deleted then recreated
This article was listed at WP:CP as a copyright infringement of http://www.research.ibm.com/sop/sopoverv.htm, an IBM page that is _not_ part of FOLDOC. I investigated and found that all versions, going back to the article's creation and first edit, were plagiarized from IBM. I had no choice but to delete the article. I created a new stub with the actual text from the FOLDOC article on subject-oriented programming instead of IBM's text. Thanks. KrakatoaKatie 04:32, 30 April 2008 (UTC)
But what does it mean?
It may be just be me, but I read the stub and while I know reasonably well what object oriented programming does, I now know nothing more about subject oriented programming. The stub is nice marketing material in its wooly wordsalad-ness, but doesn't seem to contain actual information. Anyone? 126.96.36.199 (talk) 15:41, 30 April 2008 (UTC)
- Indeed, the article provides very little insight, so I didn't get much out of it myself (and I have a grad. degree in CS, albeit not in PL). For starters, what is a subject in this paradigm? VG ☎ 13:36, 15 October 2008 (UTC)
How is this different from Aspect Oriented Programming (AOP)
That's my primary question. Is Subject Oriented Programming (SOP) an IBM term while AOP is from PARC? How are HyperJ and AspectJ different? I'm sure there are differences -- this is a young field of research and even better known terms like Aspect aren't very well defined. The IBM pages don't even mention AOP.
I also understand that IBM wants to use and popularize its own words, if only for trademark purposes.
So I guess we need more abstract examples of what a Subject is, and how it's different from an Aspect. And also some less abstract examples of how a Subject is expressed in HyperJ, contrasted with AspectJ.
http://www.ccs.neu.edu/research/demeter/SOP/ provides some answers, although it still sounds like AOP. Here are some excerpts from that paper:
Adaptive Programming (AP) vs SOP: The unique feature which distinguishes AP from SOP is that in AP many of the join points are left implicit and are only specified explicitly if they are important. For example a traversal strategy "from A to B" can define implicitly any number of join points for the traversal methods which bring us from A to B. If we want to print tracing information during the traversal, we would write a visitor like "before * this.print()" which would exercise all the join points (* means: all classes in the traversal scope). But explicitly mentioned are only source A and target B.
What's a subject: A subject is a collection of class fragments whose class graph models its domain in its own subjective way. Subject composition combines subjects to produce new subjects combining the functionality of the sub-subjects.
SOP is better at isolation (than the comparative implementation of AP): A subject has an affinity to an adaptive program. While a subject deals with class fragments, an adaptive program deals with class-valued variables which are mapped later onto class fragments automatically generating the necessary glue code. While a subject has to deal with all involved class fragments explicitly, an adaptive program only talks about the important class-valued variables. After the mapping to classes, code will be generated automatically for the less important classes based on the information in the traversal strategies and the class graph.
Here's another take on the contrast between SOP and AOP (from http://www.cs.umd.edu/class/spring2003/cmsc838p/Design/aop.pdf):
8.4 Subjective Programming
A natural question to ask is whether subjective programming  is AOP or vice versa. We believe that AOP and subjective programming are different in important ways. Analogously to the way object-oriented programming supports automatic selection among methods for the same message from different classes, subjective programming supports automatic combination of methods for a given message from different subjects. In both cases, the methods involved are components in the AOP sense, since they can be well localized in a generalized procedure. It is even possible to program in either an object oriented style or a subjective style on top of an ordinary procedural language, without significant tangling. The same is not true of AOP. Thus, while the aspects of AOP tend to be about properties that affect the performance or semantics of components, the subjects of subjective programming tend to be additional features added onto other subjects. We believe that subjective programming is complementary to, and compatible with, AOP.
Having encountered the stub and looked at the above discussion, I was compelled to try to write a more complete and annotated entry on the subject. I do not believe my doing so will cause offense to earlier editors, and have attempted to cite published material at any point that may seem questionable. I hope we can make further improvements from this base.CSProfBill (talk) 14:26, 15 September 2009 (UTC)
Hyper/J tool seems to be dead?
I tried to get the mentioned Hyper/J tool, but the download link in the referenced paper is outdated. The website was (re)moved. I found the project website, but the download link is the same. I the next step I wrote an eMail to the address, which is stated on the project website and in the paper (Peri Tarr). Unfortunately the eMail could not be delivered to Tarr. Thus, i do not see a reason, why we should refernce a tool, which is not available and verifiable. I prefer deleting the following sentence because it is not helpful any more:
"This new concept was implemented for composing Java software, using the name Hyper/J for the tool"
Additional languages for / origins of subject-oriented programming
It would be fitting to add mention of the "Us" language to this article, which was created by the creators of "Self" in an attempt to add subjectiveness to the language. The paper for this language can be found here: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.56.7535&rep=rep1&type=pdf Self, itself, was created in an attempt to allow programming in terms of individual objects, rather than in terms of CLASSES of objects; and thus the "subjective" additions to the language (called "Us") is a natural progression, and the Self language could be seen as one of the roots of the idea of subjective programming.
For more context, watch "Reflections on Reflection": Jim Coplien talks about coding behavior in terms of "roles", which are identifiers which associate contextualized methods with an object. Binding a role to a particular object (of any type) effectively binds the role-methods to that object, but only as it is accessed via the role identifier within a given context. A commenter in the video claims that this is the same as the subjective paradigm, which was already explored/achieved in the "Us" language. (That's more context for "Us"; but also this link establishes the DCI paradigm that Jim presents as being in the realm of (or at least related to) subject-oriented programming, and thus DCI should also be mentioned here). The video can be found here: http://www.infoq.com/presentations/Reflection-OOP-Social — Preceding unsigned comment added by 188.8.131.52 (talk) 06:44, 14 November 2015 (UTC)