• ベストアンサー

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

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

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

  • ベストアンサー
  • kacchann
  • ベストアンサー率58% (347/594)
回答No.2

「オブジェクト指向(開発)」や「UML」については まったくわからない者です。 --- さっき本屋で買ってきた 「UMLユーザーガイド」(ピアソンエデュケーション)の 「インスタンス」の章には、 「『クラスのインスタンス』がオブジェクト」 「インスタンスとは、抽象概念の具体的な表れのこと」 「それを踏まえれば、インスタンスはオブジェクトとは限らない (※例えば「関連」のインスタンスは、オブジェクトとは言わない)」 「この「微妙」な違いを「本当に」気にかけるのは、 「深い」経験のある「モデル作成者」だけ」 「インスタンスという用語とオブジェクトという用語は ほとんど同義に使われる」 という主旨のことが書かれています。 (※つまり、インスタンスとは、 「クラスから作られた実体(オブジェクト)」だけを指す用語にとどまらず、 もっと広く「抽象的なものから作られた具体的な何か」を指す用語、 ということだと思うけど…) でもこの本でも、その他の部分では、 2つの用語を「思いっきり同義につかっている」ようです。 --- この解釈は、 質問者さんのお挙げになった 「テクノロジックアート UMLモデリングL1」 「オージス総研 初めて学ぶUML」 の記述と符合するのでは? このページ http://www.atmarkit.co.jp/fjava/devs/object04/object04.html は、「使い分けてはいない」ような気がしますが…。 (というか説明になってないような気がする) --- <オマケコーナー> 「Javaプログラミング」の入門ページですが、 http://www.nextindex.net/java/intro.html http://www.nextindex.net/java/instance.html これの「インスタンスという用語」についての解説を読むと、 「かなり別モノ」のようですが…。 (※この記述がどこまで正しい(※または一般的な)のかはわかりませんが…)

arakororin
質問者

お礼

>「『クラスのインスタンス』がオブジェクト」 >「それを踏まえれば、インスタンスはオブジェクトとは限らない 非常にわかりやすいですねー。ありがとうございます。 >(※例えば「関連」のインスタンスは、オブジェクトとは言わない)」 そうですよね。関連のインスタンスはリンクと呼ぶはずですから。 >「この「微妙」な違いを「本当に」気にかけるのは、 >「深い」経験のある「モデル作成者」だけ」 なるほどなるほど。超明快ですね。私のおぼろげながらの理解が正しいことがわかりすっきりしました。 >質問者さんのお挙げになった >「テクノロジックアート UMLモデリングL1」 >「オージス総研 初めて学ぶUML」 >の記述と符合するのでは? はい、そのとおりです。 >「Javaプログラミング」の入門ページですが、 >これの「インスタンスという用語」についての解説を読むと、 >「かなり別モノ」のようですが…。 えーと一般的ですよ。Javaプログラマの間では。私にはその認識はあったので、「UMLの認識は違うのかなー」という疑問を持ち質問をした次第です。 まとめるとこんな感じですね。 ●Javaプログラマ等の理解 オブジェクト=インスタンス+クラス or オブジェクト>インスタンス or オブジェクト≒インスタンス or オブジェクト=インスタンス オブジェクトのほうが偉い(大きな概念)と思っている。 ●UMLモデラーの理解 インスタンス=オブジェクト+リンク+その他 or インスタンス>オブジェクト インスタンスのほうが偉い(大きな概念)と思っている。 両者に明確な認識の差があること自体を把握することができ、非常に勉強になりました。ありがとうございました。 私の意見を言わせてもらうと、UMLモデラーとJavaプログラマの間に決定的な認識の差があることは間違いないのですが、だからといってJavaプログラマが間違っているとは思いません。JavaではJavaなりの「オブジェクト」の考え方があり定着しているので、2つの異なる概念が存在しているのであり、その差異を知っていること自体が重要なのだ、と私は思いました。 一般的なJavaプログラマのように、Java的オブジェクト指向しか知らないのはもちろん問題ではあるのですが、自分とは異なる概念を持つものを「間違い」とし、馬鹿にするような傾向のあるUMLモデラーの態度も問題だなーと思いました。

