*begin *back *foward *end *contents

開発モデル編

第18章 再利用基盤モデル




18.1 再利用基盤モデルとは

 再利用基盤モデルとは、再利用可能なコンポーネントを段階的に構築するための高次元モデルのことをいう。高次元モデルとは、クラスを単位とする分析では捉えることができないものを指している。
 クラスという単位として構造を捉えきれないものの例を以下に示そう。

 上記のような複数のクラス間にまたがる問題を解決し、優れた実装をするためには、クラスの単位よりも高い次元の視点で分析・設計手法が必要となる。
 このような高次元分析手法は、高品質のソフトウェアを生産するというだけでなく、再利用性、保守性の高いソフトウェア構築を目指すために必要である。どんなソフトウェアでも、保守性を高めることは構築するソフトウェアが発展する限り重要なことである。また、オブジェクト指向技術を駆使して再利用性を高めることは、企業およびソフトウェア開発者の戦略として重要なものとして位置づけられなければならない。
 Dropでは、このようなソフトウェア領域に対する高次元の分析手法を再利用基盤モデルと総称している。

 再利用基盤モデルによる分析では、図18-1に示すように、分析対象であるソフトウェアを4つのレイアに分類することができる。



sorry this is image

図18-1 高次元分析におけるレイア構造




18.2 クラスレイアカテゴリ図

 クラスレイアカテゴリ図(図18-2)は、クラスライブラリを構築する際に、「役割」と「再利用範囲」というレイアによってクラスを分類し、整理していくための図式表現である。クラスレイアカテゴリ図は、ODG中心のコンポーネント分析フェーズにおいて主に利用され、コンポーネント設計フェーズでは、再利用基盤モデルを指針として個々のクラスが設計される。また、ADG中心のシステム共通設計フェーズにおいてシステム共通コンポーネントを設計する際にも使われる。
 クラスレイアカテゴリ図は、横のレイアとして役割(View、Process、DataManage)を持ち、縦のレイアとして再利用範囲(App、AppParts、Generic)を持つ。9つに分割された空間はレイアスペースと呼ばれ、そこにはクラスをグループ化したカテゴリを入れる。
 カテゴリとは、クラスを意味のある単位にグループ化したものであり、2重線の矩形で記される。 カテゴリは、コンポーネント利用者がコンポーネントを探しだす手がかりとなるようなクラスグループの役割を名前として持つ。また、コンポーネント設計者にとってのカテゴリ分類は、再利用範囲と依存関係の基本指針となるものである。
 たとえば、データベース関連のカテゴリはDBAccessというカテゴリになり、その中には、DBTable、DBDatabases、DBColumnといったクラスが属するだろう。また、Set、Bag、List、Stackといったオブジェクトの集合を管理するクラスはCollectionというカテゴリに属するだろう。DBAccessからCollectionに引かれている点線矢印は、DBAccessはCollectionに依存しているという線である。つまり、DBAccessカテゴリを利用するにはCollectionカテゴリも必要となるということを明示している。 小規模な開発や再利用コンポーネントが構築していない段階ではクラスをわざわざカテゴリにしなくともよい。そのような時には、レイアスペースにクラス(矩形)を直接入れることもできる。


sorry this is image

図18-2 クラスレイアカテゴリ図





それぞれのレイア分類についての詳細を表18-1に示そう。

意味
再利用レイア Generic システムに特化しないレイアである。このレイアのサブレイアとして、マシン依存・処理依存という分類をする場合もある。このレイアに存在するクラスは最も再利用性が高い。
AppParts システムに特化しているが、類似システムに再利用することができるレイアである。類似システムに再利用できるフレームワークなどがこのレイアに分類される。
App 基本的に再利用を考慮せずに設計するレイアである。
役割レイア View View(見せ方)の制御を行うレイアである。
Process 処理や状態などの制御を主体とするレイアである。
DataManage 永続的なデータの管理を主体とするレイアである。

表18-1 クラスレイアカテゴリ図の意味




クラスレイアカテゴリ図を使う意義と効果

 クラスレイアカテゴリ図を使って、なぜクラスを役割別に分類しなければならないのだろうか?またそのような分析手法の効果とは何だろうか?ここではこのようなクラスレイアカテゴリを使った意義と効果について明確するために、スキューバダイビングショップの精算管理システムを例にしながら解説しよう。このシステムは、ダイビングコースの選定、レンタル機材の貸し出しなどといった予約・精算を行うものとする。

1.役割レイアに分類する意義

 View、Process、DataManageのレイアにオブジェクトを分類する意義は、変更や拡張、保守の容易な安定した構造のモデルを作りやすいという点にある。また、非常に基本的で現実的なオブジェクト分類手法でもある。以下に各レイアの特徴と分類方法を示す。

2.再利用レイアに分類する意義

 App、AppParts、Genericのレイアにオブジェクトを分類する意義は、オブジェクトの再利用範囲を明確にし、再利用可能コンポーネントの分析・設計指針を立てやすいという点にある。以下に各レイアの特徴と分類方法を示す。

3.役割・再利用レイアに分類することによる効果のまとめ

 ここまで、クラスレイアカテゴリの9つのレイアスペースにカテゴリを分類する意義について述べてきた。以下に役割・再利用レイアに分類することによる効果について整理しておこう。



