Data, context and interaction: Difference between revisions

Content deleted Content added
Jcoplien (talk | contribs)
Jcoplien (talk | contribs)
Line 55:
 
==History==
DCI arose largely as an outgrowth of Trygve Reenskaug's work on role-based computation. <ref>Trygve Reenskaug. Working with Objects: The OOram Software Engineering Method. Prentice-Hall, 1995.</ref>.
Multi-paradigm, role modelling.
 
Many key advances in the past twenty years of object-orientation exhibit components of DCI. While no one of them fully provides the DCI computational model, the overlap suggests that the problems addressed by DCI are longstanding and fundamental.
* [[Mix-ins]] were a way of encapsulating code for specific what-the-system-does functionality in closed form; however, they lacked mechanisms for linking together multiple mix-ins into a unit at the level of a use case. Mix-ins are very close to the concept of Role in DCI.
* [[Multiple dispatch]] was an early attempt to more fully separate an algorithm from the objects that were involved in its execution, but it lacked DCI's separation of common recurring algorithms from the code fragments that could individually be localized to individual objects. DCI conceptually leads to broader re-use of a single algorithm in closed form across many sets of objects of widely heterogeneous types. DCI's Context object acts like an explicit, intelligence dispatcher that is analogous to the dispatching mechanisms of languages with multiple dispatch.
* True object-oriented programming languages like [[self programming language|'''self''']]<ref>Self, the power of simplicity. http://research.sun.com/self/papers/self-power.html</ref> tried to break down the dichotomy between the classful programming world and the objectful exeuction world. While this helped programmers focus on run-time objects, it sacrificed code-level knowledge about the relationships between them, as can be found in DCI Contexts or in the static relationships between role methods.
* Dependency injection <ref>Jakob Jenkov, ''Dependency injection''. http://tutorials.jenkov.com/dependency-injection/index.html</ref>is a longstanding approach to change the functionality of an object at run time by allowing it to "outsource" some of its execution to an external object that can be re-bound at will. Most implementations of dependency injection lead to the [[self schizophrenia]] problem, which implementations of DCI address properly.
* Multi-paradigm, role modelling.design
* [[Aspect-oriented programming]] (AOP) is perhaps the closest historic relative to DCI. However, most use of Aspects is closely tied to the programmer perspective rather than to the end user mental model of use cases. Further, without strong tool support, Aspects usually make code less readable from the perspective of understanding what actually goes on at a given [[pointcut]]. Think of DCI as a way of taking a large [[Advice_in_aspect-oriented_programming|advice]] and allowing parts of it to be injected into a number of regularized [[pointcuts]]. Whereas AOP...
 
Other recent similar systems...
 
==References==