• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:フィールド、インスタンス変数、プロパティ、…)

フィールド、インスタンス変数、プロパティ、…

このQ&Aのポイント
  • C++では、クラスの構成要素はメンバと呼ばれ、メンバには変数と関数と二種類あり、変数はメンバ変数(別称データメンバ)、関数はメンバ関数と呼ばれていました。
  • しかし、Javaではメンバ変数がフィールド、メンバ関数がメソッドと呼ばれるようになりました。さらに、フィールドがインスタンス変数やプロパティとも呼ばれるようになり、混同が生じています。
  • なぜデータメンバをフィールドと言い換えたのか、そして、なぜ(1'')や(1''')といった用語を使うのかについての詳しい説明をお待ちしています。

質問者が選んだベストアンサー

  • ベストアンサー
  • Lieserl
  • ベストアンサー率81% (31/38)
回答No.2

■まずは成り立ちや定義から Objective-C由来の名称なので、データメンバをフィールドと言い換えた訳ではありません。 メソッドも同様です。 インスタンス変数については、細分化する際にそういう名を与えているだけです。 メンバ[フィールド[クラス変数, インスタンス変数], メソッド ] プロパティはbeanとしてアクセスする側での呼び方です。 実装はフィールドだったり、アクセッサメソッドだったりと異なりますが、 使う側からは一緒ですし、後から実装が変わっても、使う側は変わりません。 ■なぜ混同しているか 1. それぞれ会話している人の視点が違う場合がある。 ・JSPでbeanを使う人はプロパティとして考える。 ex. <jsp:getProperty name="foo" property="bar" /> ・javaからbeanを直接使う人は、実装に応じて、フィールドにアクセスしたり、アクセッサメソッドを経由してアクセスする。 ex. a = foo.bar; a = foo.getBar(); foo.setBar(a); ・UMLで考えると、fooオブジェクトのbar属性。 2. 自分の経験にそった用語を使ってしまう。 ・他の言語をやってきた人が、過去の経験に合わせた、別の用語に置き換えて考える、 そしてその用語をそのまま使ってしまう。 3. ちゃんとわかってない。 ・フィールドの事をクラス変数と言う人は時々います(クラスの変数だかららしい) ・インスタンスを格納するからインスタンス変数と呼ぶ人もいましたね。

erichgumma
質問者

お礼

素晴らしく明解な回答をいただき、大感謝です。 身体をぐーんと空高く持っていってくれて、「ほら、こんなだよ』と全体を鳥瞰させてもらったような感じで、視野が一気に広がりました。 ありがとうございました!!!

その他の回答 (1)

  • vaguechat
  • ベストアンサー率85% (47/55)
回答No.1

事情に詳しいわけではないが、 http://java.sun.com/docs/books/jls/third_edition/html/classes.html classの構成要素はmember、initializer、constructor。 fieldとmethodはmemberの一種。 fieldにはstatic field (class variable)とinstance variable (non-static field)がある。 括弧書きの方はsometimes calledな名称。 プロパティという用語はJava言語仕様では定義されておらず、 JavaBeansなどの言語仕様外のフレームワークなどで使用されている。 さらに言えばプロパティとフィールドに直接の関連がある必要はない。 (A) 計算機科学上、フィールドとは部品としての性格を強調したデータの名称なのでデータであることを示唆していないのではない。 元々区画された畑などのメタファー由来であり表の欄のことやデータベースなどでも使われている。 どういう経緯でJavaではフィールドになったかは知らない。 C由来かもしれないし、他のプログラミング言語由来、もしくはオブジェクト指向的何かの用語由来かもしれない。 (A) 上述の通り、インスタンス変数はフィールドの一種でしかなく、同じものの言い換えではない。 プロパティもまた異なる概念である。 (B) したがって、異なるものを指すためにそういった用語を使う。

erichgumma
質問者

補足

ご回答、ありがとうございます。 C++でも、メンバ変数には、staticが付くものと付かないものがあります。 C++でも、staticが付くメンバ変数は、クラス固有の変数で、クラス型のインスタンス(=オブジェクト)とは独立に存在します。 Javaの static field と non-static field は、C++のそれらを呼び名を変えて真似たものにすぎないと思います。 本質的な思想としての呼び名の違いを質問しています。 言葉尻を捉える形での呼び名の違いを質問している訳ではありません。 Javaの言語仕様に限定して質問をしているのでもなく、JavaEEまで含めてのトータルな質問をさせていただいています。

関連するQ&A

専門家に質問してみよう