RolePlayers and Roles (was: PIE)
Alan Kay
Alan.Kay at squeakland.org
Mon Feb 25 17:21:50 UTC 2002
Sam --
There is still the annoyance of having to fix up sender-side code.
Another way to handle this might be to fully qualify all sends, but
simply filter out showing the qualifications in the sender-side code
unless a preference on the method is clicked. This way the
sender-side code would really know what the programmer wanted to do
with some object, and yet the method would look as clean as possible
...
Cheers,
Alan
-------
At 8:13 AM -0500 2/25/02, Sam Adams wrote:
>Alan,
>I agree with the need for "soft typing". That's what we ended up doing at
>KSC in the still-born CoDesign environment. The approach we used was to
>provide metadata for each method that provided a parsable signature
>indicating the expectations for arguments and return values. We manually
>added these to the enitre VOS2 Digitalk environment and had a browser that
>supported signature editing as well as stoplight metrics if a signature
>agreed with the users code or not. With this foundation Steve Burbeck
>built a debugger capable of simulating Smalltalk execution using signatures
>to produce the soft types, we called them qualifications, for returned
>objects. It worked great and another version was done inside IBM for
>Visualage which is still available.
>
>If we had this kind of metadata for method running live (as ours did), the
>message passing system would know ahead of time that the signature of a
>method had changed, even when the selector hadn't. With qualifers, you
>could also tell if the new returned objects could still function in the
>calling method, all without running the code.
>
>The signature and qualifier language paper has been posted to the list
>before, but I can find a copy if there is interest.
>
>Regards,
>Sam
>
>
>
>Sam S. Adams, IBM Distinguished Engineer, IBM Research
>tie line 444-0736, outside 919-254-0736, email: ssadams at us.ibm.com
><<Hebrews 11:6, Proverbs 3:5-6, Romans 1:16-17, I Corinthians 1:10>>
>
>
>
>
>
> Alan
>Kay
> <Alan.Kay at squeakland.org> To:
>squeak-dev at lists.squeakfoundation.org
> Sent by:
>cc:
> squeak-dev-admin at lists.squeakfou
>Subject: Re: RolePlayers and Roles (was:
>PIE)
>
>ndation.org
>
>
>
>
> 02/25/02 09:46
>AM
> Please respond to
>squeak-dev
>
>
>
>
>
>
>Sam --
>
>That's the general idea. To me, the main hitch that has to be solved
>well is to deal with the nasty possibility of invalidating
>assumptions (via additions to the object/class) that previously
>worked on the sender side.
> The main two such things in the system now -- deleting a method
>that is needed by some sender and changing a method that violates
>some sender's assumptions -- seem to be handled more or less OK,
>though occasionally there is a gotcha.
> But we didn't feel it was OK in the days when ST-72 provided
>extensible syntax on the fly to have sender side code be suddenly
>invalidated by some change in a receiver class that would cause the
>sender side expression to have a different parse and meaning (a soft
>typing system would have helped here).
> The current scheme in question can have some of these nasty
>side-effects. It seems that some form of soft typing might also help
>here -- in the sense that one of the virtues of typing can be to
>allow sender side assumptions to be made more clear and explicit both
>to human and machine readers of their code.
>
>Cheers,
>
>Alan
>
>-------
>
>At 7:01 AM -0500 2/25/02, Sam Adams wrote:
>>I haven't read the PIE papers in a very long time, but I have done lots of
>>thinking about roles and object modeling over the years, especially wrt
>CRC
>>modeling. This thread prompted a design thought that I'll throw into the
>>soup:
>>
>>The basic object was a RolePlayer and contained a collection of Roles,
>>where each Role instance would have the state and behavior appropriate to
>>its role (and know its player). The issues that arise are how to deal
>with
>>shared state between roles (e.g. annualSalary in EmployeeRole could also
>be
>>annualIncome in TaxPayerRole), and how to deal with message handling
>>priority (aka, which role dominates in a particular scenario, eg
>>takeSickChildToDoctor in FatherRole vs attendImportantBusinessMeeting in
>>AmbitiousEmployeeRole). The shared state problem seems to call for
>>valueholder-like reference objects that would be constructed and installed
>>in each Role with overlapping state when the roles are installed in the
>>RolePlayer.
>>
>>The switching issue could be handled as it is with persons, namely, if you
>>have a request for someone where you assume no particular role bindings or
>>conflicts, you simply send the message to the object. If you want to make
>>sure that a particular role behavior is invoked, then call out the role as
>>in "as the father of my children I expect you to..." or "as an employee of
>>this company you need to ...".
>>
>>This could be implemented using a mix of composite and facade behavior
>>where both RolePlayer and Role had a common interface for handling
>>roleplayer-style messages (ala composite) but where at anytime from the
>>perspective of a sender, one Role instance or another was acting as a
>>facade for the RolePlayer. So if the RolePlayer recieved a message, it
>>would delegate handling to the first understanding Role in its collection
>>using a default priority order. If a Role recieved the message that it
>>understood, it would simply do it. But if it did not understand, it would
>>delegate to the RolePlayer. Of course, a guard against infinite regress
>>would be in order. If a sender wanted a particular Role facade or
>>perspective on an object, it could use something like the old conversion
>>protocols (asString asForm asByteArray) except the returned object would
>be
>>the appropriate Role facade (playingFather or playingAmbitiousEmployee).
>>
>>The result would be a system where each object could present multiple
>faces
>>to its collaborators, and new roles (or subsets of
>>responsibilities/interfaces) could be added and removed dynamically. Lots
>>of details to work out, but there's the basic idea. I'll leave the
>>meta-roles, geno-roles, and pheno-roles for another time. ;-)
>>Regards,
>>Sam
>>
>>Sam S. Adams, IBM Distinguished Engineer, IBM Research
>>tie line 444-0736, outside 919-254-0736, email: ssadams at us.ibm.com
>><<Hebrews 11:6, Proverbs 3:5-6, Romans 1:16-17, I Corinthians 1:10>>
>>
>>
>>
>>
>>
>
>> Jecel Assumpcao
> >Jr
>
>> <jecel at merlintec.com> To:
>>squeak-dev at lists.squeakfoundation.org
>> Sent by:
>>cc:
>
>> squeak-dev-admin at lists.squeakfou
>>Subject: PIE (was: Getting rid of
>>metaclasses)
>>
>>ndation.org
>
>>
>>
>
>>
>>
>
>> 02/24/02 01:53
> >PM
>
>> Please respond to
>>squeak-dev
>
>>
>>
>
>>
>>
>
>>
>>
>>
>>On Sunday 24 February 2002 19:18, Alan Kay wrote:
>>> Goldstein and Bobrow eventually found a very interesting way to
>>> implement these enriched objects: they used Smalltalk instances for
>>> each role/perspective. So a PIE object could be made from many
>>> Smalltalk objects.
>>
>>I suppose they used a flat "perspective space", right? Some other
>>proposals allow role inheritance, but that easily becomes a big mess.
>>
>>How do you know which perspective to use at any given time? How do you
>>switch between them?
>>
>>Sorry about the questions, but there is essentially nothing online
>>about PIE. I am trying (http://www.merlintec.com:8080/software/8) to
>>come up with something similar.
>>
>>-- Jecel
>
>
>--
--
More information about the Squeak-dev
mailing list
|