転職活動中にオブジェクト指向について聞かれ、
うまく答えることができなかったので、理解を深めるための記録です!
オブジェクト指向とは
「属性(構成するデータ)」と「メソッド(指示に対する振る舞い)」を1つにまとめた「オブジェクト」の定義ごとに「クラス」を分類し、そのクラス同士を組み合わせてシステムを組み立てる考え方のこと。
、、、???
という感じだと思います笑(何を隠そう私がそうです)
この考え方を車に例えて説明をすると、
属性とは、モノ(オブジェクト)が持っているデータのことで、「色」、「メーカー」、「車種」など
メソッドとは、モノ(オブジェクト)が持っている処理のことで、「前進する」「止まる」「バックする」などのこと
次に「クラス」について説明していきます。
クラスとは
データと処理をひとつにまとめたもの。
オブジェクトのもつ性質ごとに分類したものとも言い換えることができます。
モノ(オブジェクト)の設計書のようなモノです。
今回の車で例えると、下記のようになります。
「」に入っているものは全てオブジェクトです。
ーーーーーーーーーーーーーーーーーーーーーーーーーー
「乗り物」
↓
「車」 、「バイク」、「電車」、「飛行機」
↓
「トヨタ」 、「日産」、「ホンダ」、「BMW」
↓インスタンス化
「プリウス」、「クラウン」、「ハイエース」
ーーーーーーーーーーーーーーーーーーーーーーーーーー
このようにクラス分けをすると、全体におけるオブジェクト位置付けが明確になり、
どのような共通点があり、どのような異なっている点があるのかがはっきりします。
インスタンスとは
クラスというモデルをもとに作られら実体のことを表します。
言い換えると、クラスが設計書で、そのモデルから生まれた実体がインスタンスです。
オブジェクト指向のメリット
オブジェクト指向を活用するメリットとしては、次のようなものが挙げられます。
・効率よくプログラムを設計・開発できる
先ほどの例の中で、全ての車に「自動運転を機能を搭載する」という事象が発生したとします。
「プリウス」などの車種が1000種類ある場合に、それぞれを変更すると1000回の変更が必要ですが、
「車」というクラスを変更すると1回の変更で済みます。
・不具合の原因を特定しやすくなる
不具合が起きた際に、
「ブレーキが効かない」→「車」のクラスを確認する
「トヨタのエンブレムがズレている」→「トヨタ」を確認する
「着陸時の揺れが激しい」→「飛行機」を確認する
など、不具合の特定がしやすくなります。
・分業できる
上位クラスを元として、1000車種あるものを分業して作成していくことができます。
などがあります。
オブジェクト指向のデメリット
完全無欠で便利に見えるオブジェクト指向にも下記のようなデメリットはあります。
・設計の工程に時間がかかる。
オブジェクト指向プログラミングはしっかりと設計されてはじめて実力を発揮します。
逆に設計がしっかりできていないと、オブジェクト指向のメリットを享受できなかったり、
別の問題が生じたりします。
・知識やスキルが求められる
オブジェクト指向のプログラミングを行うには相応のスキルや知識が必要となります。
オブジェクト指向の代表的な言語
・Java
・Ruby
・PHP
・Python
など様々な言語で使われています
以上、理解の整理も兼ねた初心者向けのオブジェクト指向とはでした!