ソフトウエアの再利用

第五回 ソフトウエアの再利用
オブジェクト指向プログラミング(3)
静的分析(1)
オブジェクト指向開発の手順
1.システム分析
要件の分析を行う。システムがしなければなら
ないこと、そして、やらないことを定義する。ここ
でシステムが対象としている問題領域のモデル
化を行い、大まかな構成を決定する。
2.システム設計
分析した結果を実際のシステム上稼動させる
にはどうしたよいかということを考える。
3.実装
コーディング/テスト/デバッグ
クラスの抽出の前に分析とは
分析とは
そのプログラムが何をしなければならないのか、
システムに何がもとめられているのか、ということ
を整理することです。
分析段階での成果物は、環境に対して依存性が
ないものになる。
分析
分析は、大きく静的モデリングと動的モデリング
分かれる。
<静的モデリング>
システムがどのようなクラスで構成されてい
るのかを分析する。
<動的モデリング>
そのクラスから生成されたインスタンス(実
体)がどのように振る舞うかを分析する。
最初にするべきこと
システムを作成する際には、そのシステム
が何をするのか、そして何をしないのかと
いうことを決定する必要があります。
「仕様」
クラスの抽出
クラスをさがしだす作業というのは、システ
ムの仕様から名詞をさがす作業
分析段階では、問題領域のクラスのみを
考える
問題領域
問題領域とは
私たちがシステムを開発する際に、そのシステム
がこれから解決しようとしている現状の問題のこ
とである。
たとえば、
文書を作成するという行為。
宿泊予約システムであれば、宿泊先の空き室が
あったら予約するという一連の作業の流れ。
コンピュータ領域
コンピュータ領域とは
コンピュータを使って実現する手段に登場するも
のことである。
たとえば、
GUIにグラフィックボタンを使用する。
ある予約システムにモデムを使用する。
課題1:インベーダーゲーム





複数列複数行のインベーダーが、ミサイルを撃ちなが
ら画面上から迫ってくる。
オペレータは、戦車をレバーで左右に操作し、ボタン
を押すことによってミサイルでインベーダーを撃ち、破
壊する。
インベーダーのミサイルに撃たれると、戦車は破壊さ
れる。
ゲーム中に上方にUFOが左右に横切り、それをミサ
イルで撃つことも可能。
インベーダーと戦車の間には4つの防護壁が存在し
ており、ミサイルは、防護壁に当たると爆破する。その
際に防護壁は部分的に破損する。
名詞の抽出
クラス候補
インベーダー、ミサイル、画面、オペレー
タ、
戦車、レバー、ボタン、UFO、防護壁など
問題領域とコンピュータ領域
インベーダー
UFO
ミサイル
戦車
防護壁
画面
ボタン
問題領域
レバー
アプリケーション領域
アプリケーション
課題2 学習塾管理システム




学習塾があり、各学年ごとに複数の学級があ
る。
1学級には複数人の生徒がおり、各科目ごと
に担当する教師がいる。
月に1回模擬試験があり、その成績を管理す
る。
成績は志望校の合格判定に使用され、その
結果はプリンタから出力され、家庭に郵送され
る。
分析時の視点からのクラス
名前
あまり考えずにずれた名前をつけてしまう
と、あとでそれに影響されてそのクラスの
分析が誤った方向に進んでしまう。
そのクラスの本質を表した名前をつける。
分析時の視点からのクラス
属性
そのクラスの成り立ちを示すデータ
属性はプログラム的にはデータメンバに該
当する。
分析時の視点からのクラス
操作
クラスに用意された、クラスの対する命令
の受付窓口
操作は、プログラム的には、メンバ関数に
相当する。
分析時の視点からのクラス
以上、3つのことを考えていくことが
クラスの静的モデリングという作業です。
クラス図の作成
クラス図
クラス図はオブジェクト指向システム分析
設計でかかすことのできない極めて重要な
図である。
クラス図に書かれていることが最終的にシ
ステムの構成を決定します。
クラス図の作成
クラス図の例
クラス名
生徒
氏名
住所
学級
学年
平均点算出
偏差値取得
属性
操作
クラス図の作成
クラス図の作成順序
・クラスの仕様の決定
・「操作」の洗い出し(属性よりも先)
・そのために必要な「属性」を考える
クラス図の例
学習塾管理システムの例
クラス仕様の範囲
「この仕様はどのクラスの仕様であるか」と
いう認識は、オブジェクト指向では非常に
重要な視点である。
「何をするか」だけを考えてはだめ。
「それを誰がするか」ということが重要。
インベーダーゲームの戦車の仕様
別紙参照
操作の抽出
操作名は、たいてい動詞になる。
多くの操作名は「~する」の「する」を省略
した形になることが多い。
「操作する側が主語」というのが原則
操作の抽出
操作抽出後の「戦車」のクラス図
戦車
右へ移動
左へ移動
停止
ミサイル発射
破壊
属性の抽出
属性は、操作に比べると、その重要性はそ
れほど高くない。なぜなら、属性というのは
外部に対して隠蔽されているものだから。
クラスのモデリングには正解は複数あると
いうより、正解はない、と言ったほうが正し
いかもしれない。
属性の抽出
属性抽出後の「戦車」のクラス図
戦車
現在位置
大きさ(巾)
右へ移動
左へ移動
停止
ミサイル発射
破壊
位置を取得
全体のクラス図