Rubyで学ぶオブジェクト指向設計とは?

Ruby


「プログラミングをはじめたけど、オブジェクト指向がよくわからない」と思っていませんか?
「そもそもオブジェクト指向ってなに?」という方もいるかもしれませんね。

オブジェクト指向は、現在のプログラミングで主流になっている考え方です。プログラミングを上達させたいなら、オブジェクト指向の理解は避けて通れないでしょう。しかし、オブジェクト指向はなかなか習得が難しい考え方で、

  • そもそも概念が理解できない
  • 抽象的でピンと来ない
  • どう使えばいいかわからない

という声を聞きます。

そこで、この記事では、オブジェクト指向を理解したいプログラマーの方のために、Rubyでのオブジェクト指向の解説をしていきます。上記のような悩みを解決できるように、初心者の方にも分かりやすく説明していきます。ぜひご一読して、オブジェクト指向の考え方を理解しておきましょう。

目次

  • Rubyはオブジェクト指向を学ぶのに最適
  • オブジェクト指向ってなに?
  • オブジェクト指向で重要な概念
  • オブジェクト指向のメリット
  • オブジェクト指向の使い方はライブラリから学べ

Rubyはオブジェクト指向を学ぶのに最適


なぜ、オブジェクト指向を説明するためにRubyを選んだのかというと、理由は2つあります。

一つ目は、Rubyは他の言語に比べて習得しやすいことです。言語仕様がシンプルで、比較的覚えやすい言語なので、プログラミング初心者の方に最適です。また、実務に使えるほどのパワーも備えており、その証拠に世界的な人気言語ランキングにもランクインしています。

二つ目は、Rubyが完全なオブジェクト指向の言語として設計されていることです。JavaやC#など、他にもオブジェクト指向の言語はありますが、一部オブジェクト指向でない部分を含んでおり、完全とはいえません。一方、Rubyではすべてのものがオブジェクトです。オブジェクトについては、後ほど詳しく説明します。

以上のことから、Rubyはオブジェクト指向を学ぶのに最適です。
それでは、次項からオブジェクト指向について説明していきます。

オブジェクト指向ってなに?

そもそも、オブジェクト指向とは何でしょうか?
端的にいえば、オブジェクト指向はプログラミングをする上での考え方です。専門用語では、パラダイムといいます。厳密には違いますが、設計手法のようなものですね。

オブジェクト指向以外のパラダイムとしては、Cの命令型、Haskellの関数型など、言語ごとに採用しているパラダイムが異なります。また、1言語1パラダイムではなく、多くの言語は、複数のパラダイムを持っています。

なぜ複数のパラダイムを採用しているかというと、最強のパラダイムというものはなく、どのパラダイムが適しているかは、プログラムによるからです。オブジェクト指向が主流になったのは、最も汎用的に使えるからでしょう。

オブジェクト指向で重要な概念


オブジェクト指向には、理解しておかなければならない重要な概念が2つあります。ここでは、その2つの概念について詳しく説明していきます。

クラス

まずは、クラスについてです。クラスとは、後ほど説明するインスタンスの元になるものです。設計図のようなものですね。自動車でいえば、クラスが設計図、インスタンスが車になります。クラスからインスタンスが作られる、ということを覚えておきましょう。

クラスには、変数とメソッドを持たせることができます。

変数は、数という名前ですが、数値だけではありません。文字列や真偽値、配列など、つまるところオブジェクトならなんでもOKです。自動車でいえば、ガソリンの残量が変数にあたります。

メソッドは、クラスの動作(できること、処理)を表します。クラスにやってもらいたいことをプログラムする部分ですね。自動車で言えば、走る・止まるといったメソッドを持たせます。

通常、クラスはそのままでは使えないので、使う際には、次に説明するインスタンスを作ります。

インスタンス(オブジェクト)

クラスを使うために、クラスからインスタンスを作ります。自動車でいえば、設計図から車を製造するということです。クラスからインスタンスを作ることをインスタンス化といい、作られたインスタンスをオブジェクトと呼びます。

オブジェクトはクラスからいくつでも作ることができ、各オブジェクトは独立しています。例外として、Rubyではクラスにクラス変数という特別な変数をもたせることができ、そのクラスから作られたオブジェクトすべてで共有することができます。

以上、上記2つがオブジェクト指向で必須の概念です。抽象的な概念ですが、イメージをしっかりつかんでおきましょう。

オブジェクト指向のメリット

それでは、オブジェクト指向のどこが優れているのでしょうか?ここでは、オブジェクト指向のメリットについて説明していきます。

プログラムの安全性が高まる

クラスに持たせた変数は、特定のオブジェクトが独占して使用することができます。他のオブジェクトはアクセスできないため、そのオブジェクト外から変更されることはありません。いつの間にか変更されていた、ということが起きないのです。

プログラムのバグの原因のひとつは、予期しない変数の変更です。変数をオブジェクトが独占的に所有することで、意図しない変更を防ぎます。これをカプセル化といいます。

プログラムの再利用性が高まる

クラスを作るときは、関連するものをひとつのクラスにまとめます。そうすることで、プログラムの再利用性が高まるからです。似たようなプログラムを作るときに、すでに作ってある既存クラスを再利用できるようになります。凝集度が高い(まとまりがある)クラスほど、再利用性が高まります。

もちろん、これは自動的にそうなるわけではないので、あなたが意図的に再利用しやすいようにクラスを設計する必要があります。クラスの役割を減らし、1つのことに専念するクラスを作ることがコツです。

プログラムがテストしやすくなる

うまくプログラムできていれば、1つ1つのクラスは理解しやすく、シンプルにまとまっています。ひとつの巨大なプログラムよりも、小さく分割されたプログラムのほうが、テストが容易になります。テストは、プログラムの品質を保証する重要な作業です。テストがうまくできないと、プログラムの品質を保証するのは難しくなってしまいます。

テストしやすくするコツのひとつとして、クラス間の依存性を少なくすることが挙げられます。あるクラスが別のクラスに依存していると、テストするときに2つのクラスが必要になります。さらに他のクラスに依存していれば、どんどんテストに関係するクラスが増えていきます。クラス間の依存を0にすることはできませんが、なるべく少なくするべきです。

オブジェクト指向の使い方はライブラリから学べ

オブジェクト指向の概念は理解できても、「どうやって設計に活かしたらいいのかわからない」という方も多いでしょう。そんなときは、Rubyの標準ライブラリを参考にしましょう。標準ライブラリは、オブジェクト指向に基づいて設計されています。経験豊かなプロの手で作られており、かつ汎用的な再利用しやすいプログラムの好例です。公式ドキュメントを眺めているだけでも、どのように設計すればいいのかなんとなくつかめてくるでしょう。

参考:Ruby公式リファレンス:組み込みライブラリ

まとめ

オブジェクト指向について理解できましたか?実際のところ、文章による説明だけでは、完全にオブジェクト指向を理解することはできません。習得には、概念の理解+プログラミングの経験が必要です。この記事で概念はつかめたと思いますので、後はプログラミングに活用して経験を積んでいきましょう。また、オブジェクト指向に関する書籍もいくつか出版されています。そちらも参考にすると良いでしょう。おそらく、当分の間オブジェクト指向が主流のパラダイムであると予想されます。苦労してでも理解しておく価値は十分にあります。

あなたは、オブジェクト指向のどんなところがわかりにくいと思いますか?

>>リモートワーク案件も充実!Rubyのフリーランス求人案件をクラウドテックで探す

関連記事