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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

3回答

1787閲覧

Ruby オブジェクトに関して

cheeeeeeese

総合スコア179

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

1クリップ

投稿2015/08/27 22:59

皆様、質問がございます。

Rubyでは全てがオブジェクトですが、それはObjectクラス(スーパークラス)を継承しているためだと初めてのRubyで知りました、

ではインスタンスはどうなるのでしょうか??

よろしくお願い申し上げます。

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

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

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

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

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

guest

回答3

0

ベストアンサー

オブジェクト = インスタンスと捉え

という前提がチョッピリ違って、より厳密には
オブジェクト > インスタンス
ということだと思います。
#本当は不等号じゃなく集合の含むという記号を使いたかったのですが・・・

ザックリした言い方をすると、インスタンスとは、クラスというに具体的なプロパティ値(属性)を付与することで実体化されたオブジェクトのことで、オブジェクトの一つのタイプです。
この辺の事については、こちら の説明を読むと理解が深まると思います。

じゃあ、インスタンスじゃ無いかオブジェクトって?と思われたのであれば、javascriptに関する こちら の説明もついでにお読みください。
そうすると、Rubyではほぼすべてがオブジェクトであると言われている理由が納得出来ると思います。

しかしながら、決して全てがオブジェクト**ではない!**っていう こちら の説明を読むと、更に理解が深まると思います。

少しでもご参考になれば幸いです。

投稿2015/08/28 02:12

pi-chan

総合スコア5936

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

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

cheeeeeeese

2015/08/29 07:42

多くの参照URLをありがとうございます。 理解が深まりました!!
guest

0

  1. オブジェクトとそうでないものの違い
  2. オブジェクト、クラス、インスタンスの違い
  3. Rubyと他言語との違い

上記3点、基本的なところから整理していきます。


オブジェクト指向における「オブジェクト」には、
いろいろな見解がありますが、最大公約数的には、
(ユーザが定義する)処理とデータを一体にした単位です。

たとえばJavaでは、参照型とプリミティブ型という区別があって、
int型などの数値はプリミティブ型で、オブジェクトではありません。

対してRubyでは、Integerなどの数値もオブジェクトです。
処理(メソッド)とデータを一体にできるからオブジェクトです。

なお、ご質問にある「Objectクラスを継承している」かどうかは、
一般的なオブジェクトの定義には関係ありません。

Ruby(やSmalltalk)だとそうなっているというだけなので、
「Objectクラスを継承しているのがオブジェクトだよね」
といっても一般に通じないと思います。


クラスとインスタンスは、オブジェクトに関係する用語です。
クラスとインスタンスの違いは、概念と実体の違いです。

分かりやすくたとえると、太郎は人間だし、花子も人間とします。
また、太郎と花子は日本人です。

このとき、人間がオブジェクトだとすると、
太郎や花子がインスタンスで、日本人はクラスです。

日本人が人間なのか、もっと言うと
人間が人間なのかどうかは微妙なところです。

概念上では人間ですが、実体ある人物ではありません。
「白馬は馬でない」みたいな話になってきます。

一般的にインスタンスよりオブジェクトのほうが広い概念です。
「インスタンス指向」ではなく、「オブジェクト指向」と言うでしょう。

「インスタンスはオブジェクトである」は問題ありませんが、
「オブジェクトはインスタンスである」とは言いきれません。


Rubyでは「(ほぼ)すべてがオブジェクトである」とよく言われます。
これはSmalltalkのやり方を踏襲したものですが、
他の言語は必ずしもそうではありません。

先に挙げたように、Javaではプリミティブ型があるので、
すべてがオブジェクトというわけではありません。

また、Ruby(やSmalltalk)ではクラスもオブジェクトですが、
JavaやC++ではそうではありません。

これは同じオブジェクト指向でも
動的言語と静的言語といった違いがあり、
設計思想が根本から異なっているためです。

投稿2015/08/28 10:16

LLman

総合スコア5592

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

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

0

ダックタイピングもあって、厳密なオブジェクトの型を考える場面はRubyでは少ないですが、ObjectのサブクラスのインスタンスもObjectのインスタンスとして使えます。

lang

1p nil.is_a?(Object) # => true

ただし、Rubyではサブクラス側で親クラスのメソッドをundefできますので、親ウラスと互換でないものも作れてしまいます。

………こんな回答でよろしかったでしょうか?

投稿2015/08/28 00:38

maisumakun

総合スコア145183

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

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

cheeeeeeese

2015/08/28 01:10

ご回答ありがとうございます。 質問の仕方がよろしくなかったと現在感じています、申しわけ有りませんでした。 追加の質問をお願いします。 はじめてのRubyでは、「Rubyのなかではすべてがオブジェクトであり、数値も文字列も正規表現もクラスそのものもオブジェクトである」と定義しています。 この時、オブジェクト=インスタンスと捉え、言及したほうがより厳密な表現ではないのか??というのが私の質問の意図でした。 広義の意味合いにおいて、Rubyのすべての情報(リソース)は"object"なのはわかります。 ただインスタンスという意味合いとオブジェクトという意味合いの区別がうまくできていないため、その違いをお教えいただければと思います。
maisumakun

2015/08/28 02:02

「Rubyのなかではすべてがオブジェクトであり、数値も文字列も正規表現もクラスそのものもオブジェクトである」という文ですが、この中での「オブジェクト」は、「Objectクラスのインスタンス」という狭義の意味ではなくて、「オブジェクト指向で扱う『もの』」という抽象的な意味合いのものです。つまり、オブジェクトはインスタンスより広い概念です。 もっとも、具体的なインスタンスをとらないような「オブジェクト」を扱う場面はRubyのプログラムを書く上では来ないので(他の言語では、クラス自体が通常の言語で発生するインスタンスと本質的に違うものとなっていることもありますが、RubyではそれもClassクラスから生成したインスタンスです)、「オブジェクト=インスタンス」と捉えて特段の問題はありません。 http://write-remember.com/archives/697/ (参考)
cheeeeeeese

2015/08/29 07:04 編集

ご回答ありがとうございます。 1オブジェクト指向におけるものの定義に関して 1オブジェクト指向で扱う「もの」とはオブジェクトと定義するという抽象的な概念。 2ものとはつまり、オブジェクト指向で扱う情報、リソースのことである。 3ゆえに、オブジェクト指向で扱う「もの」とは、情報それ自体である。 という認識でよろしいでしょうか。(間違っている、間違っていない、かつ間違っている場合は認識を正していただければと思います。) 2 オブジェクト=インスタンスと捉えることは、特段間違いではない。 なぜなら、 Rubyでは大抵のオブジェクトは、Objectクラスのインスタンスであるためである。 では、なぜインスタンスと明示しないのでしょうか。 広義の意味においてRubyの扱う"もの"は、オブジェクトです。 ただ、大抵のオブジェクトはObjectクラスを継承しているインスタンスとなります。 ならば、より厳密さを明示するならRubyの扱うものは、インスタンスである。と定義したほうが明示的ではないのかと考えます。 より、理解を深めたいため質問させていただきます。 よろしくお願い申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問