Hi Luis: it occurred to me that the generalized personalities are not very generalized after all. :-) We can simply put more get methods into the downstream interface: For each participant p we can put get_p() into the downstream interface. This requires that we generalize LoP 4: LoD (Law of Demeter) for Personalities The implementation of popular functions is allowed to use the DI/UI/local functions and the methods of classes returned by the DI/UI/local functions and nothing more. (This includes methods of classes of the local data and and methods of the return types of local functions.) -- Karl ========================== Hi Luis: Generalized personalities are for the work in progress section (NOT for related work). Please use as it fits. I think you can shorten the visitor solution criticism quite a bit. -- Karl Personalities as a design and programming model: A personality has local data and functions and a constructor and an upstream and downstream interface. A personality provides an implementation for a set of functions (the upstream interface) that modify classes that implement the downstream interface of the personality. The implementation may only use the upstream and downstream functionsand local data and functions of the personality. A personality modifies only one class per personification. It is useful to think about generalized personalities: A generalized personality has local data and functions and a constructor and an upstream and downstream interface but the downstream interface may be implemented by more than one class. We use class-valued variables to express the downstream interface and we refer to the class-valued variables in the implementation of the upstream interface of the generalized personality. There is one distinguished class-valued variable called Main. The upstream interface is defined for Main. Personification needs to map the class-valued variables to several classes. Thinking of personalities as trees, generalized personalities have a broader root system than personalities. A personality gets its support only from one class while a generalized personality gets its support from several classes. Motivation for generalized personalities: for some role it is more natural to define the upstream implementation without funneling everything through one class. For example a complex Pricing Role needs an ItemParty, a PricerParty and Customer to define the Pricing role. It would be unnatural to define the role only in terms of LineItemParty. But generalized personalities have otherwise the qualities of personalities. Especially we can have dynamic generalized personalities. And the LoP carries over to generalized personalities. Note for us: generalized personalities are close to APPCs and aspects. They will help us to integrate our three activities: personalities, APPCs and aspects.