Adapter 設計模式案例與 UML 解答

有位網友以 Email 問了一個關於 Adapter 設計模式的情境描述:
 KWBank 收購了 BankOne , 怎樣用 Adapter pattern 將兩者 的 客戶資料整合….?

他說看了這篇教學:Design Pattern—Adapter 模式,仍舊不瞭解該如何解答。

這邊我就一併列出回覆給該位網友的回應,供讀者們參考:

基本上,Adapter Pattern在使用上,會比較針對『Service』來進行設計。
參考下圖,在這個設計中,兩個Adaptee Class負責擔任如2孔轉3孔的插座一樣,至於新銀行的所有Client程式,則是直接面對CustormerAdapter的物件;如此一來,就可以隔絕掉不必要的外部程式碼,所有跟外部溝通的,都透過Adaptee的物件去存取。

圖 1、範例—訂購系統的類別圖(Class Diagram)
(點擊圖片鏈接看原圖)圖1、範例—Adapter 設計模式案例圖

ThinkPad T61P NT$ 55,000? 唉!!

上個星期我朋友透過美國的姑姑,所帶回來的 Thinkpad T61P。當然,他在約一個月前就先透過網路已訂購好的。 價錢多少呢? 我還以為我聽錯了,他很肯定還蠻神氣的告訴我: 55,000 新台幣啦!!! 88|

他的設備主要如下:
。CPU: T7500 2.2GHZ
。15.4″ 1680×1050 LCD/Nvidia Quardo 256MB 570M
。Memory: 1GB
。HDD: 160G 5400 rpm
。Wireless: Intel 4965 AGN
。OS: Vista Ultimate (英文版)
。三年全球保固 (包括台灣)。

才前兩個月而已,我買的 T61-AC1 還要價 NT$58,000 耶! 然後現在我在 Y拍看到 T61P 的價格是要 10,800,是超過十萬大元整呢,美國與台灣的售價竟然差到如此多。 這好比多年前許多玩家都喜愛從日本買 Sony 的水貨般,高階電子數位產品可能與公司貨會差價到 $5000~20000
但,台灣與美國的 T61P 售價差到近五萬元耶,這也未免差太多了吧?

這到底是那邊有問題啊? 是誰那麼過份,讓台灣的買家要付高出許多的價格? 是台灣 IBM 的售價策略嗎?

【安裝筆記】SCIM 中文輸入法與中文字形 on OpenSuSE 10.3

我安裝的 OpenSuSE 10.3 主要的語系為英文,預設就不會有中文的輸入法。在 Control Center -> System -> Language 對話框下,勾選 Traditional Chinese 為 Secondary Language 即可安裝與中文語系相關的套件,同時也可完成 SCIM (Smart Common Input Method) 輸入法管理平台。打開 SCIM Setup 對話框,在 Global Setup 下,先把所有語系的輸入法取消勾選 (Disable All),然後只勾選 Traditional Chinese 內你所想要使用的輸入法,我是只勾選酷音輸入法,作為注音輸入的機制。

中文字形的安裝,則是參考 黑眼珠2 此篇: 自由的黑-文泉驛正黑體

然後也是參考 黑眼珠2 另一篇文章:Sub-pixel Hinting ,可以使非點陣字的部分顯示更清晰銳利。

※ 關於在 KDE 桌面環境如何啟動 Sub-pixel Hinting,以及在 Firefox 的設定,參考:「 How to enable subpixel hinting

【安裝筆記】解決 Compiz 在 OpenSuSE 10.3 視窗無法出現 TitleBar

要啟動 Cimpiz 3D 特效的話,最好安裝 Compiz Fusion,以便於設定。在 10.3 版本更可透過 One-Click-Install 快速完成安裝。

我的 T61 的顯示卡是 Nvidia Quardo 140M。似乎 Nvidia 顯卡的用戶在安裝完 OpenSuSE 10.3 並啟動 Compiz 3D 特效後,視窗應用程式的 TitleBar 會不見,這稱之為 No window decoration

解決方式主要有三種:
1. 在 X-window 打開 Gnome-Terminal,輸入以下指令:
 # sudo nvidia-xconfig –add-argb-glx-visuals -d 24
然後重新啟動 X-Window

2. 參考: Plugins and Decorator Configuration 一文,點擊 Compiz Windows Decoration Plugin,在 Command 內輸入:
 gtk-window-decorator –replace  或者 emerald –replace (已安裝 Emerald Theme Manager)

