2011年6月10日

二、CRC(Class-Responsibility-Collaborator)卡片

一般介紹UML幾乎都是從開發流程開始介紹,但筆者覺得這個部分應該要留到後面一點再來說明,因為開發流程對於沒有在中大型的軟體開發公司的開發者而言,很難有所感覺,就像筆者剛出社會的時候在一家系統廠工作,對於開發流程一點感覺都沒有(後來想想應該是我比較遲鈍吧);是後來有幸加入一家比較有規模的公司,當時我的直屬老闆(CAO, Chief Architecture Officer)教了我很多(應該是說把我釘得滿頭包),所以我才有機會懂些皮毛。
所以我想從物件導向中最容易、也最直觀的CRC先說明起(不過CRC不屬於UML的一部分)。
通常筆者在思考如何以物件導向設計的時候,最常用的技術就是去探索物件間的互動情況,這樣做的好處就是會忘記程序導向及資料操作,進而將重心放在行為上面。
就筆者的經驗,使用CRC的第一個步驟就是找出[責任]出來,例如THexFile這個物件,就是應該將hex file從儲存媒體進來,並且將它轉換成適當的Binary Code及回傳該Binary Code的大小。
#include <string>
class THexFile
{
  protected:
    std::string FstrFileName;
  public:
    bool readFromFile(std::string fileName);
    uint8_t *getBinaryContent();
    uint32_t getFileSize();
};
第二個C代表的就是合作者,這個C的目的是可以知道有哪些類別會跟這個類別一起合作,藉此可以以較高階觀點了解類別間的連結(Link)關係。

一、UML (Unified Modeling Language)

  想知道甚麼是UML,在Google上面搜尋一下就可以找到一狗票的文件,所以我就不在此描述UML的歷史、簡介等東西。
  俗話說工欲善其事,必先利其器,要學UML也要有東西可以畫UML,筆者先前的公司比較有錢,所以採用IBM Rational Rose,但後來換到一家IC Design House,比較不重視軟體開發品質,所以就只好採用免費的工具,在眾多的免費工具中,筆者最推薦StarUML,因為這套軟體品質算穩定,而且還OpenSource,想研究的讀者可以Download Source Code來研究,不過如果沒有Delphi的開發功力,可能會看不是很懂;有機會的話,筆者會在撰寫Delphi / C++ Builder的文章。