その他の回答 (5)

回答No.6

以下、「プログラマの域を脱していない方の憶測に基づく内容」であるため、あくまで参考程度に…。 今一度、自分の文章を読み返してみましたが、#4では「UMLでもJavaでも同じ」と知ったかぶってたのに、いきなり#5では「開発プロセスによって違う」と、統一されていませんでしたね。英単語の解釈など、全部が全部間違いとは思わないのですが、少しだけこちらの方で補足しておきます。 >もしこれが本当だとすると、「クラス」と対になる言葉は必ず「インスタンス」であり、「クラス」と「オブジェクト」が対になる使われ方はありえないという事になってしまいますが、そのような事実はありません。質問は「UMLモデラーはクラスとオブジェクトは対極にあるものとして扱っていますが、この使い分けのニュアンスの違いを解説してください」です。 結論として、以下のようになるのではないか?、というのが私の個人的な見解です。 ※使い分けのニュアンスの違い 分析・設計フェーズの時 「クラス」と「オブジェクト」が対になって使われる事が多い。 実装フェーズの時 「クラス」と「(クラスの)インスタンス」が対になって使われる事が多い。 ポイントは、「オブジェクト指向の開発プロセスにおいて、いつの段階でクラス図が作成される(もしくは、クラスが抽出される)のか?」ということだと思います。単に、言葉としては、#1さんの言う通り、「オブジェクト」=「クラスのインスタンス」でいいと思うのですが、ここで注意すべき点は、「オブジェクト」=「インスタンス」ではなく、「クラスの」というのが右辺には必要だということです。これを言い換えると、「インスタンス」というのは、どのクラスに属するものなのかが常に必要となってくるので(Javaでいうnew演算子の使用の時など)、それがまだ特定されていない時(クラスがまだない時)は、「インスタンス」ではなく「オブジェクト」という言葉を代わりに使用しておいた方が無難である、という風になると思います。 以上のように考えれば、上記のニュアンスの違いも納得できるものと思います。具体的には、分析・設計フェーズの時には、ユースケース図(アクターやユースケース)やユースケース記述(シナリオやイベントフロー)により、「オブジェクト」が業務レベルで何を指すのかはある程度分るものの、「クラス」がない、もしくはクラス図の作成中だったりするため、UMLモデラーさん達は、上記の2語だけを使用することが多い、と。 はたまた、実装フェーズの段階になってくると、もう既にクラス図やシーケンス図にステートチャート図など、「クラス」と「インスタンス」の両方とも、実際に業務の中で何を指すのかが明白になっているので、わざわざ概念的な言葉(オブジェクト)を使用せずに、抽象(クラス)、具象(インスタンス)の二原論的な考え方をすることが多い、と。 以下、上記の事柄に関するお勧めサイトです。 http://www.engineersguide.jp/Interviews/Yamamoto/UML_Lab02.html あと、以下のサイト内でも、最後の方で次のような記述があります。 http://itpro.nikkeibp.co.jp/free/NIP/NIPCOLUMN/20021225/2/ 「オブジェクト指向は実装を重視する考え方なので,プログラミング言語や開発環境とペアーで利用しないと意味が無いという側面を持つ。このためプログラミング言語やオブジェクト指向開発環境ごとに微妙に異なるオブジェクト指向論が存在することになる。」 質問者さんのおっしゃっている「UMLモデラー」が主にJavaを使用されている方でしたら、ここまでの説明で大丈夫だと思うのですが、もし他の言語(C++,C#,VB.NET,…)の事まで考慮すると、私自身、あまりそちらの方には経験がなかったりするので、もうお手上げ状態です。そうなってくるとやはり、以下のサイトより最新版のUML仕様書(英語)をダウンロードして、調べるしかないように思われます。(何せ、どの国のUMLモデラーさんも、このドキュメントを元にオブジェクト指向をしているはずですから。) http://www.omg.org/technology/documents/formal/uml.htm

arakororin
質問者