前兩者在重新登入後即可生效。

第三種方式則是在 X-window 打開 Gnome-Terminal 輸入:
 # gtk-window-decorator –replace &  或者 emerald –replace &
即可馬上生效,但是登出後即失效。

但很奇怪,我試過前兩種方法,都無法回復視窗的 TitleBar。後來乾脆透過 YaST 完全移除掉 Compiz 等相關套件,然後取得 最新的 Compize 套件,仍是 One-Click-Install 即可完成安裝。

安裝完成後,重新登入,這次沒有問題了,我現在也可以在 OpenSuSE 玩起與 Ubuntu 一樣的 3D 特殊效果,實在是有夠炫!! :) )

{iThome 書評—6} Rational 統一流程入門
統一流程入門 第二版<br />
— The Rational Unified Process An Introduction 2nd』 src=』http://files.hsdc.idv.tw/medias/bk_rup_introduction.jpg』 />
</td>
<td valign= 統一流程入門 第二版 — The Rational Unified Process An Introduction 2nd
———————————–
作者/Phillippe Kruchten/著
譯者/趙光正/譯
出版社/維科圖書有限公司 出版
ISBN/957-8675-79-8

內容簡介
這本書非常簡潔,裡面快速介紹Rational統一流程(Rational Unified Process ,RUP)的一些概念、結構、內容和動機。RUP是一個具備網際網路功能的軟體工程流程,它強化團隊的生產力並提供成員最好的軟體實務經驗。RUP非常特別,開發團隊可以透過它了解統一模型語言(Unified Modeling Language , UML)、軟體自動化和業界最佳實務經驗的所有優點。

Rational統一流程統一整個軟體開發團隊的工作,並且讓每位成員達到最高生產力,因為它為大家帶來了成千上萬個專業與頂尖業界領導者的經驗。想在可預期時程內、用合理預算、輕易完成為品質軟體嗎?快拿本書當作你的指導手冊吧!本書作者與你分享他最深層的流程相關知識,並且把焦點放在RUP的關鍵點,讓你很快就能專精RUP這個已被證實過、確實可行的軟體開發解決方案。

本書第二版主要根據最新版的Rational統一流程更新以符合最新內容。事實上,完整的RUP2000裡’還包括:
1.更多的e-開發指引
2.一份學習地圖,教你如何把流程應用到各式各樣的專案和技術上
3.擴充過的測試分析,現在它會橫跨整個產品生命週期
4.改良過的應用程式介面設計範園一特別針對如何開發有效的網際網路應用程式
5.針對及時與互動系統,提供更詳盡的說明
6.深入淺出介紹如何用樣式和框架來設計系統

Philippe Kruchten是Rational統一流程產品的首席架構設計師。他有超過25年的大型、軟體密集式系統開發經驗,這些系統的領域包括通訊、安全防禦、太空、交通和軟體開發工具。他並擁有Ecole Centralc de Lyon(法國)的機械工程學位和French Institute of Telecommunications的電腦科學博士學位。

前言

RUP (Rational Unified Process) 是由 IBM Rational 所研發並推廣的軟體開發流程。它是一套流程框架 (Process Framework),可根據開發團隊的需求去調整或擴充,自訂的流程描述不外乎包括了四項元素:誰(Who)做了什麼(What),如何做(How)和什麼時候(When)做;它也是一套產品,由 Rational 所研發和維護,並整合在該公司的 Rational Suite Enterprise 套裝軟體內。安裝好該光碟產品,便可以把這份產品當成 RUP 的虛擬電子教練 (e-coach),它提供一個完整的超鏈結網頁,以 HTML 格式來描述流程,並附有各種格式的樣版(Template),如 HTML、RTF、PDF…等,及一個簡單的 Case Study:Rational Project Web Example;而 RUP本身更是一種軟體工程流程(Software Engineering Process),它提供研發單位一個嚴謹的方法,分配軟體開發工作和責任,目的是確保在可預期的時程和預算內,開發出符合使用者需求的高品質軟體。

