思考题与习题五
1.请简述程序设计的一般过程。
答:
(1)分析要解决的问题,明确任务。
(2)分析问题,建立数学模型,并选择合适的解决方案。
(3)确定数据结构和算法。
(4)编写程序。
(5)调试程序。
(6)整理资料,交付使用。
2.请简述机器语言、汇编语言和高级语言之间的区别。
答:
机器语言是一种用二进制数“0”和“1”表示计算机各种操作的程序设计语言。
用机器语言进行程序设计时,只能使用由0和1组成的机器指令。
一条机器指令能够控制计算机执行一种操作。
计算机能够直接理解和执行使用机器语言编写的程序,执行速度快,占用内存少;但难于记忆,编程困难,可读性差,容易出错。
机器语言是面向机器的语言,可移植性极差。
汇编语言是一种用助记符来表示各个基本操作的程序设计语言。
如用ADD表示加法操作,SUB表示减法操作等。
汇编语言的出现,大大减少了程序编写、阅读、修改、维护等方面的工作量,但汇编语言也是一种面向机器的语言,计算机不能直接执行,通用性和可移植性差,必须经过汇编程序翻译成机器语言程序后才能在计算机上执行,需要程序员对计算机内部结构非常了解。
高级语言是一种用接近自然语言和数学语言的语法、符号描述基本操作的程序设计语言。
它符合人们叙述问题的习惯,因此简单易学。
高级语言的诞生让程序员摆脱了低级语言所带来的种种不便。
用高级语言编写的程序不依赖于具体的机器,程序员编程时无需关心计算机内部的细节,从而大大提高了编程效率。
计算机不能直接执行使用高级语言编写的程序,需用专门的翻译程序将其转换成机器语言程序后才能执行。
如用C语言编写的程序,必须先经C编译系统翻译成机器语言程序,再连接生成可执行文件后才能执行。
高级语言种类繁多,风格迥异,各有所长,在各自的应用领域发挥了巨大的作用。
目前,使用较广泛的高级语言有C、C++、Visual Basic、Visual C++、Power Builder、Java、Delphi、ASP、JSP、PHP、Visual Foxpro等。
3.请简述“软件危机”爆发的原因。
答:
20世纪60年代,高级语言的出现使计算机应用日益普及,逐步渗透到各行各业,开发的程序规模越来越大,功能也越来越复杂。
当时评价程序好坏的标准是指令少,运行速度快,占用内存少。
这使程序员过分追求语言的表述能力和技巧,程序员往往将注意力集中在问题求解本身,而无暇顾及求解的过程,很少考虑程序结构的合理性和可扩展性。
这个时期,软件开发主要依赖程序员的个人经验,缺乏科学理论和方法作指导,开发出的软件或程序只能靠测试来检查错误,没有科学的方法来保障程序的正确性。
这些因素使得许多大型软件崩溃,软件开发周期长,生产效率低,可靠性及可维护性差,成为20世纪60年代末开发大型软件所面临的突出问题,并最终引发了“软件危机”。
4.试比较面向过程程序设计、面向对象程序设计和可视化程序设计的异同。
答:
面向过程程序设计:
面向过程程序设计是60年代末提出的,它把程序抽象为三种基本结构:顺序结构、选择结构和循环结构,故又称“结构化程序设计”。
面向过程程序设计提出了一系列的设计原则,如“自上而下、逐步求精、模块化编程等”。
程序一般由一个主程序(或主函数)和若干个子程序(或函数)组成,函数之间按一定规则传递参数,每个函数处理它的参数,并可能返回某个值。
这种程序是以过程为中心,程序执行一般从主程序顶部开始,在主程序底部结束。
在传统的面向过程的程序设计中,程序员必须基于过程来组织模块,程序设计的首要问题是“设计过程”。
面向对象程序设计:
传统程序设计方法编制的程序缺乏可交换性,程序效率低,可靠性差,程序维护相当困难。
面向对象程序设计吸取了传统程序设计的一切优点,是一种通过模仿人类思维方式(包括概括、分类、抽象、归纳等)来建立现实世界模型的方法,是崭新的程序设计思想体系。
面向对象程序设计就是通过数据抽象,将许多对象中共性的数据和操作这些数据所需要的算法抽取出来。
它将数据及数据的操作封装在一起,作为一个相互依存、不可分割的整体来处理,并采用信息隐藏技术,将对象及对象的操作抽象成一种新的数据类型——“类”,并考虑不同对象之间的联系和类的重用性。
例如:链表是一种常用实现数据存储的结构。
我们可以把链表这种存储结构及对链表的插入和删除等操作封装成一个“链表类”。
以后在使用链表时,可以利用“链表类”来构造出一个链表对象,然后对这个具体对象进行的操作就转化为调用其方法来实现。
在面向对象程序设计中,首要的任务就是确定所需要的类,每个类应设置足够的操作,并利用继承机制共享其相同的特性。
从表面上看,类只是一个新的数据类型,其操作也不复杂。
但面向对象程序设计的关键在于如何进行数据的抽象和封装及数据处理过程的设计,这种设计的根本目的在于使程序员更好地理解和管理庞大而复杂的程序结构。
面向对象程序设计的最大优点是允许“继承”,即在某个类的基础上可以派生出新类。
现有的面向对象程序设计开发工具都提供了大量的类,用户可以直接使用这些类,或通过对这些类的扩充和重用形成新类。
可视化程序设计:
如果一个程序设计语言的语句表达式由一组图符组成,则称该语言为可视化程序设计语言。
由该语言编制而成的程序称为可视化程序。
可视化程序不再是字符在某种规则上的组合,而是图符在某种规则上的空间组合。
与传统程序相比,最基本的区别在于程序表达式是由图符还是由字符组成。
这就导致了两种语言在编程风格和编程形式上都产生了很大的差别,即真正的可视化程序设计允许用户在二维或多维方式下基于图符进行编程。
可视化程序设计简单说就是“所见即所得”,即在设计时,根据头脑中所想象的应用程序界面,通过鼠标以“手绘”的方式在屏幕上“画”出程序界面,而不是编制大量的代码然后再编译生成界面,底层的一些程序代码可以由开发平台自动生成。
可视化程序设计一般为用户提供大量的界面元素或称为控件对象,这些控件对象对于熟悉Windows应用程序的用户而言一点也不陌生,如:窗体、菜单、命令按钮、工具按钮、文本框等,用户只要利用鼠标把这些控件对象拖动到适当位置,然后设置它们的大小、形状、属性等,就可以设计出自己所想要的应用程序界面。
这样做的好处是用户可以立即看到应用程序界面的效果,如果不满意,可以马上修改,而不必等到生成可执行文件后才能看到程序界面的效果。
5.请简述面向对象程序设计的特点。
答:
面向对象程序设计的最大优点是允许“继承”,即在某个类的基础上可以派生出新类。
现有的面向对象程序设计开发工具都提供了大量的类,用户可以直接使用这些类,或通过对这些类的扩充和重用形成新类。
6、解释下述概念:类、对象、封装、数据隐藏、继承、重用。
答:
面向对象程序设计就是通过数据抽象,将许多对象中共性的数据和操作这些数据所需要的算法抽取出来。
它将数据及数据的操作封装在一起,作为一个相互依存、不可分割的整体来处理,并采用信息隐藏技术,将对象及对象的操作抽象成一种新的数据类型——“类”
封装是一种数据隐藏技术。
在面向对象程序设计中,通过封装可以将一部分属性和数据的操作隐藏起来,不让使用者知道;另一部分作为类的外部接口,使用者可以访问。
这样可以对属性和操作的访问权限进行合理控制,减少程序之间的相互影响,降低出错的可能性。
C++通过“类”来支持封装和数据隐藏。
一个严格定义的类一旦生成后,就成为一个封装的实体,并可作为一个整体被使用。
而类内部的行为被隐藏起来,用户只要知道如何使用这种严格定义的类,而不必知道它是如何工作的。
继承是指新建的类从现有的类那里得到一些已有的特征。
现有的类称为“基类”或“父类”,继承基类特征的新建类称为“派生类”或“子类”,由父类产生子类的过程称作“类的派生”。
继承有效地增强了系统的可扩充性,C++通过继承来支持软件重用。
7.如何在可视化程序设计中体现“可视化”?
答:
程序员不必再为界面的设计而绞尽脑汁,只需按照设计要求,用系统提供的工具在屏幕上“画”出各种对象,如命令按钮、文本框等,创作应用程序界面就象摆放积木一样简单。
Visual Basic会自动产生界面设计代码,程序员所需要编写的只是实现程序功能的那部分代码,从而大大提高了开发效率。