仕様書の書き方を調べつつ、リファクタリング。今日は人も少なく集中できる。

今日の作業は信号入力を抽象化するための準備だ。開発中の装置には複数の信号入力と制御出力があるが、そのいずれにも共通のインターフェースでアクセスできるようにしたい。信号入力回路はソフトウェアから増幅率を切替えられる増幅回路が実装されている。また、入力回路には測定する物理信号を電圧に変換する回路が繋がっている。測定する物理量には様々な種類が考えられる。
抽象化した信号入力のプロパティとしては、物理量の単位と、物理量-電圧の換算定数がある。単位は変換回路によって決まり、換算定数は変換回路と増幅率で決まる。増幅回路を切替えたり変換回路を交換したときには、その事を信号入力オブジェクトに通知しなければならない。さらに、それによって信号入力オブジェクトの内部状態が変化する場合は、さらにそれを関連のオブジェクトやGUIに通知されなければならない。

このように状態が変化したことがメッセージとして縦横に飛び回り、オブジェクトが協調動作することになるのだが、うっかり経路が循環しないようにしなければならない。このとき、メッセージを受信したときに最小限の応答をするには、メッセージにどのような情報を載せるかということも重要だ。

これまでもMediatorとObserverパターンを組み合わせていたのだが、メッセージが伝達されるオブジェクトの数が多すぎて複雑になっていた。協調動作するオブジェクトを小さなグループにまとめ、グループごとにMediatorを用意してメッセージ経路をまとめようと思う。