オブジェクトとは

はじめに

プログラミング学習中の方向けです。
オブジェクトの理解を深めたい方の手助けになれば幸いです。
オブジェクトについて説明している記事と一緒に見ていただけると理解が深まると思います。
本記事は書籍現場Railsの内容を元に作成しています。

概要

  • オブジェクトとは
  • 具体的な例
  • オブジェクトの機能はクラスで決まる
  • オブジェクトの概念を理解すると

    オブジェクトとは

    プログラミングの世界ではオブジェクトという概念が存在します。
    一言でいうとオブジェクトとは、様々な機能(メソッド)が定義されたクラスのことです。
    現実世界でいうと人間、猫、机など実態が存在するモノや、空気、水など流動的なモノ、または時間、愛など掴みどころのない抽象的な概念などがオブジェクトに当てはまります。
    つまり言葉で区別できるものはすべてオブジェクトになります。 オブジェクトは様々な機能が定義されていると説明しました。
    オブジェクトには標準で様々な機能があり、プログラマは機能を利用したりまたは欲しい機能を追加することもできます。
    現実世界で例えると、人間は標準で2足歩行ができたり、食事を食べる、排泄するといった機能が備わっています。
    また欲しい機能があったら、学ぶことでスキルを取得できます。(学問、水泳、ものづくりなど)

    具体的な例

    では実際に具体的なコードを書いてオブジェクトの理解を深めましょう。

irb(main):010:0> "氏名"
=> "氏名"
irb(main):011:0> 1
=> 1
irb(main):012:0> "氏名".class
=> String
irb(main):013:0> 1.class
=> Integer

実行したコードは、文字列オブジェクト、整数オブジェクトです。
普段コードを書いていると気にならないと思いますが、これら2つはどちらもオブジェクトです。

irb(main):012:0> "氏名".class
=> String

こちらのコードは"氏名"がどのオブジェクトに属しているか聞いています。
どのオブジェクトに属しているかというのは、目の前の動物が、猫なのかクマなのか人間なのかという意味です。
返答としてStringと返ってきました。
つまり"氏名"オブジェクトはStringクラスのオブジェクトということが分かりました。

irb(main):013:0> 1.class
=> Integer

1も同じように聞くとIntegerクラスのオブジェクトだと分かりました。
オブジェクトにはそれぞれidが割り振られています。
idとはそれぞれを識別するためのものです。
例を上げると私達は人間というオブジェクトに属しているが、ひとりひとり見た目、人格、性格が異なるようにプログラミングの世界でも異なります。

irb(main):001:0> '氏名'.object_id ①
=> 70240571267320
irb(main):002:0> '氏名'.object_id ②
=> 70240599834760
irb(main):003:0> 1.object_id ③
=> 3
irb(main):004:0> 1.object_id ④
=> 3

コードで見ていきましょう。
オブジェクト.object_idというコードを打つと、オブジェクトの固有のidが取得できます。(マイナンバー的なものです。) 出力結果から分かるのは①と②は全く同じ見た目なのに内部では異なるオブジェクトと扱われています。
では③と④はどうでしょうか?
同じidになっています。先程オブジェクトには固有のidがありひとつひとつ異なると説明しましたが、型によっては同じにしたほうが都合が良いものもあります。
現実でも、数字の1は見た目が同じでも実は100種類の1がありそれぞれ特性が異なりますとか言われたら、困りますよね?
このように普遍の原理的なものは存在しますが、基本的にはオブジェクトはそれぞれ固有のidを持っているという認識を持っておきましょう。

オブジェクトの機能はクラスで決まる

オブジェクトにはそれぞれ特性があります。
例を上げると人間は標準で2足歩行の機能が備わっているように、文字オブジェクト、整数オブジェクトにもそれぞれ機能が備わっています。
コードを見ていきましょう

irb(main):005:0> '氏名'.length
=> 2

オブジェクト.lengthとすると2と出力されました。
これは文字の長さを取得しています。
これはStringクラスが標準で定義されているメソッドを呼び出しています。
このようにオブジェクト固有のメソッドが標準で備わっています。
利用する側としては、オブジェクトの特性や使用できる機能を知ることで様々な処理をオブジェクトにさせることができます。

オブジェクトの概念を理解すると

ここまで長々と書いてきましたが、まとめるとrubyで入力した情報はすべてオブジェクトと処理されます。
様々な機能はオブジェクト同士を組み合わせることで実現します。
特にRuby on Railsを使用していると、内部でいろいろ自動でやってくれるので忘れがちですが、裏側ではメソッドの組み合わせで様々な処理がなされているに過ぎないといっていいでしょう。