メイヤー著「オブジェクト指向入門 第2版 方法論・実践」でクラス設計の面白い原則があったのでまとめてみました。 前提 クラスの特性にはクエリとコマンドがある。 クエリ 属性 ファンクション(戻り値のあるメソッド) コマンド プロシージャ(戻り値のないメソッド) ファンクションに副作用があってはならない ファンクションの副作用とはファンクション呼び出しによって属性の値が変更されること。 たとえばNumberというクラスがあって multiplyメソッドを呼ぶとvalue属性の値が変わる場合、副作用があるという。 ファンクションに副作用があると 数学におけるファンクションと意味が違う 参照透過性が消失する という問題が発生する。このことからファンクション設計時には以下の行為は避けるべきである。 プロシージャの呼び出し 属性に代入 生成命令(コンストラクタ呼び出し) プロシージャでは積極的にオブ