面向对象程序设计和结构化程序设计各有什么优缺点?

作者&投稿:董绿 (若有异议请与网页底部的电邮联系)
~ 程序设计主要方法有面向结构的方法和面向对象的方法。
结构化程序设计

   随着计算机的价格不断下降,硬件环境不断改善,运行速度不断提升。程序越写越大,功能越来越强,讲究技巧的程序设计方法已经不能适应需求了。记得是哪本书上讲过,一个软件的开发成本是由:程序设计 30% 和程序维护 70% 构成。这是书上给出的一个理论值,但实际上,从我十几年的工作经验中,我得到的体会是:程序设计占 10%,而维护要占 90%。也许我说的还是太保守了,维护的成本还应该再提高。下面这个程序,提供了两种设计方案,大家看看哪个更好一些那?

   题目:对一个数组中的100个元素,从小到大排序并显示输出。(BASIC)

   方法1:冒泡法排序,同时输出。

FOR I=1 TO 100
  FOR J=I+1 TO 100
   IF A[I] > A[J] THEN T=A[J]: A[J]=A[I]: A[I]=T
  NEXT J
  ? A[I]
NEXT I

   方法2:冒泡法排序,然后再输出。

FOR I=1 TO 100
FOR J=I+1 TO 100
IF A[I] > A[J] THEN T=A[J]: A[J]=A[I]: A[I]=T
NEXT
NEXT

FOR I=1 TO 100
? A[I]
NEXT

   显然,“方法1”比“方法2”的效率要高,运行的更快。但是,从现在的程序设计角度来看,“方法2”更高级。原因很简单:(1)功能模块分割清晰——易读;(2)也是最重要的——易维护。程序在设计阶段的时候,就要考虑以后的维护问题。比如现在是实现了在屏幕上的输出,也许将来某一天,你要修改程序,输出到打印机上、输出到绘图仪上;也许将来某一天,你学习了一个新的高级的排序方法,由“冒泡法”改进为“快速排序”、“堆排序”。那么在“方法2”的基础上进行修改,是不是就更简单了,更容易了?!这种把功能模块分离的程序设计方法,就叫“结构化程序设计”。

面向对象的程序设计

   随着程序的设计的复杂性增加,结构化程序设计方法又不够用了。不够用的根本原因是“代码重用”的时候不方便。面向对象的方法诞生了,它通过继承来实现比较完善的代码重用功能。很多学生在应聘工作,面试的时候,常被问及一个问题“你来谈谈什么是面向对象的程序设计”,学生无言,回来问我,这个问题应该怎么回答。我告诉他,你只要说一句话就够了“面向对象程序设计是对数据的封装;范式(模板)的程序设计是对算法的封装。”后来再有学生遇到了这个问题,只简单的一句对答,对方就对这个学生就刮目相看了(学生后来自豪地告诉我的)。为什么那?因为只有经过彻底的体会和实践才能提炼出这个精华。

   面向对象的设计方法和思想,其实早在70年代初就已经被提出来了。其目的就是:强制程序必须通过函数的方式来操纵数据。这样实现了数据的封装,就避免了以前设计方法中的,任何代码都可以随便操作数据而因起的BUG,而查找修改这个BUG是非常困难的。那么你可以说,即使我不使用面向对象,当我想访问某个数据的时候,我就通过调用函数访问不就可以了吗?是的,的确可以,但并不是强制的。人都有惰性,当我想对 i 加1的时候,干吗非要调用函数呀?算了,直接i++多省事呀。呵呵,正式由于这个懒惰,当程序出BUG的时候,可就不好捉啦。而面向对象是强制性的,从编译阶段就解决了你懒惰的问题。

   巧合的是,面向对象的思想,其实和我们的日常生活中处理问题是吻合的。举例来说,我打算丢掉一个茶杯,怎么扔那?太简单了,拿起茶杯,走到垃圾桶,扔!注意分析这个过程,我们是先选一个“对象”------茶杯,然后向这个对象施加一个动作——扔。每个对象所能施加在它上面的动作是有一定限制的:茶杯,可以被扔,可以被砸,可以用来喝水,可以敲它发出声音......;一张纸,可以被写字,可以撕,可以烧......。也就是说,一旦确定了一个对象,则方法也就跟着确定了。我们的日常生活就是如此。但是,大家回想一下我们程序设计和对计算机的操作,却不是这样的。拿DOS的操作来说,我要删除一个文件,方法是在DOS提示符下:c:> del 文件名<回车>。注意看这个过程,动作在前(del),对象在后(文件名),和面向对象的方法正好顺序相反。那么只是一个顺序的问题,会带来什么影响那?呵呵,大家一定看到过这个现象:File not found. “啊~~~,我错了,我错了,文件名敲错了一个字母”,于是重新输入:c:> del 文件名2<回车>。不幸又发生了,计算机报告:File read only. 哈哈,痛苦吧:)。所以DOS的操作其实是违反我们日常生活中的习惯的(当然,以前谁也没有提出过异议),而现在由于使用了面向对象的设计,那么这些问题,就在编译的时候解决了,而不是在运行的时候。obj.fun(),对于这条语句,无论是对象,还是函数,如果你输入有问题,那么都会在编译的时候报告出来,方便你修改,而不是在执行的时候出错,害的你到处去捉虫子。

   同时,面向对象又能解决代码重用的问题——继承。我以前写了一个“狗”的类,属性有(变量):有毛、4条腿、有翘着的尾巴(耷拉着尾巴的那是狼)、鼻子很灵敏、喜欢吃肉骨头......方法有(函数):能跑、能闻、汪汪叫......如果它去抓耗子,人家叫它“多管闲事”。好了,狗这个类写好了。但在我实际的生活中,我家养的这条狗和我以前写的这个“狗类”非常相似,只有一点点的不同,就是我的这条狗,它是:卷毛而且长长的,鼻子小,嘴小......。于是,我派生一个新的类型,叫“哈巴狗类”在“狗类”的基础上,加上新的特性。好了,程序写完了,并且是重用了以前的正确的代码——这就是面向对象程序设计的好处。我的成功只是站在了巨人的肩膀上。当然,如果你使用VC的话,重用最多的代码就是MFC的类库。


