• ベストアンサー

教えてください。

今現在、オブジェクト指向について勉強をしているのですが、 いまいち、インスタンスとインスタンス変数とは何かと言われても 的確に答えることが出来ません。どなたか詳しく説明をしてもらえないでしょうか? もう一つ質問があります。UMLも勉強しているのですが、UMLで、 ”メンバーはインスタンス(実例)である。”と、書いているのですが 、どういうことなのでしょうか?? C言語でいう、構造体のメンバーと同じなのでしょうか?? (UMLモデリングの本質 P.41 から抜粋) 色々質問してしまいましたが、宜しくお願いします。

  • Java
  • 回答数4
  • ありがとう数5

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

  • ベストアンサー
回答No.2

hatenan114さんがお知りになりたいことは、インスタンスとインスタンス変数の違い(それぞれの概要)ということでよろしいでしょうか? (1)インスタンス 定義されたクラスの実態といえるでしょう。 クラスはご存知でしょうか?クラスとはデータとメソッド(関数)をまとめたオブジェクトの雛型のことです。 クラスはあくまで雛型ですので、この実態が存在するのですがそれがインスタンスです。 例えば、Person(人)クラスがあったとして、そのクラスをインスタンスを2つ生成します。そして片方のインスタンスにhatenan114さんの情報を設定し、もう一方にPkakedashiの情報を設定するということができるわけです。つまり、同じ型でも中身の違うものが生成することができるのです。 (イメージは構造体に近いですね。) (2)インスタンス変数 インスタンスのデータのことです。 クラスはデータとメソッドの集まりです。そしてこのデータにはインスタンス変数とクラス変数と2つの種類に分けることが出来ます。 インスタンス変数はインスタンス固有のデータとなります。 例えば先ほどの例でいうとPersonクラスのデータに名前という文字列データを保持するという定義とした場合、生成した2つのインスタンスに固有の値(hatenan114さん、Pkakedashi)を設定することができるのです。 この値は各インスタンス固有の値になります。 余談ですが、クラス変数とは、クラス固有の値になります。 例えば、アプリケーションにいくつのPersonクラスが存在しているかをチェックする際にクラス変数として生成数を定義しておき、生成するたびに各インスタンス内で数を増やしても、変更している値は全て同じ値なので上手く値の管理ができます。(Cでいうとグローバル変数的な値がこれにあたります。) UMLについてですが、 >”メンバーはインスタンス(実例)である。” 自分もこの部分は?????????? 何を言わんとしているのかが判らないですね。 ちなみにこの説明はUMLの何ついて説明しているのでしょうか?

hatenan114
質問者

お礼

回答有難うございます。 すごく親切に解説していただいたおかげで、もやっとしていたところが、少し晴れた気がします。 オブジェクト指向についてこれから色々質問することがあると思いますが、宜しくお願いします。 このたびは、有難うございました。 メンバーはインスタンス(実例)である。については、みなさんが教えてくれたことで、なんとなく自分なりに理解できました。

その他の回答 (3)

回答No.4

外国から来た技術を習得する上で、カタカナ語(外来語ともいいますかね。)が頻繁に出てくるのは致し方のないことです。Javaを勉強するに当たっては、誰もが通る道。あせらず、のんびりといきましょう。 フィールド  →「変数」(UMLでは、属性) メソッド   →「関数」(UMLでは、操作) メンバ    →フィールドとメソッドのこと。 インスタンス →「参照変数」 クラス    →「型」(分類した後にまとめられたもの。) オブジェクト →クラスによって定義されているわけでもなく、インスタンス化により実体があるわけでもなく、もやもやっとした何か。(数学でよく、分らないものをxとしましたよね。あれとおんなじようなものです。) newしなくても利用できるメンバ(クラス名がインスタンス名となる。) ・クラス変数 ・クラスメソッド[staticメソッド、静的メソッド] newしないと利用できないメンバ(インスタンスの後に . を付けて使用。) ・インスタンス変数 ・インスタンスメソッド これ以外にも、ローカル変数(ブロックの中だけで使用可能な一時的な変数)というのもありますね。 >”メンバーはインスタンス(実例)である。”と、書いているのですが >、どういうことなのでしょうか?? インスタンス化された属性や操作のことを言っているのでしょう。Javaで言えば、「インスタンス変数」や「インスタンスメソッド」がこれに該当します。 オブジェクト 【object】 http://e-words.jp/w/E382AAE38396E382B8E382A7E382AFE38388.html インスタンス 【instance】 http://e-words.jp/w/E382A4E383B3E382B9E382BFE383B3E382B9.html

