設計模式/範式(Design Patterns)

同濟大學 2005 課程備忘錄 (27學時)

侯捷

請注意:此為備忘錄,不是完整教材或學習討論的地方。

誰適合聽這門課

2005/07/07 - 2005/07/23
每周四五六 09:00~11:50
嘉定校區軟件學院 434 教室

2005-07-calendar.jpg (26512 bytes)

一月之跡(日誌)


主旨:Design Patterns (DP) 是軟件開發的心得整理與總結。學習DP可以 (1) 獲得高層次溝通能力 (2) 學習前人經驗 (3) 檢討自身技術。本課程帶領學生認識並學習多種DPs,所用實例儘量萃取自知名軟件如 MFC, STL, Java Library…。

說明:DP代表的是某種設計思維,也是解決問題的某種手法;和語言、平台、工具無關。唯因本課程選擇之GP範例多取自 STL, MFC,因此學生需具備C++ 能力;其中 STL 又運用了大量 templates, Generic Programming技術,因此課堂上將適度補充必要基礎。另有部分實例取自 Java Library,因此課堂上亦將適度補充必要之 Java 基礎。

教材(1 為教材,其他為輔助資料或參考讀物):
1. 教師自編講義。以電子文件發給學生自行複印或由院方複印。
2. 《Design Patterns》by Erich Gamma,Richard Helm,Ralph Johnson,John Vlissides, Addison Wesley, 1995
中文繁體版《物件導向設計模式》,葉秉哲譯,臺灣培生教育出版集團
中文簡體版《設計模式》,李英軍等譯,機械工業出版社 華章公司出版
3. Design Patterns Series in Amazon.
4. 《Refactoring to Patterns》by Joshua Kerievsky, Addison Wesley, 2004
中譯本繁體版《重構 - 向範式前進》,侯捷/陳裕城 譯,眳p出版
5. 《Head First Design Patterns》by Eric Freeman & Elisabeth Freeman with Kathy Sierra & Bert Bates, Oreilly, 2004
6. 《More Effective C++》by Scott Meyers, Addison Wesley, 1996 item25~item31(p123~p251)
中文繁體版,侯捷 譯,培生公司出版
中文簡體版,侯捷 譯,電力社出版
7. 《Agile Software Development》by Robert C. Martin, Prentice Hall, 2002
中文繁體版《敏捷軟體開發》,林昆穎/吳京子 譯,眳p出版
中文簡體版《敏捷軟件開發》,鄧輝,清華大學出版社
8. 《Design Patterns 於 Java 語言上的實習應用》結城浩著,李于青譯,博碩 2002

↓以下所列課程內容十分緊湊,不一定上得完。做為老師當然要多準備一點才不會開天窗:) 但我上課從不為進度而進度,而是以讓同學獲得最多養份為最主要。所以如果上不完就上不完,無所謂。進度取決於現實狀況

周次 日期 時數 內容 備註
1 07/07 3 課程簡介,課程規則,書籍評介,期末作業題目. C++ classes vs. Java classes.
OO terms and concepts: inheritance, composition, aggregation, delegation, polymorphism.
SRP, OCP, LSP, DIP, ISP.
UML Class Diagram, Sequence Diagram.
 

基礎複習

1 07/08 3 Template Method.
Strategy.
 
1 07/09 3 Adapter.
STL class adapters, function adapters, iterator adapters
Java Adapter classes.
 
2 07/14 3 Iterator.
STL Container's iterator. Java Collection's iterator.
Visitor : a little talk
 
2 07/15 3 Reference Counting in std:string
Flyweight
Proxy in std::vector<bool>.
 
2 07/16 3 Factory Method / Object Factory.
Singleton.  Abstract Factory.
 
3 07/21 3 Prototype.  Composite.    Decorator.  
3 07/22 3 ObserverMemento.  State.  
3 07/23 2 Command.   BridgeVisitor.  
3 07/23 1 考試(或提交作業及討論)  

 

■Sent: Thursday, May 19, 2005 9:30 PM
Subject: 侯捷老師您好,我是同濟大學軟件學院的學生

尊敬的侯捷老師您好:

我是同濟大學軟件學院03級的學生,當得知這個假期您要來我們學院給我們講授“Design Patterns”這門課程時,我很興奮,而且非常希望能上您可這門課程。但是我有些疑問想問一下您,耽誤您的時間了:

第一、您的這門課程深度有多少呢?像我這樣在C++方面不是特別优秀但也還不錯的學生适合上您的課程么?會不會吃不消呢?

第二、您只給我們上三周的課程,我們很關心您的期末作業是在什么時候提交呢?是上完課程馬上提交還是其他什么時候?

就是這兩個問題,謝謝...

期盼 您的回信,耽誤您的時間了...

一名軟件學院的學生敬上

■侯捷回覆

聽懂 Design Patterns,只需對 C++ 或 Java 的 polymorphism (幾乎可以說就是 virtual functions 的應用)有所認知並加上不算太少的實作經驗(愈多愈好)即可。事實上一個很有名的 design pattern "Template Method" 就(只)是用來告訴大家 virtual functions 的精神,這將是我第一堂課就要說的內容,也是為大家再複習(紮根)一次。

但是要「領略」design patterns 就不是那麼容易。我比較常形容的是:寫過 10 萬行 C++ codes就可以對design patterns 心領神會。這是個形容,10萬行也可以改為 3 萬行或 5 萬行。總之是這樣一個 order.

學生階段寫過上萬行 C++/Java/C# codes 的確是鳳毛麟角,但這不成為上這門課的門檻或阻礙。我會儘量抽取大型 libraries 的 source code 做為講解與分析的內容,這會讓大家比較容易領受。只要 C++/Java/C# 的 polymorphism 基礎不差,聽懂應該是沒問題的。「心領神會」則看各人修為。

關於期末作業的提交,需待我對同濟大學的制度有更多了解後才能回答。我真希望這門課不必考試,不必寫期末作業,同學在完全自發、完全以興趣為前提的情況下來聽這門課。不過你也知道,學校課程不考試或不寫作業大概是不可能的。我還在思考給同學什麼樣的考試或期末作業才好。來場口試也不錯,但這會佔用大量課程時間,而我們的時間極為有限。anyway,我還在思考中。

歡迎把你的問題和我的回覆轉給同學們知道。

-- the end