>>278
> わざわざ 『分析レベル』 と 『実装レベル』 を分けて考える

もし設計/実装レベルのみに着目してソフトウェア開発を行うと、
開発者の関心と努力は、実装可能な事/実装が難しい事に集中してしまい、
結果として下記のような問題が発生します。

(1) 本来の要求(やりたかった事)の実現が、
  おざなりになったり、歪んだ形になってしまう事。
  (結果として、プログラミング技術は素晴らしいが、
   使う人にとっては判りにくい、使いにくいものになってしまいがちです)

(2) 拡張や機能追加に耐えないクラス設計になってしまう事。
  (拡張や機能追加に耐えるしっかりした構造を持たせるには、
   普遍的な概念モデルや、プログラム対象分野の知識体系に基づく、
   抽象的なレイヤーが必要です。
   この抽象的なレイヤーは、汎化クラス抽出の方法でもある程度得られますが、
   ボトムアップに実装から抽出する方法では、充分な汎用性をえられません。)

(3) プラットフォームや実装技術と、コアなアルゴリズムの切り分けが不充分になる。
  もし、実装技術やプラットフォームに基づいて、アプリケーションの設計を行ったら、
  それは将来のOS/環境のバージョンアップ時に、大きな変更作業が必要になるでしょう。
  OS/環境依存部、プログラム対象分野の知識体系、アプリケーション、を分けるには、
  レイヤー・パターンが有効ですが、そのレイヤーを切り分けるためにも、
  OO分析の作業が重要なのです。

他にも書くべき事があるのですが、とりあえずここで筆を置きます。