『オブジェクト指向入門 第2版』の7章を読んだ
第7章 静的な構造:クラス
クラスは(部分的であってもよい)実装を伴う抽象データ型である。
クラスはデータ構造の集合を表し,それらのデータ構造はインスタンスと呼ばれる.オブジェクトは,何らかのクラスのインスタンスである.
なぜ,クラスがオブジェクト指向において重要なのか?
オブジェクトと型
オブジェクト指向以前では,モジュールと型は別々に扱われていた.
モジュールは,プログラムを分割したものであって,それそのものはソフトウェアが提供するサービスと関係がない.例えば,main関数しかないC言語のプログラムやMainクラスしかないJavaのプログラムは,そのような書き方は推奨されていないものの,期待する機能を提供することはできる.モジュールという概念は,機能には影響を与えない,構文上の概念であるといえる.
一方で,型は意味的な概念である.型はオブジェクトの形式を定義することで,ソフトウェアシステムの実行に直接影響を与える.
クラスはモジュールであり,ソフトウェアの分解の単位である.それに加え,型でもある.オブジェクト指向という手法の能力の大部分は,このように識別したことに由来する.
クラス
クラスはいくつかの特性を持ち,それらは以下のように分類される.
- 特性
- 属性
メモリに乗っている値.フィールド. - ルーチン
計算を行うもの.関数.- ファンクション
結果を返すルーチン. - プロシージャ
結果を返さないルーチン.
- ファンクション
- 属性
特性の呼び出し
特性を呼び出すには,x.add(4)
のように記述する.これは,x
に特性add
を適用することを示す.プロシージャを用いた場合では,add(x, 4)
と記述する.後者の書き方では,x
と4
が同等に扱われている.オブジェクト指向では,このような均等性は存在しない.
つまり,オブジェクト指向では,「この操作をこれらのオブジェクトに適用せよ」とはいわず,「この操作をこのオブジェクトに適用せよ」という.
単一ターゲット(Single Target)の原則
オブジェクト指向におけるすべての操作は、その操作の実行時における現在のインスタンスという特定のオブジェクトに対するものである。
システムの実行
オブジェクト指向では,システムをクラスによって構築する.システムを実行するには,まず,その実行のルートオブジェクトと呼ばれる特定のオブジェクトを作成し,生成プロシージャと呼ばれる特定のプロシージャをそのオブジェクトに適用する.
ルートオブジェクトは,システムのルートクラスと呼ばれる特定のクラスのインスタンスである.生成プロシージャはルートクラスに含まれるプロシージャのひとつである.
システムを実行するためのルートクラスという概念は,「機能による分解」でいうところの最上位の機能と同じ概念にはならない.どのシステムでも,実行を開始する場所が必要になる.問題なのは,システムアーキテクチャの一番上や,根本的な要素を決めてしまうことである.