最近讀四人幫Design Patterns,把實際範例:Lexi的部份看完了。目前介紹Lexi的部份正在讀第二遍。
不愧是天書啊,一進到實例的地方難度馬上指數上升。進入這裡之前的一些原則說明:比如包涵優先於繼承,對介面programming而不是對implementation進行programming這些輕描淡寫的文句,到了Lexi文字編輯器的實際解說的時候,可以說是每句話都有非常深的涵義。雖然文句都能夠理解,但是書中將物件耦合性降低的神妙手法還無法完全深刻體會,目前只能把這本書放在一旁,讓頭腦開啟固有消化技能慢慢進行消化。
怎麼個不能理解法呢?應該說是書中運用Language feature的方法跟過去我在C++書上看到的「施設原意」不同。比如C++書上提到:提供繼承和虛擬函式的主要目的是提供多型。但以Lexi提到的Transparent Enclosing這個例子來說,子物件甲繼承的目的可能只是單純為了得到和母物件乙相同的介面,進而達到在使用端不知不覺的情況下,以非繼承的手法增加原物件乙的功能(甲物件自己做了一些事情後,再偷偷用指標把要求delegate到使用端原本期待的乙物件去。原本只處理乙物件的程式碼就因為甲物件在中間攔截,變得可以享受到甲乙兩個物件的功能,如在UI上偷偷加上捲軸等)。
因為和C++書上的原始用法並不相同,讓我在Transparent Enclosing這個地方想了老半天。其他像是Lexi中Bridge 、Iterator、Visitor的實做,把完全不同的物件樹透過一堆接近神異的方法連結在一起,卻又不損彼此的獨立性和implementation的自由度(到最後大家都透過ADT講話....),更是讓我想到腦漿噴發。突然間才發現,自己過去以為「物件導向 = ADT」是多麼的愚蠢>"<
以電腦書來說,因為我想再去比NCPC,所以讀物可能會換成ITOA吧,我當年讀演算法的時候實在太混了,天天打小朋友XD。至少基本的東西我想弄懂再去比賽,江山代有才人出,搞不好Kochi沒來我還是被幹掉了....平常讀共筆以外的讀書時間,就限定於ITOA吧~
醫學方面最近也是收穫不小。開學後我跑去找了病理實負責電腦的老師報告病理系統的現況,順路打探一下現在身為病理教學者的老師當年是怎麼讀書?得到了不少指引。老師說:原文書是拿來查的,但不是要考試了才來查,而是平常有興趣,或是不懂得地方就可以開始翻原文書,畢竟原文書的知識一定比共筆詳盡。
我問:「翻完記不起來怎麼辦?」師答:翻醫學原文書的目的,不是為了馬上把所有的細節背起來(如某某癌症是第14,18染色體互換,某某癌是IgH基因錯位等等),有時候雖然原文書沒記起來,但光是知道哪些知識分佈在哪些章節就可以算是收穫。以後反覆的查詢,就能記住架構和細節,最終導致知識的增加。
我問:「老師會在暑假想辦法翻完原文書嗎?」老師講的答案讓我非常開心:答案是老師也翻不完XD,「你囫圇吞棗讀個幾百頁,可能老師兩堂課就上完了,沒意義」。老師當年四年級的時候,原文書也只是拿來查的(這裡我就遜了一級,我都查Wikipedia@@)。升上五年級以後,「投影片都背不完了,沒辦法看原文書」(超級中肯啊,傳染課老師一小時17X張投影片的神技是怎樣~"~)。所以以讀書的方法來說,我應該還算是在正軌上吧....
再問,「老師,那以後實習要看Journal嗎?」「不必,身為實習的學生,最重要的是把基本的醫學弄懂,醫學課本和老師上課提到的知識和統計,都是長久以來已經公認的事實,先把那個弄懂就夠了,舉個例子,一個去外科實習的學生,假如連手怎麼消毒,怎麼縫合都不知道,那還實習什麼?」,看來我以前的共筆和趙俊彥講義還是不能丟啊XD
電腦和醫學方面都有收穫,值得紀錄一下XD
全文連結
訂閱:
張貼留言 (Atom)
4 意見:
你說的是 O'Reilly 的那本 Design Pattern 嗎?
耦合跟聚合力的確是寫物件的時候很難去做的好的地方。 :P
不是,是Addison Wesley發行,四人幫寫的那本
書中的內容根本就是神技啊
應該是這本囉?
http://tinyurl.com/yxlas4
經你這樣一說,害我也很想讀...
話說 Linus 最近炮轟 C++. :P
稍微看了一下相關的討論串
我的功力差太遠了,無法全盤了解呢XD
張貼留言