程序设计
计算机语言
自从第一批电子计算机在第二次世界大战中用来帮助遥测计算以来,计算机语言已经发生了巨大的变化。在早期,程序员是用最为原始的计算机指令——机器语言来工作的。这些机器指令由一长串的0和1组成。不久,发明了汇编语言,它是把机器指令变换成易于阅读的、便于管理的助记符,如ADD、MOV等。
往后,又推出了高级语言,如BASIC和COBOL。这些语言使用的是近似于人们常用的词或句,如Let I=100。这些指令由解释器或编译器翻译成机器语言。解释器边读边翻译程序,把程序指令或代码直接变成动作。编译器把代码翻译成中间代码。这一步叫做编译,它产生一个目标文件。然后编译程序激活链接程序把目标文件变成可执行程序。
因为解释器程序是读出代码就执行,所以程序员易于使用。但是编译程序却增加了一些额外的步骤来编译和连接代码。相比之下则不方便。由编译程序产生的程序运行起来非常快,因为把代码翻译成机器语言这一耗时的任务已经完成了。
很多编译程序(如C++)的另一个优点是,你可以把可执行程序给没有这种编译程序的人。但是,使用解释型语言则必须有解释程序。
很多年以来,程序员的主要目标是写出短小的程序,以让程序运行得很快。程序必须很短,是因为内存昂贵;程序必须运行得快,还因为用来处理运算所花费的电能也很昂贵。随着计算机变得更小、更便宜、运行更快以及内存价格下降,考虑问题的次序也就发生了变化。现在程序员的时间比在商业上需求发生变化时,不用很多的费用,就能使程序扩展和改进。
程序员要解决的问题一直在变化。20年前,程序员是用来管理大量原始数据的,写程序和使用程序的人都是计算机专业人员。如今。计算机已被越来越多的人使用,大多数人对计算机和程序如何工作的知之甚少。计算机已成为人们使用的工具,人们关心的是解决他们的商业问题而不必关心计算机本身。
为了让新用户易于使用,程序已经变得越来越复杂了。以前,用户在神秘提示符下输入密码命令,只能观察一串原始数据的时代已经一去不复返了。如今,程序使用了高度“用户友好界面”,包含我们已经很熟悉的窗口、菜单、对话框。比起10年前的程序来,支持这些新方法的程序要复杂得多。随着程序设计需求的变化,计算机程序设计语言和程序设计技术都已产生了变化。
过程化、结构化和面向对象的程序设计
到目前为止,程序被认为是用来处理数据的一系列过程。一个过程或函数,是一系列按顺序执行的特定指令。数据与过程是完全分开的,编程的技巧是跟踪哪些函数调用了其他函数,哪些数据发生了变化。为了防止产生这种潜在的混乱情形,出现了结构化程序设计。
结构化程序设计依据的主要思想很简单,就是把问题分解并逐个解决。一个计算机程序就可以认为是一系列任务的集合。任何一个非常复杂以至于不能简单描述的任务,都可以分解成一系列更小的任务,直到这些小任务足够小和独立从而易于理解为止。
例如,计算一个公司每个员工的平均工资就是一个较为复杂的任务。但是你可以把它分解成如下子任务:
1.找出每个人的收入;
2.统计公司有多少人;
3.计算工资总和;
4.用工资总和除以公司人数。
计算公司总额又分为:
1.取出每个职员的记录;
2.获取其工资;
3.把该工资加到总额里;
4.取下一个职员的记录。
而取得每个职员的记录,又可分为:
1.打开职员文件;
2.定位到该记录的位置;
3.从磁盘中读取数据。
计算机毕业设计结构化的程序设计一直是处理复杂问题极为成功的方法。但是,到了80年代末期,
结构化程序设计的某些不足暴露无遗。首先,作为结构化设计的相关思想,很自然会想到的是你的数据(如职员记录等)以及能对数据进行什么处理(如分类、编辑等)等等。
第二,程序员发现他们自己经常得更新处理旧问题的方法。这常称之为“再造轮子”,与之相反的是重用性。重用性的思想是,构建一些具有一直属性的组件,然后当需要的时候,把它们插到你的程序里。这是一种模仿硬件领域的做法,当一个工程师需要一个新晶体管时,她不是去发明它,而是字箱子里找一个以她需要的方式工作的即可,或者修改一下。软件工程师却没有设有类似的选择。
我们现在使用计算机的方法——菜单、按钮、窗口——有助于更多地采用交互式的、事件驱动的方法进行计算机程序设计。事件驱动意味着用户按下按钮,或者选择了菜单,就发生一个事件,计算机程序必须响应。程序日益变成了交互式的,而且对设计这种功能显得更加重要。
这时的程序设计方法迫使用户通过一系列的屏幕去一步步处理。现在的事件驱动程序设计马上列出了各种选择,并对用户的动作立即作出响应。面向对象的程序设计试图去满足上述要求,提供了用来管理这些复杂问题的技术,获得可复用的软件模块,和将操纵数据的任务和该数据连接起来的方法。
面向对象程序设计的本质是把数据和处理数据的过程作为单个对象——一个具有自己的标识和某些特性的独立实体——来处理。
Tags: