前々から「メモを取りながら本を読んだ方が、なんだかんだ効果的なのでは🤔?」と思っていたので、今回読む本(オブジェクト指向でなぜ作るのか)は試しにメモを取りながら読み進めて行くことに。面倒くさいけども😇。実際メモ有りと無しでどれくらい違うのかという点も気にはなっているのでやってみる。

本書の構成

TODO 後で書く。

第1章オブジェクト指向はソフトウエア開発を楽にする技術

オブジェクト思考はソフトウエア開発の総合技術

Q. オブジェクト指向でなぜソフトウェアを作るのですか? A. その理由はソフトウエアを楽に作りたいからです。

オブジェクト指向という技術は、1967年にノルウェーでプログラミング言語(Simula67)として登場したらしい。
その後、現在に至るまでに拡張、発展してソフトウェア開発のさまざまな分野に適用されている(これについては後ど追記する)。

  • プログラミング言語(Java, Ruby など)
  • 要求仕様
  • 設計内容
  • 図式表現
  • 再利用可能なソフトウエア部品群
  • 優れた設計のノウハウ集
  • 業務分析や要求定義の効果的な進め方
  • システム開発を柔軟に進めるための開発手順

そのため、オブジェクト指向をひと言で表すと「難しいソフトウエア開発を楽に行うための総合技術」となる。

オブジェクト指向の普及以前は、対象とするシステム全体の機能を捉え、それを段階的に詳細化して、より小さな部分に分解していく「機能中心」の開発手法だった。
しかし、この手法には、仕様変更や機能追加が起きた場合の修正範囲が広範囲になりやすく、ソフトウエアの再利用も難しいという課題があった。
そこで、オブジェクト指向の技術は、この課題を解決するために、ソフトウエアの保守(修正範囲を狭め)や再利用をしやすくすることを目的としている。

総合技術への進化過程

先のSimula67というプログラミング言語は、クラス、ポリモーフィズム、継承という、それまでなかった仕組みを備えており、後に最初のOOP(Object Oriented Programming language)と呼ばれることになった。
その後、この仕組みはアラン・ケイ(「未来を予測する最善の方法は、それを発明することである」の人)率いるチームが開発したSmalltalkに引き継がれて、「オブジェクト指向」という概念として確立した。

このOOPという仕組みが、次のようなことを可能に、もしくは生み出していった。

  • 大規模なソフトウエアの再利用部品群(クラスライブラリやフレームワーク)の作成
  • 再利用部品群が作られる過程でお決まりの設計アイデアがデザインパターンとなった
  • OOPの仕組みを利用して作られているソフトウエアの構造を図式表現する方法(UML)
  • OOPの考え方を上流工程にも応用したモデリング
  • システム開発全体を円滑に進めるための開発プロセス

オブジェクト指向の理解を難しくしている要因

その1 - 用語の洪水

オブジェクト指向には、次のような聞き慣れないたくさんの用語が登場する。

継承、汎用、特化、スーパークラス、サブクラス、インターフェース、多重継承、属性、関連、集約、移譲、オーバーライド、オーバーロード、アクセス制御、コンストラクタ、パッケージ、例外、ガベージコレクション、フレームワーク、クラスライブラリ、コンポーネント 、デザインパターン、ユースケース、モデリング、UML、リファクタリング、アジャイル開発プロセス、RUP、XP・・・

ソフトウエア開発におけるオブジェクト指向がカバーする領域と、その広い範囲で従来なかった新しいアイデアや仕組みが次々と提案されているため、用語が増えて行くことは技術の広がりからしてある意味では仕方がないと腹を括る。
そもそも、問題の本質は用語の増加ではなく用語の定義の乱れにある。
*TODO これに関して後ほど追記する。

その2 - 比喩の乱用

オブジェクト指向の基本的な仕組みの説明に良く次のような比喩が用いられる。

「動物がスーパークラスで、哺乳類や魚類がサブクラス。卵を産みミルクで子供を育てるカモノハシは、爬虫類と哺乳類の多重継承に相当する」 「人は”生年月日”という属性を持つ。具体的な人である田中さんに”年令を教えてください”というメッセージを送ると、”28才です”と答えが返ってくる」 「病院で医者や看護師、薬剤師が連絡し合いながら仕事をするように、オブジェクトもコンピュータの中でメッセージを送り合いながら仕事をする」

こうした説明は、OOPの仕組みを感覚的に理解するのには良いかもしれない。
しかし、同時にプログラミング言語の仕組みや目的をきちんと理解することが大切である。
また、コンピュータに任せる仕事の範囲についても話すことなく、上のような比喩だけが乱用されると、「オブジェクト指向を使うと、現実世界をそのままプログラムとして表現できる」という重大な誤解を生むことになる。
*より詳しいことは2章に記載がある。

その3 - なんでもオブジェクト症候群

「オブジェクト指向 = モノ中心 / モノ指向」と解釈すると、現実世界の人、出来事、システムが管理する情報など、なんでもオブジェクトであると説明ができてしまう(ここいまいち理解できてない😕)。こうした極端な抽象化を「なんでもオブジェクト指向症候群」と著者は呼んでいる。
また、著者はこの「なんでもオブジェクト指向症候群」こそがオブジェクト指向の理解を妨げている最大の原因であると書いてある。
*より詳しいことは7章に記載がある。

本書について

本書が解説しないことと、していること。

❌ Javaなどのプログラミング言語の文法やUMLの詳しい表記法などの個々の技術の詳細な解説
⭕️ Javaなどのプログラミング言語やUMLなどの技術が何(what)なのか、なぜ(why)必要なのかの解説

感想

こういう特定の技術が生み出されるまでの過程を学ぶのって結構楽しかったりする。 一見すると、こんなこと知っていても仕事では役立たなそうだけど、技術が生まれるまでの過程を知っているから、それを使って何かやるときは、その思想に相反していないかとか、迷子にならないための指標みたいなのが身に付く気もするし。

第2章オブジェクト指向と現実世界は似てひなるもの

続く・・・