Open7

オブジェクト指向入門 第2版 原則・コンセプト 読書メモ

hiromshiroms

よみながら気になったワードを抜き出します。

hiromshiroms

p.31

特性呼び出しが第一の計算メカニズムでなければならない。

p.32

クラスが情報を交換する方法は、特性呼び出しと継承に限定する。

-> 変数をprivateにしてgetter, setter呼び出しで取得/設定するのが暗黙の了解となってるのとなんか関係ありそう

hiromshiroms

3章 モジュール性

組み合わせやすさと分解しやすさは独立している。

分解しやすさはトップダウン的に設計すると達成しやすいが、ある特定の要求を満たすものに分解していくため、開発のきっかけとなったコンテクストに結びつきがち。
組み合わせやすさ達成しているというのは、コンテクストから分離してそのモジュールが使えて、ソフトウェアの生産を助ける場合に満たすとき、だから。

順序に依存するモジュールは分かりにくい、分かりやすさを満たしていない。A -> B -> C の順で動かさないといけないとし、Bはこの位置でないと適切に動作しないとしたら、Bを理解するのにA,Cも理解する必要があるから。

ソフトウェアとドキュメントが分離している場合、変更が入ったときにこの二つの互換性を維持させる、同調させるのは困難。自己文書化できてるモジュールがいい、自己文書化の原則。モジュールの中にドキュメントを含める。
javadocとかこういう概念からきてるだろなぁ。

統一形式アクセスの原則
ある値を、保存している値をそのまま変えすのか、何らかの計算をして返すのか、どちらの手法をとるにしてもアクセス方法が変わらないようにする。モジュールの呼び出し方が変わらなければ、中身を変えても呼び出し側の変更はない。
これこそgetterと関連ある話だった。

どうでもいいけど、前までgetterとかをこれがカプセル化です!っていう説明すきじゃなかったけど、それなりにオブジェクト指向の知識がついてきて、この説明もありだなぁと思うようになってきた。ただこの説明をプログラミング初心者が見ると、getter=カプセル化っていう風に思っちゃうよなー。プログラミング1年生くらいの自分がそうだった。そうではなくてカプセル化の概念の具体例としてgetterが挙げられてるっていう。ただ言語の入門書とかでカプセル化についてそこまで説明してもしょうがないというか、それは言語というよりオブジェクト指向の内容というか。。。ただpublic  とか privateとか可視性がある言語ならどうしても情報隠蔽の概念、カプセル化は触れる必要があるだろうから、簡便な説明としてgetterをあげるんだろうなぁ。オブジェクト指向言語の入門ならそれなりにオブジェクト指向にもふれなきゃいけないしなぁ。とかぐだぐだ考えた。

hiromshiroms

p.147

再利用性のための設計は、できる限り一般的な要素を作り、それを組み合わせてシステムを作ることを意味する。

抽象的のものを組み合わせてシステムを作りたい。

hiromshiroms

オブジェクトが関連する操作を全て備えていれば安定した再利用の単位となる。
中身の詳細なアルゴリズムは入れ替えられる。呼び出し方が一定なら再利用できる。

hiromshiroms

6章 抽象データ型

ある型に対する操作はおおまかに、生成、問い合わせ、コマンドに分類される。

データ形式の変更がソフトウェアのコストの17%を占めることを示す研究がある、データ構造の物理的な表現に依存する実装は柔軟でない。

ADTの仕様記述は次のパラグラフで構成される。

  • 型: 関数、公理、及び事前条件によって特徴付けられるオブジェクトの集合
  • 関数: ADTのインスタンスに適用可能な操作のリストアップ
  • 公理: 関数の値の属性を記述する(戻り値とか引数に型を書くイメージに近い?)
  • 事前条件: 定義域を定義する論理関数

ADTは数学的な定義で、クラスはADTを実装したもの。