本記事について
この記事では、「オブジェクト指向でなぜつくるのかという」書籍を読んで、考えたことや要点などをまとめています。
本記事で述べていることは個人的な見解に過ぎません。
私について
- 入社してから1年未満のiOSエンジニア
- 未だに雰囲気でコーディングしているスタイルから脱出したいと思っている
書籍の概要
どんな本?
- 一言で
- プログラミング言語の歴史と発展の中でオブジェクト指向がどのようにして生まれ、なぜ必要とされたのかを掘り下げ、その仕組みと応用を幅広く解説
- 著者
- 平澤 章
- 出版年
- 2018年 第2版(現在は第3版まで出ています)
どんな人におすすめ?
- なぜオブジェクト指向で作るのかを具体的に説明できない方
- 駆け出しレベルからステップアップしたい方
- コーディングはできるが、その背後にある理論まで深く理解していないと感じる方
所感
1〜5章が個人的に興味深いと思いました。
オブジェクト指向の利点や、それを使うことでプログラミングがどう改善されるのかを以前は上手く説明できませんでしたが、本書を読むことで理解が深まりました。
オブジェクト指向がどのような歴史的背景から生まれ、なぜ必要とされているのかを知ることで、その重要性についてもよりよく理解できるようになりました。
また、メモリの仕組みに関する部分も興味深く、値型と参照型の違いを理解する上で参考になりました。
個人的な要点
個人的に重要だと思った3点を軽く紹介します。
- OOPを理解する上での3つの課題
- 歴史的な背景からOOPを理解する
- OOPの役割
Object-Oriented Programming、オブジェクト指向プログラミングの略
要点1: OOPを理解する上での3つの課題
筆者は、以下の課題がOOPの理解を難しくしていると主張しています。
- 用語が多すぎること
- 比喩を多用すること
- すべてオブジェクトとして表現しようとすること
要点2: 歴史的な背景からOOPを理解する
OOPは、読みにくい機械語や、扱いにくいアセンブリ言語、保守性の低い高級言語といった歴史的な課題を解決する形で自然発生的に生まれました。
機械語の使用
- 課題:16進数などの機械語は全く読めない。
↓
アセンブリ言語の導入
- 課題:人間にわかりやすい記号を使っているが、機械に依存する部分が多く、少しの記述ミスでプログラムが暴走する可能性がある。
↓
高級言語の開発
- 課題:複数の機械に対応し、文法で扱えるが、保守性(理解しやすさや修正しやすさ)が低い。
↓
構造化言語の採用
- 課題:順次進行、条件分岐、繰り返しなどに制限されるが、サブルーチン(関数やメソッドのようなもの)の再利用が難しく、グローバル変数の使用を避ける必要がある。
↓
構造化言語の問題点を克服するため、オブジェクト指向プログラミン(OOP)が開発されました。
要点3: OOPの役割
OOPの三大要素
- クラス(まとめる、隠す、たくさん作る)
- ポリモーフィズム(呼び出される側をたくさん増えても、呼び出す側は変わらない)
- 継承(共通化でコードの重複の無駄を省く)
構造化言語の問題点を克服するだけでなく、コードの整理整頓と無駄を削減し、保守性と再利用性が向上しました。
最後に
本書を読むことで、オブジェクト指向がどのようにして生まれ、どんな場面で使われるかを学べました。
今後は、オブジェクト指向から派生したSwift言語の「Protocol」について、深く掘り下げたいなと思いました。