Figure 1 shows that Prodigy and Ditops can communicate via the shared state, or directly via messages between each other. The functional requirements of each communication path are different. Though each method could obviously be implemented (and probably will be implemented by the message passing method) by the other method, keeping the two abstractions allows us to show the functional differences between the information use of the two different methods.