お礼

たびたびのご回答ありがとうございます。 http://www.engineersguide.jp/Interviews/Yamamoto/UML_Lab02.html >同じ言葉を用いていても、 >プログラムの実装における「オブジェクト」「クラス」と、 >分析・設計における「オブジェクト」「クラス」は別物なのです。 明確に物語っていますね。表現方法は少し違いますがJavaプログラマとUMLモデラーのオブジェクト指向は異なる概念であるという感じですよね。 >プログラミング言語やオブジェクト指向開発環境ごとに >微妙に異なるオブジェクト指向論が存在することになる。 これも明快ですね。 上記2点から、「なんか自分の概念と異なるオブジェクト指向があるらしい」というレベルから「オブジェクト指向概念は複数存在する」と明確に把握できました。 >「UMLモデラー」が主にJavaを使用されている方でしたら 「オブジェクト指向は実装を重視する考え方なので」とは反する考え方ではありますが、私はUMLとはプログラミング言語に依存せず独立して存在していると思っています。また、実装するプログラミング言語が決定していなくともUMLモデリングは可能と考えています。 「Javaプログラマ」がUMLモデリングを行うことは可能だと思いますが、Javaに縛られている限り「UMLモデラー」ではないという理解をしています。もちろん2つのオブジェクト指向を使い分けることができる人は「Javaプログラマ」でありかつ「UMLモデラー」でもある人だと思います。 で、もともとの質問は「(言語に縛られない)UMLモデラー独自の概念をきちんと理解したい」というのが質問の趣旨でした。この辺は少し解決しない部分が残っていますが、「オブジェクト指向概念は複数存在する」と明確に把握できた点は有益でした。ありがとうございました。

回答No.5

引続き、#4です。 >と、書いておいてなんですが、おぼろげながら分かってきた気がします。UMLでのインスタンスという言葉は、オブジェクトを含んだより大きい概念で、インスタンスに含まれるのはオブジェクトだけではないという感じなんだろうなーと思ってきました。 >(※つまり、インスタンスとは、「クラスから作られた実体(オブジェクト)」だけを指す用語にとどまらず、もっと広く「抽象的なものから作られた具体的な何か」を指す用語、ということだと思うけど…) 「大きい概念」とか「広く」といったような表現が正しいのかどうかは、疑問ですね。単に、「object」や「instance」という言葉が、「object-oriented」よりも前から、英語圏の人達によって使われてきただけですから。もちろん、英語で書かれたCやCOBOLなどのプログラミング書や、はたまた、コンピュータ関連以外の専門書などでも、「object」や「instance」という言葉は、様々な所で使われているでしょうけども。 >「この「微妙」な違いを「本当に」気にかけるのは、「深い」経験のある「モデル作成者」だけ」 そんなに、経験豊富なUMLモデラーさん達を持ち上げることはないと思います。ただ単に、カタカナ語辞典を調べればいいだけですね。 >そういう考えもあるのですか?どういう場面で使われる概念なんですかね… #3さんの具体例を元に説明すると、以下のようにもなるかと。 基本的に、自動車メーカーのCEOやCIOといった、上の人達(経営者さん)にとっては、クラスとかインスタンスよりも、もっと広い意味での、「オブジェクト的な考え方」が、経営戦略やITの有効利用等により必要となってくるはず。 ところが、実際には、R&Dを始めとする研究、開発、設計等に携わっている専門家や技術者さんにとっては、ハイブリッド車の改良など、「クラス的な考え方」をされているはず。 そして、実際にその車を販売し、車検等のメンテナンスなどに携わっている販売員やディーラーさんにとっては、「インスタンス的な考え方」で、常にCSの向上などを目指されているはず。 オブジェクト指向とは、この世の中にある、あらゆるモノを「オブジェクト」とすることであり、その中でもより抽象的なモノを「クラス」、具体的なモノを「インスタンス」としているだけです。 あと、補足的になりますが、以前、C&C++のカテゴリにて、以下のような質問がされていましたが、この中によると、分析・設計などのような上流工程にいけばいく程、「オブジェクト」という言葉を使い、プログラミング・テストなどの下流工程にいけばいく程、「インスタンス」という言葉を使うらしい、とのことです。ただ、実際の所、UMLの様々なモデル図は、要求分析からテストまでのいろんなところで使用されているのですけども。

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1782054
arakororin
質問者