hatenan114
質問者

お礼

回答有難うございます。 すごく勉強になりました。 オブジェクト指向についてこれから色々質問することがあると思いますが、宜しくお願いします。 このたびは、有難うございました。 メンバーはインスタンス(実例)である。については、みなさんが教えてくれたことで、なんとなく自分なりに理解できました。

noname#49428
noname#49428
回答No.3

「メンバーはインスタンスである」というのは、 「メンバーもまた、インスタンスである」ということです。 構造体とは全く関係ないことです。 これは、メタモデルの概念によるものなので言語には依存しませんので、言語にとらわれず考えると分かりやすいかもしれません。

hatenan114
質問者

お礼

回答有難うございます。 私も、色々みなさんの回答から、そのような気がしてきました。 また、宜しくお願いします。

  • fortranxp
  • ベストアンサー率26% (181/684)
回答No.1

インスタンス化するとは クラスに定義されている フィールド変数やメソッドの ためのメモリーを実際のPCに 確保すると理解してます。 intやcharなどのプリミティブな 型はnewする必要がないのは メモリをたくさん消費しないので 無視できるのではないでしょうか. ちなみにjavaは中間言語ですが 実行時は機械語に翻訳されて 実行するのでメモリがどの程度 必要か定義しておく必要があると 思います。

hatenan114
質問者

お礼

回答有難うございます。 今の私には少し難しいようです。 もう少しすれば、プリミティブやnewという言葉の意味がわかるかもしれません。そのときには、この回答の意味がわかると思います。 またよろしくお願いします。

