结构化方法与面向对象方法的比较
结构化方法与面向对象方法的历史
结构化方法的最早提出要追溯到20世纪70年代,波姆和雅科比尼提出结构化程序设计理论,认为任何程序都可以用最基本的三种结构来表示,也就是顺序,选择和重复。顺序也就是最基本的程序一条执行完之后执行下一条,选择也就是代表我们平时用的分支语句,表示在接下来的程序中选择其中的一段程序开始运行,循环就是代表我们平时所熟知的循环。图灵奖得主迪杰斯特拉首先证明了他们的观点,并开始倡导结构化程序设计。从此以后在很长一段时间里,结构化方法被看做是一种非常重要的软件设计方法。可以说,结构化方法统治了上个世纪的软件开发领域。
在1960年的Simula语言中即可发现,当时的程序设计领域正面临着一种危机:在软硬件环境逐渐复杂的情况下,软件如何得到良好的维护?面向对象程序设计在某种程度上通过强调可重复性解决了这一问题。对象作为编程实体最早是于1960年代由Simula 67语言引入思维。Simula这一语言是奥利-约翰·达尔和克利斯登·奈加特在挪威奥斯陆计算机中心为模拟环境而设计的。通过把要执行的动作抽象成对对象的操作,面向对象方法将很多具体的细节封装在了对象里,而这样可以大大提高对代码的复用性,也使得面向对象方法写出来的程序灵活性很高,各个模块之间的关联程度不是那么强,因此易于拓展和修改。
结构化方法和面向对象方法的介绍
结构化方法
结构化方法(Structured Methodology)是计算学科的一种典型的系统开发方法。它采用了系统科学的思想方法,从层次的角度,自顶向下地分析和设计系统。结构化方法包括结构化分析(Structured Analysis,简称SA)、结构化设计(Structured Design,简称SD)和结构化程序设计(Structured Program Design,简称SP)三部分内容。其中,SA和SD主要属于学科抽象的内容,SP则主要属于学科设计方面的内容。
在结构化方法中,有两大类典型方法,一类是以Yourdon 的结构化设计、Gane/Sersor构化分析方法以及Demarco 结构化分析方法为代表的面向过程的方法;另一类是以Jackson 方法和Warnier-Orr 方法为代表的面向数据结构的方法。
结构化分析方法通常的分析的步骤如下:
①分析当前的情况,做出反映当前物理模型的DFD;
②推导出等价的逻辑模型的DFD;
③设计新的逻辑系统,生成数据字典和基元描述;
④建立人机接口,提出可供选择的目标系统物理模型的DFD;
⑤确定各种方案的成本和风险等级,据此对各种方案进行分析;
⑥选择一种方案;
⑦建立完整的需求规约。
面向对象方法
面向对象方法(Object-Oriented Method)是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称OO (Object-Oriented)方法,是建立在"对象"概念基础上的方法学。对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。而每继承性是对具有层次关系的类的属性和操作进行共享的一种方式。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。
面向对象方法有三大特征,分别是封装、继承、多态,下面结合自己的体会对这三点进行说明。
封装
将某个部分封装起来,不向使用者提供细节,而只提供有限的接口,这样能够保护对象内部的属性不被使用者修改,减少错误发生的可能性。并且封装同时也为对不同的使用者提供不同权限提供了可能性。
继承
继承能够促进代码的重用,减少代码篇幅,并且能够使实体之间的关系更加清晰。例如,某个工厂在生产一个型号的笔记本电脑的时候,会首先确定一个标准,即确定一个设计样例。如果之后对这个产品进行升级,没有必要从零开始重新设计,而只需要对改进的地方进行修改即可。继承的特性便满足了这样的期望,大大提升了编程效率。
多态
多态是指程序中允许出现重名的情况。对于同名但参数不同的方法而言,这能够使得程序的抽象化程度变高,并且能够减少用户在为方法起名时的其他考虑。
关于结构化方法和面向对象方法的各自的优点
结构化方法,我们容易可以看出是一种自顶向下的方法。在结构化设计中,我们先明确整个系统的输入和输出,然后将这个大型的系统分解为许多小系统,每个小系统解决这个问题的一部分,然后再继续分解直到每个小系统都已经十分简单易于实现为止。这种分析问题的方式很符合我们的人类日常分析问题解决问题的习惯。因此这种方法至今仍然是一种重要的方法。
基于前面的叙述,我们可以看出,因为结构化方法的设计过程就是一步步细化这个程序的结构的过程,所有的程序的子模块都是用逻辑关系联系在了一起,我们可以对这样的系统可以开发一整套的验证方法来测试这个程序的正确性,并且的确存在这样的可能性也就是我们可以这样的系统开发出一种形式化的验证方法,基于这种验证方法,我们可以证明这个程序是完全正确的。这是结构化方法的一个与面向对象方法的一个重要优点。
而我们反过来看面向对象方法。我们可以认为面向对象方法有一些自底向上设计的意味。因为面向对象方法首先在我们要解决的问题中抽象出各种对象,然后再对各个对象是施加各种操作去完成我们的任务。如果没有类,方法也就无从谈起。很显然这种思考方式并没有结构化方法那么严谨,因为我们在抽象这些对象时没有办法知道这样的抽象方式到底是不是可以解决这些问题。
但是面向对象的好处是十分显而易见的。对象之间没有那么强的耦合关系,也就是对象之间并没有特别紧密的联系。这样在我们的需求变化的时候,有很大的可能我们只要在现有的某一个或者某几个类中添加一些新的方法就可以满足新的需求。同时如果我们的程序某一处需要修改,弱耦合的方式也使得我们可以只改动很少的地方就可以解决我们的程序中出现的问题。这个优点,在当今软件产业不断发展,实际开发中需求总是没有办法在最开始确定,只能边实现边修改的情况下,有着很大的实用意义。
关于两种开发方法之我见
通过上一部分的介绍,我们可以得出结论,结构化方法适用于那些对正确性要求非常高,并且需求不会不断变更的系统,比如操作系统。而面向对象方法则更适合当今的开发app或者开发网站的要求。
当然,结构化方法和面向对象方法可以在同一个系统中混合使用。我们可以先将大的系统先用结构化的方法分解到一些规模比较小的系统,再用面向对象的方法设计每一个比较小的系统。这样,也许更能发挥这两种方法各自的优势。
参考文献:
[1] 林玲 结构化方法与面向对象方法在建模中的应用与比较 机电技术 2011年10月
[2] 喻 梅 结构化程序设计方法与面向对象程序设计方法之比较
[3] 黄柏素软件工程实践者的研究方法 [M].北京: 机械工业出版社 , 2001.
[4] 周之英现代软件工程 (新技术篇 ) [ M ].北京: 科学出版社 , 2001.
[5] 贺启宝 ,王 军 面向对象方法与结构化方法 佛山科学技术学院学报 (自然科学版 )第 22卷第 4期
[6] 汪寒昊、谢加胜、邢跃 软件开发方法——结构化方法与面向对象方法比较 科技信息2011年第13期
[7] 赵玉鹏、梁国钊 从结构化方法学走向面向对象方法1003-5680(2004) 05-0048-04
[8] 霍迎旦 软件工程中结构化方法与面向对象方法之比较 内蒙古电大学刊2007年第2期(总第90期)