自序
这是一本有自已特色的书。
这是一本于讲技术之外,更讲学习方法的书
这是一本从首至尾贯彻“授人与鱼,不如授人与渔”的书
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
金旭亮
2005-5稿于北京