私は「アクセサ」という言葉の使い方について議論してきました(コンテキストはJavaプログラミングです)。アクセサは暗黙的に「プロパティアクセサ」であると考えがちです-つまり、という用語は、オブジェクトの内部状態への直接アクセスを提供することは多かれ少なかれそこにあることを意味します。相手は、オブジェクトの状態に何らかの方法でアクセスするメソッドはすべてアクセサーであると主張します。
私はあなたたちが私のために議論に勝つことができないことを知っていますが、あなたがどのようにこの用語を定義するのか知りたいです。 :)
アクセサについては、ゲッターとセッターについて考える傾向があります。
オブジェクトの内部状態を操作するすべてのメソッドがアクセサーであることを主張すると、オブジェクトの状態を実際に使用するインスタンスメソッドはアクセサーになり、正しくないように見えます。オブジェクトの状態を使用しないのはどのようなインスタンスメソッドですか?つまり、オブジェクトの状態を何らかの方法で使用しないインスタンスメソッドは、最初はインスタンスメソッドではなく、クラスメソッドである必要があります。
たとえば、 BigDecimal.add
メソッドはアクセサと見なされますか?これは、add
メソッドが呼び出されたインスタンスの値を読み取り、別のBigInteger
の値を追加した後に結果を返すメソッドです。 add
インスタンスメソッドがゲッターでもセッターでもないことは、かなり簡単に思えます。
アクセサメソッドは、缶に書かれていることを正確に実行します。副作用なしで型から一部の状態にアクセスします(遅延インスタンス化は別として、呼び出し側が通常知っていることではありません)。
private int _age;
public int getAge()
{
return _age;
}
状態を変更するメソッドは、ミューテーターとしてより便利に(私の意見では)考えられています。
グーグルとウィキペディアの他に、 Java言語仕様 は、これをアクセサーメソッドの例として示しています。
private static int N;
public static int getN() { return N; }
つまり、はい、フィールドの値を取得するだけです。コンパイラーはこれをインライン化して、単純な読み取りに変換する可能性があるため、それ以上のものはおそらくアクセサーではありません。
アクセサメソッド: getRed、getGreen、およびgetBlue
これらのメソッドは通常、値にアクセスします。
ミューテーターメソッド: setRed、setGreen、setBlue
ミューテーターは値を変更します
私はいつも最初の定義で行ってきました。したがって、一般的にはゲッターとセッターにのみ適用されます。 2番目の方法を使用する場合、ほとんどすべての方法をカバーしているため、それほど有用な区別ではありません。
アクセサメソッドは、オブジェクトのフィールドにアクセスするために使用されます。したがって、ゲッターとセッターはどちらもアクセサーメソッドです。 オブザーバーメソッドは、外部から観察可能な副作用を引き起こすことなく、オブジェクトについてより一般的な観察を行うメソッドの正しい用語です。副作用を引き起こすことを主な目的とするメソッドはミューテーターメソッドです。したがって、セッターはミューテーターメソッドの例です。パブリックセッタは、クラスがデータに不変条件を適用することを不可能にするため、優れたエンジニアリング手法としては避けるべきです。クラスが通常適用すべき抽象化の障壁に違反します。
技術的な会話でゲッターとセッターを区別できるのは良いことです。 Accessor
メソッドはmodifier
メソッドのパートナーです。 Accessor
sはオブジェクトの状態を読み取り(getA()
)、modifier
sは状態を書き込みます(setA(Object)
)。
オブジェクトの内部へのアクセス(「読み取りアクセス」または「書き込みアクセス」)を提供するメソッドは、「アクセサメソッド」です。
ここの著者は確かにこの方法でそれを使用します:
この用語は、Common LISP(すべてではないですか?).