18.3 再利用基盤モデル実施プロセス

 ここまでの解説でクラスレイアカテゴリの意義について理解できたと思う。次は、再利用基盤モデル全体として、クラスレイアカテゴリをどのように使っていくかという高次元モデリングのプロセスについて解説を行う。この再利用基盤モデリングのプロセスとして「問題領域主導型プロセス」「コンセプト主導型型プロセス」の2通りの進め方を紹介する。ここで書かれている流れだけが正しいという分けではない。実際には、同時並行的ににそれぞれの項目が進められれることになるだろう。
 図18-9は再利用基盤モデルの実施プロセスについて、Drop開発サイクルと照らし合わせて記したものである。


sorry this is image

図18-9 再利用基盤モデル実施プロセス



     再利用基盤モデル実施プロセスの個々の項目について説明する。

  1. 要求オブジェクト抽出
    シネマスコープモデルによりシーンから要求オブジェクトを取り出す。

  2. 要求オブジェクトのアブストラクトデザイン
    要求オブジェクトの大まかな関係構造と制御の流れをクラス図やコラボレーション図によって示す。

  3. 要求オブジェクトクラス図のクラスレイアカテゴリ写像
    図18-7にようにクラス図をクラスレイアカテゴリの9つのレイアスペースに透かして見てみる。

  4. コンポーネント抽出
    要求オブジェクトを実現するコンポーネントを考察し、クラス図に加える。(図18-8参照)

  5. カテゴリ配置
    それぞれのクラスが属するカテゴリを既存カテゴリの中から探す。もしなければ作成するかカテゴリを作らずクラスのまま図に表すか決める。

  6. カテゴリセット名の決定
    もしコンポーネントの対象が多くのカテゴリで形成されるようなフレームワークや大きなコンポーネント群であるなら、いくつかのカテゴリを組み合わせたカテゴリセットを考える。このカテゴリセットの名前がフレームワークやコンポーネント群の名前となる。

  7. カテゴリセットにおける統一的なメソッドインタフェースの決定
     フレームワークやコンポーネント群の単位となるカテゴリセットを単位として、統一的なメソッドインタフェースを決定する。メソッドインタフェースとは、クラスライブラリとして統一しなければならないメソッド名やパラメータ規約(これは後述する再利用基盤構築指針ドキュメントによる)に基づいて、コンポーネントユーザが使いやすい一貫した名前やメソッド呼び出し手順を決めることである。

  8. カテゴリセットにおける統一的なエラー処理の設計
     カテゴリセットのレベルで統一的なエラー処理が実施できるようにエラー処理に対する基本指針と、どのようなエラーをどこで止めるかといったエラーデザインの基本方針を立てる。この設計は最終的に「パッケージ仕様書」にまとめられる。

  9. コンポーネントのインタフェース設計
     コンポーネントの大まかななデザイン。View、Process、DataManage間のクラス関係を疎な結合にするためにそれぞれのコンポーネントの接合点、および開発システムとコンポーネントの接合点のデザインを、様々なデザインパターンを駆使しながら最適なコンポーネント間の関係について設計する。この設計はクラスの詳細設計に引き継がれる。
     ここで重要なことは、コンポーネントが提供するサービスのインタフェースを定めることであり、これはカテゴリセットで定めた統一的なメソッドインタフェースに準拠したものとなる。この段階になるとコラボレーション図などの動的構造モデルが多用され、オブジェクトの動的な側面をモデル化することになる。その後、コンポーネントシートというコンポーネントの大まかなインタフェースを定義した簡単なドキュメントが作成される。

  10. クラスの詳細設計
     コンポーネントを構成するクラスの詳細なデザイン。コンポーネントを実現するために必要となるプロセス空間やスレッド空間の設計や、クラス間の関連について再度見直しをかけながら具体化する。また、インタフェースメソッドを実現するために必要とされるメソッドや新たなクラスの切り出しなども検討する。インタフェースメソッドとは、クラスの中で公開されたメソッドのうち、クラスライブラリの統一的操作またはプロトコルを提供するようなメソッドのことを呼ぶ。この段階でもデザインパターンを使って最適なデザイン構造を模索し可能なら切り出されたクラスを再利用コンポーネントとして設計する試みがなされる。




18.4 再利用基盤モデリング Q&A


 クラスレイアカテゴリ図を使った分析は、その手法について、視点を変えて考察すると様々な問題が見え隠れするものだ。つまり分析に対する価値観を変えると、いままで良かれと思っていた分析がたちまち崩壊してしまうこともある。
 このような現象を理解するには、クラスレイアカテゴリによるカテゴリ分類手法は、オブジェクト指向技術そのものの持つ効果を発揮し、問題点を解消させるために、非常に微妙なバランスをとりながら分析を進めていくための分類手法であると考えなければならない。よって機械的にカテゴリを分類できるような形式性などは残念ながらなく、分析者の価値観やその分析者が所属する企業やチームの価値観を定めなければ、クラスレイアカテゴリを使った分析結果の妥当性さえも検証できないのである。
 このような理由から、クラスレイアカテゴリのレイア間の線引きの詳細はDropユーザ(Drop利用チームや企業)に任されることになる。と言っても、すでに、レイア間の線引きのヒントについては「クラスレイアカテゴリ図を使う意義と効果」で解説している。この解説によって、Dropユーザは、カテゴリをどのレイアスペースに位置付けるかといった基本的な指針は立てることができることを確信する。
ここからは、クラスレイアカテゴリ図を使ったモデリングについてより深く理解してもらうよう、Q&A形式で、クラスレイアカテゴリを使ったモデリングを崩壊させるような弱点を露わにする質問を浴びせ、それに対する対策を回答で示すことにしよう。






*begin *back *foward *end *contents