もう一度ダックテストでいきます
用語の説明は次のものです
ある鳥が鴨のように見え、鴨のように泳ぎ、鴨のように鳴くならば、それはたぶん鴨である。
この例では、鳥を見ている人が、"鴨のように泳ぐことができる"、"鴨のように鳴くことができる"
という少なくとも2つ以上の条件が同時に成立することを定義としていることがわかります
複数の条件が同時に成立するかどうかを判定することは、多分原理的?(もしくは計測的?現実的?)に不可能です。
同時に観測することが不可能である点と、同時に判定することが不可能であるという点において。
これを解決する方法は今のところ一つしか思いつきません
ある条件を確認した後、その結果がある期間において変化しないと決め付けてしまうという方法です。
こうすれば、どれだけ条件がたくさんあっても、ある期間内であれば判定が可能になります
期間は、時間つまりタイムアウト付きとしてもいいし、何かのトリガーで寿命としてもいいですね
そういったものを何というかというと ・・ 要は変数/状態です
複数の条件を同時に満たすことが求められる時、変数が必要になります
条件は全て、満たすか満たさないかの2値、つまりbool変数として表すことができます
オブジェクトの条件、ダックテストで使用した
XXができることを条件とする、もしくはXXができないことを条件とする、
といった条件もbool値とその評価の組み合わせとしてとれます
オブジェクトが正しい状態というのがどういう状態かというのを表明できます
オブジェクトは正しい状態と正しくない状態の2値、つまりbool値となれるので、
オブジェクトが他のオブジェクトの条件の一つとなることも可能になります
総括すると、ダックテストはある種の状態制御を含む概念である、ということです
オブジェクトの正当性とはつまり状態の値かつ定義です。
正しい状態の値(の範囲)を定義に含むことをサポートしなければいけません
状態の値を含んだ定義というのは実に普通のことです
ある会社の採用条件として、TOEIC600点以上の人が必要だとしましょう
ダックタイピングでは"TOEICの点を持つかもしれない人"程度の定義でしか表現できません
ダックテストでは"TOEIC600点以上を持つ人"という状態の値を含んだ定義が使えます
状態の値を含んだ定義の例はいくらでもあげることができます
元気な犬/病気の犬 (健康というパラメータの値)
黒色のもの/灰色のもの (明度という状態の値)
きれいな机/汚い机 (整頓度?)
例えばあなたは、"きれいな机"を見つけることができます
"机"をみつけてきれいかどうかを見るのではなく、"きれいな机"を直接見つけられるはずです
それはあなたが、あなたの頭の中で状態の値を含んだ定義を作成できるからです
状態の値を定義に含むことを、人間(の認知)はサポートしています
抽象化もサポートしています
ダックテストもサポートしています
実はソフトウエア(=実行ファイル=プログラム)もサポートしています
それらから作られたはずの、今のオブジェクト指向プログラミング(の解説)と今のダックタイピングはサポートしていません
これは問題であり、状態の値を定義に含むことをサポートすべきだと私は考えます