メッセージ転送
オブジェクトにセレクターで指定されたメソッドが存在しない場合「function __call( $selector, $argument )」が呼び出される。blockを受け取らない点を除き、Rubyと同様である。
委譲を使用する後者の場合、委譲すべきメッセージが50あるなら50個のメソッドを登録するはめになる。
メッセージ転送が可能な場合では、後者の委譲の方法を採用しつつも、 委譲処理をメッセージ機構に任せる事で、PathExtenderにはdrawEllipseとdoesNotUnderstand:メソッドを登録するだけで済ませることができる。
(5)は、クラスのインタフェース毎にスタブコードを書かずとも遠隔手続き呼出し (RPC) などが可能という事である。C++系統の言語であればRPCの際、一つの関数により一つのオブジェクトに対する全てのメンバー関数呼び出しの内容を横取りできる機能がないため、インタフェース毎にスタブコードを作成しなければならない。 メッセージ転送が可能な場合においては、1つのオブジェクトに対する全てのメッセージを横取りできるため、スタブとなるプロキシクラスを通信方法に合わせ1種類用意しておけば良い。
また、通信方法もメッセージオブジェクトを直列化して送信先に送り、送信先でメッセージオブジェクトに復元して送信先のオブジェクトに送りつければよいので単純になる。
(6)は、メッセージを記録してUndoやRedo、スレッド間通信などに使えるという事である。Smalltalkでは、メッセージを遅延実行するため、メッセージを保存するためのMessageCatcherクラスが用意されている。