お礼

>オブジェクト指向とは、この世の中にある、 >あらゆるモノを「オブジェクト」とすることであり、 >その中でもより抽象的なモノを「クラス」、 >具体的なモノを「インスタンス」としているだけです。 もしこれが本当だとすると、「クラス」と対になる言葉は必ず「インスタンス」であり、「クラス」と「オブジェクト」が対になる使われ方はありえないという事になってしまいますが、そのような事実はありません。質問は「UMLモデラーはクラスとオブジェクトは対極にあるものとして扱っていますが、この使い分けのニュアンスの違いを解説してください」です。 >この中によると、分析・設計などのような上流工程にいけばいく程、 >「オブジェクト」という言葉を使い、 >プログラミング・テストなどの下流工程にいけばいく程、 >「インスタンス」という言葉を使うらしい、とのことです。 この方は、JavaプログラマとUMLモデラーの間に相違がありそうだというところに気づき、その違いを説明しようとしているのだと思います。しかしこの説明だと、下流工程ではオブジェクトという言葉は使わない、UMLモデラーはインスタンスという言葉は使わないということが前提でなければ成り立たない理論でありますが、そのような事実もありません。プログラマの域を脱していない方の憶測に基づく内容に感じます。

回答No.4

個人的には、「UMLモデラー」と呼ばれる人達とは一緒に仕事はしたことがないのですが、UMLの独学をしていた「経験者」として、一意見を述べさせて頂きます。 まず始めに、オブジェクト指向というより、コンピュータ関連での「オブジェクト」と「インスタンス」の違いは、以下のようになると思います。 ・「オブジェクト」はその時の状況により、「クラス」や「インスタンス」などのような別の表現で使われることがある。 ・「クラス」は、抽象的な意味を持つオブジェクトであり、反対に「インスタンス」は、具体的な意味を持つオブジェクトである。 以上の2点は、モデリング言語UMLやプログラミング言語Javaにかかわらず、同じオブジェクト指向における概念だと思います。なので、… >私の意見を言わせてもらうと、UMLモデラーとJavaプログラマの間に決定的な認識の差があることは間違いないのですが、 というのが、よく分からないのですが。個人的にはどっちも一緒で、そんなことはないと思います。 勘違いされる要因の一つに、UMLの中でオブジェクト図というのがあります。これはどう考えても「インスタンス図」ですよね。以下のサイト内の、下の方にある【用語解説:オブジェクト】でも、同じような事が書かれています。 http://www.atmarkit.co.jp/fjava/devs/renew_uml01/renew_uml01.html それから、純粋に言葉の持つ意味を知りたければ、辞書、辞典を使えばいいと思います。「e-Words」や「フリー百科事典『ウィキペディア』」でも一応調べてはみたのですが、両者の明確な違いについてまでは、載っていませんでした。ただ、Infoseekのマルチ辞書ではおもしろい結果が得られました。以下がその内容です。 国語辞典 オブジェクト→一般的な意味のみ。 インスタンス→該当する項目なし。 カタカナ語辞典 オブジェクト→一般的な意味と、コンピュータ用の両方とも。 インスタンス→一般的な意味のみ。 英和辞典 object→一般的な意味と、コンピュータ用の両方とも。 instance→一般的な意味と、コンピュータ用の両方とも。 以上の結果を元に考察すると、英語圏では常に、どちらの意味で使用されているのかを文脈や前後関係などから解釈しているので、それほど問題はないけれども、日本語の場合、現時点(2005年)ではまだ、「インスタンス」などの言葉がそれほど普及していないため、誤解を生じる場合がある、と言えます。 そのような事を考慮してか、以下のサイト内でも、「説明」の下の方で次のように記されています。 http://www.kab-studio.biz/Programing/JavaA2Z/Word/00000063.html 引用箇所→「さらに、『インスタンス』がそのものずばり『実体』としての意味として使用されることがあるため、特に英文に出てきた場合には文脈から把握する必要がある。」 以上の事柄もろもろを踏まえた上で…。 >(※例えば「関連」のインスタンスは、オブジェクトとは言わない) この日本語の表現に、ものすごく違和感があるのは、僕だけでしょうか?なんでわざわざ、カタカナ語辞典にしか載っていないような言葉で説明するかなー、って感じ。ちなみに、私が独学の時に使用していた本(「10日でおぼえるUML入門教室」、著者:株式会社オージス総研、発行所:株式会社翔泳社)では、p.87の「関連」の説明にて、次のように表現されています。 「インスタンス同士にリンク(つながり)がある場合、普通、各インスタンスに対応するクラス間に関連があるといえます。クラスから具体例を作成したものがインスタンス(オブジェクト)であるのに対して、関連を具体化したものがリンクです。」 専門用語(インスタンス)と一般的な言葉(具体例、具体化)をきれいに使い分けていて、やみくもにカタカナ語(インスタンス)などの使用を避けていますよね。

  • masusun
  • ベストアンサー率15% (44/285)
