メソッド (計算機科学)
オブジェクト指向を解説した書籍などでメソッド呼び出しについてオブジェクトにメッセージを送信すると表現されることがある。C++系統の言語ではオブジェクトの操作は単なるメンバー関数(メソッド)呼び出しに過ぎず比喩として捉えられる場合が多い。SmalltalkやObjective-Cにおいては、メッセージ送信は単なる比喩ではなく実体のある機構であり、メソッド呼び出しとは別物であるため注意が必要である。
例えば内部データの単位とは異なる単位の値に換算して返す、などである。
setter でフィールドにデータを設定するときにバリデーション (validation) を実行できる。
例えば設定したいデータを整数のみ、自然数のみ、偶数のみ、あるいは日付形式文字列のみ、などに限定して、範囲外あるいはフォーマット外の値が渡された場合に異常系とみなして例外をスローするといった実装ができる。
また、アクセサを使う最も重要な理由として、多態性の恩恵を受けられるという点がある。
例えばSmalltalkの#value, #contents, #name, #sizeといったセレクターが良い例である。#valueは値を示すセレクターで下記(1)のようにアクセサであったりアクセサでなかったり様々な実装が存在するが、#valueメッセージを送る手順はその違いを区別する必要が無いため下記(2)のようにどの実装に対しても共通の手順を適用することができる。これがアクセサによる多態性の恩恵である。アクセサを用意せず直接変数を公開しているクラスや、直接オブジェクト内の変数を参照しているような手順はこれらの枠組みから外れてしまうため共通の手順を使うことはできず変数の参照方法だけが異なる似たような手順をいくつも作る事となる。
(1)
(2)
#value以外の実例
純粋なオブジェクト指向環境として知られるSmalltalkでは、アクセサによる多態性がMVCの依存性辞書の管理を始めあらゆる箇所で活用されている。