--
You received this message because you are subscribed to the Google Groups "object-composition" group.
To unsubscribe from this group and stop receiving emails from it, send an email to object-composit...@googlegroups.com.
To post to this group, send email to object-co...@googlegroups.com.
Visit this group at http://groups.google.com/group/object-composition.
For more options, visit https://groups.google.com/groups/opt_out.
For example, he proposes that "OOS is one that minimizes the total size of the things you have to update, encouraging creation or deletion of new things instead".
I agree with statement, but what has it to do with the comment? It is not a goal, it's a property... Most likely if you have good OO code you don't need to modify existing classes but can either extend them or remove them without affecting other objects. So it's not minimal in size, it's minimal in changes you have to make to existing classes/objects.
I probably wrong words: "What does it try to optimize, minimize, maximize?" should be read as "What properties does DCI structure have, what are minimal, maximal?".
Anyway, the comment wasn't about OO itself but rather the result of OO. In a sense this effect of mostly not needing to update a existing class/object would be a result of SOLID design, a rather useful property.In the same way, just because it's object oriented structure doesn't exactly mean it's useful. Taking the example from the article, you could build a tensile structure that is not useful, but it would still retain it's "tensileness".
Regarding "... between the users mental model and the model found in code.", what do you mean by user? And assuming there are multiple mental models, which one of the models?
On Sep 13, 2013, at 10:53 , Egon Elbre wrote:I agree with statement, but what has it to do with the comment? It is not a goal, it's a property... Most likely if you have good OO code you don't need to modify existing classes but can either extend them or remove them without affecting other objects. So it's not minimal in size, it's minimal in changes you have to make to existing classes/objects.In number of changes? In rework? In deletions? In lines of code? In time taken to make the change? In time coordinating with other parts of the system?
You're asking a systems engineering question, and it's difficult to answer that without a value proposition. I think the most straightforward answers come from software engineering and its principles of coupling and cohesion. This is pretty-well established in the object literature.
The DCI community tends not to value some pseudo-encapsulation techniques that software engineering tends to like, such as inheritance. Is that in the direction of what you are looking for?
I probably wrong words: "What does it try to optimize, minimize, maximize?" should be read as "What properties does DCI structure have, what are minimal, maximal?".I think the properties have nothing to do with minimal or maximal, any more than they have to do with blue or red. Their properties are that they articulate mental models.
On Sep 13, 2013, at 11:19 , Egon Elbre wrote:Anyway, the comment wasn't about OO itself but rather the result of OO. In a sense this effect of mostly not needing to update a existing class/object would be a result of SOLID design, a rather useful property.In the same way, just because it's object oriented structure doesn't exactly mean it's useful. Taking the example from the article, you could build a tensile structure that is not useful, but it would still retain it's "tensileness".I do not understand.
Regarding "... between the users mental model and the model found in code.", what do you mean by user? And assuming there are multiple mental models, which one of the models?
With domain model, I mean the representation of a problem domain as interpreted by a domain expert.
2013/9/13 Egon Elbre <egon...@gmail.com>Regarding "... between the users mental model and the model found in code.", what do you mean by user? And assuming there are multiple mental models, which one of the models?I mean any user of the code. Whether that be compiled and executed or read. DCI allows us to represent several mental models at the same type through compaction (See the account context in the Marvin example for one such example). In the view of the private bank customer as represented in the transfer context, it's an object with a balance but seen from the view of the accountatn, as represented in the Account context it's a legder with a lot of ledger entriesWith domain model, I mean the representation of a problem domain as interpreted by a domain expert.A domain expert would concern her self with both processes and information wouldn't they?
If that's the definition of a domain model then I would argue that the formulation of a structure for DDD is incorrect.
DDD _force_ a diversion from the domain model into the code because DDD does not segregate between information and process aka what the system is and what the system does and thereby splitting what in the domain model is a whole up into _independent_ parts. They come together runtime to form the whole but in code they no longer reflect the model. Which is the basis for my statement in my previous mail
Let's say that you have a code base that doesn't have that property, of minimal discrepancy between domain model and code? Could that still be a DDD style code? IMHO you couldn't, since that would mean you don't have ubiquitous language and hence no DDD.
2013/9/13 Egon Elbre <egon...@gmail.com>Where I work almost all our process span multiple subdomains. It's impossible to model those processes as one whole when using DDD because I would have to model the part of the whole that pertains to subdomain A as a part of that subdomain and similar for those parts that belongs to subdomain B. I simply have no way of modelling the process as a whole if it spans multiple subdomains therefor IMHO DDD forces you _away_ from the process part of the model.Let's say that you have a code base that doesn't have that property, of minimal discrepancy between domain model and code? Could that still be a DDD style code? IMHO you couldn't, since that would mean you don't have ubiquitous language and hence no DDD.
trying to explain this to a DDD evangelist (which I once was my self becauseI hadn't met DCI yet) is like trying to explain the beauty of a rainbow to a (color)blind.
The first several attempts Cope made to get me interested in DCI was silently acknoewledged with "yeah yeah but that's why I have DDD and/or GoF patterns"
-Rune
Object Oriented Structure and Object Orientation are different things...
Hi Egon,
Interesting questions...I'm wondering what prompted them. Was it just the paper you read, or is it more of a general interest in somehow quantifying the benefits of DCI in order to compare it with other approaches? i.e. to better understand its strengths and weaknesses in terms of metrics and not only philosophy? Of course, by relying on metrics too much it's possible to lose important human elements, and the major point of DCI is to put the focus back on people and mental models rather than so much on technical features. But metrics can be valuable too.
Sorry if I'm misconstruing your point of interest here, I just thought that maybe getting to the root behind your question could be helpful for discussion.
...
function Context(bear, lion){// role bindingsvar Bear = bear, Lion = lion;
// role methodsfunction Bear_fight(){Bear.say("roar...");Lion.say("ouch...")}Bear_fight();}
To me there's no role methods in your code.
On Sep 14, 2013, at 12:55 , rune funch wrote:
To me there's no role methods in your code.... so it doesn't fit my mental model if I'm an analyst, an end user, or a bear or a lion. It fits only if I'm a programmer.
--
But does anyone else but the programmer care at compile-time?
Den 14/09/2013 kl. 10.50 skrev Egon Elbre <egon...@gmail.com>:To me there's no role methods in your code. Theoretically a context could be without role methods but I guess that's not the point here. Bear_fight is not related to a specific object (other than the context) and in the respect of being free floating in its execution environment it's more like a procedure than a method.function Context(bear, lion){// role bindingsvar Bear = bear, Lion = lion;
// role methodsfunction Bear_fight(){Bear.say("roar...");Lion.say("ouch...")}Bear_fight();}
So the comparison here is to me one that surface from time to time and I guess has been around ever since OO started gaining momentum: what does object orientation add that we can't get with procedural programming following a specific set of (naming) conventions?
I agree, DCI is about people first, but not last. The user's mental model shall conform with the programmer's design that shall conform with the code.
Cope and I are working on an article where objects and objects structures play an important part. This post is based on the latest draft. I have removed everything I didn't feel was essential for this thread, but the post is still pretty long..
The article defines the DCI object. It offers four basic properties that are essential to the DCI paradigm:
Wikipedia defines: “Abstractions may be formed by reducing the information content of a concept or an observable phenomenon, typically to retain only information which is relevant for a particular purpose”.[
- State Like a computer, the DCI object has memory called its attributes. Think of an object as a database record that is encapsulated within the object boundary.
- Behavior Like a computer, the DCI object can process data with its methods. Think of them as local procedures that are only visible within the object.
- Encapsulation Like a computer, a DCI object is encapsulated within an abstraction boundary. The object presents a message interface to its environment just as a computer presents an instruction repertoire. The actual realization in software or hardware is not visible outside the object’s encapsulation boundary. Different objects may invoke different methods for the same message, this is called inclusion polymorphism and makes the distinction between message and method crucial for the understanding of an object system.
- Identity Like a computer, a DCI object has a unique and immutable identity. This is essential for reasoning about networks of collaborating objects.
- Communication Like a computer, a DCI object can collaborate with other objects through message interaction. Communication is now a first class citizen of programming.
The class is the dominating abstraction on objects. It retains property 1. and 2 while it ignores property 4. and 5. The class abstraction is used to describe the static properties of a system; what the system IS.
DCI also see the object in context with other objects. The role abstraction retains property 4 and 5 while it ignores 1 and 2. The role abstraction is used to describe the dynamic properties of a system; what the system DOES.
Property 3., encapsulation, marks the boundary between the two abstractions; the class is on the inside and the role is on the outside of this boundary. Encapsulation also supports recursion. The inside of an object can be anything. The object can be a DCI Context that encapsulates roles and system behavior. Or it can be a state machine, a Petri net, a database access, or whatever. This means that DCI supports multi-paradigm design.
In its introduction, GOF's "Design Patterns" book defines two important structures:
- An object-oriented program's runtime structure often bears little resemblance to its code structure. The code structure is frozen at compile-time; it consists of classes in fixed inheritance relationships.
GOF couldn't deal with the second:
- The runtime structure consists of rapidly changing networks of communicating objects.
- …, it's clear that code won't reveal everything about how a system will work.
So my long answer to the question: "What is a DCI Structure?" is that there are two. Bot are structures of DCI objects. In the first, the objects are represented by their class abstraction. In the second, the objects are represented by their role abstraction.
Obviously, it's not possible to represent all possible mental models,
On Sep 14, 2013, at 3:24 , Egon Elbre wrote:Obviously, it's not possible to represent all possible mental models,First, we don't want to do that. We need only the mental models of the stakeholders.
Second, can you prove your statement true? It's a pretty strong and unjustified claim.
On Sep 14, 2013, at 10:14 , Matthew Browne wrote:
> I don't see representing all the possible minor variations in mental models as being the goal.
Right. There are time-honored techniques from contextual design, user profiling and cognitive psychology to create models that are useful to the programmer. I think a lot of programmers can come to these models intuitively. I frequently become concerned that too many programmers *believe* they can come to these intuitively but they get caught up in nerd-think.
In any case, I suggest withholding criticism of mental-model building unless you are well-read and skilled in the application of these tools. When I teach domain analysis, I teach commonality and variability analysis: these can be taken as prime foundations of human cognition. Of course one weeds out the tiny variations, and it is just plain stupid to let the details dominate the design. Of course they inform the design, and this is why it takes good domain expertise to be able to drive to the right designs. That's why we have "everybody, all together, from early on."
And, Matthew, thanks for finding and reiterating Trygve's comment from a previous thread. Priceless and exactly suitable to this issue.
On Sep 14, 2013, at 11:18 , Egon Elbre wrote:
> Yes, which was my initial point that you still need to choose and adjust the model somehow and not implement all of the models.
Egon, I'd advise you to get the big picture instead of sweating the details.
In the end, there are not many models to be reconciled, but a single gestalt that comes from the team process of collective understanding. Your comments seem to be typical of a solo virtuoso nerd stance rather than of a team that works with a constituency to understand needs.
In the end, you need to start with that before moving on to the mechanics of roles, classes, objects, and interactions. Based on what you've contributed here I think you need to go a long way in these direction before you can grok the important stuff about DCI.
I suggest hanging out with some analysts and HCI people for a while to gain some perspective into this world.
To me there is a distinction between constructing a mental model and using a mental model.
I think you need to understand both, big and small details, to understand the whole picture. This was started as a "small details question" in the beginning, and I said that.
On Sep 15, 2013, at 11:52 , Egon Elbre wrote:To me there is a distinction between constructing a mental model and using a mental model.Really? How do you avoid using the model you have in your head?
On Sep 15, 2013, at 11:52 , Egon Elbre wrote:I think you need to understand both, big and small details, to understand the whole picture. This was started as a "small details question" in the beginning, and I said that.You carefully articulated an argument positing that the variations prevent being able to represent the whole picture. You explicitly said that the variations cause conflict.
You inferred that building such a model would cause bugs.
You insisted on the models being equal.
Either you are speaking with great imprecision
or you are shifting the foundations of your argument as we progress.
I for one can no longer make sense of what you say and disengage from this thread. I don't think we're going to make sense of this in a written forum.
Encapsulation [...] Different objects may invoke different methods for the same message, this is called inclusion polymorphism and makes the distinction between message and method crucial for the understanding of an object system.Trygve or Cope, I'm wondering if you could go into a little more detail on what you mean by "inclusion polymorphism" here. I looked it up on Wikipedia and it seems that it basically just means support for subtyping and method overriding.
Trygve or Cope, I'm wondering if you could go into a little more detail on what you mean by "inclusion polymorphism" here. I looked it up on Wikipedia and it seems that it basically just means support for subtyping and method overriding.
On Sep 23, 2013, at 6:08 , Matthew Browne wrote:
Trygve or Cope, I'm wondering if you could go into a little more detail on what you mean by "inclusion polymorphism" here. I looked it up on�Wikipedia�and it seems that it basically just means support for subtyping and method overriding.
I think that you're basically right.
I think the term was coined by Peter Wegner back in the early OOPSLA days. (He liked to give things impressive names and to project a strong academic image, and that's what sent you hunting.) �It's important to understand that polymorphism just means "many forms." So in FORTRAN, "+" is a polymorphic operator: it works on "forms" of arguments such as INTEGER and INTEGER, REAL and REAL, REAL and INTEGER, and INTEGER and REAL. It's just that the binding of the operator (method selector) to the operation (method) is done at compile time.
Templates are another form of polymorphism: we can have many forms of std_list<element_type> in the C++ STL, depending on the type of the template argument.
There are many other ways of arranging form. In my old research I found that there are about 7 � 2 of them (or maybe that's all I could understand at once...)
What OO people in our ignorance just call "polymorphism" is usually inclusion polymorphism. (Why they used this term I have no idea � it may have to do with the set inclusion of the sets of objects of the operands.) It means choosing the proper form (class, which is an implementation of a type) at run time, usually from a graph of classes that implement those types. So, again, contrary to popular belief, Smalltalk is an extremely strongly typed language � much more so than C++. It's just that its type system owes to inclusion polymorphism and that it is "enforced" at run time.
The whole of multi-paradigm design is based on these analyses of form, and on creating categories of form. If you move up the semantics ladder, taking those forms together with binding time, you end up with what popularly is called a paradigm in computer science. Going the other direction, to the more primitive notions of human perception, you will find that these categories of form reduce to identifying commonalities and variations. Human minds are very good at that � particularly the visual cortex and the right brain � so this "pattern matching" can be said to be the foundation of most human perception. You can take this even deeper and formalize it mathematically using symmetry groups, and even deeper using similarity groups. Now we are in the realm of cosmology and the foundations of existence itself: physicists view matter in terms of its symmetry properties. Many of the much-ballyhooed headlines in physics these days (Higgs Boson, etc.) arise from mathematical models that seek the other half of partially understood symmetry relations in subatomic phenomen�.
But I do digress. The point is that there is something incredibly fundamental going on here. This is the stuff that's occupied my studies and thoughts over the larger part of my career since about 1993.
As an aside, I think there is much that we as a DCI community can learn from type systems. Luca Cardelli, which the Wikipedia article names as having worked with Wegner on such things, is brilliant in this area. I have considered enlisting his services once we get our act a bit more together and once there is more of a hunger for it in the community.
--
You received this message because you are subscribed to a topic in the Google Groups "object-composition" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/object-composition/H1yrn9Aehkg/unsubscribe.
To unsubscribe from this group and all its topics, send an email to object-composit...@googlegroups.com.
Yes, that did go down the rabbit hole a bit :) But it was very interesting! Thanks for the history lesson.
It would be great to continue the discussion on some of the deeper points you raised here, but first, I'm still not quite why the distinction between calling a method and sending a message is so important to DCI. I get that the message passing approach is the "right" way to do OO, but I don't see what the effective difference is for most DCI contexts, other than the fact that role methods can override instance methods -- which does of course rely on message passing rather than a direct method call, but it's still essentially the same idea as overriding methods in subclasses in traditional OOP.
I realize Trygve was just providing an excerpt...is this something that the paper will go into in more detail? It would be great if an example were provided of where the distinction between method call and message send matters to DCI, rather than just mentioning "inclusion polymorphism."
Don't get me wrong; I agree that the distinction is important and message passing is the way to go, but it seems to me that intercepting a message to do something other than calling the method of that name (or to add additional behavior before or afterwards) is useful in both OOP and in DCI, but not essential to make a simple DCI context work. Or perhaps Trygve only cares about inclusion polymorphism here and not any kind of fancy method interception? I should note that I'm speaking only at the usage level here, not about what might be required under the hood (by the DCI runtime or library) to make the role binding work.
Sorry if I'm being a bit obtuse on this point... :/ Thanks :)
On 9/23/13 6:39 AM, James O Coplien wrote:
On Sep 23, 2013, at 6:08 , Matthew Browne wrote:
Trygve or Cope, I'm wondering if you could go into a little more detail on what you mean by "inclusion polymorphism" here. I looked it up on Wikipedia and it seems that it basically just means support for subtyping and method overriding.
I think that you're basically right.
I think the term was coined by Peter Wegner back in the early OOPSLA days. (He liked to give things impressive names and to project a strong academic image, and that's what sent you hunting.) It's important to understand that polymorphism just means "many forms." So in FORTRAN, "+" is a polymorphic operator: it works on "forms" of arguments such as INTEGER and INTEGER, REAL and REAL, REAL and INTEGER, and INTEGER and REAL. It's just that the binding of the operator (method selector) to the operation (method) is done at compile time.
Templates are another form of polymorphism: we can have many forms of std_list<element_type> in the C++ STL, depending on the type of the template argument.
There are many other ways of arranging form. In my old research I found that there are about 7 ± 2 of them (or maybe that's all I could understand at once...)
What OO people in our ignorance just call "polymorphism" is usually inclusion polymorphism. (Why they used this term I have no idea — it may have to do with the set inclusion of the sets of objects of the operands.) It means choosing the proper form (class, which is an implementation of a type) at run time, usually from a graph of classes that implement those types. So, again, contrary to popular belief, Smalltalk is an extremely strongly typed language — much more so than C++. It's just that its type system owes to inclusion polymorphism and that it is "enforced" at run time.
The whole of multi-paradigm design is based on these analyses of form, and on creating categories of form. If you move up the semantics ladder, taking those forms together with binding time, you end up with what popularly is called a paradigm in computer science. Going the other direction, to the more primitive notions of human perception, you will find that these categories of form reduce to identifying commonalities and variations. Human minds are very good at that – particularly the visual cortex and the right brain — so this "pattern matching" can be said to be the foundation of most human perception. You can take this even deeper and formalize it mathematically using symmetry groups, and even deeper using similarity groups. Now we are in the realm of cosmology and the foundations of existence itself: physicists view matter in terms of its symmetry properties. Many of the much-ballyhooed headlines in physics these days (Higgs Boson, etc.) arise from mathematical models that seek the other half of partially understood symmetry relations in subatomic phenomenæ.
But I do digress. The point is that there is something incredibly fundamental going on here. This is the stuff that's occupied my studies and thoughts over the larger part of my career since about 1993.
As an aside, I think there is much that we as a DCI community can learn from type systems. Luca Cardelli, which the Wikipedia article names as having worked with Wegner on such things, is brilliant in this area. I have considered enlisting his services once we get our act a bit more together and once there is more of a hunger for it in the community.
--
You received this message because you are subscribed to a topic in the Google Groups "object-composition" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/object-composition/H1yrn9Aehkg/unsubscribe.
To unsubscribe from this group and all its topics, send an email to object-composit...@googlegroups.com.
To post to this group, send email to object-co...@googlegroups.com.
Visit this group at http://groups.google.com/group/object-composition.
For more options, visit https://groups.google.com/groups/opt_out.
--
You received this message because you are subscribed to the Google Groups "object-composition" group.
To unsubscribe from this group and stop receiving emails from it, send an email to object-composit...@googlegroups.com.
The important part of DCI is that the method for a given method selector is compile-time knowable (in C++ terms, the binding from a member function invocation to its member function is compile-time knowable).
I think I can talk about DCI without using the term "method" (if someone disagrees, let me know) but it gets into language-specific details that are probably confusing to most.
On 2013.09.24 10:39, James O Coplien wrote:Really? For all methods of all kinds?? Fundamentally, not a feature of C++?
The important part of DCI is that the method for a given method selector is compile-time knowable (in C++ terms, the binding from a member function invocation to its member function is compile-time knowable).
I will not quarrel with language-specific details, particularly not C++ details. (AFAIK, C++ has never claimed to be object oriented in Alan Kay's sense of the term.)
I think I can talk about DCI without using the term "method" (if someone disagrees, let me know) but it gets into language-specific details that are probably confusing to most.
My comment is about the fundamental execution model of object oriented systems, not an particular implementation. See Alan Kay's definition of 'object orientation' with objects as computers connected through a very high speed network. I
So I disagree with this a general statement. I need message and method as two different concepts; you may name them differently if you like. An observer in the inter-object space can see a that something flows from object to object and he can create a trace showing this flow during an execution: object-something-object-something-object-etc. I call the somethings for messages. You called them selectors in the top quote. The reception of a message triggers the execution of some part of the object's behavior. A method is the name I use for such a part. Messages are only visible in the inter-object space. Methods are only visible within the object's boundary. Or with Kay's analogy: messages are visible on the communication bus, methods are visible within the computers.
There is a cause and effect relationship between message and method. Call them what you like, but I cannot see DCI with without these two fundamental concepts.
I can't see a DCI execution model without these two concepts. If there is a more fundamental execution model, I would be very grateful for learning about it.
P.S. I googled "java execution model". The first article I found was
http://cs.wellesley.edu/~cs111/fall97/lectures/jem/jem.html
At a quick look, I see the words message and method used as I use them....
I disagree.
Take CLOS, for example, which does not, I believe, use the term "method selector," but which is probably much more object-oriented in the Kay sense than Smalltalk is. (Does contemporary Smalltalk claim to be object-oriented in the Kay sense? Seems pretty class-oriented to me. If Smalltalk is object-oriented then I think C++ is.) Methods in CLOS are selected on the basis of the types of potentially all arguments. That means the method selector is something different from, and unmappable to. the "method name." I'd argue that this is more powerful than the Smalltalk model � and a much better fit for the human mental model of how the real world works.
Flavors, I think, is even more interesting.
And, as the pi�ce de r�sistance, the original Artima article by Coplien and (ahem) Reenskaug doesn't contain the phrase "method selector" even once. The only one selecting anything is the end user selecting an account.
If Smalltalk has a method selector, we can think of it as a token or register that allows us to associate execution with a particular method instance. In FORTRAN on a Harris 6024 machine that's called the I register. Does FORTRAN have method selectors?
The LOGOPOLIS virtual machine we designed (and simulated down to the gate level) at Bell Labs does method association through a hardware CAM so that method selectors are never discussed on this side of the abstraction layer. Let me posit that method selectors are � or at least should be � left on the machine side of the abstraction layer. Too much discussion about OO departs from the posture of the mental model and descends into engineering hell, which is the level to which engineers descend to understand things. You can bet your bippy that the kids using Turtles on a simulated Dynabook didn't talk about methods and method selectors, but I think that Kay would say that they represented the epitome of OO thinking.
I think that once again the discussion has gone to the level of a particular implementation (in Squeak), and maybe does so in a way that will limit languages without the term "method" to ever claim to be doing DCI. I think that would be unfortunate and elitist.
Maybe there is something here that needs to be made more precise, as O'Brien pointed out. I do think that, to do so, we'll need someone like a Luca Cardelli � unless there's someone on the list who has done research on type or retract theory and who is willing to step up to the task.
Den Sep 24, 2013 kl. 11:22 �skrev Trygve Reenskaug:
On 2013.09.24 10:39, James O Coplien wrote:Really? For all methods of all kinds?? Fundamentally, not a feature of C++?
The important part of DCI is that the method for a given method selector is compile-time knowable (in C++ terms, the binding from a member function invocation to its member function is compile-time knowable).
I will not quarrel with language-specific details, particularly not C++ details. (AFAIK, C++ has never claimed to be object oriented in Alan Kay's sense of the term.)
I think I can talk about DCI without using the term "method" (if someone disagrees, let me know) but it gets into language-specific details that are probably confusing to most.
My comment is about the fundamental execution model of object oriented systems, not an particular implementation. See Alan Kay's definition of 'object orientation' with objects as computers connected through a very high speed network. I
So I disagree with this a general statement. I need message and method as two different concepts; you may name them differently if you like. An observer in the inter-object space can see a that something flows from object to object and he can create a trace showing this flow during an execution: object-something-object-something-object-etc. I call the somethings for messages. You called them selectors in the top quote. The reception of a message triggers the execution of some part of the object's behavior. A method is the name I use for such a� part. Messages are only visible in the inter-object space. Methods are only visible within the object's boundary. Or with Kay's analogy: messages are visible on the communication bus, methods are visible within the computers.
There is a cause and effect relationship between message and method. Call them what you like, but I cannot see DCI with without these two fundamental concepts.
I can't see a DCI execution model without these two concepts. If there is a more fundamental execution model, I would be very grateful for learning about it.
P.S. I googled "java execution model". The first article I found was
At a quick look, I see the words message and method used as I use them....
--
You received this message because you are subscribed to the Google Groups "object-composition" group.
To unsubscribe from this group and stop receiving emails from it, send an email to object-composit...@googlegroups.com.
To post to this group, send email to object-co...@googlegroups.com.
Visit this group at http://groups.google.com/group/object-composition.
For more options, visit https://groups.google.com/groups/opt_out.
--
You received this message because you are subscribed to the Google Groups "object-composition" group.
To unsubscribe from this group and stop receiving emails from it, send an email to object-composit...@googlegroups.com.
To post to this group, send email to object-co...@googlegroups.com.
Visit this group at http://groups.google.com/group/object-composition.
For more options, visit https://groups.google.com/groups/opt_out.
Hi Trygve,
I think your suggestion to keep this group beginner-friendly is a good one, but the DCI-evolution group is invitation-only, so there isn't a place for the rest of us to take more advanced discussions. I understand the rationale for wanting to keep the DCI-evolution group focused on fundamental advancements in DCI itself, so I suppose ideally a third group is in order, but I don't know if we have a large enough community to support an additional group (unless all of us current members join it). Another option might be to open up the DCI-evolution group and just have a private email list (rather than a Google group) for more technical DCI-advancement discussions.
---
Thanks Matthew,
A contribution to the creation of a larger example will be most welcome.
Jim: What about opening the evolution list?
--
--