本書不到 300 頁的內容,是將RUP 作一個整體介紹,算是一個縮影。作者是由 RUP 的首席架構師 Kruchten 所著,事實上,第一章是由軟體三巨頭之一的 Grady Booch 所撰寫的論文,是本書最有價值的地方;而第二至第六章則涵蓋了 RUP 的流程框架介紹,包括了靜態結構的流程描述與動態的流程行為說明。最能代表 RUP 的是一張看起來像是鯨魚的二維流程結構圖,水平軸代表時間和流程開始後的各個生命週期,也就是分為初始、詳述、建構、轉移等四個開發階段;以及垂直軸代表的是核心工作流程,也就是把活動按照本質加以分類的結果。諸如企業塑模、需求、分析與設計、實作等活動,也稱之為規程 (discipline)。七至十七章則是第二部分的工作流程介紹,是由 RUP 流程開發團隊的工程師們所撰寫的,諸如專案管理的工作流程、需求的工作流程等,包括了工作流程的目的、定義主要的概念、工作人員與工作成果、活動與輔助工具等。這一部份的內容看看參考就好,因為工作流程不外乎是談及什麼人在某個時間點做了什麼事 (產出),以及如何串接等,每一個專案的開發都會是不一樣的,沒有必要也不可能採取統一制式的工作流程。

最佳的軟體開發實務經驗

Grady Booch 在第一章的論文中,揭露出軟體的價值何在,以及所衍生出在軟體開發時經常發生問題的症狀,諸如無法處理需求的變動、模組間無法配合、軟體很難維護與擴充、太慢發現專案的嚴重瑕疵 (Defect) …等。同時也提及了專案雖然有不同的失敗原因,但最主要的原因包括了:不精確的溝通方式、脆弱的架構 (Architecture)、很難處理的複雜性、不一致的需求、設計和實作、測試不足、沒有客服風險等。

從根本問題找解決方案,並應用在商業上證實可行並廣為業界的成功組織所採用的軟體開發方式,而成為 RUP 的關鍵性精髓,也可以說是軟體開發最佳的實務經驗 (Best Practices),包括了:以反覆式 (Iterative)方式開發軟體、管理需求、以元件為基礎 (Component-based)的架構、以視覺化方式製作軟體模型 (Visually Model Software)、持續驗證軟體品質、控制軟體的改變。

當然,這些實務經驗可非一蹴可幾,是需要經過軟體組織持續不斷的學習與摸索,並建立紮實的本質素養方可的。舉個例,光是以元件為基礎的架構這一部份,要能瞭解什麼是元件,要如何適切地切割元件的大小,要如何定義出元件的介面,也可以說就是 Design for Interface,把善變的部分封裝在元件內部,這些可不是容易的事;再則以反覆式的開發方法,聽起來有道理,但做起來卻相當難執行,因為人們一般很難忍受不確定性,尤以專案經理時常抗拒這種開發方式,因為它看起來像是永無止境、無法控制的脫序行為。事實上,反覆式在 RUP 的規範中,是可以被控制的,每次反覆都是以編號、週期和目標妥善計畫。只是因為這一些會衍生出專案管理的其它議題,才使得專案管理人員喜歡循序的瀑布(Waterfall) 開發方法,每一個開發階段都定義了很明確的產出。問題是,我在前兩期介紹 XP 時,也曾提及了,軟體的根本問題在於風險。而瀑布式太晚把風險揭露出來,這在現今多變的需求開發中是早已證實不可行的。若反覆式是證實才能解決軟體開發的根本問題,那麼,無論過程遇到一些阻礙,還是應該堅持來達成。 ”Do the Right thing”後,才能“Do the thing Right”!

本書特別在第四章中,介紹了 RUP 的動態結構即為反覆式的開發方式。這也說明了一件事,那些把 RUP 當作僵化官僚的開發模式的軟體組織,實在沒有去用心體認 RUP 的關鍵精髓,擷取其成功的實務經驗,而只是把它拿來當作應付階層式組織各級主管的工具而已,因為很容易產出美美的文件,用它來交差應付。我在許多比較大型的組織中,的確看到很多這樣的現象,這麼多的軟體開發人才,卻一直在那裡空轉著,浪費太多不必要的資源,殊為可惜。

以架構為中心及使用案例驅動的開發流程

本書第五、六章,揭露出“4+1”的架構觀點,及以使用案例驅動 (Use case driven)的開發流程。架構可不容易被解釋與認知,RUP 是嘗試利用觀點 (View)來解釋架構,以讓軟體開發人員瞭解這些觀點的主要產出 (artifacts),以及如何調和這些產出,並仍能維持有一致性的全貌與見解。

