利用目的
使われるフェーズ
ドキュメント化
考え方・使い方
1.1 クラスの役割と責任の明確化
シネマスコープモデルによって抽出されたオブジェクトの候補を、システム要求の実現という観点から眺め、クラスとしての役割と責任を明確に定義する。
システムを開発する上で、役割が曖昧なオブジェクトはこの段階で完全に排除する。このようなオブジェクトは、要求を説明するためにシナリオに現れていた名詞がそのままオブジェクト化されたものかもしれない。
たとえば、会計システムにおける「記帳者」や「端末」などというオブジェクトは、シナリオの中に現れたとしても、それは会計システムの実装には直接的に関係しないオブジェクトと考えるのが自然である。よって、このようなオブジェクトの候補はクラス化してはならない。
しかしながら、「端末」というオブジェクトを、会計伝票が複数のクライアントから仕訳入力を受け取るためのオブジェクトの名前としているのなら、名前付けに問題がある点は別として、システムにとって必要とされるオブジェクトということになる。その際の役割は「クライアントからの仕訳データを受け取り、サーバ側に送ること」ということになり、その責任は、「端末から入力される仕訳データのトランザクションの管理」ということになるだろう。
クラスの役割については、オブジェクトの持つ本来の役割だけではなく、「第18章 再利用基盤モデル 」の役割レイアVPD(View、Process、DataManage)に基づいた分類を行う。
会計システムにおける「端末」オブジェクトは制御のクラス化であるため、Processに属することになる。また、仕訳データは、仕訳データを管理する「仕訳オブジェクト」ということになるので、DataManageに属する。「会計伝票」は、仕訳オブジェクトの見せ方(View)と考えることができる。
|
(開発システムの形態とPD分割) 開発対象のソフトウェアシステムの形態によって、ProcessかDataManageのどちらかに偏ってオブジェクトが発見されるのが一般的である。たとえば、小規模なビジネスアプリケーションなどでは、Processは殆ど見あたらずDataManageが多く見つかるだろう。また、ツール開発やミドルウェア開発などでは、Prcoessが多く見つかり、DataManageは少ないかもしれない。これは、開発システムの形態が、制御中心なのかデータ中心なのかということに違いがある。制御中心であればProcess、データ中心であればDataManage、というように分析に集中すべきレイアをどちらかに定めることは分析のテクニックとしてよい方法である。両者をバランスよく抽出するよう心がけたり、均等な分析時間をかけたりするのは誤ったやり方である。 |
例:
![]()
図20-5 ライフサイクルによる分類
例:
![]()
図20-6 役割による分類
例:
![]()
図20-7 クラス統合
|
請求書の発行
請求書発行というメニュー項目を選ぶと、請求書ダイアログが開く。そこでユーザが発行する顧客と対象月を入力して実行ボタンを押すと、請求書管理に通知される。請求書管理は、月ごとに管理されている売り掛けとなったオブジェクトを集計して請求書を作成する。 |
| インタフェース名[Job] | |
|---|---|
| 操作名 | 操作の内容 |
| exec():boolean | サーバ側で実行する仕事 |
| addServer(Worker serverWorker):boolean | 実行するサーバを設定する(複数可) |
| getResult():Set | 実行結果のオブジェクト群を取得する |
| クラス名 | 説明 |
|---|---|
| Worker | サーバ側に存在するクラス。受け取ったAgentを実行し、結果を通知する。 |
| WorkerController | サーバにある複数のWorkerを管理しているオブジェクト。 |
| Agent | 複数のJobを持ち、サーバ側へ送られる。実行結果を保持する。 |
| Job (interface) | Jobの基本操作を抽象的なインタフェース化したもの。 |
| ResultListener (interface) | Agentの実行結果(Agent自身)通知を受け取るための操作を持つインタフェース。 |