『オブジェクト指向とは?』他の言語との考え方の違い|使う時のメリットとデメリット

オブジェクト指向とは?≫他の言語との考え方の違い_使う時のメリットとデメリット プログラミングに必要な知識

【本サイトではGoogleアドセンス、または、アフィリエイト広告を利用しています。】

オブジェクト指向を理解する意味

プログラミング言語には様々な種類があります。

今回はその中のひとつ、オブジェクト指向言語についてお話をします。

なぜいくつもある種類の中から、
あえて、オブジェクト指向の説明をピックアップするのか?

 疑問に思う人

それは、システム開発などで使われている
主流な言語のほとんどがオブジェクト指向の言語だからです。

JavaもC#もJavaScriptもPHPもRubyもPythonもSwiftも、
ぜーんぶオブジェクト指向です。他にもいっぱいあります。

オブジェクト指向が何たるかを理解できれば、
これらの言語の使い方や設計思想が見えてきます

これから文法を学習する際も、実際にプログラミングをする際も、
この考え方を知っているとサクサク作業を進められるはずです。

もしクラスの概念がまだ理解できていない場合は、
こちらの記事を先に読んでください!

オブジェクト指向とは?他の言語との違いは?

オブジェクト指向って何でしょう?オブジェクト?指向?

普段使わない言葉ばかりでまったくイメージがわかないと思います。

 やれやれと思う人

オブジェクト指向とは、
世の中にある物をそのままプログラムとして表現するという考え方のことです。

これまでのプログラムは、処理や計算を軸に、
始めから終わりまで全体的な動きの流れを作る為のものでした。

例えば、勇者と魔王が戦うプログラムがあるとします

 ロールプレイングゲーム

勇者が剣で攻撃したり、魔王が魔法を使ったり、
アイテムを使ったり、いろんな行動をします。

これまでは、それぞれの登場人物が何をできるのか、何ができないのか、
どんな行動をしたのか、今の状態はどうなっているのか、

処理の流れにつじつまが合うように、すべての物事を、
メインのプログラムの中に書いていく必要がありました

【ステータス(変数の定義)】
勇者の体力
勇者のアイテム個数
魔王の体力
魔王が使える魔法の回数

【ストーリー(メインプログラム)】
勇者がアイテムを使う。
勇者のアイテムが減る。
魔王の体力を減らす。
勇者が剣で攻撃する。
魔王の体力を減らす。
魔王が魔法を使う。
勇者の体力を減らす。

オブジェクト指向は、これまでのプログラムとは違って、
登場人物それぞれに、自分自身の動きやステータスを持たせることができます

勇者はどんな行動ができて何が起こるのか、
アイテムはまだあるのか、使ってしまってもうないのか、

魔王はどんな行動ができて何が起こるのか、魔法はあと何回使えるのか、

個々のクラスで管理できるようにしたのです。

【ストーリー(メインプログラム)】
勇者がアイテムを使う。
勇者が剣で攻撃する。
魔王が魔法を使う。

【勇者(クラス)】
(ステータス)
勇者の体力
勇者のアイテム個数
(行動)
剣で攻撃する ⇒ 魔王の体力を減らす
アイテムを使う ⇒ 魔王の体力を減らす、勇者のアイテム個数を減らす

【魔王(クラス)】
(ステータス)
魔王の体力
魔王が使える魔法の回数
(行動)
魔法を使う ⇒ 勇者の体力を減らす、魔王が使える魔法の回数を減らす

このように管理方法が変わることで、プログラムの組み方も当然変わってきます。

では、このように管理することによって、何がメリットになるんでしょう?

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

オブジェクト指向のメリットとして、まず1つ目は

メインのプログラムでは、
お話の流れを書くことだけに集中できるようになるということです

先ほどの例を見比べてみてください。

勇者と魔王をオブジェクトとして、クラスに切り出して管理することで、
メインのストーリーがかなりスッキリしました。

こうすることで、個々の状況がどうなっているのかまで
細かく意識することが減ります。

 自信のある人

2つ目は、それぞれが自分自身の行動やステータスを管理するので、
実際の世界に近い形で設計やプログラミングができるようになります

つまり、ある事象をプログラムに起こす時に、事象全体ではなく、
個々の物それぞれに焦点をあてて、個別に設計をすれば良いわけです。

あとは、メインのストーリーという舞台に登場させて行動させてみる、
ストーリーに合わない動きがあれば設計変更する、というような感じです。

プログラムが出来上がった後で、勇者はアイテムもう持ってないはずなのに、
このタイミングでまた使ってるじゃん!みたいな矛盾はもう出なくなります。

3つ目はプログラムを部品化できることで作業の分担がしやすくなります

Aさんは勇者のクラス、Bさんは魔王のクラスをお願いね!
私はメインのストーリーを書くから!じゃあ、はじめましょう!

みたいなことがやりやすくなります。

 会社のみんな

また、部品化できるということは、全く別のお話を書くタイミングで、
勇者や魔王のクラスを部品として切り出して使いまわすことができるようになります。

続編を作る時にわざわざ勇者や魔王クラスをゼロから作る必要がなくなるわけです。

勇者クラスに新しい能力をつける時も、対象のクラスを書き換えれば良いですし、

戦士クラスを新しく追加するなら、メインのストーリーや勇者、魔王のプログラムに
影響を出すことなく、部品として後付けすることも簡単にできます

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

ここまでオブジェクト指向のメリットについてお話をしましたが、

いいことばかりではありません。1つだけ、デメリットもあります

それは、全体の動きが見えにくい、
ストーリーの流れがつかみにくいということです。

これまでのプログラムの書き方では、メインのプログラムを上から順に読んでいけば、
勇者や魔王がどのような状態で、どういうストーリーなのかが理解できました。

オブジェクト指向の書き方では、メインのプログラムを読んだだけでは、
各個人の行動を抽象的に捉えることができるだけで、
個々の詳しい動きや状態をつかむことが難しいのです。

つまり、開発者がシステムを理解する為には、
プログラム全体を俯瞰的に見て、登場するオブジェクトそれぞれの
関係性を把握する能力が必要になります

 積み木をする子供

これは、論理的思考能力につながるお話です。
それぞれの部品の仕組みを把握して、矛盾のない動きを想定するわけです。

論理的思考能力については、以下にまとめていますので、
もっと能力を鍛えたい!という人はぜひ読んでみてください。

まとめ

オブジェクト指向についてイメージがついてきたでしょうか?

世界は物質でできています。物質はそれぞれに状態や動きを持っています。
その物質を、プログラム上でクラスという形で表現するということです。

腕試しに「人が信号を渡る」というイベントをプログラムにしてみてください。

 横断歩道を渡る子供

登場するオブジェクトは、人、車、信号あたりでしょうか。

目の前のことをオブジェクト指向でどうなるかなと考えてみるのも
良いトレーニングになる
のでぜひやってみましょう!

タイトルとURLをコピーしました