面向对象设计之CRC卡片
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完成正式的初步設計了。
CRC,即Class Responsibility Collaboration,是一種用于設計面向對象軟件過程中使用的交流工具和頭腦風暴工具。典型的應用場合是首次確定設計中需要哪些類,及這些類如何交互。每個CRC卡上通常有以下幾項:類名,父類和子類,本類的職責(responsibility),與本類交互的類型,本卡片的作者。
使用小卡片,迫使設計人員對復雜的設計進行簡單有效的描述。它會強迫設計者突出關鍵思路,阻止設計者在設計的早期過于關心細節的實現;另一方面,也可以阻止設計者為一個類型設計太多的職責。因為卡片的形式比較方便,設計過程中可以攤在一個桌面上,也可以用于向其他人展示設計中各個類的交互。
為畫出一個CRC卡片,通常的作法是從軟件需要描述文檔中找出名詞和動詞,并決定是否為每個名詞設計一個類以及哪些動詞是這些類的職責。自然,并不是每個名詞都會成為軟件中的一個類型,但這些通常是設計的起點。
使用CRC的一般步驟:
Step 1.?選擇相關的用例(use case)
Step 2.?按順序畫出與該用例有關的全部卡片。首先是觸發這一用例的類型,其次是接受上一個類型消息的類。或者,把所有相關類型和他人的主要職責全部畫出,放在桌面上。
Step 3.?把所有的類型和職責全部審閱一遍,命名。
按用例的描述,把CRC上的職責過一遍,給職責命名,并分清每個類型如何處理每項職責或委托給其他類型。
如果是用CRC做頭腦風暴的工具,隨需要增加新的類型和功能,或是重新在現有的類型間劃分職責。本步驟中,并不需要給類型和它們的方法命令,這些工作留到最后階段完成。
Step 4.?改變使用條件,對設計進行壓力測試
在審閱設計的過程中,試著逐個改變用例的假設條件,看是否會影響整個設計。在一個好的設計中,只需要增加一個類型或改動一個類型,就足以應付這些變化。也就是說,改變單個條件的情況下,這種改變可以隔離在一個小范圍內。如果需要,增加一個新類型。
并不是全部的卡片的都會進入最后的設計中,一些卡片會因為用途不多而被邊緣化,不會成為最終設計的一部分。
Step 5.?增減卡片,完善設計
使用CRC卡片可以在桌面上同時展示多種設計,經過反復的修訂,一個粗糙的設計可以演變成一個精致的設計,都最終的設計非常小巧。在修訂的過程中,不要扔掉卡片,隨著對問題的認識,有可能會用到這些卡片
Step 6.?寫出最關鍵的職責和交互方式,關鍵交互方工要畫出交互圖。
總結
以上是生活随笔為你收集整理的面向对象设计之CRC卡片的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Kafka 消费者组 Rebalanc
- 下一篇: Socket模型