1.需求啓發要點
- 和涉衆交流的形式應該採用視圖,而不是模型
- 和涉衆交流的內容應該聚焦涉衆利益,而不是需求
- 需求啓發手段:研究資料、問卷調查、訪談、觀察、研究競爭對手
- 需求人員的素質培養:好奇心、探索力、溝通力、表達力、熱情
2.分析之分析類圖
2.1識別類和屬性
- 核心域和非核心域:一個軟件系統封裝了若干領域的知識,其中一個領域的知識代表了系統的核心競爭力,是系統和其他系統區分的關鍵所在。 這個領域稱爲"核心域",其他領域稱爲"非核心域"。
- 基於核心域的複用:設計的目的就是複用
- 軟件開發史,就是不不斷複用級別的歷史
- 基於核心域的複用有一定的難度:因爲能帶來利潤的系統,被迫關注的領域比較多,負載比較高
- 要達到基於核心域的複用、有必要將核心域和非核心域分開考慮、將分析和設計分開考慮
- 同一個核心域可能要映射到多個互相競爭的非核心域
-人腦的容量和運算速度有限,待解決問題規模變大,就必須分而治之 - 核心域知識和非核心域知識是獨立的,域和域之間的映射規律,與域中的個體不直接相關
-
和只有自上而下順序的文本相比,二維圖形更容易讓開發人員看出這些類之間的規律,更好地切割系統
- 有利潤的系統, 其內部都是複雜的
- 對象封裝了數據和行爲
-
對象封裝了數據和行爲
-
三種分析類的責任、和用例的關係以及命名。
-
控制類是可選的,如果在分配責任時只起到傳遞的作用,沒有起到分解和分配的作用,可以刪除調
- 針對用例規約提煉類
-在分析工作流中,系統概念被打碎成各個類,所以系統這個詞不需要識別成類
- 分析類雖然不包含設計工作流的知識,但是它是設計工作流的基礎
2.2識別分析類和屬性的要點
中英文命名根據場景確定
-
命名中不要到冗餘信息(類、情況、信息、記錄、數據、表、庫、單)
-
屬性名稱前不要加類名
英文用單數
命名要一致
不要類圖長的象用例圖
不要類長得像過程
不要類長得像報表
使用核心域術語(涉衆關心的是涉衆利益,不關注系統需求)
-
用核心域透鏡的方式思考問題,從核心域視角去看所有的事情
屬性要直接描述類(任何非主屬性不依賴於其他非主屬性)
-
分析類中不需要主鍵、外鍵屬性
-
屬性在本領域內不可以在分解
1.複雜屬性(分不分離的理由:是否另一個領域而不是 是否簡單)
2.多重性大於1的屬性
屬性對所有對象都有意義
2.3識別類之間的關係
-
類的關係:
1.泛化
2.關聯(普通關聯、聚合、組合)
3.依賴
-
泛化和關聯的區別:
1.泛化表示集合關係
2.關聯表示個體關係
3.集合關係還是個體關係,這是泛化和關聯的本質區別
-
識別泛化的思路:
1.直接形成
2.自下而上(從特殊到一般)
3.自上而下(從一般到特殊)
- 儘量不要跨領域使用泛化關係
-
引入聚合/組合,相當於把類圖分區,每個區找一個區長作爲責任分配的起點
-
識別關聯的思路:
和泛化不同的是,關聯不只是發生在不同的類之間,還可以發生在同一個類上,即自反關聯。
1.關聯是系統維護的關係
2.關聯名或角色名(聚合/組合關聯經常被認爲不需要關聯名或角色名,其實也是需要的)
3.導航方向(關聯可以是雙向的,兩端的對象都可以通過關聯導航到另一端;關聯也可以是單向的,只有其中一端能訪問另一端)
4.多重性
5.自反關聯(當關聯的兩端是同一個類時,這個關聯就是自反關聯。)