程序设计主要
方法有面向结构的方法和面向对象的方法。\x0d\x0a结构化
程序设计\x0d\x0a\x0d\x0a 随着计算机的价格不断下降,硬件环境不断改善,运行速度不断提升。程序越写越大,功能越来越强,讲究技巧的程序设计方法已经不能适应需求了。记得是哪本书上讲过,一个软件的开发成本是由:程序设计 30% 和程序维护 70% 构成。这是书上给出的一个理论值,但实际上,从我十几年的工作经验中,我得到的体会是:程序设计占 10%,而维护要占 90%。也许我说的还是太保守了,维护的成本还应该再提高。下面这个程序,提供了两种设计方案,大家看看哪个更好一些那?\x0d\x0a\x0d\x0a 题目:对一个数组中的100个元素,从小到大排序并显示输出。(BASIC)\x0d\x0a\x0d\x0a 方法1:冒泡法排序,同时输出。 \x0d\x0a\x0d\x0aFOR I=1 TO 100\x0d\x0a FOR J=I+1 TO 100\x0d\x0a IF A[I] >A[J] THEN T=A[J]: A[J]=A[I]: A[I]=T\x0d\x0a NEXT J\x0d\x0a ? A[I]\x0d\x0aNEXT I\x0d\x0a\x0d\x0a 方法2:冒泡法排序,然后再输出。\x0d\x0a\x0d\x0aFOR I=1 TO 100\x0d\x0aFOR J=I+1 TO 100\x0d\x0aIF A[I] >A[J] THEN T=A[J]: A[J]=A[I]: A[I]=T\x0d\x0aNEXT\x0d\x0aNEXT\x0d\x0a\x0d\x0aFOR I=1 TO 100\x0d\x0a? A[I]\x0d\x0aNEXT \x0d\x0a\x0d\x0a 显然,“方法1”比“方法2”的效率要高,运行的更快。但是,从现在的程序设计角度来看,“方法2”更高级。原因很简单:(1)功能模块分割清晰——易读;(2)也是最重要的——易维护。程序在设计阶段的时候,就要考虑以后的维护问题。比如现在是实现了在屏幕上的输出,也许将来某一天,你要修改程序,输出到打印机上、输出到绘图仪上;也许将来某一天,你学习了一个新的高级的排序方法,由“冒泡法”改进为“快速排序”、“堆排序”。那么在“方法2”的基础上进行修改,是不是就更简单了,更容易了?!这种把功能模块分离的程序设计方法,就叫“结构化程序设计”。\x0d\x0a\x0d\x0a面向对象的程序设计\x0d\x0a\x0d\x0a 随着程序的设计的复杂性增加,结构化程序设计方法又不够用了。不够用的根本原因是“代码重用”的时候不方便。面向对象的方法诞生了,它通过继承来实现比较完善的代码重用功能。很多学生在应聘工作,面试的时候,常被问及一个问题“你来谈谈什么是面向对象的程序设计”,学生无言,回来问我,这个问题应该怎么回答。我告诉他,你只要说一句话就够了“面向对象程序设计是对数据的封装;范式(模板)的程序设计是对算法的封装。”后来再有学生遇到了这个问题,只简单的一句对答,对方就对这个学生就刮目相看了(学生后来自豪地告诉我的)。为什么那?因为只有经过彻底的体会和实践才能提炼出这个精华。\x0d\x0a\x0d\x0a 面向对象的设计方法和思想,其实早在70年代初就已经被提出来了。其目的就是:强制程序必须通过函数的方式来 *** 纵数据。这样实现了数据的封装,就避免了以前设计方法中的,任何代码都可以随便 *** 作数据而因起的BUG,而查找修改这个BUG是非常困难的。那么你可以说,即使我不使用面向对象,当我想访问某个数据的时候,我就通过调用函数访问不就可以了吗?是的,的确可以,但并不是强制的。人都有惰性,当我想对 i 加1的时候,干吗非要调用函数呀?算了,直接i++多省事呀。呵呵,正式由于这个懒惰,当程序出BUG的时候,可就不好捉啦。而面向对象是强制性的,从编译阶段就解决了你懒惰的问题。\x0d\x0a\x0d\x0a 巧合的是,面向对象的思想,其实和我们的日常生活中处理问题是吻合的。举例来说,我打算丢掉一个茶杯,怎么扔那?太简单了,拿起茶杯,走到垃圾桶,扔!注意分析这个过程,我们是先选一个“对象”------茶杯,然后向这个对象施加一个动作——扔。每个对象所能施加在它上面的动作是有一定限制的:茶杯,可以被扔,可以被砸,可以用来喝水,可以敲它发出声音......;一张纸,可以被写字,可以撕,可以烧......。也就是说,一旦确定了一个对象,则方法也就跟着确定了。我们的日常生活就是如此。但是,大家回想一下我们程序设计和对计算机的 *** 作,却不是这样的。拿DOS的 *** 作来说,我要删除一个文件,方法是在DOS提示符下:c:>del 文件名。注意看这个过程,动作在前(del),对象在后(文件名),和面向对象的方法正好顺序相反。那么只是一个顺序的问题,会带来什么影响那?呵呵,大家一定看到过这个现象:File not found. “啊~~~,我错了,我错了,文件名敲错了一个字母”,于是重新输入:c:>del 文件名2。不幸又发生了,计算机报告:File read only. 哈哈,痛苦吧:)。所以DOS的 *** 作其实是违反我们日常生活中的习惯的(当然,以前谁也没有提出过异议),而现在由于使用了面向对象的设计,那么这些问题,就在编译的时候解决了,而不是在运行的时候。obj.fun(),对于这条语句,无论是对象,还是函数,如果你输入有问题,那么都会在编译的时候报告出来,方便你修改,而不是在执行的时候出错,害的你到处去捉虫子。\x0d\x0a\x0d\x0a 同时,面向对象又能解决代码重用的问题——继承。我以前写了一个“狗”的类,属性有(变量):有毛、4条腿、有翘着的尾巴(耷拉着尾巴的那是狼)、鼻子很灵敏、喜欢吃肉骨头......方法有(函数):能跑、能闻、汪汪叫......如果它去抓耗子,人家叫它“多管闲事”。好了,狗这个类写好了。但在我实际的生活中,我家养的这条狗和我以前写的这个“狗类”非常相似,只有一点点的不同,就是我的这条狗,它是:卷毛而且长长的,鼻子小,嘴小......。于是,我派生一个新的类型,叫“哈巴狗类”在“狗类”的基础上,加上新的特性。好了,程序写完了,并且是重用了以前的正确的代码——这就是面向对象程序设计的好处。我的成功只是站在了巨人的肩膀上。当然,如果你使用VC的话,重用最多的代码就是MFC的类库。
通常要考虑的因素有:项目的应用领域、软件开发的方法、软件执行的环境、算法和数据结构的复杂性以及软件开发人员的知识等。
1、项目的应用领域
(1)科学工程计算。需要大量的标准库函数,以便处理复杂的数值计算,可供选用的语言有FORTRAN语言、C语言等。
(2)数据处理与数据库应用。SQL为IBM公司开发的数据库查询语言,4GL称为第4代语言。
(3)实时处理。实时处理软件一般对性能的要求很高,可选用的语言有汇编语言、Ada语言等。
(4)系统软件。如果编写 *** 作系统、编译系统等系统软件时,可选用汇编语言、C语言、Pascal语言和Ada语言。
(5)人工智能。如果要完成知识库系统、专家系统、决策支持系统、推理工程、语言识别、模式识别等人工智能领域内的系统,应选择Prolog、Lisp语言。
2、软件开发的方法
有时编程语言的选择依赖于开发的方法,如果要用快速原型模型来开发,要求能快速实现原型,因此宜采用4GL。如果是面向对象方法,宜采用面向对象的语言编程。
3、软件执行的环境
良好的编程环境不但能有效提高软件生产率,同时能减少错误,有效提高软件质量。
4、算法和数据结构的复杂性
科学计算、实时处理和人工智能领域中的问题算法较复杂,而数据处理、数据库应用、系统软件领域的问题,数据结构.比较复杂,因此选择语言时可考虑是否有完成复杂算法的能力,或者有构造复杂数据结构的能力。
5、软件开发人员的知识
编写语言的选择与软件开发人员的知识水平及心理因素有关,开发人员应仔细地分析软件项目的类型,敢于学习新知识,掌握新技术。
扩展资料:
基础语言开发工具
诸如Delphi、VC++、VB等语言都是一种面向对象的程序设计语言,虽然每种语言在对面向对象的支持不尽相同,但它们始终贯穿整个程序设计的思维方式的主线。
因此,要学好这些语言最开始不应该将重点放在某种语言的具体语法格式上,而应该注重学习面向对象的基本理论
1、最容易的入门语言——Visual Basic
在掌握面向对象编程的基本概念的基础上,相对来讲,VB是比较容易入门的一门语言。在学习VB时,应该注意抓住对象的精髓,避免凌乱和繁杂,注意掌握对象和控件的属性和事件以及它们的功能和用法、主要函数的简单功能。
最有效的方法就是自己组织一个由简到繁的学习步骤,比如:在学习VB简单绘图功能时,学着自己绘制正弦曲线;学习使用picturecl控件来制作一个液晶效果显示时间;在学习API函数时,制作自己的任务栏图标。这种方法能够很好的帮助你掌握VB中常用对象、事件的使用。
2、最灵活的语言——Delphi
对于Delphi来讲,如果你曾经学过PASCAL的话,你会发现很多东西都是“似曾相识”的。确实如此,Delphi本身就是由和PASCAL结构类似的Object
Pascal编写而成。如果你有一定的PASCAL基础,学习起来当然更轻松一些。另外,还应注意对Delphi中包的理解和应用。比如,对运行期包、设计期包以及自己建立包应该注意的事项。
在熟练掌握Object Pascal语言的基础上,可以把学习Delphi时的重点放到如何使用Delphi编写Windows应用程序,Delphi数据库编程和创建控件以及程序开发上面。
3、最强大的语言——Visual C++
VC++中由于有较完整的微软基本类库,使开发Windows应用程序变得简单而高效。它提供的复杂的资源编辑器,可以很方便地编辑对话框、菜单、工具栏以及其他组成元素,因此它的功能强大,使用方便,但是和VB、Delphi相比,入门较难、不容易掌握。
学习VC++,应该首先把重点方在基本数据类型、输入/输出、循环和数组、模板以及如何创建C++应用程序上面。在此之后,才应该进一步学习VC++中资源编辑器的使用、ActiveX控件的使用以及编辑器优化等内容。
结构化程序设计原则主要有四个原则:
1.自顶向下:程序设计时,应先考虑总体,后考虑细节;先考虑全局目标,后考虑局部目标。不要一开始就过多追求众多的细节,先从最上层总目标开始设计,逐步使问题具体化。
2.逐步求精:对复杂问题,应设计一些子目标作为过渡,逐步细化。
3.模块化:一个复杂问题,肯定是由若干稍简单的问题构成。模块化是把程序要解决的总目标分解为子目标,再进一步分解为具体的小目标,把每一个小目标称为一个模块。
4.限制使用goto语句
结构化程序设计方法的起源来自对GOTO语句的认识和争论。肯定的结论是:在块和进程的非正常出口处往往需要用GOTO语句,使用GOTO语句会使程序执行效率较高;在合成程序目标时,GOTO语句往往是有用的,如返回语句用GOTO。
否定的结论是:GOTO语句是有害的,是造成程序混乱的祸根,程序的质量与GOTO语句的数量呈反比,应该在所有高级程序设计语言中取消GOTO语句。取消GOTO语句后,程序易于理解、易于排错、容易维护,容易进行正确性证明。作为争论的结论,1974年Knuth发表了令人信服的总结,并取消了GOTO语句。
扩展资料:
结构化程序,是以模块化设计为中心,将待开发的软件系统划分为若干个相互独立的模块。
结构化程序设计由迪克斯特拉(E.W.dijkstra)在1969年提出,是以模块化设计为中心,将待开发的软件系统划分为若干个相互独立的模块,这样使完成每一个模块的工作变单纯而明确,为设计一些较大的软件打下了良好的基础。
由于模块相互独立,因此在设计其中一个模块时,不会受到其它模块的牵连,因而可将原来较为复杂的问题化简为一系列简单模块的设计。模块的独立性还为扩充已有的系统、建立新系统带来了不少的方便,因为我们可以充分利用现有的模块作积木式的扩展。
参考资料:百度百科-结构化程序
评论列表(0条)