User Tools

Site Tools


what_is_dci

This is an old revision of the document!


Object-oriented programming was supposed to unify the perspectives of the programmer and the end user in computer code: a boon both to usability and program comprehension. While objects capture structure well, they fail to capture system behavior. DCI is a programming paradigm through which the end user mental model is more fully reflected in readable code. The vision of DCI is to become a unifying foundation for programming in both introductory and advanced programming education, and to bridge the gap between programmer and everyday user through concepts that everyone can understand.

To quote from the article Working with objects—in computer and mind, the primary goals of DCI are as follows:

MENTAL MODELS. To reflect the way different users conceptualize the objects of their world so that a program feels like an extension of its user's mind.

REASONING. To help software developers reason about system state and behavior in addition to the state and behavior of isolated objects.

READABILITY. To improve the readability of object-oriented code by giving system behavior first-class status.

REUSE. To be able to reuse old solutions for new purposes.

REVISION. To cleanly separate code for rapidly changing system behavior (what the system does) from code for slowly changing domain knowledge (what the system is), instead of combining both in one class hierarchy.

Alan Kay introduced the notion of object orientation in the early seventies. He regarded an object as a virtual computer and an object system as many computers hooked together by a very fast network. Fundamentally, a computer offers three simple services: it can store data, process data, and communicate data.

DCI achieves the above goals by organizing code according to these three primary functions:

Storing
There are two fundamental units of organization at the heart of the DCI architecture: Data, which describes system state, and Context, which describes system behavior. The “storing” function of a system is realized by the Data model, which is comprised of objects with clearly defined structure and relationships.

Processing
The Data model gives rise to the objects that interact to implement use case scenarios and other system operations. Object interaction takes place within a Context where the objects are identified by the Roles they play. Objects are temporarily extended with Role Methods while they are playing a role. Interesting business functionality often cuts across objects; consolidating this functionality in the Context makes it possible to reason about system operations without having to study the classes or prototypes of the role-playing objects.

Communicating
Object-oriented programming languages traditionally have afforded no way to capture collaborations between objects. Like the domain structure captured by object instances, these collaborations and interactions also have structure, and they form part of the end user mental model, but you can't find a cohesive representation of them in the code. At long last, this deficiency has been remedied thanks to the Interaction component of DCI. At runtime, a Context musters the objects that will play its roles and starts the flow of Interaction messages that achieves the required operation. Thus the Context provides a bird's-eye view of all the object Interactions involved in achieving a system operation.

In many ways, DCI builds on the same concepts that underly MVC (both were invented by Trygve Reenskaug). In MVC, the Model is intended to make the computer feel like an extension of the user's mind, made accessible by supporting Views and Controllers. In other words, MVC transforms the Model data into a physical form that can readily be assimilated by the user’s brain. DCI is about creating a program that faithfully represents the human mental model. The two meet when MVC is used to bridge the gap between the human mind and the model implied by the DCI-based computer system.

History and common sense argue that users can reap the full value of software only when they understand how the system works, the ideal being that stakeholders can understand critical parts of the program and that some can even write code themselves. DCI makes this goal practical and acheivable today. Store, process, and communicate: so simple that everybody can understand it, so universal that it can form the nucleus of computing in business and school.

For more information, see these introductory articles:
http://fulloo.info/Documents/CommSenseCurrentDraft.pdf
http://www.artima.com/articles/dci_vision.html

what_is_dci.1405770288.txt.gz · Last modified: 2014/07/19 11:44 by mbrowne