皆様、質問がございます。
Rubyでは全てがオブジェクトですが、それはObjectクラス(スーパークラス)を継承しているためだと初めてのRubyで知りました、
ではインスタンスはどうなるのでしょうか??
よろしくお願い申し上げます。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
オブジェクト = インスタンスと捉え
という前提がチョッピリ違って、より厳密には
オブジェクト > インスタンス
ということだと思います。
#本当は不等号じゃなく集合の含むという記号を使いたかったのですが・・・
ザックリした言い方をすると、インスタンスとは、クラスという型に具体的なプロパティ値(属性)を付与することで実体化されたオブジェクトのことで、オブジェクトの一つのタイプです。
この辺の事については、こちら の説明を読むと理解が深まると思います。
じゃあ、インスタンスじゃ無いかオブジェクトって?と思われたのであれば、javascriptに関する こちら の説明もついでにお読みください。
そうすると、Rubyではほぼすべてがオブジェクトであると言われている理由が納得出来ると思います。
しかしながら、決して全てがオブジェクト**ではない!**っていう こちら の説明を読むと、更に理解が深まると思います。
少しでもご参考になれば幸いです。
投稿2015/08/28 02:12
総合スコア5936
0
- オブジェクトとそうでないものの違い
- オブジェクト、クラス、インスタンスの違い
- Rubyと他言語との違い
上記3点、基本的なところから整理していきます。
オブジェクト指向における「オブジェクト」には、
いろいろな見解がありますが、最大公約数的には、
(ユーザが定義する)処理とデータを一体にした単位です。
たとえばJavaでは、参照型とプリミティブ型という区別があって、
int型などの数値はプリミティブ型で、オブジェクトではありません。
対してRubyでは、Integerなどの数値もオブジェクトです。
処理(メソッド)とデータを一体にできるからオブジェクトです。
なお、ご質問にある「Objectクラスを継承している」かどうかは、
一般的なオブジェクトの定義には関係ありません。
Ruby(やSmalltalk)だとそうなっているというだけなので、
「Objectクラスを継承しているのがオブジェクトだよね」
といっても一般に通じないと思います。
クラスとインスタンスは、オブジェクトに関係する用語です。
クラスとインスタンスの違いは、概念と実体の違いです。
分かりやすくたとえると、太郎は人間だし、花子も人間とします。
また、太郎と花子は日本人です。
このとき、人間がオブジェクトだとすると、
太郎や花子がインスタンスで、日本人はクラスです。
日本人が人間なのか、もっと言うと
人間が人間なのかどうかは微妙なところです。
概念上では人間ですが、実体ある人物ではありません。
「白馬は馬でない」みたいな話になってきます。
一般的にインスタンスよりオブジェクトのほうが広い概念です。
「インスタンス指向」ではなく、「オブジェクト指向」と言うでしょう。
「インスタンスはオブジェクトである」は問題ありませんが、
「オブジェクトはインスタンスである」とは言いきれません。
Rubyでは「(ほぼ)すべてがオブジェクトである」とよく言われます。
これはSmalltalkのやり方を踏襲したものですが、
他の言語は必ずしもそうではありません。
先に挙げたように、Javaではプリミティブ型があるので、
すべてがオブジェクトというわけではありません。
また、Ruby(やSmalltalk)ではクラスもオブジェクトですが、
JavaやC++ではそうではありません。
これは同じオブジェクト指向でも
動的言語と静的言語といった違いがあり、
設計思想が根本から異なっているためです。
投稿2015/08/28 10:16
総合スコア5592
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ダックタイピングもあって、厳密なオブジェクトの型を考える場面はRubyでは少ないですが、ObjectのサブクラスのインスタンスもObjectのインスタンスとして使えます。
lang
1p nil.is_a?(Object) # => true
ただし、Rubyではサブクラス側で親クラスのメソッドをundef
できますので、親ウラスと互換でないものも作れてしまいます。
………こんな回答でよろしかったでしょうか?
投稿2015/08/28 00:38
総合スコア145183
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/08/28 02:02
2015/08/28 02:07
2015/08/29 07:04 編集
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/08/29 07:42