什么是面向对象的程序设计思想
一种程序设计范型,同时也是一种程序开发的方法。对象指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。面向对象程序设计可以看作一种在程序中包含各种独立而又互相调用的对象的思想,这与传统的思想刚好相反:传统的程序设计主张将程序看作一系列...

C++面向对象和面向过程的程序设计有何区别?
再比如我要把这个五子棋游戏改为围棋游戏,如果你是面向过程设计,那么五子棋的规则就分布在了你的程序的每一个角落,要改动还不如重写。但是如果你当初就是面向对象的设计,那么你只用改动规则对象就可以了,五子棋和围棋的区别不就是规则吗?(当然棋盘大小好像也不一样,但是你会觉得这是一个难题吗...

什么是面向对象技术
问题一:面向对象的核心是什么? 面向对象技术是目前流行的系统设计开发技术,它包括面向对象分析和面向对象程序设计。面向对象程序设计技术的提出,主要是为了解决传统程序设计方法――结构化程序设计所不能解决的代码重用问题。 面向对象的编程方法具有四个基本特征: 1.抽象: 抽象就是忽略一个主题中与当前目标无关的...

在面向对象程序设计中,什么是指把对象的属性和操作结合在一起,构成一...
在面向对象程序设计中,(封装)是指把对象的属性和操作结合在一起,构成一个独立的

属于面向对象的程序设计语言
属于面向对象的程序设计语言:1、Smalltalk。它是一种反映面向对象程序设计思想的程序设计环境,强调对象概念的归一性,并引入了类、方法、实例等概念。2、Eiffel。以其全面的静态类型化、大量的开发工具和多继承支持而闻名。3、C++。它是一种支持多范型的程序设计语言,包括面向对象和面向过程的设计,是C...

面向对象的四个基本特征
特征见下面:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。封装是面向对象的特征之一,是对象和类概念的主要特性。多态性是指允许不同类的对象对同一消息作出响应。比如...

面向对象的程序设计语言有哪些?
3、C++:C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。4、java:Java是一门...

面向对象程序设计的特点和优点
继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。继承性是面向对象程序设计语言不同于其它语言的最重要的特点,是其他语言所没有的。在类...

面向对象程序设计的优点是什么?
1、维护简单面向对象程序设计的一个特征就是模块化。实体可以被表示为类以及同一名字空间中具有相同功能的类,可以在名字空间中添加一个类而不影响该名字空间的其他成员。这种特征为程序的维护提供了便捷性。2、可扩充性如果有一个具有某一种功能的类,就可以扩充这个类,创建一个具有扩充功能的类。3、...

面向对象的语言主要有哪些
2、c++。C++是一种使用广泛的计算机程序设计语言。它是一种通用程序设计语言,支持多重编程模式,例如过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计和设计模式等。3、c#。C#是微软推出的一种基于.NET框架的、面向对象的高级编程语言。C#以.NET框架类库作为基础,拥有类似Visual Basic的快速...

兴化市18764885201: 结构化程序设计和面向对象程序设计的主要特征各是什么? -
宰容烯丙: “面向过程程序设计”、主要是为拉大型的工程计算或者为拉完成某个任务而求出结果的对界面则要求不高 其优点是运行速度快 “面向对象程序设计 主要是对各种事物能形象的描述并且模拟在计算机上运行它兼容以上面向过程的好多功能 优点...

兴化市18764885201: 结构化程序设计与面向对象设计主要区别 -
宰容烯丙: 结构化程序设计与面向对象主要的区别在于设计思维上不同,另外封装性上结构化编程比较难于封装,复用性上也不如面向对象编程. 1、设计思维. 面向过程程序设计方法的实质上是从计算机处理问题的观点来进行程序设计工作:“输入——...

兴化市18764885201: 面向对象程序设计和结构化程序设计的区别,150字左右 -
宰容烯丙: 1.首先最根本的是设计思想,一个是以对象为基本单元,用对像的使用来完成程序功能,后者是基于过程的设计,比如你要做一个赛车的函数,在利用面向对象设计时,你先写好轮子类,发动机类,方向盘类...再将他们组合起来.而面向结构化则只是写你操作赛车是要进行的动作.这也只是个大概,具体理解在你学一段时间后会有自己的体会. 2.然后是他们的适用范围,越来越多的应用程序,web程序选择使用面向对象设计,有利于代码重用,消除BUG等等,但基层的程序大多会选择面向结构化的程序. 希望的对楼主有用哈.只是一些理解,正确与否还要楼主通过自己的学习来印证. 祝楼主学习顺利,一生平安.

兴化市18764885201: java什么是结构化程序设计?什么是面向对象程序设计?二者区别 -
宰容烯丙: C++,C#,JAVA都由C衍生而来! C++,C#,JAVA,C都是面向过程的 Visual C++,Visal C#,Visual JAVA是面向对象的 .NET是微软的一种架构,相应的有C#.NET,VB.NET等 对于结构化,是指编程语言的结构体系 结构化语言就是将自然语言加上程序设计语言的控制结构就成了结构化语言,专门用来描述加工逻辑.所以,它既有自然语言灵活性强、表达丰富的特点,又有结构化程序的清晰易读和逻辑严密的特点. 结构化语言的显著特征是代码和数据的分离.

兴化市18764885201: 什么是面向对象程序设计,和结构化程序设计有什么不同 -
宰容烯丙: 自己百度下啊...看看再总结下...以下看看,是否对你有帮助1..思想的区别* 结构化程序设计 思想:在编程之前,先对程序系统根据业务需要进行整体的规划,描述出系统的流程.对程序系统进行模块化分和功能分配.设计出各种图表,...

兴化市18764885201: 面向对象和结构化程序设计的区别 -
宰容烯丙: 结构化程序的概念首先是从以往编程过程中无限制地使用转移语句而提出的.转移语句可以使程序的控制流程强制性的转向程序的任一处,在传统流程图中,就是用上节我们提到的"很随意"的流程线来描述这种转移功能.如果一个程序中多处...

兴化市18764885201: 简述结构化程序设计与面向对象程序设计的区别与联系 -
宰容烯丙: 结构化程序设计简洁明了,不会像面向对象那样绕圈子.因此,编写小工具时比较适合用结构化设计,但是面向对象由于引进对象概念,大大提高了软件编写的效率,适合多人协作编写较大的软件.一个灵活,一个稳重.

兴化市18764885201: 面向对象设计与结构化程序设计的区别 -
宰容烯丙: 面向对象设计与人类习惯的思维方法一致,稳定性好,可重用性好,易于开发大型的软件产品,可维护性好.结构化程序设计就刚刚相反.

兴化市18764885201: 结构化程序设计 和 面向对象程序设计 -
宰容烯丙: 我来个你举个例子 比如和楼上一样的 盖房子 所谓结构化的盖法 就是把你要盖的房子拆成房间、大厅、厕所、厨房,然后分别交给4个人去设计,4个人设计好了,你在吧4个部分组合起来,成为你的房子如果是面向对象的盖法,就是你一开始就把房子设计好,房子里面那里是房间、那里是厨房、那里是厕所,都想好,然后盖好之后,再进去你的房子里面,把你的房间、厨房、大厅设计并装修好所以说结构化就是细化为几个部分,分别完成后,在进行组装 面向对像则是将整个内容分析清楚,封装成一个完整的东西后,你在进行内部细化虽然这个比喻不是很贴切,但至少应该能让你理解起来容易一些

兴化市18764885201: 结构化程序设计与面向对象程序设计
宰容烯丙: 按照俺自己的理解: 前者是按照人们日常做事的顺序来设计语言,即无论做什么事都是按照顺序来执行的,一个个的功能模块都是联系在一起的.总之:做事是有一个个的动作完成的. 后者则是把我们客观世界里的事物都封装起来,各个事物之间是相互独立的.做什么事情都是由一个个的事物共同完成的,而不是顺序执行.总之:做事是由一个个的事物共同完成的. 俺总结的不好,但是是俺自己的看法. 同学们,大家能少复制点吗?这样的话,楼主该自己百度去了...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网