『オブジェクト指向入門』の読書記録です。

まずはP.35の練習問題2.1をやってみます。

問題

2.1 プログラミング言語のモジュール性

よく知っていてその機能を評価できるプログラミング言語のモジュール構造を調べてみよ。この章で説明した基準と原則を満たしているだろうか。

わたしにとってはいきなりハードな問題です。

モジュール性の基準と原則

この章での基準と原則とは次のとおり。

5つの基準

  • モジュールの分解しやすさ
  • モジュールの組み合わせやすさ
  • モジュールのわかりやすさ
  • モジュールの連続性
  • モジュールの保護性

5つの原則

  • 言語としてのモジュール単位
  • 少ないインターフェイス
  • 小さいインターフェイス
  • 明示的なインターフェイス
  • 情報隠蔽

C++でまずは漠然と考えてみる

わたしが最も理解している言語であるC++について、「モジュール構造」といえるものが何かを考えてみましょう。

素朴に考えると、C++におけるモジュール構造の代表的なものはクラスでしょうか。C++におけるクラスは上記基準を満たしているか? ってのはどう考えたらいいか見当もつかないので、原則について考えてみましょう。

言語としてのモジュール単位

モジュールは使用する言語の構文単位に対応していなければならない。

クラスがモジュールである、って考えているのだから、当然この原則には合致しますね。

しかし複数のクラスが集まったモジュールというものを考えたときには、C++は言語的にサポートできていません。言語レベルではなく処理系と環境のレベルでは、たとえば動的ライブラリにするとかいった手段がありますが。

少ないインターフェイス

モジュールはできるだけ少ないモジュールと対話すべきである。

C++のクラスでもとくに問題なく実現できます。でもこの原則には合致しないように書くことも容易です。

小さいインターフェイス

2つの対話するモジュールがある場合、それらが交換する情報の量は出来る限り少なくなければならない。

C++のクラスでも問題なく実現できますが、すべてをglobalにおいてべたべたに依存したりすることもできます。あるいはすべてを公開メンバにしてお互いべったりのクラスを書くことだってできます。

明示的なインターフェイス

モジュールAとBが対話する場合、その対話は必ずAあるいはB、もしくはその両方のテキストから明らかにならなければならない。

この原則は正確な意味がつかめません。暗黙のうちに対話に影響をあたえるなにかがあってはならない、ということなのでしょうが、具体例が思い浮かびません。

情報隠蔽

とくに公にすると宣言されていない限り、モジュールに関する情報はすべてそのモジュールのみに属する非公開の情報である

クラスのレベルではこの原則に合致しています。しかし複数のクラスによるモジュールでは実現が困難です。

以下次号

難しいなあ。

このへんでペンをおいて頭をひやします。つづきは明日(の予定)。