関連するQ&A

  • UMLでの「オブジェクト」と「インスタンス」の違い

    Java的な概念での説明や、単に「オブジェクト指向」と銘打つHPなどの説明では、「オブジェクト」と「インスタンス」は同じものとして扱われたり、「クラスオブジェクト」「インスタンスオブジェクト」等という言葉を持ち出し、単独の「オブジェクト」という言葉は存在しないなどと取れる説明をしていることが多いように感じます。 しかし、一般的にUMLを元にしたオブジェクト指向の考え方の下では「オブジェクト」と「インスタンス」という言葉は明確に使い分けられており、また「クラス」と「オブジェクト」は対極にあるものとして扱われるため、「クラスオブジェクト」等という言葉が使われることもありません。 下記URLと書籍では、「オブジェクト」と「インスタンス」を明確に使い分けています。 http://www.atmarkit.co.jp/fjava/devs/object04/object04.html テクノロジックアート UMLモデリングL1 P2,3 しかし、この使い分けのニュアンスの違いが理解できません。 オージス総研 初めて学ぶUML 21P では、「型/インスタンス」→「クラス/オブジェクト」という明確な解を提示していますが、微妙な感じだし、何より前出の2者とは明らかに異なる意味合いで使われています。 人によって異なる意味合いで使われているということは理解しています。また、その人による微妙な違いもおおむね理解しているつもりです。しかし、上記の2者のニュアンスだけは理解できない状態です。このニュアンスがわかる方、解説よろしくお願いします。

  • E-RモデリングとUML

    E-RモデリングとUMLとの関係、どうなんでしょうか・・・ E-Rのエンティティ-インスタンスと、UMLのクラス-インスタンスとが対応しているように思います。 とすると、テーブル1つに対しオブジェクト1つ、となるのでしょうか?

  • オブジェクト指向とUMLについて

    「オブジェクト指向」と「UML」の勉強をしようと思っているのですが、お勧めの参考書またはWebサイトをお教えていただきたいです。 ※オブジェクト指向については、JavaやC++のような言語についてではなく、オブジェクト指向についてです。 ちなみに私はJavaは経験したことがありますが、正直"オブジェクト指向がなんたるか"はわかっていないです… 現在業務でJavaに携わっていてるので、オブジェクト指向という考え方をこの機にしっかりと学べればと思っています。 UMLはまったく無知です; クラス図やシーケンス図など中身にナニがあるか微妙に知っているだけです…; どちらか片方でも良いので何かございましたら、お教え願います。 …参考書だと電車で読めるので、ちょっとだけ喜びます(笑

  • オブジェクト指向コンパイラのインスタンスの構造について

    インタプリタやコンパイラの中身について興味があり勉強しています。といってもまだ簡単な字句解析や構文解析のレベルです。 読んだ本にはオブジェクト指向言語については書かれていませんでした、そこで一つ疑問に思ったこと点について質問させてください。 簡単な言語の場合、使用する変数が宣言されると、その領域がスタックやヒープ空間に確保されるという風に理解しました。 一方オブジェクト指向言語にて、あるクラスのインスタンスを生成した場合を考えます。インスタンスには変数の他に関数やメソッドといった処理手続きが含まれていますよね。その手続きをコンパイルしたコードは何処に置かれているのでしょうか? 手続きのコードもヒープ空間に確保された各インスタンスの領域にコピー(?)されて実行されるのでしょうか。それとも処理手続きの実体は実行プログラムに含まれていて全インスタンスで共通で利用するようになっているのでしょうか。 初心者の素朴な疑問です、ご回答いただければ幸いです。

  • オブジェクト指向設計の勉強(習得?)方法について

    現在Javaでのプログラミングを始めて3ヶ月ぐらいのプログラマです。 みなさんオブジェクト指向での設計はどのように勉強されていますか? 「10日UMLで覚えるUML」などの書籍で勉強して、一応UMLの表記は少しは覚えたのですが、 肝心のオブジェクト指向での設計というものがぜんぜん身についていません。(頭悪くて・・・) みなさんの勉強方法や、お勧めの講習会など ありましたら、ぜひおしえてください。 よろしくお願いします。

    • ベストアンサー
    • Java
  • VisualBasicを学ぶよいテキストはありませんか?

    質問です。 VisualBaisc2005ExpressEditionを趣味で勉強しています。 私に適した参考書は何がいいでしょうか?お勧めのテキストを教えてください。 過去に経験した言語はMS-BaiscとC/C++です。 VB.NETの基礎的なIf ThenやFor Nextや配列や変数など制御構造の部分などは すぐに理解できて簡単なプログラミングが出来るようになったのですが。 VB特有のオブジェクト指向の応用と言うか利用の仕方がいまいちよくわかりません。 オブジェクト指向自体の知識はC++を勉強したのでわかりますが・・・ 簡単なプログラムは作れるのですが、オブジェクト指向をバリバリつかったプログラムを 作るのに必要な参考書を教えてください。よろしくお願いします。

  • オブジェクト指向分析・設計(OOAD)の重要性

    オブジェクト指向を用いた開発工程について、分析・設計工程が重要だ、分析・設計モデリングについてよく学んでおくべきだとよく言われますが・・・どうしてなんでしょうか? 私個人としては、オブジェクト指向言語(JAVA)による実装の方がよっぽど重要のように思うのですが。。。 すごい基本的な質問かもしれませんが、OOADがどれぐらい、またなぜ重要なのか教えてください。

  • オブジェクト指向の特徴

    プログラミングにおいて Java言語などのオブジェクト指向とは 「クラス(設計図)からインスタンス(実体)を量産できる。」がオブジェクト指向ではないプログラミング言語との決定的な違いなのでしょうか? またオブジェクト指向とオブジェクト指向ではない言語の決定的な違いや 実際に実務において経験した感覚的な違いなどがあれば教えてください。 インターネットに乗っていない些細なことでも構いません。

    • ベストアンサー
    • Java
  • Cに慣れてしまった人、どのようにJAVAを克服しましたか?

    JAVAについて質問です。 私はC言語をこの1年間勉強してきました。 そしてC言語のコーディングの仕方に慣れきってしまったせいか、どうしてもJAVAのオブジェクト指向 というものが理解できません。 コーディングも上手くいきません。 クラスやメソッドやインスタンスがどうとかコンストラクタが・・・などの横文字が全然意味が分かりません。 C言語で言うとどれがどこに当たるのか!? とかいう風に置き換えて考えようとしても上手く行きません。 こういう、横文字が理解できて、オブジェクト指向の考え方に慣れる為にはどのようにしたらいいでしょうか? また、C言語からプログラミングに入って、後からJAVAを勉強する場合、どのような点に気をつければ良いでしょうか? また、JAVAの克服法を教えてください。

    • ベストアンサー
    • Java
  • 構造体変数がないとメンバ操作できないのはなぜ?

    C言語の構造体に関して質問がありますが、structで型を作成して、構造体変数にてメンバの代入・参照をする。ということなんですが、なんでメンバ操作には構造体変数からでないといけないのでしょうか? 直接、型枠にてメンバ操作をすれば良いのに、なぜ構造体変数から操作しないといけないのでしょうか? 「クラス」や「オブジェクト」みたいに、一々ゼロから作成したり、コピペで作成しなくても済むように、このような形になっているのでしょうか? 回答の方よろしくお願いします。

専門家に質問してみよう