\begin{figure}[htbp] \caption{Communication between processes}
\setlength{\unitlength}{1cm}
\hspace{1.7cm}
\b{tabular}[t]{|p{4.0cm}|p{4.0cm}|p{4.0cm}|} \hline
\b{picture}(4.0,4.5)(-0.3,-0.5)
\put(0.3,2.6){\makebox(0,0){ O!m(t) } }
\put(2.1,2.6){\makebox{ m(t) } }
\put(1.0,2.5){\circle{0.1}}
\multiput(1.1,2.5)(0.1,0){9}{\line(6,0){0.05}}
\put(2.0,2.5){\circle*{0.1}}
\put(1.0,2.6){\line(0,6){0.8}}
\e{picture}
&
\b{picture}(4.0,4.5)(-0.3,-0.5)
\put(0.3,2.6){\makebox(0,0){ O!m(t) } }
\put(2.1,2.6){\makebox{ m(t) } }
\put(0.6,1.1){\makebox(0,0){ Q? } }
\put(1.0,1.0){\circle{0.1}}
\put(1.0,1.0){\line(0,6){1.4}}
\put(1.0,2.5){\circle{0.1}}
\multiput(1.1,2.5)(0.1,0){9}{\line(6,0){0.05}}
\put(2.0,2.5){\circle*{0.1}}
\put(1.0,2.6){\line(0,6){0.8}}
\multiput(2.0,1.1)(0,0.2){7}{\line(0,6){0.1}}
\e{picture}
&
\b{picture}(4.0,4.5)(-0.3,-0.5)
\put(0.3,2.6){\makebox(0,0){ O!m(t) } }
\put(2.1,2.6){\makebox{ m(t) } }
\put(0.6,1.1){\makebox(0,0){ Q? } }
\put(2.1,1.1){\makebox{ } }
\put(1.0,0.1){\line(0,6){0.8}}
\put(1.0,1.0){\circle{0.1}}
\put(1.0,1.0){\line(0,6){1.4}}
\put(1.0,2.5){\circle{0.1}}
\multiput(1.1,2.5)(0.1,0){9}{\line(6,0){0.05}}
\multiput(1.1,1.0)(0.1,0){9}{\line(6,0){0.05}}
\put(1.15,1.0){\vector(-4,0){0.1}}
\put(2.0,2.5){\circle*{0.1}}
\put(1.0,2.6){\line(0,6){0.8}}
\multiput(2.0,1.1)(0,0.2){7}{\line(0,6){0.1}}
\put(2.0,1.0){\circle{0.1}}
\e{picture}
\\ \hline \hline
\leftcomment{goal}
Q = O!m(t) & m(t) & Q? \\
\leftcomment{effect}
\small \sloppy A new process is created, \n
to evaluate the method call m(t).
The goal O!m(t) is first rewritten
to the sequence Q = O!m(t), followed by Q?,
in order to request for the resulting answer substitutions.
& \small \sloppy The goal m(t) is evaluated by a processes
refering to the object for which the method is called.
The calling process must wait for the results.
& \small \sloppy Backtracking over the results may take place
as long as there are any alternative solutions.
Backtracking is initiated by the processes that invoked the
rendez-vous.
\\ \hline
\e{tabular}
\e{figure}