この記事のランク | |
---|---|
読む時間 | 3分 |
重要度 |
プログラミングの学習をしていると、「オブジェクト指向プログラム」という言葉を耳にすることがあるかと思います。
もしくは、過去に調べたことはあるが、理解ができずに諦めてしまった方もいるかもしれません。
今回は全てのプログラミングを学ぶ方に分かるようにオブジェクト指向の考え方をプログラムコードを使わずに説明いたします。
Twitter(@nana_korobi04)でも情報発信していますので、
フォローいただけると嬉しいです!
オブジェクト指向の考え方
オブジェクト指向は、そういった1つ1つの機能を組み合わせて、1つの大きなシステムを作ろうという考え方です。
例えば、自動車を例にしてみましょう。
自動車は、エンジン、ブレーキ、ハンドル、タイヤなどさまざまな部品からできていますよね。
共通している部品もあれば、メーカーによって少しづつ規格が異なっている部品もあるかと思います。
プログラムも同じで、「同じもの」、「違うもの」、「似ているもの」を上手く組み合わせることで、効率的にシステムを作ることができます。
オブジェクト指向のメリット
そんなオブジェクト指向を使うとどんなメリットがあるのでしょうか。
下記4点のメリットがありますので、それぞれ詳しく見ていきましょう。
後から変更がしやすい
タイヤがパンクしたら車ごと買い替える人は稀かと思います。
オブジェクト(部品)を分けることによって、その部分だけを対処すれば時間も費用も少なく済みます。
効率的に開発ができる
自動車ごとに異なったエンジンを作る場合、毎回自動車を作るたびに新しいエンジンを開発しなければならず、時間と費用がかかります。
しかし、エンジンは全て同じものを使うようにすれば、一から作るより開発コストが削減できます。
開発者同士で分業ができる
ブレーキというオブジェクトがあった場合に、開発者たちはブレーキを踏むと「自動車が止まる」と認識しています。
もっと具体的に言えば、ブレーキを踏むと、ブレーキパッドが回転している車輪を両側から挟み、車輪の回転が止まって自動車が停止します。
しかし、そういった細かい仕組みは最初にブレーキを作った開発者が知っていれば良く、後から使う人は「ブレーキを踏めば車が止まる」という認識さえあれば良いのです。
同じようにハンドルを切ったときに内部的にどのような処理がされているかは知らなくても、ハンドルを切った方向に車体が曲がると認識していれば、ハンドルやブレーキなどの部品を組み合わせることで、担当部品の開発者でなくても自動車が作れます。
機能の再利用がしやすい
自動車と同じ乗り物であるバイクを開発しようとした場合、クラクションなど同じ性質のものであれば、少し音量を変えれば自動車の部品をバイクで再利用することができます。
同じ性質のものは流用して少し変えることで、効率的に開発ができます。
プログラミングにおけるオブジェクト指向の用語
自動車に例えることでオブジェクト指向の概念をご説明しましたが、ここからは実際のプログラミングの現場で使われるオブジェクト指向の用語を紹介いたします。
イラストを使ってできるだけ分かりやすく説明していきます。
オブジェクト
前述では自動車の部品をオブジェクトと表現しましたが、それ単体で何らかの機能や動作を実現する構成要素と捉えるとイメージしやすいです。
クラス
クラスは自動車を作るために必要な構成要素(オブジェクト)を書き出した設計書です。
インスタンス
インスタンスは、クラス(設計書)を元に作り出したオブジェクトの集まりを指します。
ひとつのクラスから複数のインスタンスを作成することができます。
自動車という抽象的なクラスから、「軽自動車」、「トラック」、「スポーツカー」という実体を作るイメージです。
プロパティ
プロパティは、オブジェクトの持つ性質や属性のことです。
例えば、「メーカー」、「ボディカラー」、「ガソリンの量」など、性質は共通していますが、個体によって中身が異なるものです。
メソッド
メソッドは、オブジェクトのデータを操作するための振る舞いを指します。
「走る」、「止まる」、「バックする」など自動車に必要な動作を記述したものです。
カプセル化
オブジェクトが持つプロパティを外部から書き換えられないように隠した状態にすることです。
例えば、1リッター10キロ走るエンジン(オブジェクト)があったとき、給油されたガソリン(プロパティ)が5リッターであれば50キロ走れるはずですが、もし外部から1リッター20キロ走るようにプログラムを書き換えられてしまうと、ガソリンスタンドが潰れてしまいます。
そうしたリスクを排除するために、書き換えられてしまうと他へのインパクトの大きな機能はカプセル化を行う必要があります。
継承
クラスのプロパティ(性質や属性)やメソッド(振る舞い)を流用することで、継承すると一からコーディングをせず効率的に開発することができます。
例えば、バイクを開発する場合に、自動車クラスから「メーカー」や「走る」など自動車にもバイクにも同じ性質や動作が必要であれば、その部分だけをコピーして少し改良すればバイククラスを作ることができます。
ポリモーフィズム
同じ「走る」という命令をしてもクラスによって動作が変わることです。
「自動車」、「バイク」、「新幹線」というクラスにそれぞれ「走る」という命令を与えた場合、全部同じスピードで走ると交通違反になってしまいます。
そこで、自動車クラスは60kmまで、バイククラスは30kmまで、新幹線クラスは300kmまでなど、予め「走る」キロ数をプロパティとして指定しておきます。
仮に「走る」というオブジェクト自体に100kmと指定してしまうと、そのオブジェクトを利用している全てのクラスに影響してしまいます。
まとめ
プログラミングはデザインです。
初級プログラマーは後から仕様変更があった場合に、「もっとこうした方が良かった」とか、「全部直すのは大変だ…」といった苦労をするかもしれません。
しかし、その苦労は決して無駄にはなりません。
そんな時、オブジェクト指向を思い出して、他の誰かが同じ苦労をしないで済むよう、効率的な設計を考えてみて下さい。