《.NET軟體技術學習與實踐》之序言
來源:互聯網
上載者:User
自序
這是一本有自已特色的書。 這是一本於講技術之外,更講學習方法的書 這是一本從首至尾貫徹“授人與魚,不如授人與漁”的書 2003年暑假我在CSDN程式人生論壇發表的個人自傳——《一個普通IT人的十年回顧》(已收入本書配套光碟片),一石激起千層浪,被許多網站轉載,我個人也收到了海內外近千封電子郵件。 我是一個在沒有明師指導情況下,幾乎完全靠自己在黑暗中摸索,在自學之路上艱難跋涉過來的軟體開發人員。我不敢自稱為“職業程式員”,只敢自稱為“軟體開發愛好者”。我知道自己的技術水平有限,遠遠達不到“高手”與“專家”的水平,但我花了十年時間去學習電腦技術,其中酸甜苦辣,冷暖自知。我願意把這期間的所思與所悟與廣大讀者分享,期望能協助更多的初學者不走或少走我所走過的彎路,迅速地邁入軟體開發技術的大門,最終成為一名遠遠超過本人水平的軟體高手。 若能達此目的,則我在這本書中所花的心血也就有所值了。
一、我為什麼寫這本書?
我是在大學畢業後23歲才開始半路出家學電腦的,走了一條艱難曲折的自學之路,在寫作本書的時候,剛好滿十年。十年以來,我幾乎就沒離開過電腦,而編程更是從未間斷,寫過的代碼到底有多少?恐怕無法統計了(估計加起來可能有幾十萬行)。出於對軟體技術的強烈興趣,我從對電腦一無所知開始起步,到後來考上了電腦專業的研究生,畢業之後又走上高校電腦教學崗位,感觸頗多。 在有了十年自學電腦技術的經曆和近幾年在高校講授程式設計系列課程的經驗之後,我一直在思索以下幾個問題:l 軟體開發到底是件什麼事?l 到底應該怎樣學習電腦技術?l 用什麼方式才能讓許多學生很快地學會特定的電腦技術,而不用重複我和其他人所走過的“彎路”?l …………思索的結果就是大家所看到的這本書。 在我自己親身的學習與開發實踐中,逐漸形成了這麼一個觀點: 編程其實並不難! 要編程並不需要到大學電腦系裡去學很多艱深的理論,經過適當的指導與訓練,一個高中生就可以寫出很好的程式! 那為什麼會有那麼多的人把編程視為很高深的東西? 那為什麼我國的那麼多的軟體企業深感合格的程式員是如此地難找? 與此同時,每年畢業的大批次計算機專業學生,找工作又成了一件非常困難的事情。一邊是真正合格的程式員人數很少,一邊是大量的學生畢業找不著工作,這個怪圈為何會形成? 我想,造成這個怪圈的一個重要的原因就是電腦教育問題。目前高校中的電腦教育並不能大批量地培養出合格的軟體開發人員,學生在四年本科期間電腦理論學了不少,卻對培養編程能力重視不夠,缺乏實踐的結果是理論也掌握不好,學習成了“夾生飯”。 除了在校的大學生,社會上還有大批的軟體開發愛好者,他們由於沒有機會系統地學習軟體開發技術,就採用自學和自我實踐的方式,結合自己的工作來應用學到的電腦技術,雖然他們沒有在校生的優越條件,但其中優秀的人物其真實開發能力遠勝正規高校電腦專業“科班”出身的本科生甚至是碩士生。這種例子已經很多了。 “職業選手”不如“業餘選手” ! 我自已是走“野路子”出來的,走的是實踐為主導的自學之路,從親身實踐中深切感受到電腦科學本質上是一門實踐性非常強的科學,不管是在校學生還是社會上的軟體開發愛好者,實踐就是最好的老師! 我是從2002年開始接觸.NET技術的,並一直研究使用至今,我前前後後看了近百本國內外的.NET編程書籍,寫了幾萬行的.NET代碼,在對.NET有了一定的瞭解之後,我認為.NET技術是初學者學習軟體技術非常好的切入點,學習者可以一步到位,直接學習目前主流的物件導向軟體開發技術,而不用按部就班,按傳統的先結構化編程再物件導向編程的順序去學習。 接著我思考的問題是:這本書該怎麼寫? 著名的物理學家愛因斯坦曾經表達過這樣的思想:學習時只需要掌握那些能讓思維導向深入的東西,而將其它無關的知識全部拋棄。 軟體技術本身就是一個龐大而複雜的體繫結構,不分巨細地樣樣都想掌握,只能是疲於奔命而無所得。 為此,基於我自己的理解,在書中將我認為最重要最基礎的東西突顯出來,這些東西是必須掌握的,一旦理解並掌握之後,讀者就掌握了“捕魚”之“漁”,自己就可以進一步探索某一領域內的其它技術點了,在書中不須對每個技術領域的每個技術點都“面面俱到”。 編程是有規律的,讀者能不能迅速成為一名具備相當水平的程式員,關鍵在於對編程規律與必備知識基礎的把握程度。 讀者在閱讀時,最重要的是要掌握原理,在開發過程的所進行各項具體活動與工作步驟中,其背後都是有道理的,理解清楚了這些道理,在整個軟體開發過程中該做什麼,不該做什麼,先做什麼,後做什麼,也就心中有數了。 編了這麼些年的程式,我意識到其實學習軟體開發技術的過程就是一個學會做事的方法的過程。例如,在開發軟體時,要“分而治之”,“步步為營”,“先局部後整體”,“合理安排開發次序”,“養成良好編碼習慣”等,這不僅僅是程式設計的技巧,也是做好編程之外許多其他類型的工作所需要的基本素質。 在學習與掌握軟體技術這一過程中,可以鍛煉一個人許多基本素質,如思維周密、意志堅強、學習能力、創新精神等。如果一個人能在競爭空前激烈的IT業憑藉著其高的素質站住腳跟,那麼,可以很有把握地說,如果他轉向其他行業,也會是一個優秀的人才,會創出自己的一番天地! 在本書中,結合我個人的開發經驗,精心安排了學習次序,循序漸進地引導讀者邁入軟體開發的大門。 在許多電腦技術書籍中,出現了大量的技術術語,對於不熟悉這些術語的讀者而言,這無疑加大了閱讀的難度。對於這些電腦術語的表述,如果強調其在理論上的科學性與嚴謹性,則往往不易於理解,很大程度上限制了這些知識的傳播、普及和應用,因此,本書對這些術語大都採用了一些通俗易懂的文字來表達,甚至使用了不少比喻手法來闡明其內涵,這種表達方式雖易於理解,但不免在科學性和嚴謹性上有所不足,讀者如果需要科學而精確的定義,請自行閱讀相關的科技文獻。強調一下,本書是一本志在普及軟體開發技術的專業書籍,與傳統的工程技術專著和電腦科學理論教材是不同的,閱讀時不要象中學學習數學一樣,每個字都不放過,而重點放在形成對軟體開發過程的一種直觀理解和感性認識上。 對於一個具體的軟體開發人員而言,只有被理解了的知識才是真正有用的知識,無法理解的知識是毫無用處的。筆者寫書的主要目的是讓讀者能迅速地汲取書中所提供的知識,應該盡量做到“用大白話講述複雜的技術”,因此筆者在文字上追求深入淺出,但是否真的做到了這一點,還得由讀者來作出評價。 知識的擷取與掌握是有其客觀規律的,一般來說,具體的知識易於理解,而抽象的知識則難於把握,在學習過程中,應遵循“具體”à“抽象”à“具體”à……這樣一個無限迴圈的過程。 如果某人對一門學科所知不多,卻指望他能通過理論學習迅速地把握這門學科,這是違反人類認識世界的客觀規律的。可惜的是,目前中國教育體制中普遍採用的是讓學生重點學習抽象理論而忽視具體實踐的做法,所以造成了大批的學生把理論學成了“夾生飯”,理論既沒學好,實踐基礎也沒有。 筆者認為,只有建立在實踐基礎之上的理論學習才是真正有效學習。因此在整個電腦技術的學習過程中,應該把開發實踐當作是一條主線,由它串起所有的電腦理論。如果把電腦技術中的各個子領域看作是一個個的珍珠的話,開發實踐就是那根把所有珍珠串成項鏈的絲線,沒這有根線,所學的各門計算課程得到的不過是一棵棵零散的珠子,派不上大用場。 出於這些考慮,筆者在介紹許多編程技巧的同時,也同步介紹了相關的高等數學、資料結構、作業系統、資料庫理論、軟體工程等電腦科學理論內容,其目的就是希望讀者能在實踐中親自瞭解到理論是如何應用在開發實踐中的,從而有助於讀者日後有更強針對性地去學習這些電腦理論課程,最終成為一名優秀的軟體工程師。 本書雖然介紹了大量的編程技巧,但絕不是簡單的編程技巧的彙編,其中涉及到了電腦科學中相當廣泛的知識,如果讀者能夠從本書中體會到電腦技術的脈絡,並培養出一定的開發能力,則筆者會感到非常地高興與欣慰。 學習此書,要求讀者對Windows作業系統比較熟悉,對軟體開發有著濃厚的興趣就可以閱讀這本書了,並不要求讀者系統學習過電腦專業課程,或者有C、Pascal等豐富的程式開發經驗。
二、怎樣學習軟體開發技術
1區分電腦科學與電腦技術
“科學技術”往往是連在一起的,但事實上“科學”與“技術”是有區別的。 電腦科學主要研究理論,而電腦技術則是這些理論在實踐中的應用。打個比方:編譯理論是科學,而具體的編譯器如VBC(微軟公司開發的VB.NET程式編譯器)就是技術了;作業系統原理是理論,而Windows就是理論應用於實踐的產品,因而歸結於技術範疇。 講到這裡,讀者可能明白了,電腦科學家就是指那些從事電腦理論研究的人,目前,我國高校中電腦系開設的大部分課程都屬於電腦科學範疇的課程,比如《資料庫原理》、《作業系統》、《電腦圖形學》、《人工智慧》、《演算法理論》、《資料結構》等,而另一些課程則屬於技術範疇:比如《Visual Basic程式設計》、《SQL Server資料庫開發》等等。還有一些課程,比如《物件導向程式設計》、《軟體工程實踐》等往往同時涉及理論和技術,因而是“混血兒”。 “科學”與“技術”的區別,自然地將從事電腦工作的人分成了兩大塊:電腦科學研究者與電腦技術工程師。前者研究的是理論,是電腦科學,人數較少,他們從事的工作是往電腦科學大廈中添磚加瓦的工作,是新知識的發現者,一般而言,只有非常優秀的人才能進行理論研究工作,後者研究是技術,屬於工程範疇,他們關注的是如何把一個好的軟體,一個好的系統給實實在在地做出來,大部分人屬於這個範疇。 電腦技術總體上又分為軟體與硬體兩大塊,硬體工程師研究的是晶片、是整合電路、是板卡等“實實在在”可以“摸得著”的東西,而軟體工程師則編寫程式,驅動各種各樣的硬體完成工作。 在電腦技術中,有一個並不嚴格但眾所周知的“軟硬定律”: 任何一項由軟體完成的功能,也可以用硬體實現,反之也一樣。 比如Java虛擬機器,它原先屬於軟體範疇,但如果將整個虛擬機器燒錄到硬體晶片中,然後在它上面跑Java程式,那你說現在這個虛擬機器是“硬體”還是“軟體”?這個界限已經模糊了。 本書所介紹的.NET,屬於軟體技術範疇,換句話說,如果你想成為一名軟體工程師,就可以看這本書。
2 .NET 與 Java
Java是上世紀九十年代誕生的一種物件導向語言,它吸取了C++的許多長處,其最大的特性是“跨平台”,由於它很好地滿足了網路時代資訊系統對進階語言的要求,因而在實踐中得到廣泛應用。 Java經過近十年的發展,目前已在公司資訊系統開發領域佔據了主流地位,形成了一整套完整的技術體系,取得了巨大的成功。 .NET是微軟推出的一種新的軟體運行平台,它包括一整套應用範圍廣泛的技術,旨在迎接Java所帶來的挑戰。.NET給軟體開發帶來了很多新的技術,尤其是它的“混合語言”開發方式,是第一個支援多種語言混合開發的軟體運行平台,下一代Windows——LongHorn(預計2006年推出)的核心將會看到.NET的身影。 如果讀者學過Java,那麼您會發現,.NET與Java實在是太象了。尤其是C#(.NET下的一種程式設計語言,念成“C Sharp”,不要念成“C 井” ),如果給你一段代碼,有的時候還真難分辨出是用Java還是C#寫的。 .NET與Java的這種相似為我們的學習提供了便利,如果您掌握了C#,那麼,掌握Java這個語言幾乎是不費什麼力氣的,需要花費時間的只不過就是熟悉彼此的類庫。.NET是.NET Framework,Java是J2SE。學習這兩者的理論基礎都是物件導向理論。所以,一名有著物件導向理論基礎的人是很容易掌握.NET和Java的。
三、.NET學習全景
.NET有一個龐大的技術體系,一個初學者,如何決定自己的學習步驟呢?就我自己的經驗,談談我對這個問題的看法,參見圖1: 圖 1 .NET學習全景 作為一個下定決心要學習.NET的初學者,首先要掌握VS.NET的使用,之所以把掌握這一開發工具放在第一位,是因為在後面的學習過程中,需要使用VS.NET進行不斷地編程實踐,而只有通過實踐,才能最終掌握.NET技術。 第二步是掌握一種.NET語言。由於.NET支援多種語言,所以讀者可以根據自己的喜好選擇一門電腦語言,但請注意以下選擇語言的標準: (1)必須是全物件導向的語言,只有物件導向的語言才能充分發揮.NET的威力; (2)擁有較多的開發人員和技術資源,這樣您就可以很容易地找到志同道合的人共同學習。 微軟官方提供的語言有以下幾種:Managed C++,C#,Visual Basic.NET,J#。 其中Managed C++是對標準C++的一種擴充,用的人很少(目前Managed C++將演變為CLI,但其前景仍不十分明朗);J# 則是微軟為吸引Java程式員轉到.NET平台而採取的一種策略。如果讀者不屬於原來使用C++和Java進行開發,並希望能繼續使用原有的語言寫.NET程式這種情況,不要學習Managed C++和J#。 C#和Visual Basic.NET是目前.NET下開發的主流語言,其中,C#是全新設計的一種語言,其文法與C++和Java都非常類似,Visual Basic.NET保留了原來Visual Basic的大部分文法特徵和簡潔方便的特性,同時加上了對物件導向特性的全面支援。兩者幾乎是一樣強大的,初學者選任何一種都是可以的。 目前支援.NET的語言已有幾十種,而且還在不斷地增加中。 本書選用的程式設計語言是Visual Basic.NET。之所以選用Visual Basic.NET,一個原因是因為本書作者從Visual Basic3.0開始就使用Visual Basic來編程了,有豐富的Visual Basic開發經驗,另一個原因是.NET支援混合語言開發,Visual Basic.NET開發出來的組件,可以方便地組合到C#程式中,反之亦然。Visual Basic.NET也是一種物件導向的語言,兩者功能幾乎一樣強大,而且Visual Basic.NET與C#都使用同一個類庫——.NET Framework,把Visual Basic.NET的程式碼轉成C#代碼也並不困難。在.NET下,語言已不再重要了。.NET的跨語言特性,使我們可以用Visual Basic.NET設計一個類,繼承用C#或C++寫的一個類,反之也行。在第12章中就以Visual Basic.NET和C#為例,介紹了.NET下的混合語言開發技術。 本書的執行個體以Visual Basic.NET語言開發,但並不要求讀者以前學過Visual Basic,當然,您要是使用過以前版本的Visual Basic(如Visual Basic 6)開發過程式,那麼,使用Visual Basic.NET會感到比較親切的。網上有許多人對Visual Basic有成見,要學.NET編程,許多初學者一起跟風去學C#,其實Visual Basic是一種優秀的電腦程式設計語言,尤其是最新的Visual Basic.NET,更是較以前的Visual Basic空前地強大與靈活。筆者使用過許多其它的語言如C++、Pascal、C#、Java開發過程式,但Visual Basic許多獨特的優點所帶來的高的開發效率仍是讓我喜愛。在此,我只想說一句:關於語言優劣的討論意義並不大,網上許多人的所謂高論,其實都是“盲人摸象”罷了,初學者不要被這些言論誤導。對於一種語言,在你沒有使用它寫過一定量的程式時,不要對這門語言發表什麼評論,就算髮表評論,也要說明這是個人觀點,這是一名軟體工程師對技術應採取的態度。 所以,學習本書讀者一定要記住,您是在學習.NET編程技術,在學習如何開發一個軟體,不是在學習一門語言,您需要重點把握代碼背後的電腦基礎理論知識,所蘊含的軟體開發思維方法,以及學會使用.NET Framework本身,掌握語言不是重點,語言只不過是一個工具罷了。重要的是不是您掌握了什麼工具,而是您用這個工具做出了什麼! 掌握了開發工具和程式設計語言之後,讀者已經可以自己動手編一些小程式了。接下來的任務是學習具體的編程技術。 據說.NET上啟動並執行大部分程式是基於網路的(比如用ASP.NET開發的網站),但對於初學者而言,不適合一下子就投入到網路程式的開發中。而應從易到難,先把基礎打好。 因此,在第三步中學習Windows Form是個好選擇。所謂Windows Form程式,就是傳統的運行於個人電腦上的單機應用程式,象大家常用的金山詞霸。通過Windows Form技術的學習,讀者可以掌握最重要最基礎的windows軟體開發技術,並對物件導向理論會有深入的體會,有了這些基礎,深入學習網路編程就是水到渠成的一件事。本書的主要內容就是向讀者介紹Windows Form技術。 第四步則是學習.NET網路技術,具體而言,又可以按照以下順序進行學習: (1)ASP.NET:主要掌握如何設計ASP.NET網頁,搭建一個運行於.NET Framework之上的Web網站; (2)Web Service:學習如何把網站的各種功能以Web Service的形式提供給外界,或者整合外部的Web Service實現功能強大的資訊系統。Web Service是一個潛力無窮的新技術,將對下一代的互連網產生深遠的影響。 (3).NET Reomting及相關技術:不像ASP.NET和Web Service主要用於互連網,.NET Remoting及相關的技術主要用於開發基於區域網路的應用程式,目前大部分公司和企業都建有自己的區域網路,開發基於區域網路的資訊系統具有很大的需求。 當完成了以上四步的學習之後,您就基本上瞭解了.NET中最重要的技術,下一步有兩個選擇: (1)學習行動裝置開發技術,比如為手機、SmartPhone等智能行動裝置開發程式,設計嵌入式系統等,.NET Compact Framework就是專為行動裝置應用程式開發而準備的,使用.NET Compact Framework開發行動裝置程式與使用.NET Framework開發普通程式是類似的,已有的.NET Framework開發經驗仍然適用; (2)另一個方向是進一步深入地學習企業階層專案開發技術,成為一名系統架構設計師,這需要更進一步地學習相關理論和技術,比如設計模式、軟體工程等,還有J2EE等.NET競爭者的技術。 如果讀者能沿著我的路線圖走到這裡,那就恭喜您,您已成為了一名.NET技術專家,更寬廣的道路將展現在您的面前。 本書寫作的主要目的之一是協助想學習.NET技術的讀者順利地走完前三步。
四、本書章節安排
本書主要介紹了開發一個功能完備的.NET Windows Form應用程式所需要掌握的全部技術基礎。適合於沒有.NET開發經驗的人通過此書邁入.NET軟體開發的大門。 全書分為四大部分: 第一篇 初識l 第一章 初識.NET在這一章中,將介紹到底什麼是.NET,.NET與Windows有何關係,如何搭建.NET運行平台,並編寫第一個.NET程式。接著介紹.NET體繫結構和.NET程式運行原理,最後介紹如何發布.NET程式。當學完這一章時,讀者就會對.NET有了一個全域性的認識,可以對別人說:哦,我現在明白.NET是怎麼回事了……。l 第二章 .NET程式設計基礎 在這一章中,將介紹VS.NET整合式開發環境的提示,並使用它來建立使用者介面。接著將介紹Visual Basic.NET的基本文法,使讀者能學會使用Visual Basic.NET書寫程式。在本章的最後,則是一個執行個體程式碼分析,介紹如何用學會的Visual Basic.NET語言為本書樣本程式“MyEditor編輯器”編寫功能代碼。 讀者學完這一章,就可以使用VS.NET開發出簡單的應用程式,在這一章中學到的知識與技能,將在後面的章節中反覆使用,是最重要的基礎知識與技能。第二編 入門l 第三章 物件導向的程式設計語言 在這章中,將介紹Visual Basic.NET的物件導向特性,其基本目的是向讀者介紹使用Visual Basic.NET開發所必須知道的文法知識,由多個實用的小例子組成。如果您已掌握一種物件導向開發語言(如Java、C++、Object Pascal),則此章可以讓您快速地瞭解Visual Basic.NET文法,並馬上可以用Visual Basic.NET來開發程式;如果您以前還沒有學過一種物件導向的語言,請務必仔細地閱讀本章,並在VS.NET中把書中所有的例子全部運行一次。 強調:雖然配套光碟片中有本章全部樣本原始碼,但我強烈要求以前沒有學過物件導向程式設計語言的讀者手動一行行地敲入代碼。 本章介紹了Visual Basic.NET的以下物件導向特性:類、封裝、繼承、多態、委託,但並不以文法為重點,而重點地介紹這些特性是如何用在程式碼中的。 在本章的最後,將介紹物件導向特性應用的一個執行個體,獨立開發一個應用程式嚮導架構,初識物件導向編程的威力。 學完這章,讀者應該可以使用VS.NET開發複雜一些的程式了。l 第四章 Windows Form程式設計原理和技巧有了前三章的基礎,讀者可以開發一些簡單的程式,但要想開發出真正專業的程式,還需要學習更多的東西。在本章中將介紹傳統的運行於單機上的Windows Form應用程式開發技術。包括:使用檔案,靈活使用控制項,資料驗證,鍵盤與滑鼠操作。內容非常豐富,也全部都是開發一個真正的功能完備的應用程式所必須掌握的技術。在本章中,我們將完成一個檔案管理應用程式的開發,原來開發一個資源管理員一點也不難!一旦讀者能掌握這些技術,您就基本上具備了開發Windows Form應用程式的能力,就可以投入到無限精彩的軟體開發世界中去了……。第三篇 深入l 第五章 .NET資料庫編程概覽資料庫無疑在當前的資訊系統中具有中心的地位,本章通過一個典型的執行個體,介紹如何通過.NET的ADO.NET物件模型訪問資料庫,讓讀者快速地瞭解使用.NET開發資料庫應用程式的概貌,避免在今後的學習過程中出現“盲人摸象”的情況。l 第六章 SQL語言入門 SQL語言是專用於操作關聯式資料庫中資料的電腦語言,文法簡潔而功能強大,在現在的軟體系統中應用極為廣泛,一條精心設計的SQL命令,往往可以代替幾十行的VB.NET或C#代碼!本章將從實用的角度出發,讓讀者學會使用SQL命令操作資料。l 第七章 編程訪問資料庫 .NET是通過一個新的資料庫存取引擎ADO.NET來訪問資料庫的,ADO.NET有一個龐大而複雜的體繫結構,在本章中我將協助讀者理出一條清晰的脈絡,以資料為中心,分為以下幾個部分介紹ADO.NET編程技術:串連資料庫,向資料庫發送SQL命令,擷取資料,顯示資料,編輯資料,儲存資料,尋找與過濾資料,統計和分析。 心中有這個脈絡,學習起來就不會盲然,再開發資料庫程式就會胸有成竹了。l 第八章 資料庫編程技巧與執行個體分析有了前面介紹的知識,就可以開發出實際可用的資料庫應用程式了。 在這章中我把資料庫應用程式中最常用和最實用的功能封裝成了一個功能強大,使用方便的資料庫存取組件——OLEDBAccessObj,這個組件將構成我們後面許多程式的基礎,而在本章中,你將一層層的揭開OLEDBAccessObj的面紗,一睹其廬山真面目。 第二個大的資料庫應用執行個體是使用ADO.NET開發一個客戶資訊管理系統。通過對這個系統開發全過程的詳細介紹,讀者可以初步學會如何開發一個功能完整的軟體系統,理解模組化、反覆式開發法的思想,並培養出良好的編程風格。l 第九章 使用XML處理資料 XML將是下一代互連網技術的基石。而.NET從一誕生開始,就具備了強大的XML支援能力。第七章介紹的ADO.NET功能如此強大靈活,其內部就是採用XML來表達資料的。 在本章中,先介紹XML的基礎知識,接著介紹.NET Framework中用於處理XML資料的兩種主要方式:DOM和流機制, 本章執行個體包括可以直觀查看XML文檔DOM結構的DOM閱讀器,以流方式在XML檔案中尋找資料的自訂類:XMLReaderObj,並介紹了一個實用“公事包”小程式:這是一個可以離線使用資料庫的小程式,從中展示了開發隨處工作的軟體基本技術。l 第十章 電腦繪圖原理與GDI+這是內容異常豐富的一章,也是很有趣的一章。本章分為三個部分:1.電腦繪圖原理:這部分首先介紹了使用GDI+在處理圖形方面的基礎知識與編程技巧,其中涉及到了座標變換、繪製數學函數圖形、分形遞迴等數學知識,並介紹了如何處理映像的方法與原理,掌握了這些基本的知識與技能,讀者一是可以開發出自己的向量繪圖軟體,二是可以更進一步地去學習《電腦圖形學》等專著。在這部分中,讀者還可以直觀地看到數學知識與電腦圖形技術是如何結合在一起的,從而初步解決“從小學開始學數學,卻沒看到它有什麼用”這個困惑。2. GDIClock程式是微軟公司在Visual Basic .NET How-to範例庫中提供的,其開發人員是Ken Getz。程式使用GDI+繪製時鐘,並在編程中應用了許多技巧,是一個非常好的學習範例。通過剖析這一優秀程式執行個體,讀者不僅可以學到許多編程技巧,對好的程式有個直觀的認識,並且可以瞭解如何培養閱讀別人寫的代碼的這一軟體工程師基本技能的方法。3.列印是應用程式中非常重要的功能,在這一小節中,首先介紹列印的基本原理,接著用循序漸進的幾個小執行個體全面介紹.NET Framework下開發列印程式的基本技巧,協助讀者理出一條清晰的脈絡。最後,剖析一個功能完備的郵簽列印程式的開發過程,讓讀者體會如何將學到的知識應用於實踐,將一個個獨立的功能程式碼群組合為一個真實的程式。第四編 精通l 第十一章 學會開發物件導向軟體物件導向軟體開發技術已成為了軟體開發的主流,.NET就是物件導向技術應用的一個典範。那麼,為什麼物件導向技術有如此的“魔力”?它到底有哪些“法寶”?在本章中首先將介紹物件導向編程的基本思路,並以一個簡單的執行個體來說明這一思路。接著,介紹軟體的動態連結技術,這是構造.NET強大組件技術架構的基石。在最後,介紹以圖形化來描述物件導向軟體系統的整合模組化語言(UML),UML已成為國際標準,是當今一個軟體工程師所必須掌握的基本知識。流件 DI+!a v l 第十二章 基於組件的軟體開發本章是您邁入職業程式員的必經之路!首先,介紹什麼是軟體組件,如何把組件裝配成一個完整的軟體系統,這種開發方式為何被稱為是軟體開發方法的一場變革?接著介紹如何在.NET中開發可以複用的軟體組件,以一個支援自動匹配的文字框開發的全過程介紹.NET自訂控制項的開發技術。緊後引入了.NET混合語言開發、組件動態插拔等用於團隊開發的技術,學會了這些技術,您就可以與其他人合作,開發出結構複雜、功能強大的軟體系統,並初步瞭解CBD、設計模式等物件導向理論。如果讀者能掌握這些技術,那麼可以理直氣壯的說,您已經知道物件導向是怎麼回事了!l 第十三章 物件導向軟體開發實戰——PersonalInfo PersonalInfo是一個功能強大而實用的工具軟體,我寫作這本書時,寫作所需的大部分資料,以及安排寫作計劃等工作都是由它來管理的。PersonalInfo這個程式用到了本書介紹的幾乎全部技術,原始碼總數超過7000行!本章從系統分析階段開始,接著介紹單個組件的開發,然後是如何裝配組件,最後還介紹了真實的測試與BUG排除過程。讀者如果能仔細閱讀原始碼並體會這一執行個體的開發過程,將會提升您的軟體開發能力,最終成為一名優秀的軟體工程師!
五、本書學習指南
1 本書的可能用途
本書力圖為讀者勾划出一個實用的軟體開發學習全景,讀者不僅可以學會許多編程技巧,並且會瞭解許多電腦專業課的理論是如何用應用在軟體開發中的,比如《資料庫原理》,《資料結構》,《作業系統》等,從而為讀者自學相關的課程打下良好的實踐基礎,建築在實踐基礎上的學習才能有的放矢,不會成為“空對空”飛彈。 另外,本書對於許多在校的電腦專業的學生而言也是很有用的,根據筆者從教若干年的經驗,電腦專業的學生普遍地不瞭解所學的許多抽象而複雜的理論如何應用在實踐中,因此,他們可以在本書中親眼看到理論是如何指導實踐的,從而協助他們更有目的和有效地學習電腦專業理論課。 本書雖然主要針對廣大的自學者而寫作,但在普通高校及相關IT培訓機構中如果開設.NET軟體開發系列課程來說也是有用的,本書提供了足夠豐富的教學資源足夠一學期的60~70學時的教學使用,本書出版之間,主要內容作為講義在北京理工大學已講授過兩年之久,配套光碟片中附上了學習過這門課的學生的一些典型的作業,還包括一些對.NET技術感興趣學生寫的其他一些程式,筆者為其加上了簡短的評語。 如果有教師願意選中本書作為教材使用,可以與出版社或本人聯絡免費索取電子教案。
2 怎樣才能從本書中得到最大的收益
每個人都有自己的讀書方法,但以我的觀點來說,讀者在閱讀這本書時,建議把電腦開啟,跟著書同步查看樣本源碼。 本書提供了大量的可以啟動並執行範例,由於編幅所限,在書中只能列出一部分代碼,在配套光碟片提供的樣本源碼中可以看到完整的代碼全貌,務必要保證你明白每一條語句的含義,如果不明了某句的含義,請查閱隨機文檔MSDN,嘗試自己去弄明白,實在弄不明白,記下來,繼續學習,或者上網問問高手,當然,也可以給作者我發郵件,但我可不保證一定回信喲!J 強調:一定要上機實踐。書的本文中有許多標有“試一試”的內容,就是希望讀者能親手做一做,先思索一下為什麼程式運行會出現這種情況,然後再閱讀書中的解釋。 雖然本書配套光碟片提供了所有例子的原始碼,但請自己動手一行一行地敲入(尤其是本書第一和第二篇的前四章中的範例程式碼),這是很重要的,千萬不要圖簡便,直接開啟樣本工程運行看看結果就算了。只運行例子和手動敲入例子,學習的效果絕對是不一樣的!特別如果您以前沒編過程式,想通過這本書來學會如何編程,請務必手動敲入每行代碼! “實踐與探索”部分提供了非常有價值的擴充閱讀資料,並提供了大量有意義的編程情境,包括程式開發實踐與代碼閱讀練習,推薦你上互連網上擷取對應主題更豐富的資訊與資料。 當讀者學會編寫一些短的程式碼完成一些小功能之後,請試著把這些小的程式碼片段連在一起,構成一個相對複雜一些,功能更多一些的程式,由此不斷地“滾雪球”,讓程式功能越來越強大。當這個雪球滾到一定的程度,您一定會產生新的想法,會發現我這本書中所介紹的內容不夠用了,自會去找其他的一些書籍學習。如果這種情況真的發生了,那麼恭喜您已經到了可以自己探索學習的水平,我所提供的拐杖可以丟開了,您己經正式地邁入了軟體開發的大門。 “師傅領進門,修行靠個人”,讀者最終達到什麼樣的水平,就看您自己的實踐了! 在此,我祝願您一路走好! 本書在寫作過程中,得到了許多朋友的協助,在此對這些朋友致以真誠的謝意。 這本書是我多年以來開發經驗的總結,由於本人才疏學淺,本書定存在著疏漏之處,在此,懇請讀者指正。 作者連絡方式: 北京市海澱區中關村南大街5號 北京理工大學資訊學院電腦系軟體研究所 100081 Email: JinXuLiang@bit.edu.cn 金旭亮 2005-5稿於北京