翔泳社Amazonで購入する元祖オブジェクト本の第2版です。規律、認識論上の原則、分類の技法をソフトウェア工学からの立場で解説している言わばエンジニアリング本です。小難しい言葉で書かれている部分があり、またページ数が多いため結構読むのが大変でした。その分本来のオブジェクト指向の考え方や良いプログラミングにつながる考え方が深くまで解説されていたりして、とても為になりました。本書の対象読者は、オブジェクト指向技術に興味のある技術者や良い作法のプログラムを書きたいプログラマです。読むのは大変ですが損はない、むしろ読まないと損するくらいの本です。真のモジュール性プログラミングの世界でモジュールと言うと一連のサブルーチンのまとまりを指します。このモジュールを再利用し、モジュールの組み合わせでプログラムを組み立てるモジュール・プログラミングという考えがあります。再利用可能なモジュールは独立性が高く、異なるアーキテクチャに組み込んでも安定して稼動することが求められます。モジュールに再利用可能という性質を組み込むための5つの基準(criteria)、5つの規則(rule)、5つの原則(principle)が存在します。これらを満たしたものがクラスの基礎となります。サブルーチンは結果として戻り値を返すものと返さないものの二種類に分けられます。戻り値を返すものを関数(function)と呼びます。戻り値を返さない手続きをプロシージャ(procedure)と呼びます。次の5つの基準を満たす設計手法は価値のあるモジュールを生み出す最低条件を満たします。モジュールの入り口で他システムからの入力をチェックする5つの規則5つの基準から、モジュール性を保障するための次の規則が導き出されます。適切な情報のみを公開すること。基準、規則から次の5つの原則が導かれる。Principle)ひとつの役割だけをもつこと。考える必要があります。再利用の考えが述べられています。本書で述べられている「仕様」のことなのか、「設計」のことなのかそれとも「ソースコード」のことなのか。僕は「車輪」とは「仕様」のことだと理解しています。「走行抵抗を低くして対象に駆動力を与える」という「仕様」を再発明する必要はありません。それを「車輪を円形で作成し、エンジンと連携させてコロコロ回るようにする」という設計や「空気によって地面に設置しなくても動く」という設計、設計を変えてつくることは全然良いことだと思っています。同じ円形の車輪でも「ゴムで作る」のと「木で作る」、実装を変えて作るのも全然良いことだと思います。多重定義の役割ルーチンの多重定義は顧客のための機能である。ある1つの概念を表す異なる実装を使うとき、顧客は1つの記述で済ませることができる。再利用性へのアプローチ「多重定義の役割」よりつまり、意味は同じだけど実装を隠蔽する場合に多重定義(オーバーロード)を使うということです。総称性は供給者モジュールの作者のための機能である。ある特定の概念を表す1つの実装を異なる種類のオブジェクトに適用するときに、同じ供給者モジュールテキストを書くことが可能になる。ジェネリクス)は開発者が楽するものという位置づけです。抽象とは、物体についての認知可能な性質を、そのほかの性質から、あるいは、その性質が当てはまる物体から分離することにほかなりません。抽象データ型よりオブジェクトを抽象のまま扱うには、そのオブジェクトの概念に対する操作や概念の属性に注意を向けるようにします。操作がデータ構造を定義するものとして操作を定義すると良い抽象データ構造が定義できるようになります。オブジェクト操作として考えなければならない概念として、モジュールの供給者(supplier)、モジュールの顧客(client)そしてプロトコル(契約)があります。モジュールはプロトコル(契約)を基本とした相互動作を行います。Contract)すべてのモジュールにおいてお互いの権利と義務を明確に定義することで信頼性の高い大規模システムが実現できます。Contract)」と言います。契約による設計では表明(assertion)を使ってモジュールの仕様を表します。ルーチンの顧客が満たす事前条件は、ルーチン(メソッド)の呼び出し側、つまり顧客(Client)が満たさなければならない条件です。呼び出し側はルーチンの事前条件を満たしているかどうかを確認してからルーチンを呼び出します。ルーチンの供給側は事前条件を確認できる操作を公開するルーチンの供給側は顧客が事前条件を満たしているかどうかを判断できる操作を公開しなければなりません。公開されている操作で顧客が事前条件を確認できない場合には、事前条件がおかしいか公開している操作が足りません。事前条件は人間の入力、システム連携には使用しない契約はルーチン間(供給者と顧客)で取り交わすものです。ここでいう供給者と顧客とはソフトウェア同士のことです。ソフトウェアと人間、ソフトウェアと外界の間には契約は成り立ちません。人間や外界のシステムが相手の場合には入力検査の仕組みを導入しなければなりません。満たされない場合の事後条件は保証されない事前条件が満たされないでルーチンが呼び出された場合、ルーチンの事後条件は保証されません。供給者側はそれをエラーにしても良いし、でたらめな値を返してもよいということです。事前条件が満たされているのに、事後条件が満たせない場合には、供給側は例外をスローします。実行時の表明違反は、そのソフトウェアにバグがある証拠である。事前条件違反は顧客側にバグがある証拠である。事後条件違反は供給側にバグがある証拠である。Web系の方が強いですがスマホアプリもできます。Webサービス開発やスマホアプリ開発案件あればお声がけください。