フィールド、インスタンス変数、プロパティ、…
C++では、クラスの構成要素はメンバと呼ばれ、メンバには変数と関数と二種類あり、変数は、
(1)メンバ変数(オブジェクトがデータを保持するメンバである事を強調する為、別称データメンバ)
関数は、
(2)メンバ関数
と、とってもクリアに呼ばれていました。
ところがJavaになって、メンバ変数が
(1’)フィールド
メンバ関数が
(2’)メソッド
と呼ばれるようになりました。
さらに(1’)が、
(1’’)インスタンス変数
(1’’’)プロパティ
という風にも呼ばれるようになり、(1')と(1'')と(1''')が、混同して呼ばれるようになりました。
多くの人は、
「それらは "interchangeable" で同じ意味で用いられるものなのだ」
という根拠がよくわからない『解説』をしますが、同じ意味ならば同じ用語を使った方が全体がスッキリ且つ正確に表現できて都合がいいのに、なんでいろいろな用語を混用するのでしょうか?
(A)そもそも何でデータメンバをフィールドと言い換えたのか?
(a)データメンバの方が、それがデータであることを示唆していていいのでは?
(b)フィールドって、Cの構造体のフィールドから名前が由来しているのでしょうか?
(A)何でわざわざ(1'')や(1''')みたいな用語を使うのか?
(B)どういう意図でそういう用語を使うのか?
そこら辺の事情に詳しい方がいらっしゃいましたら、お教えください。
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. ちゃんとわかってない。
・フィールドの事をクラス変数と言う人は時々います(クラスの変数だかららしい)
・インスタンスを格納するからインスタンス変数と呼ぶ人もいましたね。
素晴らしく明解な回答をいただき、大感謝です。
身体をぐーんと空高く持っていってくれて、「ほら、こんなだよ』と全体を鳥瞰させてもらったような感じで、視野が一気に広がりました。
ありがとうございました!!!
No.1
- 回答日時:
事情に詳しいわけではないが、
http://java.sun.com/docs/books/jls/third_edition …
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)
したがって、異なるものを指すためにそういった用語を使う。
この回答への補足
ご回答、ありがとうございます。
C++でも、メンバ変数には、staticが付くものと付かないものがあります。
C++でも、staticが付くメンバ変数は、クラス固有の変数で、クラス型のインスタンス(=オブジェクト)とは独立に存在します。
Javaの static field と non-static field は、C++のそれらを呼び名を変えて真似たものにすぎないと思います。
本質的な思想としての呼び名の違いを質問しています。
言葉尻を捉える形での呼び名の違いを質問している訳ではありません。
Javaの言語仕様に限定して質問をしているのでもなく、JavaEEまで含めてのトータルな質問をさせていただいています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- C言語・C++・C# C言語 2 2022/07/21 00:02
- JavaScript オブジェクト配列の各メンバを任意の式で評価して、その評価値が最大のオブジェクトを返す関数はありますか 2 2023/05/20 15:02
- C言語・C++・C# 課題でどうしてもわからない問題があったので教えてほしいです、、 メンバ関数add_accept_st 3 2022/06/04 12:23
- HTML・CSS WEBサイトの構築。表示データとWEBデザインを分離する考え方を専門用語・業界用語では何と言うか? 8 2022/09/27 09:16
- その他(Microsoft Office) ピボットテーブルへの集計フィールド挿入 1 2023/02/26 11:33
- Ruby 初心者プログラミング 3 2022/10/12 11:31
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- 会社・職場 一人のメンバだけに土日出勤がある面倒な作業を丸投げ、一方で、上司とそれ以外の同僚達はそのメンバだけハ 4 2023/07/21 10:31
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelからAccessデータを検索す...
-
Accessでボタンを押すと今日の...
-
「#エラー」の回避
-
差し込み文書のルールで if the...
-
accessのフィールドに10桁の数...
-
MS-ACCESSで中央値(ME...
-
Accessで値がnullの場合は計算...
-
【急いでます】コンボボックス...
-
FileMakerで繰り返しフィールド...
-
ピボットテーブルで再表示したい
-
フィールドの中のテキストを分...
-
Enterキーの無効化(ファイルメ...
-
ファイルメーカ Case("テキス...
-
MS-WORDで、あるフィールドに入...
-
Word フィールドのチェックボッ...
-
ファイルメーカーでの西暦から...
-
ファイルメーカー:ピクチャに...
-
SQL文のWHERE句について
-
ACCESSでデータ変更箇所が分か...
-
インディックスまたは主キーに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アクセスで入力したデータの順...
-
「#エラー」の回避
-
差し込み文書のルールで if the...
-
accessのフィールドに10桁の数...
-
ExcelからAccessデータを検索す...
-
Accessで値がnullの場合は計算...
-
Accessでボタンを押すと今日の...
-
FileMakerで画像をまとめて書き...
-
WORD差し込み印刷:日付の処理 ...
-
Access フィールド内の値で、...
-
ACCESSでデータ変更箇所が分か...
-
FileMakerで、フィールドの値が...
-
MS-WORDで、あるフィールドに入...
-
access フィールドのサイズ(文...
-
フィールドの中のテキストを分...
-
Wordでページ番号を計算式で入...
-
FileMakerで外部保存PDFを開く方法
-
ファイルメーカーの集計方法を...
-
ワードでプルダウン項目を作りたい
-
Access フィールドに入力した...
おすすめ情報