インスタンスオブジェクトの意味とは?

このQ&Aのポイント
  • インスタンスオブジェクトとは、メッセージを受け取って処理を行うオブジェクトのことです。
  • Objective-cでのselfはインスタンスオブジェクトを表し、メッセージを送ることができます。
  • インスタンスオブジェクトの意味を説明する参考書の引用をご紹介します。
回答を見る
  • ベストアンサー

インスタンスオブジェクトとはなんなのでしょうか

現在Objective-cを勉強中なのですが、インスタンスオブジェクトの 意味がよくわかりません。ネットで調べても「インスタンス」と 「オブジェクト」それぞれの意味しか出てきません。 インスタンスオブジェクトという単語が出てきた参考書には以下のように 書かれています。 ---------------(引用ここから)------------------- - (int)up{ ・・・  return self; } selfはメッセージを受け取ってそのメソッドの処理をしている インスタンスオブジェクトそのものなので、返り値に対して 続けてメッセージを送ることができる。 ---------------(引用ここまで)--------------------------- どなたかインスタンスオブジェクトの意味をご教示いただけないでしょうか。 以上、何卒よろしくお願いいたします。

noname#213637
noname#213637

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

  • ベストアンサー
  • harawo
  • ベストアンサー率58% (3742/6450)
回答No.2

引用元は、この書籍ですね? 詳解 Objective-C 2.0 第3版 http://www.sbcr.jp/products/4797368277.html 26ページ~27ページ 著作権法上、書籍からの引用は、著作権の侵害になりません。引用の定義は、(1) 著作物の一部であり、全体ではない。(2) 引用であることが示され、出典が明記されている。(3) 原典を改ざんしていないなどが挙げられます。 引用であることは、質問文に書かれていますが、出典が書かれていません。それより問題にしなければいけないのは、原文どおりでない点です。原文はですます調なのに、引用はである調です。そしてサンプルコードが違います。 > - (int)up{ > ・・・ >  return self; > } 原文では、1行目は「- (id)up {」となっていますし、こういう書き写し間違いをするのは、引用者がメソッドの仕様に、確たる知識を持っていないことを、露見しています。 ※省略部分は「(略)」「(中略)」と明記しましょう。 さて本題に入ります。 引用箇所の前章はオブジェクト指向の説明にあてられているので、文脈のつながりで、「インスタンスオブジェクト」と、インスタンスがオブジェクトであることを強調する表現になっているものと推察できます。

noname#213637
質問者

お礼

ご回答ありがとうございました。 恥ずかしいことをしてしまいました。ご指導ありがとうございました。

その他の回答 (2)

  • Ogre7077
  • ベストアンサー率65% (170/258)
回答No.3

オブジェクト = 何か クラス(のオブジェクト) = 何かを抽象化した何か インスタンス(のオブジェクト) = クラスを具体化した何か つまり、インスタンスとはオブジェクトの一種であり、 クラスから生成(具体化)したオブジェクト全般を表します。 クラスベースのオブジェクト指向言語においては、 クラスをオブジェクトとして見做さない場合があり、 「オブジェクト≒インスタンス」と混同されることが多いのでご注意ください。

noname#213637
質問者

お礼

ご回答ありがとうございました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

もちろん正確なところはその「参考書」を書いた人間に聞くしかないんだけど, 例示されている部分だけを見ると インスタンスであるオブジェクト と読めばいいんじゃないかな.

noname#213637
質問者

お礼

ご回答ありがとうございました。

