Ruby 分担作業をするとはどういうことなのかまとめてみた。


こんにちは、iPhoneアプリ開発者の中川です。Objective-c、Swift、C++などいろいろな言語をつまみ食いしてるけどいまいちクラスを使う利点がわかってない僕です。はてはて。
最近「Ruby on Rails 4」を使ってRubyの勉強を始めたのですが、Rubyのオブジェクト指向プログラミングの利点である、複数人でクラス作成を分担するということがイマイチわからないので調べてまとめてみました。Web上には多くの情報が存在するので、しっかりとした説明を読むのはゴールが見えなくて辛い、おおまかな概念がわかればいいよ!という方の参考になればと思っています。

①クラスとは。

クラスはオブジェクト(インスタンス)を生み出すために存在します。生み出されるオブジェクトの仕様は、クラスに記述されており、ユーザがオブジェクトにアクセスしてその機能を実現しようとするとき、オブジェクトはクラスからその機能を借り出します。

②クラスは大きく2種類に分類されます。

Rubyに予め多数用意されている組み込みクラス。
自分で作成する独自クラス。→これが本記事のメインテーマ。
例)Creatureクラスという独自クラスの定義。

③newメソッドを使ってオブジェクト(インスタンス)を生成する。

独自クラスからオブジェクトを生成するには、newメソッドを使います。newメソッドを呼び出すと②の例でいうところのinitialize(name)が呼ばれます。
”Hiroshi”という名の友達オブジェクト(my_friend)を生成してみましょう。

④オブジェクトの特性はそのクラスのメソッド定義でほぼ決まる。

メソッドはdef式を使って定義できます。

⑤継承。

あるクラスが定義したメソッドを、あたかも自分に定義されたもののように他のクラスが利用できます。継承を使うことでわざわざ独自のメソッドを作成する手間が省けます。

⑥実はRubyでは継承関係にない独立したクラスというのは作れない。

クラス定義においてスーパークラスを指定しないとき、Rubyは勝手にObjectクラスをそのスーパークラスにセットします。つまりすべてのクラスはObjectクラスのサブクラスなのです。

⑦モジュールオブジェクト。

さて、クラスの作成はメソッドを定義していくことがメインだということがわかりました。
ここでモジュールオブジェクトという概念の登場で更に分担作業の意義がわかってきます。
モジュールは、継承関係に立つことができない独立したクラスです。そこからオブジェクトを生成することもできません。
要するにnew()できないのです。

注目するところは、moduleという定義式とincludeメソッドです。
クラスにモジュールをincludeすることでモジュールで定義したメソッドをあたかもクラスにあるかのように働くのです。

まとめ。

アプリケーションを作っていく上で分担作業をするというのは、メソッド作成を分担することができることのようです。きっとオブジェクト指向プログラミングの利点はチームのプログラマそれぞれが必要なモジュールを作成していき、それを持ち寄ってクラスに組み込んでいくということなのでしょう。ずっと気になっていたオブジェクト指向プログラミングの利点は何なのかというモヤモヤがスッキリしました。