Rubyがオブジェクト指向のプログラミング言語であることは知っているけど、オブジェクト指向がどういうものかわからない…という初心者の声をよく耳にします。
オブジェクト指向は抽象的な概念のため、根本から把握しなければなりません。
プログラミングでは、オブジェクト指向型言語が主流になってきており、エンジニア初心者としてオブジェクト指向を理解することが大切です。オブジェクト指向をしっかりと理解することで、スキルアップに繋がり、将来性の高いエンジニアに近づくでしょう。
この記事では、「Rubyのオブジェクト指向とは何か?」といった解説からオブジェクト指向のメリットやRuby以外のオブジェクト指向型言語まで、基礎から実践的なまで解説していきます。
Rubyのオブジェクト指向とは
Rubyはオブジェクト指向型の言語です。オブジェクト指向とは、「従来の複雑で難しいプログラミング言語を効率的なソフトウェア開発のために考えられた概念」となります。
そもそもオブジェクトとは、「モノ」のことでさまざまな複雑なデータを1つのモノとし、複雑なプログラミングをオブジェクトにまとめた開発形式です。
オブジェクト指向が役割をもち、それに命令を実行することで、作用するという考え方となります。
Rubyにおけるオブジェクトの種類とは
Rubyのデータは、全てがオブジェクトです。オブジェクトにはさまざまな種類があります。代表的なものは以下の通りです。
- 数値オブジェクト
- 文字列オブジェクト
- 配列オブジェクト
- ハッシュオブジェクト
こういったものがあるのか…程度の理解で構いません。オブジェクト指向の概念については、後ほど詳しく説明します。
オブジェクト指向とは
冒頭でオブジェクト指向の定義に触れましたが、「オブジェクト指向=〇〇」といった明確なものはありません。だからこそ、理解するのが難しいともいえます。重要なのは、概念としてのイメージと使い方です。
イメージとしては、「モノを操作する」考え方と覚えておきましょう。データを1つのモノとして、モノを操作するイメージです。テレビというモノに対し、リモコンで操作するイメージをもつと理解しやすいでしょう。
オブジェクト指向の使い方
Rubyでオブジェクト指向を使うには、以下の重要な3つの概念を理解する必要があります。
- クラス
- インスタンス
- メソッド
それぞれの詳細については、後述します。
オブジェクト指向の事例
例えば、自動車というオブジェクトを作りたい場合、ガソリンやブレーキなどの要素が必要です。また、具体的にどのタイミングでブレーキをかけるか、どれくらいの速度で構成するのか、などの命令を加えることで、「モノを動かす」ことができます。
モノの種類や、モノを動かす要素については、次章で解説する「オブジェクト指向を構成する概念」を理解することで、理解できるでしょう。
オブジェクト指向で重要な概念
オブジェクト指向を理解するには、構成する概念への理解が不可欠です。オブジェクト指向に関わる重要な概念とその関係性を理解し、オブジェクト指向を根本的に理解しましょう。
クラス
オブジェクト指向でのクラスとは、オブジェクトの設計図のことです。全てのオブジェクト指向は何らかのクラスに属しています。オブジェクト指向は役割と命令がなければ、自分で動けません。
例えば、オブジェクトで犬型ロボットを作りたい場合、犬を表すクラス「Dog」と定義します。
インスタンス
インスタンスとは、クラスを具象化したものです。クラスという設計図を元にして、製造されたものがインスタンスです。クラスが「たい焼き器」だとすると、インスタンスは「たい焼き」となります。
メソッド
オブジェクト指向でのメソッドとは、クラスに命令する動作のことです。車でいうと、アクセルやブレーキのようなものです。先ほどの例でいえば、クラス「Dog」に対し、「吠える」「走る」などのメソッドで動作を命令します。
オブジェクト指向のメリット
オブジェクト指向には、さまざまなメリットがあります。大別して、以下の3つです。
- プログラムの安全性が高い
- プログラムの再利用が高い
- プログラムをテストしやすい
それでは、それぞれ解説していきます。
プログラムの安全性が高い
オブジェクト指向では、「カプセル化」することで、プログラムのセキュリティを強めることができます。カプセル化とは、オブジェクトの情報を隠し、外部からの不正な操作を防ぐ仕組みで、アクセス制限のようなものです。
オブジェクトに関するデータを操作するには、アクセス権限が必要となります。名前の通り、カプセルで情報を保護しているイメージで認識すると良いでしょう。
プログラムの再利用性が高い
再利用とは、プログラムの一部・全てを別のプログラムで利用することです。開発では、既存のプログラムをコピーし、新たなプログラミングに貼り付けるケースがあります。
再利用が高いため、開発工数を削減し、効率的な開発に繋がります。そもそもオブジェクト指向型の開発では、部品化を前提としている場合も多く、再利用性が高くなっています。
プログラムをテストしやすい
先述した部品化に通ずるものがありますが、オブジェクト指向は分業化できるため、プログラムを各部分でテストしやすいです。
オブジェクト指向型言語では、大人数での開発においても、分業による効率的なテストが可能となります。部分的な変更もしやすく、柔軟にカスタマイズしやすい構造です。
Ruby以外のオブジェクト指向型言語
オブジェクト指向についての概要を理解できたでしょう。冒頭で説明した通り、Rubyをはじめ、他にもさまざまなプログラミング言語でオブジェクト指向となっています。今回は3つの言語に絞り、紹介していきます。
Python
Pythonは、オブジェクト指向型のプログラミング言語の1つで、Githubの最新の調査(https://octoverse.github.com/)によると、世界で2番目に人気があります。
Rubyと同様、初心者向けのプログラミング言語として人気です。アプリ開発からディープラーニングまで、WebサービスやAI関連のビジネスなど、幅広い用途で使われています。
Java
Javaはオブジェクト指向言語の1つで、RubyやPythonと同様、人気のあるプログラミング言語となります。OSに関係なくプログラムを動かすことができ、システム側で重宝されている言語です。
ただし、プログラム言語としては複雑なため、初心者にはおすすめしません。まずはRubyやPythonでオブジェクト指向に慣れるのが、一般的です。
C++
C++とは、「C」言語を拡張したもので、オブジェクト指向言語として「クラス」を使えるのが特徴です。2020年3月時点でのプログラミングの検索数(https://www.tiobe.com/tiobe-index/)では、JavaやPythonに続いて、4位を記録しています。Webアプリケーションからロボット開発まで、汎用性の高いプログラミング言語です。
まとめ
Rubyのオブジェクト指向について、ご理解いただけたと思います。
オブジェクト指向を理解することで、エンジニアとしてのステップアップに役立ちます。Rubyをはじめ、他のオブジェクト指向型言語にも挑戦してみてください。