はじめに
技術書等を読んで得た知識をまとめた、自分用の読書メモです。なので、自分の所感多めでまとめていきます。
今回は「オブジェクト指向でなぜつくるのか(著 平澤章)」(以下「本書」)についてです。
本の目次(日経BP書店のサイトです)
3行まとめ
- オブジェクト指向(OOP)についてよくある言説が含む誤りを示し、より実態に近いOOPの説明を与えてくれる
- OOPの基本的な概念やその歴史、そしてメモリの使われ方などOOPについての基礎知識について丁寧に書かれている
- UMLや設計・開発プロセスなどOOPを取り巻く周辺技術についてもまとめられている
第1章 オブジェクト指向はソフトウェア開発を楽にする技術
- 初心者にありがちな3つの混乱の整理
- 用語の洪水
- 比喩の乱用
- なんでもオブジェクト症候群
用語の洪水は、確かに学びはじめの頃に頭を悩ませた記憶がある。日常生活で聴き慣れないような単語は特に(ポリモーフィズムなど)。
比喩・なんでもオブジェクト症候群について意識はしていなかったが、本書によって現実世界とプログラム世界との境界がはっきりしたと思う。現実世界!=プログラム世界
第2章 オブジェクト指向と現実世界は大違い
- SSIA
第3章 OOPを理解する近道はプログラミング言語の歴史にあり
- OOP誕生に至るまでのプログラミング言語の歴史について
OOPは
連綿と続いてきたプログラミング言語の工夫と改良の歴史の中で、必然性を持って登場したものといってもいいでしょう。
ということだ。
OOP以前の言語(Cなど)とOOPとの違いはクラスの有無くらいしか認識していなかったが、その違いや関係性について理解できた。
そんなに昔からOOPが存在していたとは思いもしなかった(Simula67という言語を初めて知った)。
GOTO文はわるいぶんか。
第4章 OOPは無駄を省いて整理整頓するプログラミング技術
- OOPの特徴と言われる「カプセル化(本書では「クラス」)」、「ポリモーフィズム」、「継承」についてのわかりやすい説明
プログラミング言語は退化した?
という説が印象に残った。確かに、ものが進化していくにつれ、ある意味「危険」な機能はなくなっていくのかな(e.g.)自動車のMTとか)?
これらの隠れた機構について基礎寄りの知識を深めることと、これらを前提として高機能に(応用的に)使いこなしていくおことの、どちらも面白いと思った(自分はどちらかというと応用よりだと思う)。
例外が比較的新しい概念であることを初めて知った。
OOPを生かすも殺すもプログラマの心がけ次第
第5章 メモリの仕組みの理解はプログラマのたしなみ
- OOPにおけるメモリの使われ方について
- ガベージコレクション
- インスタンス生成時のメモリ
メモリは「静的領域」「ヒープ領域」「スタック領域」(ここらへん地味に難しい...)
インスタンス変数はインスタンスごとに生成されるが、メソッドについてはクラスにごと1つずつしかメモリ上に存在しない。
OOPにも「ポインタ」は存在する(プログラマが意識しなくて良くなっているだけ)
「メソッドテーブル」
第6章 OOPがもたらしたソフトウエアとアイデアの再利用
- OOPから発展した、ソフトウェアの枠組みを超えた「デザインパターン」について
つまり再利用部品群を作った時のノウハウを新しいデザインパターンとして抽出し、それをまた次の再利用部品群の開発に生かしているというわけです。
- フレームワークについての「ハリウッドの原則」
- GoFのデザインパターン
-> 古いものではあるが、未だに通用するものである。
デザインパターンについては興味を持ったので今後書籍などを参照しようと思った。
第7章 汎用の整理術に化けたオブジェクト指向
- オブジェクト指向(の考え方)がソフトウェアを超えて開発工程の汎用的な整理術となったこと
- この側面が「オブジェクト指向」の理解の妨げの要員の日つつとなっている?
第8章 UMLは形のないソフトウエアを見る道具
- UMLについて
UMLは使ってはいたものの、ここまで広汎で汎用的なものだとは知らなかった(このことが批判される場合もあるらしい)。
ソフトウェア設計においては「クラス図」と「シーケンス図」で事足りそう(コミュニケーション図はよく分からなかった)。これらはソフトウェア以外の汎用的な知識の表現にも用いることができる。
非オブジェクト指向の表現としては、「ユースケース図」、「アクティビティ図」、「ステートマシン図」が使えそう。
これらは今関わっているプロジェクトでも頻繁に用いられるので、これを機に精通していきたい。