结构化⽅法与⾯向对象⽅法之⽐较
结构化⽅法和⾯向对象⽅法是计算机软件设计中最常⽤的两种⽅法。结构化⽅法在⼀定程度上解决了软件的可靠性、可维护性和可理解性等问题,⽽20世纪80年代中期以后,⾯向对象⽅法开始风靡全球,被⼴泛应⽤于计算机软件的各个领域,如计算机仿真、系统设计、图形处理和⼈⼯智能程序设计等各个⽅⾯,进⽽深⼊到计算机硬件设计及其它⼯程设计领域,显⽰出其强⼤的⽣命⼒。从结构化⽅法到⾯向对象⽅法,表⾯上看是软件开发⼯具在城头变换⼤王旗,实质上反映了⼀种深刻的认识论的变⾰和⼀种技术发展的模式的演化。
今天我们就来讨论下什么是结构化⽅法,什么是⾯向对象⽅法,以及它们之间的联系与区别。
结构化⽅法(Structured Methodology)是计算学科的⼀种典型的系统开发⽅法。它采⽤了系统科学的思想⽅法,从层次的⾓度,⾃顶向下地分析和设计系统。结构化⽅法包括结构化分析(Structured Analysis,简称SA)、结构化设计(Structured Design,简称SD)和结构化程序设计(Structured Program Design,简称SP)三部分内容。其中,SA和SD主要属于学科抽象的内容,SP则主要属于学科设计⽅⾯的内容。[1]
⾯向对象(Object Oriented,简称OO)⽅法是以⾯向对象思想为指导进⾏系统开发的⼀类⽅法的总称。这类⽅法以对象为中⼼,以类和继承为构造机制来抽象现实世界,并构建相应的软件系统。[1]
结构化⽅法学和⾯向对象⽅法学有诸多的异曲同⼯之处,都很好地促进了软件⼯程的发展,同时,他们在许多⽅⾯也是不同的。
结构化⽅法与⾯向对象⽅法的内在联系[2]
1. ⼆者在分解和抽象原则上⼀致
分解和抽象是软件开发中控制问题复杂性的重要原则。分解即化整分零,将问题剥茧抽丝,层层消化;抽象则是通过分解体现,在逐层分解时,上层是下层的抽象,下层是上层的具体解释和体现,运⽤抽象可以不⽤⼀次考虑太多细节,⽽逐渐的有计划有层次的了解更多细节。⾯向对象⽅法与结构化⽅法在运⽤分解和抽象原则上的要求是完全⼀致的。
2. 局部化和重⽤性设计上的⼀致
局部化是软件开发中的⼀个重要原则,即不希望软件⼀部分过多地涉及或影响软件的其它部分。在结构化⽅法中,局部化主要体现在代码与数据的分隔化,即程序各部分除必要的信息交流外,彼此相互隔离⽽互不影响,⽽⾯向对象⽅法则采⽤数据、代码的封装,即将数据、代码和操作⽅法封装成⼀个类似“⿊箱”的整体对象,提⾼了程序的可靠性和安全性,同时增强了系统的可维护性。也就是说⾯向对象⽅法⽐结构化⽅法的运⽤更加深⼊更彻底。
结构化⽅法与⾯向对象⽅法的区别
我们⾸先通过下⾯这张表格从基本思想、逻辑⼯具、运⾏效率等⽅⾯来总体了解结构化⽅法和⾯向对象⽅法的不同之处。
项⽬结构化设计⾯向对象设计
基本思想⾃顶向下设计过程库,逐步求精,分⽽治之⾃底向上设计库类概念或术语名词过程、函数、数据等对象、类、消息、继承等编程的语⾔C、BASIC、FORTRAN 等C++、VB、JAVA等
逻辑⼯具数据流图、系统结构图、数据字典状态转移
图、实体关系图
对象模型图、数据字典动态模型图、功能模
型图
处理问题的出发点⾯向过程⾯向问题
控制程序⽅式通过设计调⽤或返回程序通过“事件驱动”来激活和运⾏程序
可扩展性功能变化会危及整个系统,扩展性差只需修改或增加操作,⽽基本对象结构不
vb采用什么的编程机制变,扩展性好
重⽤性不好好
层次结构的逻辑关系⽤模块的层次结构概括模块和模块之间的关
系和功能
⽤类的层次结构来体现类之间的继承和发展
分析、设计、编码的转换⽅式按规则转换,有缝连接平滑过程,⽆缝连接
运⾏效率相对⾼相对低
表1 结构化⽅法与⾯向对象⽅法的区别[2]
1. 基本概念的区别[3]
结构化⽅法学⾥最常⽤的概念是系统流程图,数据流程图,模块等。系统流程图是描绘物理系统的传
统⼯具,表达的是信息在系统各部件(程序、⽂件、数据库、表格和⼈⼯过程等)之间流动的情况。数据流图是描绘逻辑系统的⼯具,图中没有任何物理的元素,只是描绘信息在系统中流动和处理的情况。模块是组成结构化软件的基本单位,能够完成⼀项独⽴的功能。
⾯向对象⽅法学⾥最常⽤的概念是对象、类、封装、继承、消息、⽅法。对象是具有特殊属性(数据)和⾏为⽅式(⽅法)的集合体。数据是对象的静态特征,⽽⽅法是对象的动态特性。类是具有相同或类似属性和⽅法的对象的集合体。⼀个类的上层可以有超类,下层可以有⼦类,形成⼀种层次结构。继承性是⾃动地共享类、⼦类和对象中的⽅法和数据的机制。封装机制,它是⼀种信息隐藏技术,⽤户只能看到对
象封装界⾯上的信息,对象内部对⽤户是隐藏的。封装的⽬的在于将对象的使⽤者和对象的设计者分开,使⽤者不必知道⾏为实现的细节,只需使⽤设计者提供的消息来访问对象。消息是对象与对象之间进⾏通讯的⼯具,发送消息的对象称为发送者,接收消息的对象称为接收者。消息告诉对象要求做什么,⽽不管采⽤何种⽅式做。⽅法是对象的动态特征,它能够响应对象发送过来的消息,采⽤何种⽅式实现其功能,以及如何改变对象的属性。
2. 程序设计⽅法的区别
结构化程序设计⽅法着重于过程,“程序设计 = 算法 + 数据结构”是其基本指导思想。在结构化程序设
计中其有严格的理论基础,结构化⽅法学的创始⼈Dijkstra在1972 年讨论了三种⽀持结构化程序设计的数学推理⽅法:枚举、推理和抽象。⽽在⾯向对象程序设计中以对象为中⼼,“程序设计 = 对象 + 类 + 继承”是⾯向对象程序设计的基本原则。⾯向对象⽅法的基本概念如类、对象、继承等虽说在⼀定程度上有了形式化描述,但总的讲来其缺乏⼀种统⼀严格的数学理论基础。
3. 软件开发过程的区别[3]
软件开发的过程就是利⽤计算机语⾔将⼈们关⼼的现实世界的问题映射到计算机世界的过程。可以这样描述:现实世界——建⽴模型——编程实现——计算机世界执⾏求解。
在结构化设计中,程序员分析了问题域之后,得到了⼀个⾯向过程的模型,其实现过程可描述为:现实世界——流程图——⾯向过程语⾔——执⾏求解。结构化⽅法有三⼤缺陷:⼀是没有⼀个联系各个阶段的统⼀模型;⼆是后期的变化和改动困难;三是不⽀技术重⽤。
在⾯向对象⽅法设计中,其实现过程为:现实世界——类图——⾯向对象语⾔——执⾏求解。⾯向对象⽅法软件设计中,对象的概念弥漫着整个从分析、设计到编码的开发过程。对象和它们之间的关系成为各个阶段的共同表达媒介。开发的重⼼由编码向分析偏移,从以功能为中⼼转向以数据为中⼼。开发过程的迭代和⽆缝性使得重⽤变得更加⾃然。
结构化⽅法与⾯向对象⽅法各⾃的优缺点
1. 从执⾏效率来说。结构化⽅法⽐⾯向对象⽅法产⽣的可执⾏代码更直接,效率更⾼。所以对于⼀些嵌⼊式的系统,结构化⽅法产⽣的系统占⽤更⼩,运⾏效率更⾼;
2. 从重⽤性⽅⾯来说。采⽤结构化⽅法的系统难以修改和扩充。结构化分析与设计清楚定义了系统的接⼝,当系统对外界接⼝发⽣变动时,往往造成系统结构较⼤变动,难以扩充新的功能接⼝。采⽤结构化⽅法的系统可复⽤性较差。结构化⽅法将数据和操作分离,导致⼀些可重⽤的软件构件在特定具体应⽤环境才能应⽤,降低了软件的可重⽤性。⾯向对象⽅法具有很好的重⽤性。在遇到类似的问题,通过应⽤了抽象继承等技术,来重⽤代码;
3. 从程序语⾔编译器来说。⾯向对象⽅法,通过编译器实现代码的⾯向对象性。也就是说经过编译器后,代码会被翻译为相对应的结构化代码。所以要熟练开发,还要懂⼀定的结构化⽅法做为基础;
4. 从掌握难度来说,⾯向对象⽅法⽐结构化对象⽅法复杂,难于理解。⾯象对象⽅法的内容⼴,概念多,⽽且很多都是难于理解,做到精通更加不易。应⽤⾯向对象⽅法,常常需要⼀种⽀持的分析,设计⽅法,如RUP ⽅法,敏捷⽅法等。这些知识抽象枯燥,难于掌握。⾯象对象⽅法要经过长期的开发实践才能很好的理解,掌握。相⽐之下,结构化⽅法知识内容少,容易上⼿;
5. 从应⽤的范围看,结构化⽅法适⽤于数据少⽽操作多的问题。实践证明对于像操作系统这样的以功能为主的系统,结构化⽅法⽐较适应它。⾯向对象⽅法正好相反,对于数据库,信息管理等以数据为主
的⽽操作较少的系统,⽤⾯向对象⽅法描述要好于结构化⽅法。
不论哪⼀种设计⽅法,正确清晰的需求界定都是开发⼀个成功的软件系统必不可少的前提条件,否则再好的设计⽅法也⽆济于事。[4]综上,软件开发的⽬标是以最⼩的代价开发出满⾜⽤户需求的软件。为此,根据系统的实际需求,分别针对具体情况选择采⽤不同的设计⽅法,可以充分发挥⾯向对象与结构化⽅法各⾃的优势。⽬前在⼤多数软件系统的分析设计过程中,这两种⽅法都兼⽽有之。[2]开发者在开发实践中,要从实际出发,考虑执⾏效率、开发者的技术⽔平、系统规模、是否为易需求变化的系统等因素,尽量利⽤它们各⾃的优点,避免他们的缺点。如对于开发⼀些⼩型嵌⼊式实时监控系统或同等稳定⼩系统,可⽤结构化⽅法;对于开发⼊门者,使⽤结构化⽅法和⾯向对象⽅法相结合;对于⼤型系统或者需求易变系统,使⽤⾯向对象⽅法。总之,根据实际出发,选取合适的软件开发⽅法,达到最佳的开发效益。
参考⽂献
[1] 汪寒昊、谢加胜、邢跃软件开发⽅法——结构化⽅法与⾯向对象⽅法⽐较科技信息2011年第13期
[2] 喻梅结构化程序设计⽅法与⾯向对象程序设计⽅法之⽐较
[3] 赵⽟鹏、梁国钊从结构化⽅法学⾛向⾯向对象⽅法1003-5680(2004) 05-0048-04
[4] 霍迎旦软件⼯程中结构化⽅法与⾯向对象⽅法之⽐较内蒙古电⼤学刊2007年第2期(总第90期)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论