The Model Driven Software Network

Raise your level of abstraction

Are there two different abstract hierarchies to software?

Based on some recent discussions and thinking* around the concept of abstraction, I had a brief summary, it is including three key points as follows (see the figure):

  1. to examine abstract levels from an hierarchical perspective. I think, all the abstractions in the same hierarchy should be traced to an original basis (source), call it the base of an abstract hierarchy.
  2. a software application is a union of two kind of abstractions which are from two different sources: the outside world and the computer world (inside), these two kind of abstractions should have two different abstract hierarchies which have different bases.
  3. software is not an abstraction of real world or a problem domain but, it has/processes two kind of abstractions from the outside world and the computer itself.

In addition, the abstractions may be appeared as some models that defined explicitly, or in some other forms.

Do you agree these opinions?


* More explanation see my essay Abstraction (III) Make Long Story Short, and the part I, part II. Some discussion on this site at Is Software Abstraction of Real World? and Note on Languages and Abstraction.

Views: 223

Reply to This

Replies to This Discussion

Yes, I agree.

Let me add some thoughts to your observation.  I think there's a difference in both abstractions.

The App Domain abstractions are primarily rooted in the runtime of the application: given a common business software, it is linked in various ways to the real world to be useful (it's a different story with e.g. simulation software). These links necessarily result in a "mirror" of the real world in the software. This mirror can be considered as the software's world view. Naturally (since it does not and cannot reflect the complete world) it is an abstraction.

In contrast, the abstractions for IT domain are only used by us programmers to be able to handle the software. At runtime (after all transformers and compilers did their work), only bits & bytes are left, these are not abstract anymore. It's a good question if languages for interpreters are to be considered abstractions - I tend to say "no", since from the persepctive of the interpreter there's not really something abstract, but just precise instructions, and the abstract meaning is still for us humans, but one may disagree here.

Now what about ontological models? Aren't they used with software, too? I think yes, they do, but they play different roles, which have to be carefully distinguished. One role is: they discribe the real world. Another role is, they can be used to describe a software. But this is only because it happens to be economical to have more or less isomorphic relations between ontological model and system model (occam's razor, easiness of adoption), since the system model is (obviously) correlated to that mentioned "runtime mirror world view" which in turn is (obviously) correlated to the real world.

“software's world view”, this is a good metaphor. Software needs to know some things for the job, and the things in software would be appeared only in certain abstract form. And you referred another important aspect: the timeliness (such as run-time, design-time and so on, for abstractions (models)).

For the abstractions from IT domain. It needs more discussion. Maybe it is some different to your view, I tent that, the abstractions from IT domain are existing at run-time, as well as the abstractions from App domain, and all of them in a computer are as bits & bytes. The abstractions (models) are stored in a computer as certain sequences of bits/bytes, as well as the abstractions (concepts) stored in a brain as neural constructs. For example, a software application is able to drive different printers to work well, since it have some abstractions for printers.

For your “ontological models”. I'm not sure I have an well understanding for it, but I think, this is very closed my focus, the models (the major form of the abstractions for us) on this background. About the relations among the models and entities on the Three Spaces (see the next replay), this is a main subject that I have been thinking about. I see, it is very complex so that out of some my imagination or intuition. It needs more investigation. The isomorphism is one of the basic relation type, and homomorphism maybe more general one, and there may be more types of the relations (such as model-model, model-entity, entity-entity, and model-code, etc.) I think these are all worth to clarify by us. And I have some wounder that, before we are clarified for those basic relations, how we can done the work fully and effectively. :-)

It's a really interesting question whether software uses abstractions, or whether it is us - the programmers - who use the abstractions and build them into our systems and rely on them. Anyway, the difference is possibly a little too philosophic. Let's just define that software uses abstractions for the considerations at hand here. ;-)

...which leads to a scenario where software is made of cooperating agents, which cooperate among themselves as well as with human agents. All agents - human or machine - rely on an (necessarily abstract) world view to interact with their environment. In this scenario there's no difference between app domain, business domain or alike. There are just agents (human/machine) and entities (real world objects/data).

Additionally, there is a planning level (intentionally avoiding the term "model" here) - it contains (well) models of software to build, of people and work to be organised and maybe of real world things to interact with (e.g. construction plans for machines).

Does this make sense?

>It's a really interesting question whether software uses abstractions, or whether it is us …

- In my opinion, the answer is: both. Generally, they could use different abstractions in different ways at different abstract levels, but they could also share the same abstraction.

Perhaps, it's somewhat difficult to recognize an instance of software uses some abstractions, but there are many of the supports to it. In some last discussions, it was, in fact, recognized that an abstraction could be an non-cognitive entity which is had/processed (stored, accessed, ...) in a computer.
It is also consistent with the general usage of certain abstractions in our field, such as for models. (It seems no one denies that a model is an abstraction, is it?) A MDE tools uses a model to generate code; A virtual machine executes/interprets a model to accomplish certain task, which are the case of “using models”. And, I think, an instance of software uses abstractions is a quite ordinary thing, as well as a person uses abstractions to thinking, though they may be at different abstract levels, and in different ways.


>...which leads to a scenario where software is made of cooperating agents, which cooperate among themselves as well as with human agents. ...

- This is an advanced scenario (though I prefer “actors” instead of “agents”), but in this discussion I want to say that, the machine could use abstractions (models) in a lower level, such as plays a tool that only respond to human's input.


>Additionally, there is a planning level ... contains (well) models of software to build, … Does this make sense?

- Of course, this is somewhat closed to some my imagination... ...what ever, I think we still needs clarify many of the basic issues, from what are models, how models work...

To complete the picture: there's a third abstraction/world view, located in the people's minds who are doing the business and who are using the software, looking at the UI, interacting with real world and data. Sentences like " are already in our system...." demonstrate this nicely. I hope it's actually not me myself who's in the system, but obviously from the perspective of the user his abstraction of my real world avatar and his abstraction of the system data representing me do not necessarily differ.

And again, for the sake of usabiltiy, common understanding and economics all these abstractions should be more or less isomorphic. In fact, the purpose of languages to create a common understanding and to enable interaction by communication get's beautifully in focus here.

Hi! Antreas,

I'm writing a reply to you last comment and see this. It IS my complete picture for models and modeling (with computing): all the entities and its models are appeared in three spaces, I call them as Physical Space, Conceptual (or conscious, mind, I'm not sure which one is the better) Space, and Computing Space. More comment later... :-)

wrote a new post on my blog that illustrated my view of the three spaces for entities and models of applications




© 2019   Created by Mark Dalgarno.   Powered by

Badges  |  Report an Issue  |  Terms of Service