;
}
我發現90%的人寫出來的彙編代碼可能是不正常的或有錯誤的。要麼是不瞭解32位彙編,要麼是不迴圈,要麼只有迴圈沒有處理等。這是為什麼呢?因為就算是一段小小的代碼,如果沒有經過調試,也可能錯誤百出。
如果你是初級一點的程式師,則如果程式出了問題,也不知道原因所在。怎麼回事呀?我就是搞不清楚。要搞清楚首先要調試,這就涉及到調試的問題。比如說,放到一個檔裏面的,它出錯了,我查程式看了n遍,它就是沒有任何問題,這時候該怎麼辦呢?這時的解決方法就是調試,調試能使得一個程式正常地運轉起來。如果對於程式師來說寫這個程式可能只用了一天的時間,但是調試可能會花他二三天的時間。一個程式絕對是調試出來的,不是編出來的。如果說哪個系統是編出來的,那它肯定會有很多性能方面的問題,包括可能有不可預測的各種各樣的問題。
程式出現問題的話,要能考慮到各種各樣可能的情況,絕對沒有任何臆測。比如,有可能完全是編譯器的錯誤,也有可能因你程式裏面增加了什麼,而對程式產生幹擾,甚至還有一種可能是你的指標基本就沒有給它賦值,指向了別的地方,把別的東西破壞了。這些情況太多了。還有一種常見的錯誤,即MFC裏面很常見的一種設計思維,就是任何一個東西,只管創建,不管釋放、銷毀。這種思路是現在很多程式師做的程式沒用幾下就會死機的原因。這絕對是錯誤的設計思路,而MFC讓你這麼做,就是讓你永遠成不了高手,你寫的程式永遠不可能穩定。
MFC裏面的所有的結構也好,變數也好,只需要你去分配一個,幾乎就不需要你去釋放它。這絕對是錯誤的,程式一定要成對編寫。成對編碼是快速編寫程式的一種方法,而教科書裏面講的那些都是從頭到尾去編。先把那個什麼變數編寫上,再寫第一行,再寫第二行,再寫第三行,最後再寫個大括弧。這種方法絕對是錯誤的。對於現在的程式來說,它效率很慢,沒法即時調試,因為只有最後把所有的程式做完以後,才能進行調試,所以在這中間出現錯誤的幾率就積累得非常大了。
1.4 開放性思維
要具備開放性思維,就必須瞭解包括從CPU的執行方法,到Windows平臺的運轉,到你的程式的調試,最後到你要實現的功能這一整套的內容,只有做到這樣,才能真正提高。如果你的知識範圍很窄,什麼也不瞭解,純粹只瞭解語言,那你的思維就會很狹隘,就會只想到這個語言有這個函數,那個語言沒有那個函數,這個C++有這個類,那個語言沒有這個類等。而真正要做一個系統,思維一定要是全面的,游離於平臺之上的系統和實際的應用軟體是不現實的。
這種所謂理想化,已經有很多人提出是不現實的。所以,任何一個軟體一定都是跟一個平臺相關聯的,脫離平臺之上的軟體幾乎都是不能用的。這就必須對平臺的本身非常瞭解。如果你有平臺這些方面的知識,這樣在思考一個問題的時候,能馬上想到作業系統能提供些什麼功能,我再需要做些什麼,然後就能達到這個目標。這就是一種開放的思維。
在開放的思維下,我要做這個程式的時候,就會考慮怎麼把它拆成幾個獨立的、分開的模組,最簡單的,怎麼把這個模組儘量能單獨調用,而不是我要做個很大的EXE程式。一個很普通的程式師,如果他能夠考慮到將程式分成好幾個動態庫,那麼它的思維就已經有點開放性了,就已經不是MFC那些思維方式了。思考問題的時候能把它拆開,就是說,任何一個問題,如果你能把它拆開來思考,這就是簡單的開放性思維。
但光會拆還是不夠的,儘管有很多人連拆都不會。很多教科書中的程式,要解決問題的時候,就一個main,以後就是一個非常長的函數。這個main函數把所有的事情都解決了。如果連函數都不會分的話,則就是典型的封閉式思維。
這樣的人不是沒有,我是碰見過的。一些畢業生做的程式就有這種情況。所有的問題都由一個函數來解決。他就不會把它拆成幾個模組。我問他,把一件工作拆成幾件模組不是更清晰嗎?他說,拆出來後的模組執行會更慢些。這就是很明顯的封閉式思維和非封閉式思維的區別。
你看MFC的思路,那就是一層套一層的,要把所有的類都實現了,然後繼承。它從CWnd以後,把所有的東西都包括進去了,組成一個巨型的類。這個巨型的類連介面到實現統統包括在裏面。這時你怎麼拆?根本就沒有拆的方法,這就是封閉式思維。
如果一個系統、一個程式不能拆的話,則它基本上是做不好的。因為任何一個程式,如果它本身的複雜度越大,它可能出錯的幾率就越大。比如最簡單的,哪個函數越大,則該函數的出錯幾率就越大。但如果把該函數分成很多小的函數,每個小的函數的出錯幾率就會很小,那麼組合起來的整個程式的出錯幾率就很小。這就是為什麼要把它拆出來的原因。
你用C++來實現的方法也是一樣的。你要把它拆成許多的介面,如果能做到這樣,你就能把它獨立起來,甚至你能把它用動態庫的方法去實現。動態庫是現在的程式非常重要的一塊。
1.4.1 動態庫的重要性
有了動態庫,當你要改進某一項功能的時候,你可以不動任何其他的地方,只要改其中你拆出來的這一塊。這一塊是一個動態庫,然後把它改進,只需要把這個動態庫調試好後,整個系統就可以進行升級。
但如果不是這樣,你的整個程式是獨立的檔,然後,另外的功能也是一個獨立的檔,把這個程式編譯成一個EXE,這就不是動態庫的思想。按道理,我只改這個檔,其他系統也不需要進行調試。理論上看起來是一樣的,而實際的結果往往就是因為你改動了這個檔,使得原來跑得很好的整個系統,現在不能跑了或者出現了很奇怪的現象。如何解釋這個問題?事實上,這就涉及到編譯器產生代碼的方法,如果不瞭解這點的話,永遠找不出問題來。
不存在沒有BUG的編譯器,包括VC,它也會產生編譯上的問題。就算把這些問題都排除,你的軟體也可能因為你加了某些功能,而影響了其他的檔,這個幾率甚至非常大。這又得把你以前的測試工作重頭再來一遍了。
動態庫和EXE有什麼不同呢?
動態庫,包括它的代碼和資料都是獨立的,絕對不會跟其他的動態庫串在一起。但是,如果你把所有功能放到一個EXE的工程裏面,它的資料和代碼就都是放到一起的,最後產生可執行程式的時候,就會互相幹擾。而動態庫就不會,這是由作業系統來保證的。從理論上看,動態庫也是一個檔,我做這個工程的時候也是一個獨立的檔,但它就會出現這樣的問題。
1.4.2 程式設計流程
程式設計流程其實很簡單。第一步就是要拆出模組,如果你有開放性思維,則任何軟體都非常容易設計。怎麼設計呢?首先,拿到問題的時候,一定要明確目標;然後,對作業系統所提供哪些功能,程式怎麼跟作業系統介面考慮清楚;接著,就是“砍”,把它分開,要把它拆成一個個的獨立的模組;最後,再進一步去實現,從小到大地進行設計。
首先“抓”馬上能進行測試的簡單的模組,就像剛才說的成對編碼那樣,寫任何一個部分都要進行調試,每個部分最好能獨立進行調試。這樣,每個部分都是分開的時候,它都有一定的功能。當把所要做的功能都實現後,組合起來,再進行通調就可以了。
決定一個軟體的成敗還是得看該軟體設計的思維是否正確。我們也試過,即使你把那些所謂的軟體寫得再明白也沒有用,如果實現這個軟體的思路不對,則下面的工作根本就沒有必要。
做軟體時,一定要把注釋寫進去。這樣寫成的軟體如果要改版的話,就很容易,因為你的整個系統是開放性的,那麼你要增強某些功能的時候,都是針對其中的某個小項做改進,只要改它就是了。如果那個功能是全新的,則它本身就是一個獨立塊,只要去做即可。
現在很多開發工具都提供了自動化設計的功能,在生成新的程式的時候,只要設置好一些條件,就能自動產生程式的框架,這是一種趨勢嗎?
其實,這種方法不太適用通用軟體的開發,針對某個公司做個ERP系統,可能會管用,但是那些方法拿不到通用軟體裏面來。通用軟體絕對是一行一行地編碼產生出來的,而且每一行編碼的結果要達到一種可預測性。
什麼叫可預測性?就是你寫程式的時候,如果發現某一種症狀,馬上就能想到該症狀是由於哪個地方出了錯,而不是別的地方,也就是從症狀就能判斷出是哪些代碼產生了問題,這就是可預測性。
如果你用MFC來“玩”的話,即使它出錯了,你也可能不知道錯誤在哪里,它的可預測性就很差。做軟體時,如果它的可預測性越高,解決問題的方法就越快。如果某用戶說我出現什麼狀況了,你馬上就可以斷定錯誤,而不用去搜索源代碼,就能想到程式可能是什麼地方有問題,則這就是可預測性。
1.4.3 保證程式可預測性
設計程式的時候,如何保證可預測性呢?答案就是我們上面所說的,所有的代碼必須是經過測試的,必須是一步一步調試過的。只有經過你調試過的代碼,你才能知道這個代碼做某種運算的時候,它是怎樣的執行方法。如果你不知道它的執行方法,你沒進行過調試,則你就沒有任何預測性。要達到可預測性,代碼在彙編級是怎麼執行的,你都得非常清楚。代碼對哪個部分進行了什麼操作,你都得知道。如果達不到這點,你的可預測性就很差。
比如,有些程式,你看它的C或者C++的源代碼時,都看不出任何的問題。你看靜態的程式時看不出任何問題,動態的程式調試你也看不出任何問題,這時,你必須把它的彙編打開,看一看它具體的操作,才能知道。所以說,開放性思維非常重要,你必須從最低層到最上層都要清楚。VC本身提供了一個彙編的調試環境,但是打開彙編後,如果你都看不懂,那你說怎麼調呢?調什麼?如果一個程式經過調試出來,則它會出錯的地方你馬上就會知道,只要看一些表現,就知道它有些什麼問題。
比如說,我們做“大眼睛”的時候有個這樣的現象。當要顯示一個很大的圖的時候,螢幕上只能顯示其中的一小塊,這樣就可能需要拖動整個圖像,但是拖的時候,如果在Windows 2000或Windows XP系統下就會發現,一旦我將圖像拖到右下角時,圖像就一下到左上角去了。該圖像在右下角沒有到底的時候還是顯示正確的,但一旦到底,就把右下角轉到左上角去了,如圖1.2所示。
這是怎麼回事?在Windows 98和Windows 95下,從來沒有這個問題,而且如果圖像不到右下角這一行,只差一點,它也不會出現這樣的問題。為什麼在Windows 98下沒有這樣的問題,在Windows 2000下會有呢?難道是我的程式有問題?
圖1.2 圖像顯示問題示意圖
這時,我就做了一個區域的比較,即看這個區域和整個這個圖像的區域,是否中間運算有錯誤。但程式是調用Windows本身的API,我就懷疑是不是這個API出問題了。於是又重新寫了一個區域相交部分,一步一步去查它,也沒有任何問題,在任何情況下都是好的,但是到達右下角時,圖像就會翻過來。經過以上兩個步驟後,我就能確定,這是Windows作業系統的問題,Windows 98下沒有這個問題,Windows 2000有,Windows XP也沒有改過來。這是作業系統的原因,絕對不是軟體的問題。
為什麼會出現這樣的問題?這是因為微軟設計系統的那些傢夥自以為聰明。只要圖像的左上角是0,不管三七二十一,肯定往下面放,但是它的圖像是正向點陣圖,所有的點陣圖設計的時候是倒過來的。而一個正向點陣圖的高度是負的,否則它顯示的時候是倒過來的。高度是負的時候,這個0發生了變化,從上向下的,那麼他設計作業系統的時候,只看了0而沒去看高度,這時他沒做條件處理。他的想法是為了加速這個點陣圖的速度,是做優化的結果,但結果就出錯了,而到現在他也沒有解決這個問題。
所以,可預測性在這裏就顯得很重要了。當出現這個問題時,能想到要麼就是區域合併有問題,要麼就是直接顯示的這個函數有問題。區域合併的問題可以解決,我寫個函數還不行嗎?我一步一步地去跟蹤,就能肯定這個API有沒有問題,最後得出結論是有問題,也的確是它有問題。如果你不會調試的話,這個問題你永遠也查不出來;如果你不瞭解作業系統,你永遠不會想到作業系統會出問題;如果你不瞭解這個平臺,你根本就不知道問題所在。所以,要成為一個高手,視角一定要從裏到外,從點到面非常開闊。如果你局限在一個封閉的思維裏,做系統就很難。
發表人:
南無 時間: 2005-3-7 10:59 PM
我最近買了這本書,目前研究中
第二章 認識CPU
第三章 WINDOWS執行原理
第四章 程式語言的執行原理
5章 程式碼的規範和風格
6章 分析方法
7章 除錯方法
8章 核心最佳化
發表人:
jocosn 時間: 2005-3-7 11:37 PM
引用:
南無寫到:
我最近買了這本書,目前研究中
....
這不是大陸出的書嗎?南無是大陸同胞啊?
發表人:
Acute 時間: 2005-3-8 05:36 PM
@_@ 好長一篇... 真有耐心的敲...
覺得有些觀念似是而非... 不太會形容
我個人感覺是... 軟體抓錯... 真正憑借的是感覺
PC 上有很好的debug tool, 他可以去慢慢追
但是, 離開PC 的平台, 常常除錯是憑借感覺, 憑借自身對自己寫的程式的感覺, 然後只要能夠找出錯誤怎樣發生, 就自然知道錯誤發生在哪兒
當然... 這本書只是談"程式設計", so, 觀點總是由"人"出發
軟體是一個眾志成城的工作, 真正講究的, 根本不是怎樣去寫, 而是將來怎樣維護
思緒停留在程式怎樣寫, 那只是程式設計師等級的工作, 沒資格稱之為軟體工程師
軟體之所以稱之為"工程", 就是因為軟體的發展, 老早就進入需要採用"工程" 工法來設計的境界
程式語言從早期的非結構化 發展到講究結構化程式語言, 然後又從結構化程式語言進一步發展到物件導向化
這一路的發展, 都是配合軟體工程的需求, 講究的重點都是, 將來如何維護
其實寫程式很簡單, 在CPU 狂飆的境界下, 寫程式不會比吃飯喝湯困難
程式語言不斷演化, 都是著眼於維護, 維護一詞, 包含:
1. 新增功能時, 舊程式碼能盡量沿用
2. 有錯誤時, 能夠迅速解決且不引發新錯誤
3. 因應實際需要, 能快速修改符合需求
4. 開發新軟體時, 從前開發完成的資源能夠快速引用
曾經在另一篇文章中, 我有說到, C 跟C++ 的根本不同, 在於觀念, 而非語法, 其實就是上述原因.
C 是一個結構化程式語言, 寫一個C 的程式, 講究的是整個軟體工程如何模組化, 只要模組劃分的夠好, 所有參予者, 可以按照每個模組的定義, 獨立工作, 最後進行整合. 但是模組化觀念最終還是被淘汰, 因為, 模組定義常常不夠明確, 系統整合時才會發現出了問題, 其次, 模組在新開發案沿用過程, 難免需要修補, 造成重複使用過程需要耗費人力去維護/修改舊有模組
C++ 則是新的物件化觀念, 寫一個C++ 程式, 從物件著手, 先規劃出"好的物件", 然後才由這些物件去組合成對應模組, 進而變成一個軟體. 而物件化理論上比傳統結構化好的地方, 就是, 理論上, 一個"好的物件", 你可以不用理解他的細部結構, 你只要知道這個物件會完成怎樣行為, 就好了. 就好像你不用知道怎樣做一張桌子, 你會用桌子即可, 你不用會製造原子筆, 你只要會用就好了.
so, 一個C程式或者C++ 程式, 重點不是語法, 而是設計的出發點, 很多人用C++, 但是實際是在使用結構化程式設計的觀念, 這並沒有發揮C++ 的特性與優點. 這種程式, 我通常戲稱為, 只是穿著C++ 程式的外衣. 當然, Windows 環境中... 找不到"好的物件", MS 的MFC 是Windows platform 的標準application framework, 但是, 他卻是一個爛示範, Borland 公司這方面是比較好的, 可惜, 那些人待錯公司, 他們當初為Windows 推出的application framework 是OWL, 從物件導向的觀點去看, OWL 的物件比MFC 好太多了, 但是, Windows 終究是MS 設計的, MFC 想不變成標準都有困難... Borland 推的OWL 註定只能消失在歷史的洪流當中.....
Acute.
發表人:
Vic 時間: 2005-3-8 07:57 PM
OO是個很好的構想~ 如果世界每種object都被寫出來後....只要會用就可以~ (當然, 有需要時還是要做一些更改)
但OO有時候很麻煩~ 只為了弄個很簡單的功能~ 都要將之object化~ 簡簡單單的東西竟然要寫這麼多code才可以達到~
不過熊是新手啦~ 也許習慣後~ OO弄起來會很easy吧~ 
發表人:
Acute 時間: 2005-3-8 09:54 PM
引用:
Vic寫到:
OO是個很好的構想~ 如果世界每種object都被寫出來後....只要會用就可以~ (
當然, 有需要時還是要做一些更改)
但OO有時候很麻煩~ 只為了弄個很簡單的功能~ 都要將之object化~ 簡簡單單的東西竟然要寫這麼多code才可以達到~
不過熊是新手啦~
也許習慣後~ OO弄起來會很easy吧~
問題1:
更改? 除非那個Object 有bug... 不然, 不應該是去更改, 而是繼承下來, 然後把某些功能置換成你要的
這也就是維護性問題, 試想, 當結構化程式設計時代, 因為某個function 不合用, 所以把他改掉了, 這時候, 問題來了, 其他使用到該function 的程式, 通通出問題了, 大家一起改... 改到死
so, 使用物件, 必須拋棄以前的觀念, 不應該去更改一個運作正常的物件, 因為更改動作, 將導致其他已經使用該物件的程式造成問題, 而是去繼承他, 然後加上你要的東西, 讓他變成另一個物件
問題2:
我不知道所謂應該粉簡單, 卻弄的粉麻煩是指啥...
不過... OO 的確有overhead, 這是跑不掉的, OO 之所以能夠發展, 憑借的是硬體越跑越快, OO 之所以必要發展, 是因為軟體越來越複雜, 如果不採用OO 的觀念, 舊系統的維護以及新系統的開發都越來越困難.
OO 並不見得讓程式變得簡單, OO 重點在於: 資源可重複使用(也就是一般稱為物件可重用性), 維護可靠性 (前面說的, 物件應該去繼承衍生, 不應該去修改他, 除非有bug), 資料隱密性 (這兒並非說物件內容要隱瞞啥, 而是指, 你不用知道該物件是怎樣寫的, 你只要知道如何使用他)
問題3:
OO 需要的是累積資源, 這跟以前很像, 一個程式熟手, 經常性的把以前的程式碼找出來, 修改一番, 變成新的程式的需求. 只是因為結構化設計的關係, 總是需要想一下原來程式怎樣搞得, 現在得改成啥樣子, 修修補補, 難免產生蟲蟲.
在OO 的觀念下, 則變成, 如果原物件不盡適用, 沒關係, 原物件還是整個copy 過來, 然後繼承下來, 修掉想置換掉的部份, 變成一個新物件. 這樣子, 物件程式庫越來越龐大, 也越來越容易使用, 萬一某日忽然發現, 基礎物件有個小bug, 沒關係, 改掉該bug, 所有用到該物件的程式, 重新編譯後, 同樣的bug 通通改掉了, 一次OK!
Acute.
發表人:
ROACH 時間: 2005-3-8 10:14 PM
這本書在台灣可以買的到
http://www.opentech.com.tw/search/bookinfo.asp?isbn=9572147145
這篇主題??是否要轉到 『讀書會』??? 感覺起來這篇貼出來後~
越來越覺得這篇應該要貼到『讀書會』
發表人:
南無 時間: 2005-3-8 10:25 PM
今天看完第二章,對這一章節有一點疑惑
GDT.EIP.IDTR.NMI是用於何處,目的為何
是否能為小弟解惑一下
發表人:
Vic 時間: 2005-3-8 10:37 PM
引用:
Acute寫到:
問題1:
更改? 除非那個Object 有bug... 不然. 不應該是去更改, 而是繼承下來, 然後把某些功能置換成你要的
這也就是維護性問題, 試想, 當結構化程式設計時代, 因為某個function 不合用, 所以把他改掉了, 這時候, 問題來了, 其他使用到該function 的程式, 通通出問題了, 大家一起改... 改到死
so, 那用物件, 必須拋棄以前的觀念, 不應該去更改一個運作正常的物件, 因為更改動作, 將導致其他已經使用該物件的程式造成問題, 而是去繼承他, 然後加上你要的東西, 讓他變成另一個物件
問題2:
我不知道所謂應該粉簡單, 卻弄的粉麻煩是指啥...
不過... OO 的確有overhead, 這hO跑不掉的, OO 之所以能夠發展, 憑借的是硬體越跑越快, OO 之所以必要發展, 是因為軟體越來越複雜, 如果不採用OO 的觀念, 舊系統的維護以及新系統的開發都越來越困難.
OO 並不見得讓程式變得簡單, OO 重點在於: 資源可重複使用(也就是一般稱為物件可重用性), 維護可靠性 (前面說的, 物件應該去繼承衍生, 不應該去修改他, 除非有bug), 資料隱密性 (這兒並非說物件內容要隱瞞啥, 而是指, 你不用知道該物件是怎樣寫的, 你只要知道如何使用他)
Acute.
這回你說對了~ 大毒王~ OO的確是以繼承來做到符合要求~ 這我說錯了~
而的確...OO 並不見得讓程式變得簡單...這對我們這種只會偷懶的人來說~並不是好事~ 
不過只要有別人寫好又合用的class....那就不同~ 
發表人:
Acute 時間: 2005-3-8 11:03 PM
引用:
這篇貼這兒應該是正確的
這兒比較算是程式討論區... ^^"
ED 算軟體, 但是ED 的問題不放軟體求助區
so, 討論程式的書, 也不應該放讀書會才對 ^^"
Acute.
發表人:
Acute 時間: 2005-3-8 11:16 PM
引用:
南無寫到:
今天看完第二章,對這一章節有一點疑惑
GDT.EIP.IDTR.NMI是用於何處,目的為何
是否能為小弟解惑一下
你怎麼把一堆不相關的縮寫放一起
EIP 應該是程式指位暫存器(Instruction pointer), 本來是IP 後來x86 CPU 由16 bits 轉32 bits, 所有32 bits register 都加上一個E, 變成EIP
NMI 這個是一個硬體名詞, 中文翻譯是: 不可遮罩插斷 (None Mask Interrupt)
GDT 英文全寫是:Global Descriptor Table, 這是386 開始, 因應CPU 出現protect mode 而多的名詞
IDT 英文全寫是:Interrupt Descriptor Table, 也是386 protect Mode 底下的名詞.
這些東西.... 你真想知道, 找組合語言的書來看, 你就知道了, 呵呵, 或者找以前談x86 CPU protect Mode 的書, 也都會詳細解釋.
Acute.
發表人:
Acute 時間: 2005-3-8 11:24 PM
引用:
Vic寫到:
引用:
Acute寫到:
問題1:
更改? 除非那個Object 有bug... 不然, 不應該是去更改, 而是繼承下來, 然後把某些功能置換成你要的
這也就是維護性問題, 試想, 當結構化程式設計時代, 因為某個function 不合用, 所以把他改掉了, 這時候, 問題來了, 其他使用到該function 的程式, 通通出問題了, 大家一起改... 改到死
so, 使用物件, 必須拋棄以前的觀念, 不應該去更改一個運作正常的物件, 因為更改動作, 將導致其他已經使用該物件的程式造成問題, 而是去繼承他, 然後加上你要的東西, 讓他變成另一個物件
問題2:
我不知道所謂應該粉簡單, 卻弄的粉麻煩是指啥...
不過... OO 的確有overhead, 這是跑不掉的, OO 之所以能夠發展, 憑借的是硬體越跑越快, OO 之所以必要發展, 是因為軟體越來越複雜, 如果不採用OO 的觀念, 舊系統的維護以及新系統的開發都越來越困難.
OO 並不見得讓程式變得簡單, OO 重點在於: 資源可重複使用(也就是一般稱為物件可重用性), 維護可靠性 (前面說的, 物件應該去繼承衍生, 不應該去修改他, 除非有bug), 資料隱密性 (這兒並非說物件內容要隱瞞啥, 而是指, 你不用知道該物件是怎樣寫的, 你只要知道如何使用他)
Acute.
這回你說對了~
小神童~ OO的確是以繼承來做到符合要求~ 這我說錯了~
而的確...
OO 並不見得讓程式變得簡單...這對我們這種只會偷懶的人來說~並不是好事~
不過只要有別人寫好又合用的class....那就不同~
老是寫錯字, 而且一錯就是三個字, 該打 
OO 的出發點, 物件重複利用本來就是其中一環
當然, 制定一個好的物件的確很辛苦
可是使用該物件時, 卻可以很輕鬆
所以, 把時間花費在建立一個好的物件是值得的
因為將來重複使用時, 就把時間省回來了 
Acute.
發表人:
swimman 時間: 2005-3-12 03:33 AM
現在OO並不是主流了
現在講究的是component base programming了(當然還是用OO)
而且component也流行到了com+而不是舊的com model
最大的差別是com靠的是介面契約,東西會放在REGISTRY
而com+靠的是metadata可以在執行期利用reflection得知元件介面
而且可以允許不同版本的元件並存
最重要的是微軟全力推了十年的com現在也被他們自己踢進了垃圾桶
現在微軟全力再推.net架構
回歸到主題寫程式是一種專業,不會有瞬間暴增一甲子功力的事
歡迎光臨 TWed2k (http://twed2k.org/) |
Powered by Discuz! 4.1.0 |