![]()
| 1. オブジェクト指向による設計とは? | 
![]()
分析モデルについてお客様との確認が終わったChen君は、次は設計を任せられることになりました。Jun先輩の指導の下、分析モデルをベースに設計モデルを作成していきます。Chen君にとっては、オブジェクト指向による設計も初めての経験です。
このチュートリアルでは、設計の流れを理解することやモデルの分かりやすさに重点をおいています。そのため、使用する言語やGUIビルダ、またライブラリの特徴に応じた詳細な設計部分は省略しています。実際は、キーメカニズムの設定により、 実装クラスの追加やパッケージの再構成といった変更が生じる可能性があります。
![]()
![]()  | 
    これから設計を始めていくわけだが、その前に、オブジェクト指向による設計とはどういうものかをきちんと認識しておこう! | 
![]()  | 
    はい、よろしくお願いします。 | 

![]()
![]()  | 
    オブジェクト指向設計の目標って何だか分かるかな? | 
![]()  | 
    設計段階では、実装に必要な情報を決定することが必要なのでは? | 
![]()  | 
    そうだね。分析した内容を「どうやって実現していくか」を考えることが目標になるよ。そのために、システム分析のときに作成したモデルを洗練したり、詳細を追加したりして、設計モデルへと変換していくんだよ。 | 
![]()  | 
    なるほど。分析段階で作成したモデルを設計段階でも使うのですね。 | 
![]()  | 
    そうなんだ。そして、オブジェクト指向による設計ではまず、アーキテクチャについて決定しないといけないんだよ。 | 
![]()  | 
    アーキテクチャって何ですか? | 
![]()  | 
    アーキテクチャは、システムの構成の見取り図のようなものだと思ってくれればいいだろう。ソフトウェアの構成や、プラットフォームについて考えるんだよ。アーキテクチャは、プロジェクト関係者の立場により、異なった視点が存在するよね。異なった視点が存在するということは、アーキテクチャを表現するのに、異なった種類のモデルが要求されることを意味するんだ。例えば、次のようなモデルが、オブジェクト指向設計による成果物として必要になるんだよ。 | 
![]()  | 
    設計段階では、システムとハードウェアとのマッピングといった物理的な側面についても考える必要があるのですね。 | 
![]()  | 
    そうだよ。オブジェクト指向による設計では、実装のためのアーキテクチャを構築し、そして、システムの全体にわたって使われなければならない共通の設計方針を確立するんだよ。 | 
  
![]()  | 
    はい、分かりました。 | 
![]()  | 
    それに、設計は開発者の視点から考えるものだから、使用するデータベースやミドルウェア、実装言語なども考慮しなければならないよ。 | 
  
![]()  | 
    そうですね。 | 
![]()  | 
    オブジェクト指向設計では、標準規格や設計ポリシー、実践レベルの各種方針を決定するために、次のようなキーメカニズムについて考えていくんだよ。  | 
  
|   
 
  | 
  
![]()  | 
    初期処理などのシステムに特化した部分や、データの永続化の方法など、分析段階では特に考えなくてもよかった部分ですね。 | 
![]()  | 
    そうだよ。また、再利用についても考えておかなければならないよ。再利用可能なコンポーネントをシステムへ組み込むためには、設計プロセスの初期段階から考慮する必要があるからね。 | 
![]()  | 
    分かりました。 | 
  | 
  
![]()  | 
    キーメカニズムを決定し、それに応じたミドルウェアやライブラリを選択したら、今度はそれに応じたパッケージを導入するんだよ。要素をパッケージにグループ化したり、パッケージ間の関係について考えたりしていくんだ。
    設計においては分割されたパッケージの単位が開発の単位になっていくからね。 | 
  
![]()  | 
  |
![]()  | 
    機能を分割するためにパッケージに分割するわけではないのですね? | 
![]()  | 
    パッケージに分割するのは、要素をグループ化することでモデルのメンテナンス性を高めることが目的なんだよ。また、パッケージごとに独立性を高めることによって、並行開発がしやすくなるんだ。 | 
![]()  | 
    実装に入ると人数が増えるので、うまくパッケージに分割して並行開発を進めることが大事になってきますね。 | 
![]()  | 
    そうだね。また、これは補足だが、実際のところ、分析の段階でパッケージにグループ化する場合もあるんだよ。分析の段階でパッケージに分割する大きな目的は、モデル要素の整理なんだ。例えば、クラスの数が多い場合などは、クラスを整理するためにパッケージに分割する場合があるし、システムの機能が多い場合は、ユースケース図を作成する段階でパッケージに分割し、大まかな開発グループを作る場合もあるんだよ。 | 
![]()  | 
    分かりました。Jun先輩、設計上ではいろいろな問題が出てきそうですね。 | 
![]()  | 
    Chen君、よく発生する問題に対する典型的な問題解決法を提示した「デザインパターン」というのがあるんだよ。いろいろなパターンが集められ、分類・カタログ化されているから、必要に応じて応用してみるといいよ。ただし、これは考え方そのものであって、ソースコードやユーティリティとしてあるわけじゃないんだよ。 | 
![]()  | 
    はい、分かりました。 | 
![]()  | 
    では早速、設計モデルの作成に入ろう。 | 
![]()