As was discussed in MultiCaster, it is very useful (especially in distributed applications) to organize agents in "groups".
From DougLea's paper of the same name:
An object-oriented application may consist of a sea of objects; perhaps thousands or millions of objects. Subsets of these objects often possess discernible structure that is not well-captured by common object- and class-based concepts and notations... ...a group is a special kind of set, consisting of one or more objects ( members) bearing a common abstract relation, common external access policies, common connectivity, and common internal policies.
You can read the paper here: http://gee.cs.oswego.edu/dl/groups/groups.html
Some practical examples of "objects in groups":
-
GroupCommunicationSystems, a fault-tolerance model implemented by toolkits such as ISIS, Horus, and iBus.
-
The UbiquitousComputing vision of many different agents communicating world-wide in a self organizing manner. See http://www.distributedcoalition.org
-
LindaTupleSpaces, or JavaSpaces, for instance, could be considered minimalist object groups (in concept).
This was one of those "aha!" concepts that opened my mind to the great possibilities of widely distributed computing.