「オブジェクト指向でなぜつくるのか 第3版」[2021, 平澤 章]を読みました
まとめと感想について記述していきます.
概要・まとめ
全体感
この本では,タイトル通り「オブジェクト指向でなぜ作るのか」の理解を目的とした本です.
いきなりオブジェクト指向の説明から入るのではなく,プログラミング言語が現在の形式になるまでの流れ(goto 文,構造型,グローバル変数やメモリ問題など)の説明から入るので,オブジェクト指向が解決しようとした問題がわかります.
その後,オブジェクト指向言語が発展することで派生したプログラミング以外の領域(UML,モデリング,設計,アジャイル開発)についての説明が入ります.
最後に関数型言語の解説が入り終わります.
それぞれの章について
簡単に要約
導入(第一章,第二章)
「オブジェクト指向でなぜ作るのか?」という問いん対して,筆者は「ソフトウェアを楽に作りたいからです」という答えから始まります.
現在,オブジェクト指向は,プログラミング言語だけでなく,設計や,再利用可能なソフトウェア部品群でも用いられています.オブジェクト指向によって,ソフトウェア開発手法が発展し,現在にいたります.
その理由として,「オブジェクト指向は現実世界を表現できる」という考え方がありますが,筆者は「ソフトウェアが代替する人の仕事はほんの一部」ということから,否定しています.
過剰に現実世界で比喩され,説明がわかりづらくなってしまったオブジェクト指向を本当に理解するために,プログラミング言語の歴史からオブジェクト指向の歴史を振り返ります.という導入から始まります.
プログラミング技術としてのオブジェクト指向(第三章,第四章,第五章,第六章)
プログラミング言語の歴史(機械語,アセンブリ言語,高級言語,構造化プログラミング,GOTO 文)の解説から始まり,それぞれの問題点について記述されています.
グローバル変数とローカル変数のスコープ問題,メモリの割り当て問題,の背景から オブジェクト指向 ができたことがわかります.
このような問題を解決した,オブジェクト指向 はクラスライブラリ,フレームワーク,コンポーネント,デザインパターンの誕生につながりました.
応用技術(第七章,第八章,第九章,第十章,第十一章)
抽象化や再利用に優れた オブジェクト指向 は,集合論や役割分担に優れ,上流工程へ応用されるようになりました.
オブジェクト指向 が発展する以前から存在する UML との相性が良く,モデリング,業務分析,要件定義などにも応用されるようになりました.
アジャイル開発との関連についても説明しています.直接的な関係はありませんが,反復型開発プロセスやプラクティスに オブジェクト指向 は相性が良く,TDD やリファクタリンングは オブジェクト指向 の恩恵を受けていることから紹介されました
第十二章 オブジェクト指向をつかいこなそう
まとめです.
オブジェクト指向がなぜ発展できたのかを,今までの内容を振り返りながら解説し,今後の展望について記述されています.
第十三章 なぜ関数型言語で作るのか
おまけとして,昨今話題になりつつある,関数型言語についての解説が最後にあります..
純粋関数型言語の Haskell を用いて関数型言語の解説をします.
章の初めに,プログラミング言語のパラダイムの一つとして紹介されます.(構造化プログラミング,オブジェックト指向プログラミング,関数型プログラミング)
そして,関数型言語の7つの特徴とメリットについて述べます.
書き方は違えど,ソフトウェアの保守性や再利用性を向上させる目的であるオブジェクット指向言語と関数型言語は互いのメリットを補いながら今後も発展していくとのことでした.
感想
タイトルから,オブジェクト指向言語の使い方についての HowTo 本だと思っていましたが,プログラミングの書き方についてはあまり触れられません.
なぜ,オブジェクト指向が現代において普及しているのかを,歴史を追って説明し,とても簡単に理解しやすい内容となっています.著書の最初の方は,「コーディングを支える技術」と似通った内容になっているので,読んだことがある人は読み飛ばすことができますし,読んだことない人は「コーディングを支える技術」を読まなくていいと思いました.
基本的な解説は Java を用いていますが,Java のことを知らなくても理解できる切り口となっています.
オブジェクト指向の解説が書籍のほとんどを占めています.
個人的には,「デザインパターンを比喩で説明されてもあまりよくわからなかったので,オブジェクト指向は比喩を使って説明されがちだからわかりづらくなっている,あくまでプログラミング技術の一つ」,のような考え方がとてもしっくりきました.
最後の関数型プログラミングの解説は,名前はしってるけど具体的な特徴を良く知らない方でも,理解できる説明方法となっています. フロントエンドでは TypeScript や Elm などに用いられているので,興味がある方は是非読んだ方がいいとおもいます.フロントエンドで関数型プログラミングを使うメリットは「りあクト!第3版1部」の解説がとても参考になります.
プログラミングの整理術から上流工程のモデリング手法まで使われるようになったオブジェクト指向の全体感を,オブジェクト指向に詳しくなくても理解できるので,オブジェクト指向を使うプログラミングを習った早い段階で読むと,良いと思いました.