Object interaction (DCI)
Last updated at 5:42 pm UTC on 2 April 2017
Thu, May 22, 2014 at 10:27 AM
Reply-To: The general-purpose Squeak developers list
To: The general-purpose Squeak developers list
I agree that we need to open new opportunities while we retain what we have learned to like and appreciate with Smalltalk over the past 30 years. Object orientation as it is realized in the Squeak/Pharo runtimes have a lot more to offer than we currently utilize. The Squeak/Pharo runtimes support objects and object interaction. Objects are specified by classes, object interaction is often specified by an ensamble of methods that are distributed among several classes.
The essence of object orientation is that objects interact to achieve a goal. This interaction can be observed by making a trace of the runtime flow of messages through the system. It is sometimes hard to get a picture of this interaction by reading the class codes. Jim Coplien (Cope) and I are working on a new, two-dimensional programming paradigm where the interaction is explicitly specified in a new dimension. The paradigm is called DCI - Data, Context, and Interaction. In the Data projection, what-the-system-is, objects are observed from their insides and system state is specified by classes. In the new Context projection, what-the-system-does, objects are observed from their outsides. System behavior in the form of object interaction is here visible and tangible. Participating objects are named according to the role they play in the interaction. The behavior that an object needs to sustain its role is added to the object while it is needed.
DCI is non-intrusive in that it does not put any constraints on regular Squeak programming. We expect, however, that DCI will be found useful and that new projects will have simpler classes and explicit code for system behavior. I hope to get an opportunity to present DCI at ESUG in August.
Trygve Reenskaug mailto: email@example.com
Morgedalsvn. 5A http://folk.uio.no/trygver/
N-0378 Oslo http://fullOO.info
Norway Tel: (+47) 22 49 57 27