User Tools

Site Tools


what_is_dci

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

what_is_dci [2014/07/19 11:44]
mbrowne created
what_is_dci [2015/04/05 13:47] (current)
mbrowne
Line 1: Line 1:
-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.+====== What is DCI? ======
  
-To quote from the article [[http://fulloo.info/Documents/CommSenseCurrentDraft.pdf|Working with objects—in computer and mind]], the primary goals of DCI are as follows:+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 (Data-Context-Interaction) 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 [[http://folk.uio.no/trygver/2015/​CommSense-1.14.1.pdf|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. 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.
Line 15: Line 17:
 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. 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:+DCI achieves ​these goals by considering ​three fundamental aspects: 
 + 
 +**Data**\\ 
 +The “storing” function of a system is realized by the //Data// model, which is comprised of objects representing the structure and relationships of a domain. 
 + 
 +**Context**\\ 
 +The Data model gives rise to objects that will collaborate 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. The Context orchestrates which objects play which Roles. 
 + 
 +**Interaction**\\ 
 +At runtime, the environment will trigger the Context to start the //​Interactions//​ between the role-playing objects. These Role Players will send messages to each other in order to fulfill the system operation. Runtime parameters might vary the topology of interactions within a Context, e.g. if a use case has various scenarios. The interactions form a structure that closely reflects our human mental model of the behavior of our domain.
  
-**Storing**\\ +In traditional class-based programming,​ “storing” and “processing” code is placed together in the same class, and the code for “communicating” (communication between objects) is often scattered across many different classes. ​DCI is more truly “object-oriented”objects still contain both data and behavior at runtimebut DCI avoids the often incorrect assumption that system behavior ​shares the same structure as the data modelThis is accomplished ​by clearly delineating ​the storing, processing, and communicating capabilities in the code, allowing the programmer to orchestrate how these elements will combine to form //objects at runtime// and their interactions ​with each other.
-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**\\ +Encoding behavior as first class citizen ​in the Context ​firmly consolidates our ability ​to reason about what the code will do at runtime ​without having to study a plethora of classes or prototypes of role-playing objects. ​This has an array of advantages:
-The Data model gives rise to the objects that interact to implement use case scenarios and other system operations. Object interaction takes place within ​**//​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**\\ +DCI allows: 
-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.+  ​Programmers and other stakeholders ​to more easily synchronize their mental model of the domain 
 +  * New programmers to more easily understand what a program is supposed ​to accomplish 
 +  ​Current programmers on a DCI project to more easily maintain and debug the code base 
 +  * Managers ​and end users to more easily review domain behavior ​in Contexts together with programmers
  
 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. 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.+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 achievable ​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:\\ For more information,​ see these introductory articles:\\
-http://fulloo.info/Documents/CommSenseCurrentDraft.pdf\\+http://folk.uio.no/trygver/2015/​CommSense-1.14.1.pdf\\
 http://​www.artima.com/​articles/​dci_vision.html http://​www.artima.com/​articles/​dci_vision.html
what_is_dci.1405770288.txt.gz · Last modified: 2014/07/19 11:44 by mbrowne