回答No.3

ニュアンスは微妙です。 どうとでも解釈できると思いますので正解はないでしょうが、1つの見解として。 自動車工場で車というモノ(オブジェクト)を作りたいときには、 タイヤ、エンジン、シート、ハンドル・・・(インスタンス)を生成して から組み立てて作りますよね。 これは車を主体に捕らえて考えているからですが、 エンジンを主体(オブジェクト)と考えればギアやポンプ、ラジエータ・・・を生成し組み立てる必要があります。 2つのファイルの差分を調べるクラスA DBへデータを登録するクラスB クラスAとBをインスタンス化し実行するクラスC 「差分更新処理」をするということを主体に考えれば、 オブジェクトCはAとBをインスタンス化(インスタンスオブジェクト)し形成されます。 つまり主体をどこに置くかで表現も非常に広義になると思います。 この考え方をすれば、 >では、「型/インスタンス」→「クラス/オブジェクト」と >いう明確な解を提示していますが、 これもなんとなくニュアンスがわかるのではないでしょうか?

arakororin
質問者

お礼

ありがとうございます。 >自動車工場で車というモノ(オブジェクト)を作りたいときには、 >タイヤ、エンジン、シート、ハンドル・・・(インスタンス)を生成して >から組み立てて作りますよね。 > >つまり主体をどこに置くかで表現も非常に広義になると思います。 私の理解したJavaプログラマ的オブジェクト指向ともUMLモデラー的オブジェクト指向とも異なる新たな概念ですね。なんとなくですが、特殊相対性理論の基本概念の説明に似てるなーと感じました。 そういう考えもあるのですか?どういう場面で使われる概念なんですかね…

  • Interest
  • ベストアンサー率31% (207/659)
回答No.1

そこらへんは、やらしいところですね。 「インスタンス」は「クラス(型)から生成される実体」です。 広義の「オブジェクト」は「一意に識別可能なモノ」です。 狭義では「クラスのインスタンス」になります。 文脈によって使い分けてください。 混乱しそうでしたら、とりあえず「クラスのインスタンスをオブジェクトという」と覚えておけば大丈夫でしょう。

arakororin
質問者

お礼