“4+1”共五個觀點,包括了邏輯觀點、實作觀點、程序觀點、配置觀點,還有一個擺在中間的使用案例觀點,利用它來驗證其它觀點,也可以就是利用需求功能來驗證各個階段的開發產出。每一個觀點都有相關角色的開發人員職掌,例如需求分析師會專注在使用案例觀點、結構分析/設計師會專注在邏輯觀點,而程式設計師當然就是著重在實作觀點了。

RUP 是強調“Use Case driven”,但卻不是 “Use Case First”的。兩者的差異在於前者是利用功能需求驗證架構的一致性、結構的彈性、以及實作的完整性等;而後者則是純然以需求作為涵蓋整個系統的建構,卻忽略了其它的觀點,而使得系統不具彈性、延展與可重用性等。國內短線的專案開發生態經常是如此,而導致軟體人員只重視需求的功能面與實作的技術面,卻忽略了軟體的主結構,也使得系統不具應變的特性了。

我為什麼要介紹 RUP? 我不是輕量型 (lightweight)的敏捷式 (Agile)開發流程的擁護者嗎? RUP 給一般軟體人員的印象是僵化、官僚、受控制的重型 (heavyweight)開發流程,事實上,我在熟讀本書之後,更確定了,RUP 的本質精髓與其它所謂敏捷式的開發流程根本就是一樣的,它們均強調反覆式的開發、需求導向、以及對測試的重視,只是作法 (how-to)不一樣而已。而 RUP 被視為是高度儀式化的重型開發製程,這也是被那些崇尚軟體工程的專案管理人員給濫用了,卻忽略了軟體也包括了心理學、哲學與藝術的成分存在,而不是只有工程學而已 [Kruchten 2002]。另外,要注意的是,UML 可以是國際標準,但是流程卻沒有所謂的標準,它充其量只是範本 (Template)、一種框架而已。這麼說好了,團隊開發成員之間可以講相同的語言(UML),以利相互的溝通;但每個團隊要如何達成目標,則各有其方法與程序(Process)來達成任務。程序是“How-to”,每個團隊的“How-to” 是不會完全一樣的。

【安裝筆記】Install Open SuSE 10.3 on Laptop T61

Open SuSE 10.3 是我截至目前為止,安裝在我的 T61 上最為順暢的 Linux OS 了 (曾安裝過 Fedora Core 7, Debian Etch 4, Ubuntu 7.10)。 :D

先前所安裝的 Linux OS,均為 Kernel 未能支援 AHCI 模式或驅動程式所苦,而直至前幾日,好不容易才等到 Ubuntu 7.10 的到來,也確實可以安裝,完整支援 AHCI 模式。但是,我很不敢相信,在執行安裝過程時,到了硬碟分割作業階段,竟然無法辨識我的磁區規劃 (先前已分割好 root 與 Swap 磁區, 以及已安裝 Vista OS)! 我整整試了星期日一整天,各種方式都試過了,仍然無法硬碟分割作業…

我試過的最後一種方式是整個磁區全砍掉 (當然,Vista 已 Image 備份),這樣就可以順利安裝 Ubuntu 7.10 了。呼,真是炫,那個 Compiz Fusion 的 3D 桌面效果,令人真是驚豔。 Mobile01 有篇:「Ubuntu 7.10 加 Windows Vista,超華麗雙重開機」,看看網友分享的圖片吧。

可惜啊,Vista 還原回去就是無法載入,我想應該是在 MBR 這邊,Vista 做得就是特別龜,一點也干涉不得。所以又把整個硬碟給還原回去,自然,Ubuntu 系統也就被蓋掉囉。

好加在,也是 Mobile01 這邊,VHacker 網友在此篇:「Fedora Core 7 Linux ThinkPad X61 安裝筆記(T60/T61也適用)」 留言告訴我說,本月初 Open SuSE 釋出最新的 10.3 版,完成度相當高,他在 X60 安裝,硬碟支援度相當高,幾乎所有的驅動程式都不用再另行安裝。

