工程 | 要求定義 | 分析 | 設計 | ||
---|---|---|---|---|---|
アーキテクチャー分析 | ユースケース分析 | アーキテクチャー設計 | ユースケース設計 | ||
成果物 | ユースケース・モデル(ユースケース図)、 用語集、 機能外要求 | ドメイン・モデル、 分析クラス・メカニズム対応表 | 相互作用図(コラボレーション図)、 VOPC(ユースケースのクラス図) | パターン、 レイヤー、 設計クラス・メカニズム対応表 | 相互作用図(シーケンス図)、 クラス図 |
アクター | ユースケース |
---|---|
スタッフ | 会員を登録する |
スタッフ | 会員を変更する (*) |
スタッフ | 会員を削除する |
スタッフ | 会員情報を見る (*) |
スタッフ | 会員の一覧を見る |
□事前条件 なし □事後条件 対象となる会員が登録されていること。 □基本フロー 1. スタッフはメニューから会員登録を選択します。 2. システムは名前の入力を促すメッセージを表示します。 3. スタッフは名前を入力します。 4. システムは会員番号を割り当て、登録します。(E1)(E2) 5. システムは処理が正常に終了したというメッセージと、割り当てた会員番号を表示します。 6. ユースケースを終了します。 □代替フロー なし □例外フロー E1. 会員番号が割り当てられない場合 1. システムは会員番号が割り当てられない旨のメッセージを表示します。 2. ユースケースを終了します。 E2. 会員が登録できなかった場合 1. システムは会員が登録できなかった旨のメッセージを表示します。 2. ユースケースを終了します。 □基本シナリオ 1. スタッフはメニューから会員登録を選択します。 2. システムは「お名前を入力してください」と表示します。 3. スタッフは「田中太郎」と入力します。 4. システムは会員番号「ME0004」を割り当て、登録します。 5. システムは「処理が正常に終了しました」と、「会員番号: ME0004」を表示します。
□事前条件 対象となる会員が登録されていること。 □事後条件 対象となる会員が削除されていること。 □基本フロー 1. スタッフはメニューから会員削除を選択します。 2. システムは会員番号の入力を促すメッセージを表示します。 3. スタッフは会員番号を入力します。 4. システムは会員を検索し、削除します。(E1) 5. システムは処理が正常に終了したというメッセージを表示します。 6. ユースケースを終了します。 □代替フロー なし □例外フロー E1. 検索して取得できない場合 1. 会員が存在しない旨のメッセージを表示します。 2. ユースケースを終了します。 □基本シナリオ 1. スタッフはメニューから会員削除を選択します。 2. システムは「会員番号を入力してください」と表示します。 3. スタッフは「ME0004」と入力します。 4. システムは会員番号「ME0004」を検索し、削除します。 5. システムは「処理が正常に終了しました」と表示します。 □例外シナリオ 1. スタッフはメニューから会員削除を選択します。 2. システムは「会員番号を入力してください」と表示します。 3. スタッフは「ME0014」と入力します。 4. システムは会員番号「ME0014」を検索しますが、取得できません。 5. システムは「そのような番号の会員はおりません。」と表示します。
□事前条件 なし □事後条件 すべての会員の情報が表示されていること。 □基本フロー 1. スタッフはメニューから会員情報を選択します。 2. システムは表示用のデータを準備します。 3. システムは処理が正常に終了したというメッセージと、それぞれの会員の情報を表示します。(A1) 4. ユースケースを終了します。 □代替フロー A1 会員がひとりも登録されていない場合 1. システムはひとりも登録されていない旨のメッセージを表示します。 2. ユースケースを終了します。 □例外フロー なし □基本シナリオ 1. スタッフはメニューから会員情報を選択します。 2. システムは表示データを準備します。 3. システムは「処理が正常に終了しました」と表示します。このとき、 つぎの情報もあわせて表示します。 会員番号 : 名前 ME0001 : 丸野 ME0002 : 佐藤
1. 品質要件 1.1 ユーザー・インターフェース UI は Web ブラウザーとし、フレームは使用しないこと。 1.2 可用性 このシステムは 8:00 - 24:00 まで利用可能とすること。 1.3 応答時間 全体の 80% のトランザクションが 1 分以内に完了すること。 1.4 エラー・ログ システム・エラーはすべてエラー・ログへ記録すること。 2. 情報要件 2.1 セキュリティ このシステムは PC にログインでき、このシステムを起動できるユーザーはすべて使うことができるようにすること。 3. 前提条件 ...など
用語 | 意味 |
---|---|
会員 | このシステムに登録される人。会員番号はシステムによって自動採番される。 |
名前 | 会員の名前。 |
氏名 | 「名前」と同義。 |
会員番号 | 会員につけられた番号。形式は"MFnnnn"。nnnnは連番。 |
会員No | 「会員番号」と同義。 |
会員コード | 「会員番号」と同義。 |
サークル | 会員が所属する団体。 |
スタッフ | 会員を管理する人。 |
図 サークル・システムのオブジェクト図
図 サークル・システムのドメイン・モデル
番号 | 画面名 | 内容 | 遷移元 |
---|---|---|---|
1 | 操作選択画面 | 操作を選択する | アプリケーションの起動直後 / 結果画面 |
2 | 会員登録画面 | 登録したい会員名を入力する | 操作選択画面で「2」を入力 |
2.1 | 登録結果表示 | 登録した会員の登録結果を表示する | 会員登録画面 |
3 | 会員削除画面 | 削除したい会員番号を入力する | 操作選択画面で「3」を入力 |
3.1 | 削除結果表示 | 削除した会員の削除結果を表示する | 会員削除画面 |
4 | 会員照会結果表示 | 登録した会員リストの照会結果を表示する | 操作選択画面で「4」を入力 |
図 画面遷移図
図 「会員を登録する」の基本フローのシーケンス図
図 「会員を削除する」の基本フローのシーケンス図
図 「会員を照会する」の基本フローのシーケンス図
図 「会員を登録する」の基本フローのクラス図
図 「会員を削除する」の基本フローのクラス図
図 「会員を照会する」の基本フローのクラス図
図 「会員を登録する」の基本フローのシーケンス図
図 「会員を登録する」のクラス図
□ クイズ
「会員を削除する」「会員を照会する」に対しても引数や戻り値を検討して、シーケンス図、クラス図として表現してください。
図 「会員を登録する」の基本フローのシーケンス図
図 「会員を削除する」の基本フローのシーケンス図
図 「会員を照会する」の基本フローのシーケンス図
図 「起動シーケンス」のシーケンス図
図 「会員を登録する」の基本フローのクラス図
図 「会員を削除する」の基本フローのクラス図
図 「会員を照会する」の基本フローのクラス図
- public class MyClass {
- private int code;
- private String name = "";
- private static int counter;
- public static boolean create(String name) {
- ...
- }
- public abstract void execute();
- }
図. シーケンス図 | 図. クラス図 |
□ Class0
- public class Class0 {
- private Class1 class1;
- public void operation2() {
- ...
- }
- }
□ Class1
- public class Class1 {
- private Class0 class0;
- public void message0() {
- ...
- }
- public boolean message1() {
- ...
- }
- }
□"従業員"
- public class 従業員 {
- private 部門 所属部門;
- }
□"部門"
- public class 部門 {
- private 従業員[] 所属部員; // または、private Collection<従業員> 所属部員;
- }
図 関連の実装
- import java.util.Collection;
- public class A {
- private B b; // 1対1の関連
- private Collection c; // 1対多の関連
- private D d; // 集約
- private E e; // コンポジット集約
- public void funcA() {
- b.funcB();
- }
- // 1対1の関連では、そのオブジェクトはセッターで設定できる。
- public void setB(B b) {
- this.b = b;
- }
- // 1対多の関連では、セッターで、コレクションに追加する。
- public void setC(C c) {
- this.c.add(c);
- }
- // 集約の場合、そのオブジェクトはセッターで設定できる。(どんなタイミングで設定してもよい)
- public void setD(D d) {
- this.d = d;
- }
- // コンポジット集約の場合、そのオブジェクトはコンストラクターで設定する。
- public A(E e) {
- this.e = e;
- }
- }
□ Member01.java
- package jp.marunomaruno.circlesystem;
- public class Member01 {
- private String code;
- private String name;
- public Member01(String name) {
- }
- public String getCode() {
- return null;
- }
- public void setCode(String code) {
- }
- public String getName() {
- return null;
- }
- public void setName(String name) {
- }
- }
□ Circle01.java
- package jp.marunomaruno.circlesystem;
- import java.util.List;
- public class Circle01 {
- private List members;
- private static int currentNumber = 0;
- public Circle01() {
- }
- public Member01 add(Member01 member) {
- return null;
- }
- String createNewCode() {
- return null;
- }
- public Member01 remove(String code) {
- return null;
- }
- public List query() {
- return null;
- }
- }
□ AdditionUI.java
- package jp.marunomaruno.circlesystem;
- public class AdditionUI {
- private AdditionCtrl additionCtrl;
- public AdditionUI(Circle01 circle) {
- }
- public String displayAdd() {
- return null;
- }
- public void setName(String name) {
- }
- public void displayMember(Member01 member) {
- }
- }
□ AdditionCtrl.java
- package jp.marunomaruno.circlesystem;
- public class AdditionCtrl {
- private Circle01 circle01;
- public AdditionCtrl(Circle01 circle01) {
- }
- public Member01 add(String name) {
- return null;
- }
- }
□ RemoveUI.java
- package jp.marunomaruno.circlesystem;
- public class RemoveUI {
- private RemoveCtrl removeCtrl;
- public void selectRemove() {
- }
- public void displayRemove() {
- }
- public void displayMember(Member01 member) {
- }
- public void setCode(String code) {
- }
- }
□ RemoveCtrl.java
- package jp.marunomaruno.circlesystem;
- public class RemoveCtrl {
- private Circle01 circle01;
- public Member01 remove(String code) {
- return null;
- }
- }
□ QueryUI.java
- package jp.marunomaruno.circlesystem;
- import java.util.List;
- public class QueryUI {
- private QueryCtrl queryCtrl;
- public void selectQuery() {
- }
- public void displayMembers(List members) {
- }
- }
□ QueryCtrl.java
- package jp.marunomaruno.circlesystem;
- import java.util.List;
- public class QueryCtrl {
- private Circle01 circle01;
- public List query() {
- return null;
- }
- }
□ CircleMain01.java
- package jp.marunomaruno.circlesystem;
- public class CircleMain01 {
- public static void main(String[] args) {
- }
- }
Member01.java |
Circle01.java |
AdditionUI.java |
AdditionCtrl.java |
RemoveUI.java |
RemoveCtrl.java |
QueryUI.java |
QueryCtrl.java |
CircleMain01.java |
- package jp.marunomaruno.circlesystem;
- public class Member01 {
- private String code;
- private String name;
- /**
- *名前をもとに会員オブジェクトを生成する。
- */
- public Member01(String name) {
- this.code = null;
- this.name = name;
- }
- /**
- * @return code
- */
- public String getCode() {
- return code;
- }
- /**
- * @param code 設定する code
- */
- public void setCode(String code) {
- this.code = code;
- }
- /**
- * @return name
- */
- public String getName() {
- return name;
- }
- /**
- * @param name 設定する name
- */
- public void setName(String name) {
- this.name = name;
- }
- }
- package jp.marunomaruno.circlesystem;
- import java.text.DecimalFormat;
- import java.util.ArrayList;
- import java.util.Iterator;
- import java.util.List;
- public class Circle01 {
- private List members;
- private static int currentNumber = 0;
- private DecimalFormat format = new DecimalFormat("0000");
- /**
- * @param members
- */
- public Circle01() {
- this.members = new ArrayList();
- }
- /**
- *会員オブジェクトを追加する。
- */
- public Member01 add(Member01 member) {
- member.setCode(createNewCode());
- members.add(member);
- return member;
- }
- private String createNewCode() {
- return "ME" + format.format(++currentNumber);
- }
- public Member01 remove(String code) {
- for (Iterator iter = members.iterator(); iter.hasNext();) {
- Member01 member = (Member01) iter.next();
- if (member.getCode().equals(code)) {
- iter.remove();
- return member;
- }
- }
- return null;
- }
- public List query() {
- return members;
- }
- }
- package jp.marunomaruno.circlesystem;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- public class AdditionUI {
- private AdditionCtrl additionCtrl;
- /**
- * @param circle
- */
- public AdditionUI(Circle01 circle) {
- additionCtrl = new AdditionCtrl(circle);
- }
- public String displayAdd() {
- System.out.print("名前を入力してください。==> ");
- BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
- try {
- return in.readLine();
- } catch (IOException e) {
- e.printStackTrace();
- }
- return null;
- }
- public void addMember(String name) {
- displayMember(additionCtrl.add(name));
- }
- /**
- *会員の情報を表示する。
- *
- */
- public void displayMember(Member01 member) {
- System.out.print("会員番号 " + member.getCode());
- System.out.print(", 名前 " + member.getName());
- System.out.println(" を登録しました。");
- }
- }
- package jp.marunomaruno.circlesystem;
- public class AdditionCtrl {
- private Circle01 circle01;
- /**
- * @param circle01
- */
- public AdditionCtrl(Circle01 circle01) {
- this.circle01 = circle01;
- }
- /**
- *会員を生成して、登録した会員オブジェクトを返す。
- */
- public Member01 add(String name) {
- Member01 member = new Member01(name);
- member = circle01.add(member);
- return member;
- }
- }
- package jp.marunomaruno.circlesystem;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- public class RemoveUI {
- private RemoveCtrl removeCtrl;
- /**
- * @param circle
- */
- public RemoveUI(Circle01 circle) {
- removeCtrl = new RemoveCtrl(circle);
- }
- public String displayRemove() {
- System.out.print("番号を入力してください。==> ");
- BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
- try {
- return in.readLine();
- } catch (IOException e) {
- e.printStackTrace();
- }
- return null;
- }
- public void displayMember(Member01 member) {
- if (member == null) {
- System.out.println("削除できませんでした。");
- return;
- }
- System.out.print("会員番号 " + member.getCode());
- System.out.print(", 名前 " + member.getName());
- System.out.println(" を削除しました。");
- }
- public void removeMember(String code) {
- displayMember(removeCtrl.remove(code));
- }
- }
- package jp.marunomaruno.circlesystem;
- public class RemoveCtrl {
- private Circle01 circle;
- public RemoveCtrl(Circle01 circle) {
- this.circle = circle;
- }
- public Member01 remove(String code) {
- return circle.remove(code);
- }
- }
- package jp.marunomaruno.circlesystem;
- import java.util.Iterator;
- import java.util.List;
- public class QueryUI {
- private QueryCtrl queryCtrl;
- /**
- * @param circle
- */
- public QueryUI(Circle01 circle) {
- queryCtrl = new QueryCtrl(circle);
- }
- public void selectQuery() {
- displayMembers(queryCtrl.query());
- }
- public void displayMembers(List members) {
- System.out.println("会員番号 : 名前");
- for (Iterator iter = members.iterator(); iter.hasNext();) {
- Member01 member = (Member01) iter.next();
- System.out.println(member.getCode() + " : " + member.getName());
- }
- System.out.println();
- }
- public void displayMembers() {
- displayMembers(queryCtrl.query());
- }
- }
- package jp.marunomaruno.circlesystem;
- import java.util.List;
- public class QueryCtrl {
- private Circle01 circle;
- public QueryCtrl(Circle01 circle) {
- this.circle = circle;
- }
- public List query() {
- return circle.query();
- }
- }
- package jp.marunomaruno.circlesystem;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- public class CircleMain01 {
- /**
- * @param args
- */
- public static void main(String[] args) {
- Circle01 circle = new Circle01();
- AdditionUI additionUI = new AdditionUI(circle);
- RemoveUI removeUI = new RemoveUI(circle);
- QueryUI queryUI = new QueryUI(circle);
- int optionNumber;
- while ((optionNumber = read()) != -1) {
- switch (optionNumber) {
- case '1':
- return;
- case '2':
- String name = additionUI.displayAdd();
- additionUI.addMember(name);
- break;
- case '3':
- String code = removeUI.displayRemove();
- removeUI.removeMember(code);
- break;
- case '4':
- queryUI.displayMembers();
- break;
- default:
- }
- }
- }
- private static int read() {
- BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
- System.out.println("番号を選択してください。");
- System.out.println(" 1: 終了");
- System.out.println(" 2: 追加");
- System.out.println(" 3: 削除");
- System.out.println(" 4: 照会");
- System.out.print(" ==> ");
- try {
- return in.read();
- } catch (IOException e) {
- e.printStackTrace();
- }
- return -1;
- }
- }
□ 実行結果
番号を選択してください。 1: 終了 2: 追加 3: 削除 4: 照会 ==> 2 名前を入力してください。==> 丸野 会員番号 ME0001, 名前 丸野 を登録しました。 番号を選択してください。 1: 終了 2: 追加 3: 削除 4: 照会 ==> 4 会員番号 : 名前 ME0001 : 丸野 番号を選択してください。 1: 終了 2: 追加 3: 削除 4: 照会 ==> 2 名前を入力してください。==> 鈴木 会員番号 ME0002, 名前 鈴木 を登録しました。 番号を選択してください。 1: 終了 2: 追加 3: 削除 4: 照会 ==> 4 会員番号 : 名前 ME0001 : 丸野 ME0002 : 鈴木 番号を選択してください。 1: 終了 2: 追加 3: 削除 4: 照会 ==> 3 番号を入力してください。==> ME0001 会員番号 ME0001, 名前 丸野 を削除しました。 番号を選択してください。 1: 終了 2: 追加 3: 削除 4: 照会 ==> 4 会員番号 : 名前 ME0002 : 鈴木 番号を選択してください。 1: 終了 2: 追加 3: 削除 4: 照会 ==> 1Top