- 443 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 07:55:59.43 ID:n7HRsF8B.net]
- テスタビリティを追い求めるなら純粋関数の集まりで
機能を構成したほうがいいしオブジェクト指向はそのようになっていない モックオブジェクトやスタブといった複雑なテスト機構が必要になる 1.オブジェクト指向はテスト容易ではない また部分適用がないからインターフェースのシグニチャをどうするかという問題が非常に痛い そのためシグニチャを簡潔にしようとする、引数で状態を渡すという純粋関数的なアプローチを否定せざるを得ない クラスはプライベート変数を多く持ち、アクセサメソッドが必要になる。 プライベート変数をテストするためには.ToStringのオーバーライドがほぼ必須であり、 クラスを作るごとに必要になるであろう。 2.オブジェクト指向はテスト出来る状態にするために行数がかかる なぜならば、ユーザーだけでなくプログラマからみても状態という最も重要な情報が隠蔽されているからだ 何をするにしてもクラスクラスクラス クラスを定義するごとに、そのクラス専属のメソッドを書かなければならない 非常に似ているデータ構造があったとしても、統一的な関数でなく、クラスの「継承」によるメソッドの受け渡しを与儀なくされる 似ているデータ構造は所詮似ているだけで、別個のクラスなのだ 多重継承をサポートしているならいいが、単一継承しかサポートしていない言語にとって 複数のアスペクトからなるクラス構造を書くためにはどうすればよいか?また新たなシンタックスを追加すればよいだけだ 3.オブジェクト指向には再利用性がない クラスというものに単一の役割を持たせるのが好ましいというが、 本当に単一の役割を志向するならば、単一の機能をもった関数のほうがよほど簡潔に書ける クラスという概念そのものが、データ構造とふるまいという複数の役割を持っている オブジェクト指向システム設計という言葉が示唆するもの、それは単なるシステム設計ではないということだ 設計行為というのは性能、機能、品質、保守性といったトレードオフを人の手でバランス調整するということだが、 それは適切なデータ構造を定義し、抽象化された汎用性の高いアルゴリズムを書けば済むことで、 それらを一緒くたにし、SRPに反しているオブジェクト志向という土台が、設計行為の役に立つとは思えない
|

|