结构化方法和面向对象方法之比较
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
结构化方法和面向对象方法之比较
摘要:本文剖析了结构化方法和面向对象方法这两种软件开发方法具体的分析设计过程,讨
论了各自的主要思想及基本原则,对结构化方法和面向对象方法都作出了简要的介绍。
给出了结构化方法与面向对象方法的基本原则、优点、缺点之间的系统比较。
关键词:软件工程结构化方法面向对象方法
引言
结构化方法是强调开发方法的结构合理性以及所开发软件的结构合理性的软件开发方法。
结构是指系统内各个组成要素之间的相互联系、相互作用的框架;面向对象方法是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称OO方法,是建立在“对象”概念基础上的方法学。
正文
结构化方法是结构化分析,结构化设计和结构化编程的总称,是最早最传统的软件开发方法,也是迄今为止信息系统中应用最普遍、最成熟的一种,它引入了工程思想和结构化思想,使大型软件的开发和编程都得到了极大的改善。
结构化方法的基本思想可概括为:自顶向下、逐步求精、模块化技术。
结构化方法强调功能抽象和模块化。
由于它采取了分块处理问题的方法,可以把一个比较复杂的问题分解为若干个容易处理解决的部分,从而降低了问题处理的难度。
由于结构化方法思路清晰,条理清楚,又有效地分解了繁复的问题,使得编写程序时清晰明了,简化了编程人员繁杂的工作;而在阅读时也能够一气呵成,给人以明朗的感觉。
面向对象方法它不仅仅是一些具体的软件开发技术与策略,而且是一整套关于如何看待软件系统与现实世界的关系,用什么观点来研究问题并进行问题求解,以及如何进行软件系统构造的软件方法学。
人们普遍认为面向对象方法是一种运用对象、类、继承、封装、聚合、关联、消息和多态性等概念和原则来构造系统的软件开发方法。
面向对象方法是目前已经发展成为主流的软件方法,它经过了30多年的研究和发展,已经越来越成熟和完善,应用也越来越深入和广泛。
如著名的Smalltalk,C++,Java,Eiffel等都属于面向对象语言。
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决而面向对象的设计则是从另外的思路来解决问题。
面向对象方法的本质是主张从客观世界固有的事物出发来构造系统,提倡用人类在现实生活中常用的思维方法来认识和理解、描述客观事物,强调最终建立的系统能映射的问题域。
使得系统中的对象,以及对象之间的关系能够如实地反映问题域中固有的事物及其关系。
基本思想介绍
结构化方法主要思想
上图有以下几个要点:
(1)功能的分解是一种递归定义.也就是说:第0层(代表整个系统)它只看得见1,2,3,至于1,2,3各自自身怎么实现,那不是它的事,而对于模块1来说,它只管1.1,1.2,1.3,它并不管1.11,1.12等.这种思维能让我们每次聚焦在一个部位上,这个部位可能处于高层,也可能处于低层,但不管处在哪一层,都是用的迭代的思维,第n层只考虑它和第n+1层的关系,并不考虑第n+2,n+3层.
(2)模块1,2,3之间可能是"与"的关系,也可能是"或"的关系,它们相互协作来完成上一层的功能.
(3)也因为上述的递归定义,所有不管是函数,还是子系统,还是整个系统,都可用如下同一个模型来描述
把该系统分成几个子系统之后,每个子系统仍然是用这个模型来描述.
(4)这个功能分解的层次图如何建立呢?功能分解最终转化为事件的分组,分包.所谓事件就是系统处理的外部用户的请求.注意:这里的事件不是指的用户点击界面上的一个按扭,一个菜单,当然可能是这种情况,界面通常是复杂的,"对话框套对话框",我们看的不是界面是什么,而是用户使用界面达到一个什么目的,这个目的通常才是用户对系统的请求,即"最后一个界面"
一个系统处理一大堆事件(1,2,...n),通过对这些事件进行分组,不同的模块处理不同的事
件,最终以事件为线索对系统的功能进行分解.
面向对象方法主要思想:
整个系统被分解成对象的集合,而不是功能的集合,每个对象有自己的职责,对象之间相互协作来完成用户交给的任务.
(1)同结构化相比,它不是层次结构,在结构化中,上一层依赖下一层,下一层又依赖下下一层,
只要底层改变,上层也要跟着改变,它没有很好的隔离变化.而面向对象刚很好的封装了变化,外界只需使用对象的接口,而不用管这个接口是如何实现的.
(2)一个重要区别是:这里的箭头是请求,而不是数据流.在结构化方法的DFD数据流程图中,箭头代表的是数据流,也就是说一个模块的输出变成另一个模块的输入,而这里,指的是对象A请求对象B完成某项任务,也就是A调用B的方法.
一、基本思想的比较
结构化方法的基本思想主要体现在三个方面。
一、自顶向下,逐步求精:把程序看成是一个逐步演化的过程。
把一个系统与程序看成是一层一层的。
例如:户籍管理系统可以划分为:户籍迁入迁出,人员迁入迁出,户籍注销,人员注销等几个子系统,而每个子系统又划分为接收用户信息,实施处理,提供返回信息等等部分。
二、模块化:即将几个系统分成几个模块,每个模块实现特定的功能,最终整个系统由这些模块组成。
模块跟模块之间通过接口传递信息,模块最重要的特点就是独立性,模块之间还有上下层的关系,上层模块调用下层模块来实现一些功能。
三、语句结构化:顺序结构、分支结构、循环结构,都是常用的语句结构。
面向对象方法的基本思想主要有:一、客观世界中的事物都是对象,对象之间存在一定的关系,并且复杂对象由简单对象构成。
二、具有相同属性和操作的对象属于一个类,对象是类的一个实例。
三、类之间可以有层次结构,即类可以有子类,其中,子类继承父类的全部属性和操作,而且子类有自己的属性和操作。
四、类具有封装性,把类内部的属性和一些
操作隐藏起来,只有公共的操作对外是可见的,对象只可通过消息来请求其他对象的操作或自己的操作。
五、强调充分运用人在日常逻辑思维中经常采用的思想方法与原则。
例如:抽象,分类,继承,聚合,封装,关联等。
二、基本原则的比较
结构化方法遵循基本原则有:一、抽象原则:是一切系统科学方法都必须遵循的基本原则,它注重把握系统的本质内容,而忽略与系统当前目标无关的内容,它是一种基本的认知过程和思维方式。
二、分解原则:是结构化方法中最基本的原则,它是一种先总体后局部的思想原则,在构造信息系统模型时,它采用自顶向下、分层解决的方法。
三、模块化原则:结构化方法最基本的分解原则的具体应用,它主要出现在结构化设计阶段中,其目标是将系统分解成具有特定功能的若干模块,从而完成系统指定的各项功能。
面向对象方法遵循基本原则有:一、抽象:是处理现实世界复杂性的最基本方式,在OO方法中它强调一个对象和其他对象相区别的本质特性,对于一个给定的域确定合理的抽象集是面向对象建模的关键问题之一。
二、封装:是对抽象元素的划分过程抽象,由结构和行为组成,封装用来分离抽象的原始接口和它的执行。
封装也称为信息隐藏,它将一个对象的外部特征和内部的执行细节分割开来,并将后者对其他对象隐藏起来。
三、模块化:是已经被分为一系列聚集的和耦合的模块的系统特性,对于一个给定的问题,确定正确的模块集几乎与确定正确的抽象集一样困难,通常每个模块应该足够简单以便能够被完整地理解。
四、层次:抽象集通常形成一个层次,层次是对抽象的归类和排序,在复杂的现实世界中有两种非常重要的层次,一个是类型层次,另一个是结构性层次。
确定抽象的层次是基于对象的继承,它有助于在对象的继承中发现抽象间的关系,搞清问题的所在,理解问题的本质。
三、核心问题的比较
模型问题是结构化方法的核心问题,建立模型简称建模是为了更好地理解我们要模拟的现实世界建模通常是从系统的需求分析开始在结构化方法中就是使用SA方法构建系统的环境模型然后使用SD方法确定系统的行为和功能模型最后使用SP方法进行系统的设计并确定用户的现实模型
面向对象方法与结构化方法一样,其核心问题也是模型问题面向对象模型主要由OOA 模型OOD模型组成其中OOA主要属于学科抽象形态方面的内容OOD主要属于学科设计形态方面的内容
四、优点的比较
结构化方法在程序设计时,先考虑问题大的方面,在确定了主要方向后,再由表及里深入到问题具体的细节,由易到难,逐层解决问题,使得整个程序设计过程由模糊到清晰,由概括到具体。
结构化方法强调功能抽象和模块化,采取了分块处理问题的方法,可以把一个比较复杂的问题分解为若干个容易处理解决的部分,从而降低了问题处理的难度。
由于结构化方法思路清晰,条理清楚,又有效地分解了繁复的问题,使得编写程序时清晰明了,简化了编程人员繁杂的工作,而在阅读时也能够一气呵成,给人以明朗的感觉。
面向对象方法与人类习惯的思维方法一致,使得使用者和维护人员都容易理解,在用户使用时不会理解困难,在软件维护中可维护性也较高,并且易于测试和调试。
它的稳定性好,对软件的局部进行修改时,不会引起整体的变化,而且对局部修改容易实现。
它的可重用性好,并且由于它是把大的问题分解成相互独立的小问题处理,降低了开发的技术难度,开发工作的管理也变的容易了,开发大型软件变的容易,成本也降低了。
面向对象方法直接由问题入手,来进行系统的建模,降低了使用成本,让用户在使用一个新的软件时,能够在最短的时间里了解使用方法,能正确、清楚地使用软件。
在编写程序方面,结构化方法有着比较强的优势,它思路清晰,条理严谨,步骤整洁,便于阅读理解;而在注重功能的用户使用方法,面向对象方法则更容易理解,它操作简单,界面清楚,使得软件使用变得简单。
五、缺点的比较
结构化方法在得到问题本质性的描述之前,不断分解出的结论和需要处理的信息越来越多、越来越复杂,它要求系统分析员具有一种“俯视全局”的能力,能够透过问题的表象直接把握到问题本质。
当软件项目较小、系统分析员能力足够高的时候,结构化方法能快速的找到最简洁、高效率的逻辑模型。
结构化方法对复杂问题的帮助有限,但它有助于使用面向分析方法的系统分析员确认系统最初的高阶模型。
面向对象方法总是试图抽象出更公用的类,因此对系统分析员抽象事物和把握最初分析方向的要求很高,常常难以控制抽象对象的层次、粒度,甚至抽象出与问题本质面目全非的对象模型,掌握难度高于结构化分析方法。
面向对象方法通过信息隐藏和封装等手段屏蔽了对象内部的执行细节,控制了错误的蔓延,但发生错误时,定位故障的代价大,尤其是继承的深度很大时。
对于需求变化频繁的系统,得到一个高度可复用的面向对象软件系统设计是很困难的事情。
小结:结构化方法与面向对象方法不是对立的,没有谁先进谁过时之说,不论哪一种设计方法,正确清晰的需求界定都是开发一个成功的软件系统必不可少的前提条件,所以恰当的运用方法解决问题,在运用时关注运用方法的成本和价值才是根本性的问题。
参考文献
【1】缪淮扣,高晓雷,李刚. 结构化方法、面向对象方法和形式方法的比较与结合. 计算机工程和科学,1999
【2】殷锋. 实用软件工程. 天津:天津科学技术出版社,2011.
【3】邵维忠,杨芙清. 面向对象的系统分析[M] . 北京:清华大学出版社,1998.
【4】/p-77164281.html
【5】/s/blog_59a104d20100a79o.html。