15

私は「アクセサ」という言葉の使い方について議論をしてきました (コンテキストは Java プログラミングです)。私は、アクセサーを暗黙のうちに「プロパティ アクセサー」と考える傾向があります。つまり、この用語は、多かれ少なかれ、オブジェクトの内部状態への直接アクセスを提供するために存在することを意味します。相手は、何らかの方法でオブジェクトの状態に触れるメソッドはすべてアクセサーであると主張します。

皆さんが私の主張に勝てないことはわかっていますが、この用語をどのように定義するのか知りたいです. :)

4

8 に答える 8

16

アクセサーというと、ゲッターやセッターを思い浮かべがちです。

オブジェクトの内部状態に触れるすべてのメソッドがアクセサーであると主張することで、オブジェクトの状態を実際に使用するインスタンス メソッドはすべてアクセサーになるように見えますが、それは正しくないように思えます。オブジェクトの状態を使用しないインスタンス メソッドはどれですか? つまり、何らかの方法でオブジェクトの状態を使用しないインスタンス メソッドは、そもそもインスタンス メソッドであってはならず、クラス メソッドであるべきです。

たとえば、BigDecimal.addメソッドをアクセサーと見なす必要がありますか? メソッドが呼び出されたインスタンスの値を読み取り、add別の の値を追加して結果を返すメソッドBigIntegerです。addインスタンス メソッドがゲッターでもセッターでもないことは、かなり単純明快に思えます。

于 2009-03-08T14:09:34.530 に答える
9

アクセサー メソッドは、Tin に書かれていることを正確に実行します。つまり、副作用なしで型から何らかの状態にアクセスします (おそらく、呼び出し側が通常知っていることではない遅延インスタンス化は別として)。

private int _age;

public int getAge()
{
    return _age;
}

状態を変更するメソッドは、(私の意見では) ミューテーターとしてより有効に考えられます。

于 2009-03-08T14:07:14.427 に答える
4

アクセサ メソッド : getRed、getGreen、および getBlue

これらのメソッドは通常、値にアクセスします。

Mutator メソッド : setRed、setGreen、setBlue

ミューテーターは値を変更します

于 2013-04-24T22:05:00.627 に答える
3

グーグルとウィキペディアに加えて、Java言語仕様はアクセサメソッドの例としてこれを示しています:

private static int N;
public static int getN() { return N; }

つまり、フィールドの値を取得するだけです。コンパイラはこれをインライン化し、単純な読み取りに変換する場合があるため、それ以上のものはおそらくアクセサーではありません。

于 2009-03-08T14:11:07.647 に答える
1

私は常に最初の定義に従ってきました。したがって、一般に、これはゲッターとセッターにのみ適用されます。2 番目の方法を使用すると、ほとんどすべての方法がカバーされるため、あまり役に立ちません。

于 2009-03-08T14:06:26.427 に答える
1

Accessor methods are used to access fields of an object. So getters and setters are both accessor methods. Observer method is the right term for a method that makes a more general observation about an object, without causing externally observable side effects. A method whose primary purpose is to cause side effects is a mutator method. Therefore, setters are an example of a mutator method. For good engineering practice, public setters should be avoided because they make it impossible for a class to enforce invariants on its data: they violate the abstraction barrier that a class should ordinarily enforce.

于 2014-10-16T02:07:56.217 に答える
0

技術的な会話でゲッターとセッターを区別できるのは良いことです。 Accessorメソッドはメソッドのパートナーmodifierです。 Accessorオブジェクトの状態を読み取り ( getA())、modifier状態を書き込みます ( setA(Object))。

于 2009-07-08T00:48:04.967 に答える
0

オブジェクトの内部へのアクセス (「読み取りアクセス」または「書き込みアクセス」のいずれか) を提供するメソッドは、「アクセサー メソッド」です。

ここの著者は確かにこの方法でそれを使用しています:

  1. http://www.javaworld.com/article/2073723/core-java/why-getter-and-setter-methods-are-evil.html

  2. http://c2.com/cgi/wiki?AccessorsAreEvil

この用語は Common Lisp に由来する可能性があると思います (すべてではないでしょうか?) -- アクセサ スロットの値を変更するために setf が使用されます。

于 2015-06-16T01:17:44.993 に答える