ご回答ありがとうございます。 …質問が分かりにくかったようですね。すみません。 質問の内容を明確にします。 端的にいうと、UML関連の書籍やHPでは、「オブジェクト」と「インスタンス」を明確に使い分けているのですが、どのようなニュアンスをこめて使い分けているのでしょうか、という感じになります。 より具体的にいうと 下記URL中の http://www.atmarkit.co.jp/fjava/devs/object04/object04.html 【クラスとインスタンス】 「クラスはオブジェクトを抽象化したもの、または同じ特性を持ったオブジェクトの集合です。一般的に1つのクラスは複数のインスタンスを持っています。」 もしくは 下記書籍の テクノロジックアート UMLモデリングL1 P2,3 「オブジェクトはあらゆるモノを指し、属性や操作等の性質を持つ。インスタンスとは、クラスから生成されるオブジェクトのように、抽象的な概念を具象化した実体のこと。」 どちらの文脈中のでも、「オブジェクト」と「インスタンス」という言葉は異なる意味合いを持たせ扱われています。どのような違いをこめて使い分けられているのでしょうか?どちらか片方の文脈でかまわないのでその意味合いの違いを教えてください、という感じです。 と、書いておいてなんですが、おぼろげながら分かってきた気がします。UMLでのインスタンスという言葉は、オブジェクトを含んだより大きい概念で、インスタンスに含まれるのはオブジェクトだけではないという感じなんだろうなーと思ってきました。 私はJavaプログラマーなのですが、Javaプログラマーの中では、「オブジェクト」と「インスタンス」という2つの言葉は「同じ」もしくは「オブジェクトのほうが大きい」という意味合いで使われていることが多いのですが、その両者(UMLモデラーとJavaプログラマー)の間に決定的な認識のずれがあることが原因のような気がしてきました。 どう思いますか?

