首页 > 代码库 > 结构化方法与面向对象方法的比较
结构化方法与面向对象方法的比较
结构化方法与面向对象方法的比较
引言
结构化方法(SD方法)是一种传统的软件开发方法,它是由结构化分析、结构化设计和结构化程序设计三部分有机组合而成的。它的基本思想:把一个复杂问题的求解过程分阶段进行,而且这种分解是自顶向下,逐层分解,使得每个阶段处理的问题都控制在人们容易理解和处理的范围内。
面向对象方法(Object-Oriented Method)是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称OO (Object-Oriented)方法,是建立在“对象”概念基础上的方法学。对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。而每继承性是对具有层次关系的类的属性和操作进行共享的一种方式。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。面向对象方法就是主张从客观世界固有的事物出发来构造系统,提倡用人类在现实生活中常用的思维方法来认识、理解和描述客观事物,强调最终建立的系统能够映射问题域,也就是说,系统中的对象以及对象之间的关系能够如实地反映问题域中固有事物及其关系
二者之间的区别
首先,他们处理问题时的出发点不同。
结构化方法是强调过程抽象化和模块化,以过程为中心构造或处 理客观世界问题的,它是一种面向过程的开发方法;面向对象方法强调 把问题域的要领直接影射到对象及对象之间的接口上,是用符合人们 通常的思维方式来处理客观世界的问题。
其次,处理问题的基本单位和层次逻辑关机不同。
结构化方法把客观世界的问题抽象成计算机可以处理的过程,处 理问题的基本单位是能清晰表达过程的模块,用模块的层次结构概括 模块或模块间的关系和功能;面向对象方法是用计算机逻辑来模拟客 观世界中的物理存在,以对象的集合类作为处理问题的基本单位,尽可 能使计算机世界向客观世界靠拢,以使问题的处理更直截了当,面向对 象方法是用类的层次结构来体现类之间的继承和发展。
再有,数据处理方式与控制程序方式不同。
结构化方法是直接通过程序来处理数据,处理完毕后即可显示处理结果,在控制程序方式上是按照设计调用或返回程序不能自由导航, 各模块程序之间存在着控制与被控制的关系;面向对象方法将数据与对应的代码封装成一个整体,原则上其它对象不能直接修改其数据,即对象的修改只能由自身的成员函数完成,控制程序方式上是通过“事件驱动”来激活和运行程序。
四是,分析设计与编码转换方式不同。
结构化方法强调分析、设计及编码之间按规则进行转换,贯穿软件生命周期的分析、设计及编码之间实现的是一种有缝的连接;面向对象方法从分析到设计再到编码则采用一致性的模型表示,贯穿软件生命周期的分析、设计及编码之间是一种平滑过程,即实现的是一种无缝连接。
优点的比较
结构化方法在程序设计时,先考虑问题大的方面,在确定了主要方向后,再由表及里深入到问题具体的细节,由易到难,逐层解决问题,使得整个程序设计过程由模糊到清晰,由概括到具体。结构化方法强调功能抽象和模块化,采取了分块处理问题的方法,可以把一个比较复杂的问题分解为若干个容易处理解决的部分,从而降低了问题处理的难度。由于结构化方法思路清晰,条理清楚,又有效地分解了繁复的问题,使得编写程序时清晰明了,简化了编程人员繁杂的工作,而在阅读时也能够一气呵成,给人以明朗的感觉。 面向对象方法与人类习惯的思维方法一致,使得使用者和维护人员都容易理解,在用户使用时不会理解困难,在软件维护中可维护性也较高,并且易于测试和调试。它的稳定性好,对软件的局部进行修改时,不会引起整体的变化,而且对局部修改容易实现。它的可重用性好,并且由于它是把大的问题分解成相互独立的小问题处理,降低了开发的技术难度,开发工作的管理也变的容易了,开发大型软件变的容易,成本也降低了。面向对象方法直接由问题入手,来进行系统的建模,降低了使用成本,让用户在使用一个新的软件时,能够在最短的时间里了解使用方法,能正确、清楚地使用软件。
在编写程序方面,结构化方法有着比较强的优势,它思路清晰,条理严谨,步骤整洁,便于阅读理解;而在注重功能的用户使用方法,面向对象方法则更容易理解,它操作简单,界面清楚,使得软件使用变得简单。
缺点的比较
结构化方法在得到问题本质性的描述之前,不断分解出的结论和需要处理的信息越来越多、越来越复杂,它要求系统分析员具有一种“俯视全局”的能力,能够透过问题的表象直接把握到问题本质。当软件项目较小、系统分析员能力足够高的时候,结构化方法能快速的找到最简洁、高效率的逻辑模型。结构化方法对复杂问题的帮助有限,但它有助于使用面向分析方法的系统分析员确认系统最初的高阶模型。 面向对象方法总是试图抽象出更公用的类,因此对系统分析员抽象事物和把握最初分析方向的要求很高,常常难以控制抽象对象的层次、粒度,甚至抽象出与问题本质面目全非的对象模型,掌握难度高于结构化分析方法。面向对象方法通过信息隐藏和封装等手段屏蔽了对象内部的执行细节,控制了错误的蔓延,但发生错误时,定位故障的代价大,尤其是继承的深度很大时。对于需求变化频繁的系统,得到一个高度可复用的面向对象软件系统设计是很困难的事情。 结论:结构化方法与面向对象方法不是对立的,没有谁先进谁过时之说,不论哪一种设计方法,正确清晰的需求界定都是开发一个成功的软件系统必不可少的前提条件,所以恰当的运用方法解决问题,在运用时关注运用方法的成本和价值才是根本性的问题。
结语
综上所述,软件开发的目标是以最小的代价开发出满足用户需求 的软件。为此,根据系统的实际需求,分别针对具体情况选择采用不同的 设计方法,可以充分发挥面向对象与结构化方法各自的优势。目前在大 多数软件系统的分析设计过程中,这两种方法都兼而有之。
笔者以为,开发者在开发实践中, 从实际出发, 考虑执行效率、开发 者的技术水平、系统规模、是否为易需求变化的系统等因素, 尽量利用 它们各自的优点, 避免他们的缺点。如对于开发一些小型嵌入式实时监 控系统或同等稳定小系统, 可用结构化方法;对于开发入门者, 使用结 构化方法和面向对象方法相结合;对于大型系统或者需求易变系统, 使 用面向对象方法。总之, 根据实际出发, 选取合适的软件开发方法, 达到 最佳的开发效益
结构化方法与面向对象方法的比较