網頁

搜尋此網誌

2010年11月30日 星期二

Unified Modeling Language 統一塑模語言

Unified Modeling Language縮寫為UML,中文普遍翻譯為「統一塑模語言」(國立編譯館學術名詞資訊網上面是「統一模型化語言」),通常我們都用UML稱之,UML和程式語言一樣是有版本區別,目前最新的版本是2.3版,2.X版的UML通稱為UML 2.0。

UML的規範(Specification )文件分成兩部分,一部分為UML infrastructure(基礎結構),定義UML語言的基礎語法。另一部分是UML Superstructure(上層結構),則是定義使用者延伸的語法。兩者互補而構成完整的UML視覺化語言(Visual Language),兩個規範文件總共大約一千頁左右,一般人大概不會去看的!所以...

這裡推薦兩本對於學習UML有助益的書籍。第一本是「UML精華第三版」,這本可說是僅寫到UML精華之處,對於初學者來說建議瀏覽過一遍有印象就好,後續學習UML更能體會作者所說的奧義,不急著第一次就看懂。第二本是「UML物件導向系統分析與設計」,雖然沒有涵蓋完整的UML內容,但是淺顯易懂平易近人,加上這本書從實務開發上介紹UML讓讀者更有感覺!

Martin Fowler著,趙光正譯,UML精華第三版:增訂嵌入式系統與工作流程概念,台北:台灣培生教育出版:碁峰資訊發行,2007。
(原書名:UML Distilled: A Brief Guide to the Standard Object Modeling Language, 3/E)

游峰碩,UML物件導向系統分析與設計,台北:博碩文化,2010。

目前UML 2.3中定義了14種圖(Diagram),分成結構圖(Structure Diagram)行為圖(Behavior Diagram)兩大類,如下所述:
  • 結構圖(Structure Diagram)
    • 類別圖(Class Diagram)
    • 合成結構圖(Composite Structure Diagram)
    • 元件圖(Component Diagram)
    • 配置圖(Deployment Diagram)
    • 物件圖(Object Diagram),第一版是實例圖(Instance Diagram)
    • 套件圖(Package Diagram)
    • 輪廓圖(Profile Diagram)
  • 行為圖(Behavior Diagram)
    • 活動圖(Activity Diagram)
    • 使用案例圖(Use Case Diagram)
    • 狀態機圖(State Machine Diagram)
    • 互動圖(Interaction Diagram)
      • 循序圖(Sequence Diagram)
      • 通訊圖(Communication Diagram),第一版是合作圖(Collaboration Diagram)
      • 互動概圖(Interaction Overview Diagram)
      • 時序圖(Timing Diagram)
結構圖指出物件於系統中的靜態結構(與時間無關),而行為圖則用於表現物件的動態行為,UML一靜一動,其語言定義相當地有系統!不過學習UML要注意一點,每個Diagram之間其實都有關聯性,僅學習一種Diagram會造成見樹不見林的感覺,可是若學習UML全部則會有見林不見樹的感覺,我想這是學習UML必經的困惑之一。

這次推薦兩本書籍當中都有提到軟體開發流程物件導向分析與設計(屬於方法論的部分),UML存在的目的也就是應用在開發、分析與設計之中,若能應用UML於此過程中,我認為學習上將可避免只見樹或只見林的窘境!值得注意的是,UML是創始於Grady Booch, Ivar Jacobson與 James Rumbaugh三位物件導向大師之手(請參考Martin Fowler著的「UML精華第三版」書中1.3節),這是否代表UML只能應用於物件導向程式語言(OOP)之上?

上述所說的是開發方法論所用的描述語言,從工具的角度來看,目前微軟在「Visual Studio 2010 Ultimate 企業旗艦版」工具中已經支援五種最常見的UML Diagram,並且整合程式碼撰寫開發流程,我認為對於UML具有指標性意義(不是紙上談兵而已),這五種UML分別是:
使用案例圖說明使用者與軟體系統之間的關係,而活動圖說明使用案例的運作流程,循序圖則解釋活動圖運作時物件之間的互動情形。軟體系統使用元件圖將系統模組化設計,而每個元件中則包含多個類別組成,這部分由類別圖說明物件的設計。從開發上來看這五個Diagram彼此互相關聯,也難怪Visual Studio 2010會引進使用。

