##はじめに
オブジェクト指向の考え方がプログラミングをしていく上で便利だし、なんとなく継承やカプセル化、ポリモルフィズムという特徴を持っていることは知っている。しかし、なかなか大きなメリットを感じることは難しい。メリットを感じれないことがオブジェクト指向を遠ざけているのでは?(概念としてなんとなく分かっていても、オブジェクト指向の原則に従ってプログラムしていく重要度を実感するまでに至らない)
そこで今回自分がそうなってしまう理由をオブジェクト指向を簡単にまとめながら考えてみました。
##オブジェクト指向とは?
プログラムの設計や実装についての考え方の一つ。
システムのふるまい方を現実世界のオブジェクト(モノ)ととして捉え考えるやり方である。
##オブジェクト指向のメリット
・大規模な開発に向いている
-設計さえしっかりしていれば複数人で開発することが容易になる
・仕様変更・再利用性が高い
ようするにシステム設計・実装・運用する一連の流れで楽をすることが出来る!
##オブジェクト指向のメリットを成り立たせる3つの概念
・継承
・カプセル化
・ポリモルフィズム
###継承
クラス定義の共通部分を別クラスにまとめる仕組み
特徴
-再利用・拡張がしやすい
-重複コードの削減
このメリットは試しのコードを書いたり小規模な開発くらいだと再利用や重複の削減必要性を実感しにくいどころか工数が増えるため気を付けなくてもちょっとくらい良いじゃんとなりがち...
###カプセル化
オブジェクトの隠ぺい(ブラックボックス化)
ゲッターとセッターの利用
特徴
-外部から使う際は複雑なことを考えずに済み、内部実装の変更が容易になり修正などの変更に強くなる
-オブジェクトの内部で振る舞いが完結している
実際に趣味等の一人で実装する際は変更やメンテナンスに関する操作をする機会がないことやあまりコードを再利用することがないことがある
###ポリモーフィズム
同じメソッドの呼び出しであっても、オブジェクトが変われば振る舞いが変わる
関数のオーバーロードもその一つ
特徴
-共通のインタフェースが用意できるので拡張の際、柔軟な対応が可能になる
メモ:正直今でもあんまりしっくりと来てないのでこれから理解できるように取り組んでいきたい
##メリットを感じきれない理由
そもそもオブジェクト指向は複数人での開発向けであり、システムの保守、運用のためのメンテナンス性まで考慮されている。
しかし、その恩恵を最も受けるのは大規模開発における設計を行う上流工程の人である。また、末端で一部のコードを書く際には設計通りに作る必要があり、ある程度の構成は決まっているためオブジェクト指向全体を意識することが少ない。
こうした理由や継承・カプセル化・ポリモーフィズムの個々の機能に関しての特徴は知っていても使う際に恩恵を受けきれないことがオブジェクト指向全体の理解までには時間がかかってしまうのではと考えた。
##まとめ
オブジェクト指向が難しい理由
・試し程度にやってみる分にはメリットの実感を得ることが難しい
・設計を自分で行いそれなりに大きめの規模でないとありがたみが分からない
オブジェクト指向を理解するために!
・最初から理解するのは当然無理であることを頭に置いておく
・なぜオブジェクト指向が使われるのかメリットを把握しておく
・継承・カプセル化・ポリモルフィズムのメリットを意識し、コードを書くことを心がけることであとからの修正や機能追加の際にありがたみを得る
・とりあえず適当に書いてしまったコードで痛い目にあってメリットのありがたみをかみしめる(多分これが一番早い)
・オブジェクト指向が生まれた経緯など思想から理解していく(理解を深めていくために)
結局調べて文章を読むだけだと理解できないので実際にコードを書いたり痛い目にあいながらメリットを実感に理解を深めていこうという事です。アウトプット超大事!
##参考文献
オブジェクト指向が5000%理解できる記事
https://qiita.com/gorillab/items/b2f8e39d7cc23ad505f9
プログラマー1年生がポリモーフィズムについて学んだのでRPGで説明する。
https://qiita.com/Nossa/items/b6e2f4ed0fa079359fc5
PHPで学ぶオブジェクト指向
https://qiita.com/ritukiii/items/a1979c3bcdcea9454d53