- ベストアンサー
教えてください。
今現在、オブジェクト指向について勉強をしているのですが、 いまいち、インスタンスとインスタンス変数とは何かと言われても 的確に答えることが出来ません。どなたか詳しく説明をしてもらえないでしょうか? もう一つ質問があります。UMLも勉強しているのですが、UMLで、 ”メンバーはインスタンス(実例)である。”と、書いているのですが 、どういうことなのでしょうか?? C言語でいう、構造体のメンバーと同じなのでしょうか?? (UMLモデリングの本質 P.41 から抜粋) 色々質問してしまいましたが、宜しくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
hatenan114さんがお知りになりたいことは、インスタンスとインスタンス変数の違い(それぞれの概要)ということでよろしいでしょうか? (1)インスタンス 定義されたクラスの実態といえるでしょう。 クラスはご存知でしょうか?クラスとはデータとメソッド(関数)をまとめたオブジェクトの雛型のことです。 クラスはあくまで雛型ですので、この実態が存在するのですがそれがインスタンスです。 例えば、Person(人)クラスがあったとして、そのクラスをインスタンスを2つ生成します。そして片方のインスタンスにhatenan114さんの情報を設定し、もう一方にPkakedashiの情報を設定するということができるわけです。つまり、同じ型でも中身の違うものが生成することができるのです。 (イメージは構造体に近いですね。) (2)インスタンス変数 インスタンスのデータのことです。 クラスはデータとメソッドの集まりです。そしてこのデータにはインスタンス変数とクラス変数と2つの種類に分けることが出来ます。 インスタンス変数はインスタンス固有のデータとなります。 例えば先ほどの例でいうとPersonクラスのデータに名前という文字列データを保持するという定義とした場合、生成した2つのインスタンスに固有の値(hatenan114さん、Pkakedashi)を設定することができるのです。 この値は各インスタンス固有の値になります。 余談ですが、クラス変数とは、クラス固有の値になります。 例えば、アプリケーションにいくつのPersonクラスが存在しているかをチェックする際にクラス変数として生成数を定義しておき、生成するたびに各インスタンス内で数を増やしても、変更している値は全て同じ値なので上手く値の管理ができます。(Cでいうとグローバル変数的な値がこれにあたります。) UMLについてですが、 >”メンバーはインスタンス(実例)である。” 自分もこの部分は?????????? 何を言わんとしているのかが判らないですね。 ちなみにこの説明はUMLの何ついて説明しているのでしょうか?
その他の回答 (3)
- choconamacream
- ベストアンサー率44% (152/338)
外国から来た技術を習得する上で、カタカナ語(外来語ともいいますかね。)が頻繁に出てくるのは致し方のないことです。Javaを勉強するに当たっては、誰もが通る道。あせらず、のんびりといきましょう。 フィールド →「変数」(UMLでは、属性) メソッド →「関数」(UMLでは、操作) メンバ →フィールドとメソッドのこと。 インスタンス →「参照変数」 クラス →「型」(分類した後にまとめられたもの。) オブジェクト →クラスによって定義されているわけでもなく、インスタンス化により実体があるわけでもなく、もやもやっとした何か。(数学でよく、分らないものをxとしましたよね。あれとおんなじようなものです。) newしなくても利用できるメンバ(クラス名がインスタンス名となる。) ・クラス変数 ・クラスメソッド[staticメソッド、静的メソッド] newしないと利用できないメンバ(インスタンスの後に . を付けて使用。) ・インスタンス変数 ・インスタンスメソッド これ以外にも、ローカル変数(ブロックの中だけで使用可能な一時的な変数)というのもありますね。 >”メンバーはインスタンス(実例)である。”と、書いているのですが >、どういうことなのでしょうか?? インスタンス化された属性や操作のことを言っているのでしょう。Javaで言えば、「インスタンス変数」や「インスタンスメソッド」がこれに該当します。 オブジェクト 【object】 http://e-words.jp/w/E382AAE38396E382B8E382A7E382AFE38388.html インスタンス 【instance】 http://e-words.jp/w/E382A4E383B3E382B9E382BFE383B3E382B9.html
お礼
回答有難うございます。 すごく勉強になりました。 オブジェクト指向についてこれから色々質問することがあると思いますが、宜しくお願いします。 このたびは、有難うございました。 メンバーはインスタンス(実例)である。については、みなさんが教えてくれたことで、なんとなく自分なりに理解できました。
「メンバーはインスタンスである」というのは、 「メンバーもまた、インスタンスである」ということです。 構造体とは全く関係ないことです。 これは、メタモデルの概念によるものなので言語には依存しませんので、言語にとらわれず考えると分かりやすいかもしれません。
お礼
回答有難うございます。 私も、色々みなさんの回答から、そのような気がしてきました。 また、宜しくお願いします。
- fortranxp
- ベストアンサー率26% (181/684)
インスタンス化するとは クラスに定義されている フィールド変数やメソッドの ためのメモリーを実際のPCに 確保すると理解してます。 intやcharなどのプリミティブな 型はnewする必要がないのは メモリをたくさん消費しないので 無視できるのではないでしょうか. ちなみにjavaは中間言語ですが 実行時は機械語に翻訳されて 実行するのでメモリがどの程度 必要か定義しておく必要があると 思います。
お礼
回答有難うございます。 今の私には少し難しいようです。 もう少しすれば、プリミティブやnewという言葉の意味がわかるかもしれません。そのときには、この回答の意味がわかると思います。 またよろしくお願いします。
お礼
回答有難うございます。 すごく親切に解説していただいたおかげで、もやっとしていたところが、少し晴れた気がします。 オブジェクト指向についてこれから色々質問することがあると思いますが、宜しくお願いします。 このたびは、有難うございました。 メンバーはインスタンス(実例)である。については、みなさんが教えてくれたことで、なんとなく自分なりに理解できました。