実践的オブジェクト指向設計入門2
よほど単純なシステムでない限り、1つのシステムをそのまま扱うのは大変なので、システムを少数のサブシステムに分解します。ここで注しなくてはならないのは、サブシステムが1つのクラスや関数(機能)ではなく、それらをパッケージングしたものであるという事です。
設計時にいきなり細かい要素を考えだすと、選択できる設計の幅が狭くなってしまいます。また、視野が狭くなると柔軟な思考を失い、プロジェクトが失敗する確率が高くなります。何故ならば、細かい単位の設計は読む人の理解をさたまげ、コミュニケーションを阻害してしまうからです。
どの様のシステムを分割すればよいのかというと、OMTではレイヤーとパーティションで分けて考えるという方法が提示されています。
レイヤーはシステムを階層化して考えます。TCP/IPプロトコルスイートやOSが良い例です。システムを階層化すると、1つのレイヤーを取り換えれば変更できるようになるので、仕様変更に対して対処しやすくなります。システムは最低限、ハードウェア、OS、アプリケーション、サブシステムは分けておくべきです。そうすれば、システム設計の幅が広がり、変更の影響を押えられます。
パーティションはシステムを独立しているサービスに分割します。例えば、オペれティーングシステム(OS)は、ファイルシステム、メモリ管理、デバイス制御、プロセス制御といったサブシステムを含んでいます。この様にシステムを、結合度が低いサブシステムに分割します。
レイヤーとパーティションの違いは結合度とインタフェースです。階層化されたサブシステムは、他の階層に依存し、関係するサブシステムのためのインタフェースを提供しています。一方パーティンは、サブシステム間の結合度が低く、人間が扱いやすいインタフェースを提供しています。
システムの分割は、レイヤーとパーティションの2つの考え方を両方使用します。一般的には、システムをパーティションで分け、個々のサブシステムを階層化します。
サブシステムが判明したあとは、サブシステム間の関係とデータの流れを記述します。色々な記述方法が考えられますが、パッケージ図と配置図がこの目的にふさわしいでしょう。
以上でシステムの分割についての解説は終わりです。