関連するQ&A

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

    オブジェクト指向がうまく理解できず苦労しています。 Javaの解説書にはよくUMLについても記載されているものをよく見かけますが、UMLはオブジェクト指向を理解するのに役立ちますか? それともオブジェクト指向を理解したうえで活用するための技術ですか?

    • ベストアンサー
    • Java
  • オブジェクト指向とUMLについて

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

  • クラス?オブジェクト?インスタンス?何がなんだか・

    一般的なオブジェクト指向の 定義として下記で合っているのでしょうか お願いします クラス:第2実体(人間) インスタンス:第1実体(例:山田) オブジェクト:色々なインスタンスをさして、抽象的に総称としてオブジェクト 例えば・・クラス:人間、インスタンス:山田 クラス:犬、インスタンス:ゴン 違うクラスのインスタンスをまとめて呼ぶ際にオブジェクト? よく分からなくなっています、よろしくお願いします

  • クラス、オブジェクト、インスタンス、メソッドについて。

    クラス、オブジェクト、インスタンス、メソッドに ついて教えていただけないでしょうか? 今現在の自分の認識では、乗り物を例にすると、 「乗り物」という大枠がクラス。それを、たとえば 飛行機なり電車なり船なり、より具体的にした ものがインスタンス=オブジェクト。 その具体化したものの挙動、動作(走るとか飛ぶとか) がメソッド、という理解です。 ただ、これだとオブジェクトとインスタンスを 同じものとして見てしまっているので、この2つの 違いを明確に説明しろと言われると困ってしまいます。 インスタンスとオブジェクトの違いを明確にした上で うまく伝えられる方法があれば、ご教授ください。

  • インスタンスとオブジェクト

    こんばんは。 変数について教えて下さい。 プログラム自体が初めてなので 「たのしい Ruby 第3版」を読んでいます。 ずっとインスタンスとオブジェクトの違いが曖昧なままです。 その本の「クラスとモジュール」という章にて クラスを定義する構文。 インスタンス変数とローカル変数の違いですが、 以下の説明で一部理解できずにつまずいています。 ―――――――――――― @ で始まる変数は インスタンス変数 といいます。 ローカル変数はメソッドごとに異なる変数として扱われますが、 インスタンス変数は同じインスタンス内であれば、 メソッド定義を超えてその値を参照したり、変更したりできます。 なお、初期化されていないインスタンス変数を参照すると nil が得られます。 インスタンス変数は、インスタンスごとに違う値を持つことができます。 またインスタンス変数は、 インスタンスがある間は値を保持しておいて 何度でも利用することができます。 一方、ローカル変数はメソッド呼び出しごとに新しく割り当てられるため、 メソッドから抜けると値を忘れてしまいます。 ―――――――――――― ここで分からないのは、 ・ローカル変数が "メソッドごと" に異なる変数として扱われる ・インスタンス変数は同じ "インスタンス内" であれば、 メソッド定義を超えてその値を参照したり、変更したりできます の部分です。 Webで検索してますが、 プログラミング経験ありを前提で書かれているような。 他の言語も知らないので分からない、そんなページが多いです。 人に聞くからには 自分でも頑張って理解できるように考えますので、 どうか回答よろしくお願いします。

    • ベストアンサー
    • Ruby
  • マルチプルインスタンスのメリット

    100%の自信をもって回答できる方のみ回答をお願いします。 Java等のオブジェクト指向プログラミング技術において、クラスからインスタンスを たくさん作れるというのが特徴の一つとなっていますが、クラスからインスタンスを たくさんつくれるメリットはなんでしょうか。 クラスからインスタンスをたくさん作れなくても、1つ作れば動くプログラムはたくさんありますし、 そういうプログラムであれば、staticなアクセスにすればよいですよね。 クラスからインスタンスがつくれることを説明した本やサイトは山ほどありますが、 インスタンスがたくさん作れることのメリットを説明した本をみたことがなく、 「なぜオブジェクト指向でつくるのか」という本を買って読みましたが、 納得がいくメリットを感じられませんでした。 また世の中のソースをみると、みんな、すぐにクラスを作ってオブジェクトを作っていますが、 みなさんがどうして、オブジェクトを作らなくてもコーディングできるケースのプログラムを オブジェクトを作るのか不思議でしかたありません。 どうしてオブジェクトを作らなくてもいいケースでもオブジェクトを作るのか、 またたくさんオブジェクトを作れるメリットはなんなのか、教えてください。

  • E-RモデリングとUML

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

  • インスタンスオブジェクトとは何かについて教えて!!

    下記内容はあるサイトのインスタンスについての説明文です。 画像は、自分なりに理解したものです。 (1)メモリ上には記憶場所(=ポインタ)はない (2)var Aa = new Bb("13" , "smole");とscript内に追加されたことにより メモリ上に記憶場所(=ポインタ)が作成され、 BbオブジェクトつまりBb("13" , "smole");がその記憶場所(=ポインタ)に入る (3)そしてBb("13" , "smole");が入った 記憶場所(=ポインタ)にAaという名前を付ける。 考え方に間違いがあるでしょうか? ---------------------------------------------------- var Aa = new Bb("13" , "smole"); これは、BbクラスオブジェクトのBbコンストラクタをnew演算子を利用して起動しています。 new演算子は、メモリ上に記憶場所を確保して、Bbオブジェクトを作成した後、そのポインタを返す演算子です。 new演算子から返されたポインタは、Aaへ格納されます。この場合のAaをBbオブジェクトのインスタンスといいます。 また、new演算子でメモリ上に記憶場所を確保して作られたオブジェクトをインスタンスオブジェクトといいます。 つまり、 オブジェクト == インスタンスオブジェクト で、 インスタンス != インスタンスオブジェクト インスタンス != オブジェクト です。 ----------------------------------------------------

  • 教えてください。

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

    • ベストアンサー
    • Java
  • オブジェクトを配列として扱いたい

    Java(オブジェクト指向)を始めて数日の者です。 LinkedListを利用し、インスタンス化したオブジェクトをListに入れて 扱えるようにしたいと考えています。 具体的には LinkedList<クラス名> array = new LinkedList<クラス名>(); クラス名 object1 = new クラス名(); -object1の処理- array.add(object1); -object1の処理- array.add(object1); -object1の処理- array.add(object1); このようにして、object1を配列で管理するイメージです。 object1の処理結果は、毎度変わっています。 しかしこれですと、最後のobject1の処理の内容がすべてのarray(i)に入ってしまいます。 要は、array(i)は全て、同じobject1を参照しているだけ。 object1の変更結果がarray(i)に入っていくというイメージでは無い、ということでしょうか? また、この他でインスタンス化したものを配列で管理できるような方法がございましたら、ご教授いただけると幸いです。m(_ _)m 動的に配列の要素数を変更(要素が追加)ができるようにしたいのです。

    • ベストアンサー
    • Java

専門家に質問してみよう