オブジェクト指向分析・設計

オブジェクト指向の特徴として、オブジェクトという考え方(パラダイム)で各工程をシームレスに連携できるということが言われますが、この解釈を勘違いする方が多いように思えます。工程がシームレスに連携するということを、成果物がシームレスに連携するという勘違いです*1
この勘違いに気づく代表的な症例として「分析して作ったクラス図と、ソースコードから起こしたクラス図が繋がらない」というのがあります。クラス図はとても便利で、実世界のオブジェクトを表現したり、プログラムの構造を表現するのに使え、どちらもクラス図なので、このクラス図同士の変換がとっても簡単に思えてしまうようです。しかし、実際はここが一番難しいのです。
分析はシステム対象をモデルに変換する作業、実装は設計モデルをコードに変換する作業です。それに対して、設計は分析モデルをもとに設計モデルを創造する作業です。分析や実装はそれなりの業務知識やプログラミング言語知識などのスキルがあれば、半機械的に出来そうですが、設計に関しては様々なトレードオフを考慮したうえでの創作活動なのです。
オブジェクト指向分析・設計」とひとくくりにされることが多々ありますが、このために分析と設計があまり頭を使わずに、半機械的に出来ると思っている方が多いように思えます。分析は分析、設計は設計と意識することは大事だと思います。
と、いうのをJSD本を読みながら考えました。

*1:分析、設計、実装をきちんと定義してなくてすみません