ソフトウェア工学

ソフトウェア工学
第5回
実装
http://www.k.hosei.ac.jp/~yukita/
ソフトウェア工学 第5回
1
1 前回までの成果

サブシステムごとにユースケースを定義
• 一般ユーザサブシステム
• 管理側サブシステム

要求定義に基づき分析モデル作成
• Sequence diagram 作成を通じてオブジェクトを発見
• Class diagram でオブジェクトの分類,相互の関連を
洗い出す

設計モデルを作成
• システム構成の定義
• クラスの詳細化
ソフトウェア工学 第5回
2
2 今回の目標

実装
• 実装工程は設計と言語のマッピング。
• 設計工程で作成されたクラス図を基に,クラス
とインタフェースを実装する。
• 相互作用図に現れるメッセージの流れをメソッ
ドの操作としてマッピングする。
ソフトウェア工学 第5回
3
3 スケジュラのクラス図(全体概略)
<<BusinessObject>>
Holidays
-所有する
1..*
-所有する
SchduleServer
<<BusinessObject>>
AccessControl
1
1
<<BusinessObject>>
Calendar
0..1
-所有する
1
<<BusinessObject>>
Resource
1
1
-所有する
-所有する
0..*
0..*
<<BusinessObject>>
Schedule
1
0..*
-子グループ
<<BusinessObject>>
Group
0..*
-所有する
1
1
<<BusinessObject>>
ConferenceRoom
-親グループ <<BusinessObject>>
User
ソフトウェア工学 第5回
<<BusinessObject>>
PersonalSchedule
4
Schedule
<<BusinessObject>>
<<BusinessObject>>
Schedule
スケジュールID: String
開始時間: Date
終了時間: Date
件名: String
備考: String
登録者ID: String
生成(): スケジュール
modify(schedule: Schedule): boolean
.... 様々なアクセスメソッド ...
ソフトウェア工学 第5回
5
Java source code
package scheduler.server;
import scheduler.*;
public class Schedule {
// 属性
private String scheduleID;
// スケジュールID
private Date startTime;
// 開始時間
private Date endTime;
// 終了時間
private String subject;
private String note;
// 件名
// 備考
private String registratorID; // 登録者
ソフトウェア工学 第5回
6
続き
// デフォルトコンストラクタ
public Schedule(){}
/**
* コンストラクタ
スケジュールID
* @param
scheduleID
* @param
startTime
開始時間
* @param
endTime
終了時間
* @param
subject
* @param
note
* @param
registratorID
*/
件名
備考
登録者
ソフトウェア工学 第5回
7
続き
public Schedule(String scheduleID, Date startTime,
Date endTime, String subject,
String note, String registratorID)
{
this.scheduleID = scheduleID;
this.startTime = startTime;
this.endTime = endTime;
this.subject = subject;
this.note = note;
this.registratorID = registratorID;
}
ソフトウェア工学 第5回
8
続き
/**
* スケジュール変更メソッド
* @param schedule スケジュールデータ
*/
public void modifySchedule(Schedule schedule)
{
this.scheduleID = schedule.scheduleID;
this.startTime = schedule.startTime;
this.endTime = schedule.endTime;
subject = new String(schedule.subject);
note = new String(schedule.note);
registratorID = schedule.registratorID;
}
ソフトウェア工学 第5回
9
/**
* アクセスメソッド群
続き
*/
public String getScheduleID(){ regturn scheduleID;}
public void setScheduleID(String id){ scheduleID = id;}
public Date getStartTime(){ return startTime;}
public Date setStartTime(Date start){ startTime = start;}
public Date getEndTime(){ return endTime;}
public Date setEndTime(Date end){ endTime = end;}
public String getSubject(){ return subject;}
public void setSubject(String sbj){subject = sbj;}
public String getNote(){ return note;}
public void setNote(String note){ this.note = note;}
public String getRegistratorID(){ return registratorID;}
public void setRegistratorID(String id){registratorID=id;}
}
ソフトウェア工学 第5回
10
4 ここまでの復習

開発プロセスとは
• 最も単純な場合
• 仕様

プロセス

プログラム
• 通常の開発プロセス
• コンピュータのために仕様を詳細化するプロセス
• 最も詳細化されたものがプログラム
• オブジェクト指向技術の助けで
• 再利用性,保守性を高める。
• 他の工業製品にみられるような部品化,特に規格に準拠した
部品化
ソフトウェア工学 第5回
11
4.1 典型的な詳細化の段階
要求分析
要求定義
ユーザの希望をヒアリングし,まとめる
理想的かつ実現可能なモデルを作成
開発者の言葉で
分析
要求定義を設計者に分かるようにする
What tasks the system does.
設計
分析結果をプログラマに分かるようにする
How the system works.
実装
プログラミング
ソフトウェア工学 第5回
12
4.2 要求分析と要求定義
使用ケース
アクター
使用ケース
ソフトウェア工学 第5回
使用ケース
13
4.3 分析
分析
オブジェクトの識別
オブジェクトの....
相互作用の
識別
関係の識別
状態遷移の
識別
ソフトウェア工学 第5回
14
4.3.1 オブジェクト間の相互作用
の識別
入力: ユースケース
出力: 相互作用図
1. ユースケースのアクタを最初のオブジェクトとして識別
2. それと相互作用するものをユースケースのシナリオか
ら識別
3. Sequence, collaboration diagrams の作成過程でオ
ブジェクトの責務を明らかにして行く。
ソフトウェア工学 第5回
15
4.3.2 オブジェクトの責務間の
関係の識別(クラスの発見)
入力: 相互作用図
出力: クラス図,オブジェクト図
•
オブジェクトの責務は相互作用図で分かっている。
•
責務がクラスに該当する。
•
責務間の関係を見出すのがクラス図の役目
•
クラス図を検証するのがオブジェクト図(クラス図の特
定の状況を示す。)
ソフトウェア工学 第5回
16
クラスの発見


責務を単位としてクラスを発見できる場合
もあるが,オブジェクトの状態遷移にともな
い責務が変わる場合もある。
責務の汎化(一般化),特殊化に着目
ソフトウェア工学 第5回
17
4.3.3 オブジェクトの状態遷移
の識別
入力: クラス図
出力: State chart 図
ソフトウェア工学 第5回
18
4.4 設計
システム構成の
定義
クラスの詳細化
ソフトウェア工学 第5回
システムの
洗練
19
4.4.1 システム構成の定義
入力: クラス図
出力: 配置図,コンポーネント図,パッケージ図
ソフトウェア工学 第5回
20
4.4.2 クラスの詳細化
入力: クラス図,相互作用図,アクティビティ図
出力: クラス図
操作を抽出する。
ソフトウェア工学 第5回
21
4.4.3 システムの洗練
入力: 配置図,コンポーネント図
出力: クラス図
ソフトウェア工学 第5回
22
4.5 実装
クラスやインタ
フェースの実装
DBスキーマ
UI/帳票の実装
の定義
テストコード
の作成
メソッドの実装
ソフトウェア工学 第5回
23
Quiz


実装工程では,何を何にマップするのか。
クラス,インタフェース,メソッドなどの用語
を使い具体的に述べよ。
ソフトウェア工学 第5回
24