実践的オブジェクト指向設計入門3
システムの分割が終わったら、並列性の識別を行います。分析段階では現実の世界が本質的に並列なので、ほぼ全てのオブジェクトは並列で動作しますが、システムとして実現すると物理的な制約があります。システム設計の段階では、それらの制約を考慮し、システムでどの様に並列性を実現するか考えなくてはなりません。
物理的な制約とは、ハードウェアとソフトウェアの両面から生じるものです。具体的には、マルチコアプロセッサをどれだけ用意できるのか、サーバーのスペックはどうするのか、ネットワーク構成は・・・などといった予算とハードウェアの構成により実現できるシステムの構成が変わります。また、処理の相互依存、業務手順・・・などといったソフトなものから生じる制約もあります。
並列性を大別すると2つのタイプがあります。本質的な並列と非本質的な並列です。本質的な並列性を持つシステムは互いに独立しており、別のハードウェアを使用し同時に処理ができます。一方、非本質的な並列性をもつシステムは、処理手順に相互作用がある状態を指します。
個々のサブシステムがどの様に相互依存しているのかを考える、もしくはどの様に実現するのかにより、並列性の識別を行う事が出来ます。ただし、サブシステムだけを考慮しても不十分であり、動的モデルを参照しオブジェクト間の相互依存性に注目する必要があります。状態遷移図が役に立ちます。
オブジェクトとサブシステムを考慮する事により大半の並列性は識別できますが、最後の仕上げとしてタスク間の並列性を考えます。タスクレベルでみると、相互依存している処理があります。これらの関係を見極めないと並列性を見誤ります。タスクの並列性を考える際にはユースケースが役に立ちます。
まとめると並列性には、オブジェクト単位(小)、サブシステム単位(中)、タスク単位(大)で存在するという事です。これらの並列性は、システムの物理構成とソフトウェア構成が制約となります。
OMTでは以上の様になっておりますが、私個人の経験から言うと、システム処理をトランザクション処理として捉える視点が必要だと思います。実際のシステムはACID特性を保証しなくてはなりません。また、並列性とトランザクション処理は密接に関係しており、トランザクション処理を考えない事には、並列的かつ実用的なシステムを設計できません。
並列性の識別の解説はこれで終わりです。次回は次の段階の解説を行います。