質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Q&A

解決済

1回答

1333閲覧

インスタンスの情報というのは「(空の)属性」と「操作」のことを指す?

mr0237

総合スコア164

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

0グッド

0クリップ

投稿2017/04/29 09:24

JAVAのオブジェクト指向を勉強・練習している者です。

説明が下手ですいませんが、「スッキリわかるJava入門 第2版 (スッキリシリーズ) 」の(P332)「クラス型と参照」のところの「仮想世界の真の姿」を復習を兼ねて読み直しているのですが、

インスタンス化は「newをすると、メモリ領域にインスタンスの情報を入れるための領域が確保される。」

と書かれていたのですが、その「インスタンスの情報」というのは

  • 「属性(設定されていない空の値)」
  • 「操作(処理、命令のかたまり)」

↑この2つの情報のことを指すのでしょうか?

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

そう考えても、概念的には問題ないと思いますが実際は違っていて属性だけです。

操作はインスタンス毎に違うわけではなく同じクラスなら共通です。Javaはクラスベースのオブジェクト指向言語なのでそうなります。そうしたものをいちいちインスタンス毎に保持させるのはメモリーの無駄なので実装上の最適化のため、インスタンスにメソッドの情報は持たせません。(とはいえ・・・実装上の最適化とはいいましたが、それ以外の方法は取り得ないというぐらい設計の必然ですので最適化という言い方は語弊があるかも知れません。)

メソッドの定義内容はクラスが保持しています。


なお、「設定されていない空の値」というのはnewの処理中、コンストラクターが呼び出される直前までの状態です。当然ながらnewの呼び出し元へ戻ってきた時点では「設定されてない空の値」ではなくコンストラクターにより初期化された属性値になってますので。

投稿2017/04/29 09:59

編集2017/04/29 10:01
KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mr0237

2017/04/30 08:16

すいません。「メソッドの定義内容はクラスが保持しています。」と書かれていたのですが、 これってつまり、メソッドの本体のほうはクラス型変数の領域にあるということでしょうか?
KSwordOfHaste

2017/04/30 08:53

そう考えてよいと思います。 ところで、用語としては「クラス型変数」でなく「クラスオブジェクト」といった方が正確です。
mr0237

2017/04/30 14:26

じゃあつまりクラスオブジェクト側(例:Hero型の変数h)のメモリに入っている情報は「newで属性を入れるための領域が確保された先頭アドレスの情報」と「操作の情報」←この2つがあるということでしょうか?
KSwordOfHaste

2017/04/30 22:40

そうですね。 おおまかにいえばnewで確保された領域には以下が入ってます。(詳しくいえば制御情報が他にも入ってますが、本件には関係しないので省略) (A)そのインスタンスのクラスオブジェクトへの参照 (B)そのインスタンスの属性 なお、(A)はこのインスタンスに対してgetClass()メソッドを呼び出すと取り出せるクラスオブジェクトの参照が入ってます。そのクラスオブジェクトの中にメソッドの情報が入っているという具合です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問