程序设计主要有哪些方法?

程序设计主要有哪些方法?,第1张

程乱判序设计主要方法有面向结构的方法和面向对象的方法。\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的类库。

模块化的概念并不新鲜,其实很早就接触了模块化思想,知道很多行业都有预制的东西,比如建筑上的标准件,预制板都可以看成模块。机动车上的发动机变速箱和车轮也可以看成是模块化。

因此可以把编程中一些常见功能制作成模板,也就是对象或控件,以方便其他人员使用,这就是模块化程序设计。

结构化程序设计的概念是E.W.Dijkstra在60年代末提出的,其实质是控制编程中的复杂性。结构化程序设计曾被称为软件发展中的第三个里程碑。

扩展资料:

模块的独立性原则表现在模块完成独立的功能,液雀与其他模块的联系应该尽可能得简单,各个模块具有相对的独立性。

模块的规模不能太大,也不能太小。如果模块的功能太强,可读性就会较差,若模块的功能太弱,就会有很多的接口。读者需雹绝要通过较多的程序设计来进行经验的积累。

在进行多层次任务分解时,要注意对问题进行抽象化。在分解初期,可以只考虑大的模块,在中期,再逐步进行细化,分解成较小的模块进行设计。

参考资料来源:百度百科-模源埋姿块化程序设计


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12558666.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存