作者:gnuhpc  
出處:http://www.cnblogs.com/gnuhpc/
1.什么是 CRC card?
CRC (Class-Responsibility-Collaborator) Card是目前比較流行的面向對象分析建模方法。在CRC建模中,用戶、設計者、開發人員都有參與,完成對整個面向對象工程的設計。
CRC卡是一個標准索引卡集合,包括三個部分:類名、類的職責、類的協作關系,每一張卡片表示一個類。
· 類 代表一系列對象的集合,這些對象是對系統設計的抽象建模,可以是一個人、一件物品等等,類名寫在整個CRC卡的最上方。
· 職責 包括這個類對自身信息的了解,以及這些信息將如何運用。諸如,一個人,他知道他的電話號碼、地址、性別等屬性,並且他知道他可以說話、行走的行為能力。這個部分在CRC卡的左邊。
· 協作 指代另一個類,我們通過這個類獲取我們想要的信息或者相關操作。這個部分在CRC卡的右邊。
CRC卡片的背面往往記載着這個類的詳細描述和在CEC設計中的一些注意事項。
2.如何使用CRC卡組織團隊成員?
我們可以使用CRC卡完成設計團隊成員的組織工作,但是需要限制在6人以下以提高效率,否則可能會增加溝通成本。我們的成員組成一般有以下三類,職責、人數建議、及其特征描述如下:
· 用戶
o 人數:3-5
o 特征:
§ 豐富的行業知識
§ 清晰的業務流程
§ 邏輯思維和良好溝通
§ 對系統設計感興趣
· OO設計人員
o 人數:1-2
o 特征:
§ 通曉CRC建模流程和方法
§ 通曉OO設計思路和方法
§ 有實際開發OO系統的經驗
· 項目協調人
o 人數:1
o 特征:
§ 良好的會議溝通和管理技巧
§ 通曉CRC建模流程和方法
3.CRC分析流程
1)准備工作:
召集人員,拿到相關業務流程的需求——Statement of work,SOW工作陳述,從SOW中提煉出需求,以項目符號列表的形式表示每一個特定的需求。
2)CRC卡的建立:
a.類對應於名詞,讀完需求分析后,你可以划出一些名詞作為類設計的切入點。當然,要習慣於迭代的方式,一開始列出的名詞並不見得都要最終設計為一個類,而后續可能因為可用性等需要設計額外的類。
b.我們可以通過這個名詞列表進行一一篩選分析,適當把握抽象與具體的關系,比如一個司機、一個秘書、一個經理可能都能抽象為人這個類,但是在第一輪迭代中,若無明顯的需求,我們可以先暫時不用去考慮。對於普通的一般的關系,我們可以考慮超類的設計,也可以考慮通過構造函數重載完成。
c.在設計中,我們要注意目標之一是保證可擴展性,重構也是我們要考慮的一個隱性需求。
d.通過第一輪迭代我們就找出了我們需要關注的類。接着我們需要明確類的職責。職責的一個切入點是動詞,從動詞的列表中就可以得到職責初步列表,然后就行迭代。在這個過程中,並不是每一個動詞都會成為一個職責,幾個動詞可能組成一個職責,最終選擇的一些職責可能並沒有出現在最初的職責中,對於共享的職責我們要特殊標識,以便在后續的詳細設計中特殊處理(比如Java中的接口)。
e.在完成類的職責分析后我們開始根據這些職責及其交互關系明確協作關系,我們此時可以通過用例場景(系統對用戶請求或事件作出響應時完成的一個事務或相關操作序列),對於每一個用例,明確交換的對象和消息。在這個過程中,參與的人可以通過角色扮演的方式,既活躍了氣氛,又能在溝通交互中體現每一個類職責與協作。
f.完成CRC后就可以通過UML完成正式的初步設計了。

