プログラミング言語Rubyを勉強しているみなさんは、Classについて理解していますか?
私が初学者だった時は、Classというのがどういうものなのかがあまり腹落ちしない感覚がありました。モヤモヤとした嫌なものですよね。
そこで、どうにかして理解しようとして解説書やサイトで理解しようとするのですが、
「クラス?インスタンス??オブジェクト???」
「っっっなんだこれは!!!」
と、わからない単語が増えてもっとわからなくなってしまう。
こんな状況に今まさに陥っている方に向けて、今回は記事を書いていきます。この記事を読んで、概念的な「Class」というものを、より具体的に理解してもらいたいと思っています。
身近なものでの具体例を交えながら説明していくので、ぜひ参考にしてみてください。
RubyのClass(クラス)とは?
そもそもクラスというのは、いったいどのようなものなのかという人について、簡単に説明します。
Rubyという言語は、オブジェクト指向という分類のプログラミング言語ですよね。そのオブジェクト指向に共通する考え方として、「全てのデータをオブジェクトとして捉える」というものがあります。そして、オブジェクトというのは「クラス」というものに属しているのです。
オブジェクトたちは、数値だったり、文字列だったり、ファイルだったりそれぞれ特徴を持っています。
- 数値オブジェクトは、Numericクラスに属する
- 文字列オブジェクトは、Stringクラスに属する
- ファイルオブジェクトは、Fileクラスに属する
例を出すとクラスとは、オブジェクトの「親玉」という感じです。
オブジェクトの親玉的存在であるクラスにも、それぞれに「階級・上下関係」があります。先ほど挙げた、NumericクラスやStringクラスなどの上位にはObjectクラスというものがあります。
このObjectクラスは、全てのクラスに共通する機能を一通り持っていて、Objectクラスに数値を扱う機能をプラスしたのがNumericクラス、文字列を扱う機能をプラスしたのがStringクラスなのです。
Objectクラスに機能を追加して新たなクラスを作る方法が、「継承」という仕組みです。ちなみに、Objectクラスを元に新たなクラスを作ることだけが継承というのではなく、既存のクラスを拡張して新たなクラスを作る仕組み全般を継承と言います。つまり、あなたが定義したクラスを継承して新たなクラスを作ることも可能です。
例えば、Godクラス(自分で定義したクラス)というものを継承して、Humanクラス(新たに自分が定義するクラス)を作ることができるということです。
インスタンスとは?
インスタンスとは、「クラスから生成されたオブジェクト」のことです。先ほど、「データ=何かしらのオブジェクト」→「オブジェクト=クラスに属する」と説明しましたが、クラスに属するというよりクラスから生成したものがオブジェクトという方がいいのかもしれません。
クラスとインスタンス(オブジェクト)の関係を示すのに、「クラスが設計図」で「インスタンスは設計図を元に実際に作られたもの」という例がよく出てきます。
具体例を出すとクラスが車の設計図で、インスタンスが実際に作られた車です。車の設計図を使うと、実際に車を作ることができますね。それと同じようにRubyでもクラスを使ってオブジェクトを作ることができるのです。
ここでclassのサンプルコードを使ってどのようにクラスが生成されて、インスタンス(オブジェクト)が使われるのかをみてみましょう。
ソースコードの4行目で「Hello.new」という部分でクラスからインスタンス(オブジェクト)を生成しています。
今回は、クラスとインスタンスのことに注目しているので、メソッドには触れていません。
このようにHelloクラス(設計図)から、Hello.new(インスタンス)を生成することができました。
まとめ
私が初めて学び始めた時は、クラス・インスタンス・オブジェクトという部分がモヤモヤしていたので、今そのような状況に陥っている方の理解に少しでも役に立てたらと思い書いてみました。今回の記事では、「クラスがあるからどう便利になるか?」というオブジェクト指向の本領を紹介しませんでした。もしかしたら、用語や概念の部分の理解はプログラムを書いていく中で自然とわかってくるものなのかもしれません。
それでも、私はプログラムを書く+概念や用語の理解=プログラミング上達だと思っているので、今回の記事で取り上げたクラスについても今後必要な知識だと感じています。
これを機に、みなさんの理解が一歩でも進んでくれたのなら、この記事の存在意義もあるというもの。読んでいただき、ありがとうございました。
コメントを残す