visits `a_universe'. do across a_universe as ic_universe loop check attached {SPACE_OBJECT} ic_universe.item as al_universe_object then a_object.encounter_agent.call ([al_universe_object.sensor_data_agent]) end end end The double-dispatch can be seen in line #35, where two indirect agents are working together to provide two co-variant calls working in perfect polymorphic concert with each other. The `a_object' of the `visit' feature has an `encounter_agent' which is called with the sensor data of the `sensor_data_agent' coming from the `al_universe_object'. The other interesting part of this particular example is the SPACE_OBJECT class and its `encounter' feature: Visitor action The only exported features of a SPACE_OBJECT are the agents for encounter and sensor data, as well as the capacity to set a new position. As one object (the spaceship) visits each object in the universe, the sensor data is collected and passed to the visiting object in its encounter agent. There, the sensor data from the sensor_data_agent (that is—the data element items of the sensor_data TUPLE as returned by the sensor_data_agent query) are evaluated against the current object and a course of action is taken based on that evaluation (see `encounter' in SPACE_OBJECT below). All other data is exported to {NONE}. This is similar to C, C++ and Java scopes of Private. As non-exported features, the data and routines are used only internally by each SPACE_OBJECT. Finally, note that encounter calls to `print' do not include specific information about possible descendant classes of SPACE_OBJECT! The only thing found at this level in the inheritance are general relational aspects based completely on what can be known from the attributes and routines of a general SPACE_OBJECT. The fact that the output of the `print' makes sense to us, as human beings, based on what we know or imagine about Star ships, space stations and asteroids is merely logical planning or coincidence. The SPACE_OBJECT is not programmed with any specific knowledge of its descendants. deferred class SPACE_OBJECT feature {NONE} -- Initialization make_with_name (a_name: like name; a_position: like position) -- Initialize Current with `a_name' and `a_position'. do name := a_name position := a_position sensor_data_agent := agent sensor_data encounter_agent := agent encounter ensure name_set: name.same_string (a_name) position_set: position.same_string (a_position) end feature -- Access encounter_agent: PROCEDURE [ANY, TUPLE] -- Agent for managing encounters with Current. sensor_data_agent: FUNCTION [ANY, TUPLE, attached like sensor_data_anchor] -- Agent for returning sensor data of Current. feature -- Settings set_position (a_position: like position) -- Set `position' with `a_position'. do print (type +