Referring to the rest of your post I dont agree that we need to separate Data from Code,
I don't know of anybody who wants to separate data and code.�� May be
you are thinking about DCI without having grokked it.
Smalltalk sees an object as an entity that has a unique and
immutable identity and that encapsulates state and behavior.
DCI builds on this definition and has a powerful separation of
concerns:
An object seen in isolation is specified by a class.
This is observing the object from within its encapsulation
boundary.
A class says everything about how an object is constructed and
nothing about how it collaborates with others.
A DCI Data object is an object that does not collaborate with
objects in its environment.
An ensemble of objects that collaborate to achieve a certain
goal is specified by a DCI Context.
The observation point is in the space between the objects.
The objects are observed from outside their encapsulation
boundaries,
The message flow is visible and can be reasoned about.
A DCI Context says everything about how objects collaborate to
achieve a common goal
and nothing about how they are constructed.
The Class and the Context are orthogonal concepts and form the basis
of my mental model of an object computer.