関連するQ&A

  • オブジェクト生成時のセオリーについて

    オブジェクト指向を採用しているプログラミング言語において、ほとんどの場合、オブジェクト生成時に使用されるコンストラクタは返り値を持てません。 また、コンストラクタにて例外を投げるといったことは推奨されていないケースが多いです。 そんな中で、コンストラクタに何らかの引数を渡してインスタンスを生成するクラスの場合、不十分な引数を渡すことで使用できない状態となるインスタンスが生成されることがあります。 こういったことを踏まえて、渡される引数が適しているものであることを確認する役割というのは使用されるクラス自身が担うのか、クラスを生成する外部の処理(ファクトリー的なクラス・メソッド)が担うのか、どちらが一般的なセオリーなんでしょうか? 無論、不十分なインスタンスが誤って使用されないようにメソッドにエラー処理をかけ、「使用できない状態のオブジェクトである」ことを通知するのは当然なのでしょう。 ただ、最近知り合いから「クラスはできるだけ不変な状態を保つよう設計した方がいい。そのほうが使いやすく、再利用時のバグが減る」という話を聞いて状態を持たないクラスの設計というのを考えこんでしまい、悩んでいます。 わかりにくい質問かもしれませんが、回答よろしくお願いします。

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

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

  • 書籍 メタプログラミングRubyの中の一文

    上記書籍のP143の カレントクラスについて質問です。 上記書籍に、 【クラス定義のなかでは、カレントオブジェクトselfは定義されたクラスである】 という記述がありますが 例えば、以下のようなクラス定義あがあるとします。 class Test print self.class def self.method_01() print "メソッド01" end def method_02() return self end end クラス定義内に3箇所selfが存在しますが、 インスタンスメソッド の method_02()内のselfはnewメソッドによって 作成されたTestクラスのインスタンスの意味だと思います。 それより上の二つのselfは確かに定義中のカレントオブジェクト・・つまりTestクラス ですけれど、なぜ書籍では、クラス定義内でのselfという表現なのでしょうか? 個人的には、【クラス定義内で定義されるインスタンスメソッド内にあるselfを除くselfはカレントオブジェクトである】という風に、説明すべきだと思うのですが 何か私の解釈に誤りがあるのでしょうか?それとも、文面を気にしすぎなだけでしょうか? くだらない質問ですがご意見をおきかせください。

    • ベストアンサー
    • Ruby
  • ラッパークラスのオブジェクト作成について教えてください。

    ラッパークラスのオブジェクト作成について教えてください。 ラッパークラスのオブジェクト作成には ・new演算子を使ってインスタンス化する方法 ・ラッパークラスのstaticメソッドを呼び出す方法 の2つの方法があると書籍に書いてありました。(SJC-Pのテキストです) では Integer i = 1000; のような記述はどうでしょうか? Integerはintのラッパークラスと思うのですが、iはインスタンスじゃないという事でしょうか?

    • ベストアンサー
    • Java
  • クラス内で自分自身をインスタンス化

    javaで開発をしております。 あるソースコードに、クラス内のメソッドで自分自身をインスタンス化しているものを見ました。初めて見たのですが、どういった場合に使われるのでしょうか。 public class Sample { public Sample hoge() { Sample sa = new Sample(); //何らかの処理 return sa; } }

    • ベストアンサー
    • Java
  • setTimeは、返り値がなぜ不要なのでしょうか?

    ・Dateオブジェクトを見ているのですが、setTimeメソッドが理解できません ・getTimeメソッドだと、「返り値」を受け取れるのに、 setTimeメソッドでは、なぜ「返り値」を受け取れないのでしょうか? ・メソッド名に「set」「get」が付いているので、てっきりセッターゲッターみたいな物だと思ったのですが… ・直接プロパティ値を書き換えるのでしょうか? 参照みたいに ・マニュアルを見たら、「インスタンスを生成した関数を返します。これはデフォルトでは Date コンストラクタです」と書かれているのですが、これはどういう意味なのでしょうか? ・コンストラクタなのに、プロパティ? インスタンスを生成した関数? >このプロパティの値は関数そのものの参照であり、関数の名前を含んだ文字列ではないことに注意してください ・関数そのものの参照って何ですか? ・Dateオブジェクトの実体はどこに存在しているのでしょうか? ▽Date - JavaScript | MDN   https://developer.mozilla.org/ja/docs/JavaScript/Reference/Global_Objects/Date

  • メソッドについて教えてください。

    java 初心者2日程です(objective-c経験者) 教えていただきたいのですが、以下のように オブジェクト.メソッド というピリオドが一つの書式と クラス?.?(何を指しているのでしょうか?).メソッド? というピリオドが二つの書式が見受けられますが どういう違いで使い分けるのでしょうか? 申し訳ありません。教えていただけますか? //インスタンス化 MyObject object = new MyObject(); //メソッドの利用 object.methodA(); System.out.print(xxxxx);

    • ベストアンサー
    • Java
  • objective-cにはCのような関数はない?

    c言語とobjective-cを並行して勉強しています。 c言語では機能をまとめるために関数を定義できますよね。 ----- void display(int a){ printf("%d" , a); } int main(void){ display(10); } --- これでdisplayという関数に10という引数を渡して表示させることができますよね? objective-cの場合は例えば以下のように書くことがわかり、コンパイルも通りました。 - (void)display{ NSlog(@" TEST "); } しかし・・・・呼び出すことができませんね。。。 objective-cの場合は[ インスタンス メソッド名 ]; のような呼び方なのですよね。 メソッドだけを呼び出すことはできない、ってことなのでしょうか・・・? 色々検索してみたのですが、 @implement~@endで囲んでクラスにして インスタンスを作って、メソッドを呼ぶ方法ばかりで、 上記のC言語の例のような、単純な関数定義→呼び出しの方法を見つけることができませんでした。 上記のようなC言語の例はよくあると思うのですが、 これと同じことがobjective-cで、できるともできないとも、書いてないように思います。 例えば上のc言語と同じ動作をobjective-c に移植するとどうなるのでしょうか・・・?というか、不可能、ということでしょうか・・・?

  • 『オブジェクト化』の実装例が よく分からない

    『オブジェクト化』の実装例が よく分からない 保守性を高めるために オブジェクト化を進めることが大切なのは 雰囲気的に分かります。 ところが、実際に何をすればよいか、という段階になると 具体策が見えてきません。 以前に、下記の回答が出されていましたが 意味が良く分からないで困っています。 ========== 過去の回答 ======== http://okwave.jp/qa/q8601972.html ・マジックナンバー、マジックストリングを排除する オブジェクト内に定数プロパティとしてまとめ ・処理のメソッド化 「変数・定数をすべて1つのオブジェクトにまとめる」 「処理はオブジェクトのメソッドにまとめる」 更に、定義したオブジェクト類は別ファイルに切り離し、 そのスクリプトファイルをロードするようにすれば、 ページデザインと処理(ビジネスロジック)も切り離し別々に管理できます。 ========================= これより分かりやすい実例を教えていただけますでしょうか。 ありがとうございます。

  • Pythonのコードself多すぎ読み書きしにくい

    Pythonのクラスには通常class:宣言行直下で作成する「クラス変数」と、__init__()メソッド内で作成するかインスタンス作成後にインスタンス名.変数名で追加作成する「インスタンス変数」があります。 Pythonのクラス変数はJavaのクラスでstatic修飾子を付けて宣言したクラス変数と同じで、そのクラスから作成されたインスタンス全てに同じメモリーを割り当てます。 Pythonのインスタンス変数はインスタンスごとにメモリーが割り当てられるので、Javaの普通の変数(フィールド)のように同一クラス内のすべてのメソッドから参照できますが、参照するたびにいちいち「self.」を付けないといけません。 (例 かなり恣意的ですが。。。インデントはOKWAVEが取ってしまうかもしれせん) class Sample: def __init__(self): self.L = [] # Lは数値のリスト def setList(self, L): self.L = L def exe(self, i1, i2): # L[i1]>0かつL[i2]>0のとき、大きい方から小さい方を引いた # 値に、大きい方を小さい方で累乗した値を加える if self.L[i1] > 0 and self.L[i2]: if self.L[i1] > self.L[i2]: return (self.L[i1] - self.L[i2]) + self.L[i1] ** self.L[i2] else: return (self.L[i2] - self.L[i1]) + self.L[i2] ** self.L[i1] イテレーターを使て同じ処理をループする場合はいいのですが、ループで処理できない複雑な処理が続く場合はこのように「self」だらけになり、コーディングミスが多発し、コードが読みにくいものになります。 「self」を省略してインスタンス変数をメソッドから参照し、コードを読みやすいものにする手段はないのでしょうか? どうぞよろしくお願いします。

専門家に質問してみよう