Visual Basic .NET程序设计(第3版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1为何要学习程序设计

良好能力性的素质,往往表现在从问题的定义出发,明确问题的性质,发现问题的本质,找到解决问题的途径,并确定一种最好的处理方法,使得问题最终得以解决。无论是社会活动还是日常问题,无论是科学实验还是制定研究规则,这个过程总是类似的。

如果着眼于发现问题、解决问题的观点,学习计算机语言并尝试进行程序设计就是一种非常好的方法。这里首先需要理解“为什么要学习程序设计”,这非常重要:如果你不知道为什么要做某件事,很难想象你会把某件事做好。

1.1.1 什么是程序设计

大家知道,计算机依靠程序才能够工作。一般认为,程序(Program)是产生一系列指令(或者叫做命令)让计算机工作的过程,它们可以存储在计算机中,而这些指令的集合就是计算机程序设计语言。因此在这个意义上,程序设计有两个重要的思想:一是我们需要把复杂的设计过程翻译为机器能够理解的执行代码,二是程序被存储在计算机中可以反复地被执行。

现在有数以百计用于不同应用的计算机程序设计语言(Programming Language),这些语言大致可以分为三类:机器语言、汇编语言和高级语言。

机器语言(Machine Language)也叫做机器代码语言,使用二进制代码,计算机能够直接识别并执行这些代码,其中的代码又称为机器指令。汇编语言(Assemble Language)以英文助记符的形式表示,最后需要将其翻译为二进制代码才可运行。这两种语言都是面向机器的,也就是说,不同CPU类型的计算机有不同的指令系统和汇编语言。使用机器语言、汇编语言的用户需要对所编程机器的指令系统有非常深入的掌握,所以一般被认为这是专业人员所从事的事。

随着计算机技术的发展,许多过去必须由计算机专业编程人员才能够从事的程序设计工作被更多的非专业人员所掌握。打破专业人员对计算机编程的“垄断”,应该归功于“高级语言”。

编程人员编写机器语言程序需要仔细地书写一个个0和1组成的代码,使用汇编语言则需要将每条指令用一个助记符代替,高级语言程序则可以简单地使用类似于数学表达或者英语单词组成其语句。高级语言可以让编程人员在较短的工作时间内完成更多的编程工作,大大提高了编程的效率。

1.1.2 有哪几种常用的高级语言

现在尽管有多种高级语言,但发展到今天能够称得上被广泛使用的高级语言也只有少数几种。

① C语言:功能强大,一直有“专业语言”的美誉。C语言由Bell实验室于1972年开发,兼有高级程序设计语言的优点和汇编语言的高效率,能够直接操纵计算机内存单元中的数据位,因此在设计系统软件(如操作系统)或者实时应用领域用途很广。使用C语言比使用其他高级语言写出的程序运行速度快得多。

② C++语言:C语言的扩展版本。C++提供了若干特性,改善了C语言的功能,并增加了面向对象编程的功能。在今天的系统设计领域,C++已经成为主要设计语言之一。

③ FORTRAN语言:在数学、科学计算等领域,FORTRAN(FORmula TRANslator,公式翻译)语言具有独特的优势。它也是最早的计算机高级编程语言,最初由IBM公司于1957年开发。

④ Java语言:被称为网络编程语言,是面向对象的程序设计语言,是基于C和C++的。Java特别适合于 Internet 环境,现已成为Internet中最受欢迎、最有影响的编程语言之一。Java 的Windows版本叫做Visual J++,很多人认为Visual J++是Visual Basic的最有力竞争者。Java是由美国SUN公司开发并于1995年发布的。

上面列举的几种,加上本书所介绍的VB.NET,被认为是目前最广泛使用的几种编程语言。机器语言、汇编语言都是面向机器的,它们必须针对特定的机器进行程序设计,而高级语言则灵活得多,一般情况下都是与机器无关的。

1.1.3 翻译计算机语言程序

高级语言编写的程序(称为源程序)需要翻译为机器语言程序才能被计算机所执行。语言翻译程序也是一种软件,人们称之为“程序的程序”,根据其翻译的方式,可分为解释程序和编译程序。

图1.1 解释程序

解释程序对源程序中的代码翻译一句执行一句,如图1.1所示,这个过程有点像同声翻译。解释程序在执行过程中不生成可执行的文件,因此程序运行速度较慢,而且源程序必须在解释程序环境下运行,如果源程序出错,它将立即停止执行。计算机使用解释程序可以在较小的内存中运行程序。早期的BASIC语言就是解释型语言,Visual Basic保留了这个特点,同时使用编译方式。

编译程序的结构如图1.2所示,图中的虚线部分为语言处理程序。首先由编译器(Compiler)将源程序整体翻译为目标程序代码,然后由连接程序(Linker)将目标程序和系统资源(如函数库、系统过程等)连接在一起形成可执行程序文件,最终可以直接运行可执行程序文件,使得用户编写的程序脱离编译系统而独立运行。这个结果有点像外文文献的书面翻译。

图1.2 编译程序

在计算机文件中,可执行程序(Executable Program)文件大多以.exe为后缀(扩展名),因此很好辨认。现在,许多编译系统已经直接将编译和连接过程组合在一起“构造”(Builder)可执行程序。Windows系统将这类可执行程序文件统称为“应用程序文件”。

1.1.4 程序设计是一种方法学

一个很有意思的问题经常会被提及,那就是“为什么要学程序设计”。至少有一点是很明确的——几乎每个不同职业的人都要用到计算机软件:学生使用字处理软件撰写论文,会计师使用软件记账,摄影师使用图片编辑软件处理照片,电视台使用软件编辑节目,作家使用软件写作……事实上计算机是职业人员应该使用的工具,而理解计算机,学习编程是最好的途径。

学习程序设计和学习数学一样,能够培养一个人发现问题、处理问题的能力,而且这种训练更符合信息时代的发展要求。与传统课程不同的是,程序设计是一个主动的、积极的过程,因为在编程过程中计算机能够立即、直接地反馈信息,这需要编程者与之互动,达到探索、实验和评价的效果。若把编程与做数学习题的过程进行比较,就会发现程序设计更有趣、更生动:编程者与计算机直接交互,如计算机会告诉你某个语句出现了错误,你就必须检查并纠正这个错误,这是一个探索过程;同时,编程者有一种成就感,如果你的程序能被正确执行的话。

学过程序设计的人未必就一定要从事程序设计工作。事实上,目前编程的人越来越少,用程序的人越来越多,这就使得有人怀疑是否有学习程序设计的必要。其实回答这个疑问并不难,就像我们在大学里人人都学习微积分,但并没有几个人使用微积分。那么是不是不用的人就不需要学呢?如果你不以程序设计本身为目的进行学习,那么我们看看下面的事实。

在我们使用各种不同的软件帮助处理问题时,我们需要与计算机进行交互,如编辑文档、使用电子表格、制作演示文稿等。一个简单的例子是,如果你现在通过网络的搜索引擎去查找需要的资料,一个更符合检索要求的表达式是重要的,因此你理解计算机如何用程序来运行你的检索表达式,对你进行检索操作肯定会有帮助。如果你知道了计算机是如何用程序进行工作的,则你在电子表格中对符合条件的数据进行统计计数时,绝对不会一个个地把它数出来。今天我们使用的是这些软件,我们不能知道几年后将会有哪些软件,会帮我们解决哪些问题。因此,理解编程比直接理解使用软件有更长远的意义。

让计算机帮助人们做事,采用了人在与计算机交互过程中使用的特定科学符号,有些是自然语言表达,有些是具体的特定记号,这些都是某种形式的“编程”过程。即使使用某些功能很强大的软件包,如进行科学计算和工程计算的 MATLAB 之类的软件,仍然需要在某种程度上按照一定的表达形式进行“编程”,这些软件才能够帮助用户完成工作。

1.1.5 如何学习程序设计

一个程序员的工作与作家、设计师没有什么不同,都是从构思框架开始,然后进入细节,最终把其设计思想表现为特定的文字或者图纸。其中将根据故事的发展或设计要求的变化,反复修改。

事实上,没有任何一个程序员设计程序能够一气呵成,都需要经过多次的反复修改,最后达到程序功能的要求。进一步,即使程序看上去正确,其中仍然会隐藏着未知的错误。因此,测试程序需要使用不同的输入,在尽可能多的环境下运行,以使得这些错误发生在程序正式投入运行之前,然后及时纠正。

几乎所有的程序设计都会涉及输入数据、处理数据,进一步地说,设计针对某个特定问题求解的程序,必须知道需要哪些数据、这些数据的性质(正式的说法是数据的属性),以及这些数据之间的相互关系。因此,要学习程序设计就必须学习表达这些数据以及相互关系的语言的描述,一般认为,需要:

① 分析问题,使用特定的方法进行描述,如使用流程图描述。

② 在表达抽象问题时,用明确的实例加以说明。

③ 使用编程语言精确描述所定义的语句和数据之间的关系。

④ 通过检查,包括机器编译过程的检查,测试上述设计。

⑤ 注重细节问题。

第一步的分析过程是至关重要的。如果说其后的步骤和计算机语言关系密切的话,那么分析问题则与“算法”相关。大多数处理过程还与数学表达有关,即选择一个合适的算法是程序设计的第一步。讨论“算法”不是本书的范围,但本书给出的例子都含有算法的影子,这需要读者从中领会。

以上这些表现在计算机程序设计中的行为,与任何一项有意义的事务(如一个商业活动)的过程都是类似的。程序设计过程与一般处理问题的过程有一个重要的差别,即衡量程序的设计结果不是靠设计者或使用者的评价,更重要的是机器的评价,即程序必须被正确地运行,至少在预见的范围内,程序的运行结果能够与预期结果相同。

因此,强调实践环节有时比设计过程的学习更要紧。传统的阅读理解是需要的,但有时把设计的代码输入到计算机,让计算机执行一次再来查看程序的执行结果,比仅靠阅读来理解程序更有效,也就是说,实验能够帮助我们进一步理解程序设计的过程。