對於未來,期望UML可以順利發展純熟,Martin Fowler提到UML的三個使用方式:草稿(Sketch)、藍圖(Blueprint)、程式語言(Programming Language)。目前大多數都將UML使用於設計草稿,藍圖方式則有賴於友善的開發工具配合(如Visual Studio之類),最困難的就是直接將UML當作一種程式語言使用,相信這會是夢想中的軟體開發方式!

###

2010年11月14日 星期日

NTUT 100th Anniversary Commemorative Stamp Folio

國立台北科技大學的校慶大約都在10月底11月初(2010年校慶是10月30日),今年比較特別的是建校已經99年,明年(西元2011年)將是建校百年,因此今年校慶主題是「傳承九九,卓越一百」。

為了紀念這個特別的日子,與大家分享今年11月1日首次發行的紀念郵摺!

國立台北科技大學建校百年紀念郵摺
National Taipei University of Technology
NTUT 100th Anniversary Commemorative Stamp Folio



下方是紀念郵摺的細部內容:

2010年11月6日 星期六

PHP Client URL Library 用戶端程式庫

今天介紹PHP的Client URL Library,簡稱cURL,我們利用cURL將可以使被動處理的伺服器應用程式具有主動請求的程式。

cURL提供我們和其他伺服器通訊的功能(當作一個Client端),支援的通訊協定有HTTP、HTTPS、FTP、Gopher、Telnet、DICT、file與LDAP通訊協定,詳細的說明請參考PHP網站文件,位於PHP ManualFunction ReferenceOther Services之中。

主要是因為小黑學弟最近架設了新的網站,在 php.ini設定檔中開啟cURL功能,明明就是一個很簡單的設定,可是怎麼設定都發生錯誤,錯誤訊息是:

PHP Warning: PHP Startup: Unable to load dynamic library 'c:\\php\\ext\\php_curl.dll' - \xa7\xe4\xa4\xa3\xa8\xec\xab\xfc\xa9w\xaa\xba\xbc\xd2\xb2\xd5\xa1C\r\n in Unknown on line 0
[Sat Nov 06 00:00:00 2010] [notice] Apache/2.2.16 (Win32) PHP/5.2.14 configured -- resuming normal operations
[Sat Nov 06 00:00:00 2010] [notice] Server built: Jul 30 2010 16:15:37
[Sat Nov 06 00:00:00 2010] [notice] Parent: Created child process 7520
PHP Warning: PHP Startup: Unable to load dynamic library c:\\php\\'ext\\php_curl.dll' - \xa7\xe4\xa4\xa3\xa8\xec\xab\xfc\xa9w\xaa\xba\xbc\xd2\xb2\xd5\xa1C\r\n in Unknown on line 0
[Sat Nov 06 00:00:01 2010] [notice] Child 7520: Child process is running
[Sat Nov 06 00:00:01 2010] [notice] Child 7520: Acquired the start mutex.
[Sat Nov 06 00:00:01 2010] [notice] Child 7520: Starting 64 worker threads.
[Sat Nov 06 00:00:01 2010] [notice] Child 7520: Starting thread to listen on port 80.

經過十多個小時的努力debug查明原因,「無法載入動態程式庫php_curl.dll」就是因為PHP版本,PHP 5.2.14版本不知道是什麼原因造成php_curl.dll錯誤。經過實地測試 5.2.6至5.2.13版的PHP,這些版本都能夠成功使用cURL功能。

經過這次的經驗,我們必須記住一件事:軟體版本的更新雖然存在著「向下相容」與「修正錯誤」的原則,但是永遠不代表既有功能不會發生問題。當時遇到這個cURL問題一直以為是設定錯誤,直到最後才發現是版本問題...

難道這就是「墨菲定律(Murphy's law):凡是可能出錯的事均會出錯。」

###

熱門文章