甘阿ㄟ? 本想說 Open SuSE 似乎在本土社群冷門了些。以前我是曾經安裝過在 INTEL P3 Server 上,後來嫌套件管理幫我安裝太多東西,又重新給移除掉了。嗯,這次來測試 10.3 最新版試試看,在 Open SuSE News 上對其的介紹看得我蠻心動,桌面多媒體支援得頗佳,同時在 YaST 的套件管理上,似乎又更簡潔 Smart 了。

我下載的是 64-bit 的 DVD ISO 檔,燒錄成光碟後開機後開始安裝,相當順利耶! 最重要的是,我在 BIOS 的 SATA 模式預設為 AHCI,也完全沒有問題耶,喔,感動,這在我前兩個月安裝時,根本就不能在 AHCI 模式裡安裝設定,差別真是太多了。

對了,我是有使用 Grub4Dos 這個開機管理工具,如此我可以很乾淨地分別啟動 Vista and Linux ,甚至爾後要驅動 USB 碟、虛擬 Floppy 影像等,一切都很方便。只要給它 7MB 空間,格式化為 FAT16 的 DOS 磁區,再把該工具程式 copy 進去,編輯 menu.lst 即可。而且還可以載入背景影像桌面 (符合 Grub XPM 格式),讓桌面開機管理的畫面美化得真是好看。

所有的驅動程式,包括 Mouse (我有外接羅技無線滑鼠)、TrackPoint、FingerPrint(指紋辨識)、Bluetooth、網路卡(有線與無線,喔,忘了說,我這臺 T61 是第一批買的,當時 Lenovo 搞烏龍,搭配的是 4965 AG 網卡,但 DM 上卻是說 AGN,後經網友抗議,IBM 承諾改幫第一批出貨的換成 AGN,還送一顆 6 Cell 電池補償。第二批的 T61 DM 上就變為 AG 網卡囉)、音效卡等,完整支援耶!! 我都不用再去個別辛苦地下載與編譯驅動程式了耶。 :D

太感動了,好愉快喔,安裝好就可以上網,然後設定一下指紋辨識還可以用我的手指刷過就可登入了 (不過只保存一根手指頭,所以要小心保護我的食指呢)。唯一只有一個,我的 T61 Quardo VNS 140M 顯示卡驅動程式找不到,不過這也不難,依照此篇:「Nvidia Installer HOWTO for SUSE LINUX users」設定與安裝,過程蠻順利,經由 YaST 下載回驅動套件後即可自動完成安裝。注意的是,最好先能安裝好 kernel-source, gcc 等套件比較理想,還有,建議不要自行去編譯 nvidia kernel module,經由 YaST 來統籌做套件管理比較理想。

安裝完後,利用 CTRL-ALT-F1 進入文字 Console 模式,以 root 登入,先把 X-Windows 停止:
  # rcxdm stop
然後執行:
  # sax2 -r
重新登入後,設定顯示卡與顯示器的解析度(我的 T61 是設為 LCD 1440×900)等,完全顯示正常,開心!! ;D

再來就是設定 Compiz Fusion,也就是可以讓其桌面具有 3D 花俏的效果。我尤其最喜歡立體桌面方塊 (Cube),像魔術方塊那樣旋轉,真是超炫! 因為 10.3 是內建 Compiz 0.56 版本,透過 Yast 套件管理,可以查知是否已安裝完成。再透過 XGL, 即可啟動(enable) 3D 圖形效果。 我可以正常執行 Compiz,但是奇怪的是,每一個視窗的最外框不見了,也就是無法直接使用滑鼠移動與 Resize 視窗,需透過快速鍵與滑鼠的組合才可以移動、Resize、關閉視窗等。這怪怪的,與我在 Ubuntu 7.10 上跑得不一樣,我是相當懷疑 0.56 版本是否有 Bug? 先關掉 3D 效果吧,等待新版(0.60 以後已發佈,但不知是否可透過 YaST 更新?)更穩定再說吧。

整個安裝工作總算告一段落,我最主要的目的當然是要安裝 Vmware 在 OpenSuSE 系統上囉,畢竟,這是我最期待的,也可以讓我的 4GB 記憶體,足足可以在 Linux 64-Bits 作業系統下充分發揮其資源的。(Vista Business 32-bit 只能支援到 3GB,浪費掉我的 1GB,且感覺在 Windows-based 系統下跑 Vmware,效能應該比不上在 Linux 上面跑)

※ 我的鏈結:
 。 {筆電敗家分享} 購買 Thinkpad T61 與週邊及系統安裝