首页 > 代码库 > 结构化方法与面向对象方法的比较
结构化方法与面向对象方法的比较
本博客旨在通过基本概念、主要特征以及针对需求变更的项目所选用的开发模型等方面进行结构化方法与面向对象方法的比较。
软件开发方法指在项目投资规模和时间限制内,设计、实现符合用户需求的高质量软件,根据软件开发的特点,提出的多种软件开发策略。结构化方法和面向对象方法都是计算技术中常用的软件开发方法,两种开发方法各有利弊,选择哪一种方法要根据分析者的熟练程度和项目的具体类型而定。
1结构化开发方法
结构化开发方法是一种传统的软件开发方法,用系统工程的思想和工程化的方法,按用户至上的原则,结构化、模块化、自顶向下地对系统进行分析和设计。结构化开发方法又称生命周期法,是迄今为止最传统、应用最广泛的一种信息系统开发方法。
1.1基本思想
结构化开发方法的基本思想是软件功能的分解和抽象。
系统按功能要求分为若干子功能模块,子模块又进一步分解为若干个子子模块,循此进行,从上往下进行功能分解。分解的结果将逐层地产生一系列的功能模块,随着分解的层次由高到低的发展,模块功能是逐层地由抽象变得具休,由综合变得单一。
1.2基本要点
1.2.1自顶向下
将复杂的大问题分解为相对简单的小问题,找出每个问题的关键、重点所在,然后用精确的思维定性、定量地去描述问题。
1.2.2逐步求精
将现实问题经过几次抽象(细化)处理,最后只需解决一些简单的算法描述和算法实现问题。
1.2.3模块化设计
逐步求精的结果是得到一系列以功能块为单位的算法描述。以功能块为单位进行程序设计,实现其求解算法的方法称为模块化。模块化的目的是为了降低程序复杂度,使程序设计、调试和维护等操作简单化。
1.3开发过程
在结构化软件开发方法的瀑布模型中,项目团队首先分析,然后确定需求和需求的优先级。接下来,在设计阶段,根据需求说明进行详细设计。接下来就会执行代码实现。代码实现后使用合理的数据用于实施和测试,以供最终用户评估。最后阶段涉及评估和维护,后者确保一切顺利运行。
因此,软件开发过程经历了一系列五个基本阶段:规划,分析,设计,实施和运行。这些阶段中的每个阶段还包括一系列步骤或活动,这些步骤或活动依赖于一些技术来产生所需的可交付成果。项目团队可能在逻辑上连续地、增量地或迭代地移动到某一阶段或步骤。
2面向对象软件开发方法
面向对象方法(Object-Oriented Method)是一种把面向对象的思想应用于软件开发过程中指导开发活动的系统方法,是建立在“对象”概念基础上的方法学。
所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。面向对象方法的出发点和基本原则,是主张从客观世界固有的事物出发来构造系统,提倡用人类在现实生活中常用的思维方法来认识、理解和描述客观事物,强调最终建立的系统能够映射问题域,也就是说,系统中的对象以及对象之间的关系能够如实地反映问题域中固有事物及其关系。
2.1开发模型
面向对象方法遵循系统开发的迭代和增量方法。系统开发生命周期被视为由几个增量或阶段组成:开始,阐述,构造和过渡。这是一种自底向上和自顶向下相结合的方法,以对象建模为基础,不仅考虑了输入、输出数据结构,也包含了所有对象的数据结构。
2.2UML
面向对象方法使用统一建模语言UML(Unified Modeling Language)。它专注于系统的三个架构视图:功能,静态和动态。所有图都迭代地进行细化,直到信息系统的要求被完全理解。
功能视图从用户的角度描述了系统的外部行为。用例和用例图用于描述功能视图。静态视图按照属性,方法,类,关系和消息来描述。类责任标记(CRC)卡,类图和对象图用于描绘静态视图。动态视图由序列图,协作图和状态图表示。
2.3需求分析
面向对象开发方法中,需求分析过程与系统模型的形成过程一致,开发人员与用户的讨论从实体开始,即开发人员必须清晰地明白现实系统才能导出系统模型,这就使用户与开发人员之间的信息交流更加通畅,从而避免了需求讨论中可能出现的问题。
2.4可维护性
在面向对象语言中,子类不仅可以继承父类的属性和行为,而且也可以重写父类的某个行为。利用这一特点,设计者可以方便地进行功能修改:引入某类的一个子类,对要修改的行为进行重写。由于不再在原来的程序模块中引入修改,所以改善了软件的可修改性,从而也改善了软件的可维护性。
2.5主要特征
2.5.1封装性
封装是一种信息隐蔽技术,它体现于类的说明,是对象的重要特性。其目的在于把对象的设计者和对象者的使用分开,使用者不必知晓行为实现的细节,只须用设计者提供的消息来访问该对象。
2.5.2继承性
继承性是子类自动共享父类之间数据和方法的机制。类的对象是各自封闭的,如果没有继承性机制,则类对象中数据、方法就会出现大量重复。继承不仅支持系统的可重用性,而且还促进系统的可扩充性。
2.5.3多态性
同一消息为不同的对象接受时可产生完全不同的行动,这种现象称为多态性。多态性的实现受到继承性的支持,利用类继承的层次关系,把具有通用功能的协议存放在类层次中尽可能高的地方,而将实现这一功能的不同方法置于较低层次。
3两种软件开发方法的主要区别
3.1出发点
结构化方法的出发点是“怎样做”,即用计算机求解这个实际问题应该“怎样做”。从实际问题到数学模型的抽象都是围绕“怎样做”去进行的。结构化方法的着眼点是系统功能,要点是系统的功能分解,重点是建立功能模型。即自顶而下进行功能分解,逐步求精,这是从抽象到具体,从纲要到细节的过程。
面向对象(OO)方法的出发点是“是什么”即要求解的实际问题,它“是什么”,面向对象方法的着眼点是系统中的对象,要点是对象特性的抽象,重点是建立对象模型。面向对象方法需要自顶向下的分解与自低向上的构造,这是从一般到具体,由具体到一般的过程;通过类的选择逐步求精。
3.2实现着重
结构化方法中的实现着重于编写代码。面向对象方法中的实现可以简化为创建类的实例,开发新的类,并对这些对象建立联系,使它们可以相互通讯。
3.3重用
结构化方法很少考虑重用问题。面向对象方法本质上是基于重用的软件开发法。
另外,面向对象方法认为一个类,在逻辑上既包含数据,又包含功能。它取代了实体只能定义数据的概念,继承性取代了实体关系的子类型。处理分析图描述了不同类的实例之间的消息传送,取代了数据流图。传统的实体关系图被类的关系图和类的分层图所取代。面向对象方法强调数据结构,使得开发过程更为稳定。
3.4需求变更
面向软件开发的面向对象方法相对于传统方法在处理复杂性方面具有决定性的优势,大多数当代语言和工具都是面向对象的,对需求规格频繁变化的大型项目也普遍偏好面向对象方法。
Fig 1
图1显示了当软件项目存在频繁变更的需求规格时,分别使用瀑布模型和面向对象模型失败的大型项目数量。显然,此时使用面向对象开发模型的项目相较于使用传统结构化开发模型(瀑布模型)的项目具有更小的失败率。
Fig 2
图2显示了在开发过程中没有需求规格变化的小型项目分别使用结构模型(螺旋)和面向对象模型的影响开发阶段的偏差/成本。我们可以观察到传统模型称为螺旋和面向对象的模型在大多数开发阶段提供相同的效率。与螺旋相比,面向对象的模型成本太高。 因此,我们可以认为,传统的软件开发模型如瀑布、螺旋、增量模型是可行的,以开发具有稳定需求规格的小型项目。
4结论
与人类发明的任何技术或工具一样,所有软件开发方法都有局限性。目前软件工程开发主要有两种方法来开发项目:结构化方法和面向对象方法。
结构化方法具有开发思想清晰,易学易用,模块层次分明,便于分工开发和调试,程序可读性强等特点。但程序较固定,界面简单,使用周期长等软件。结构化开发方法在整合,部署和维护方面是可行的,但仅限于具有稳定需求规格的小型项目。这一方法使软件开发者专注于将较大的算法分解成较小的算法。但传统的方法如瀑布,螺旋缺乏灵活性来处理面向对象的模型。
面向对象方法充分利用对象的封装性,继承性和多态性使得软件的可靠性、可重用性、可扩充性和可维护性得到充分体现。面向对象的开发方法最适合于那些意味着使用新兴对象技术来构建,管理和组装这些对象到有用的计算机应用程序的系统的项目。
事实上,真正实用的系统开发方法往往是多种开发方法的结合。如何综合应用,要根据开发系统的规模、系统的复杂程度、系统开发方法的特点,以及所能使用的计算机软件等诸多因素综合考虑后决定。
参考文献:
[1] http://baike.baidu.com/link?url=jgu_iZed2EZaje-WzQlS673XI2jIa1IhaJEgUAeMhRqjlO5WZAsi8B6YfDl905G_3IzYAXU5rHiUdzcM40TDfbnkzkc6Zy6cycwwbhzrBlMiiDpFHLJJD-TaVVxFwt64DD88HFR5ItZgi8zL7L9v0q
[2] http://baike.baidu.com/link?url=qx4kSRoPDVSPxH1luWH0pEQm0SpMCsLzauQ9IU-ZQT0YaagISBZw1ksQiQSMDDcBZi8Lo_Zq3vlcMFobf9O3OQx2fUBAk42CDE0QAKKVUgM9dyFsRa2BE2bLicMLmjZdMfRB35Z0eKLDjvcmzbrONa
[3] http://baike.baidu.com/link?url=hgf-729zQDNnatBUhiCPBtG_mDJJSZhlwVKaoifFt28n0_JXf4HAW2FXJFg1ib49P5Zq27qErjOLnrG8HUrUV_jbgrgOq6pcDwBDofh1Dk_YkHSNfw8KHIiYRMMS91CRc4-j0b1ytAqf6UCQZzCRdsKD3n2-_m5fN1RmFsR5D_e
[4] 王茹, 浅谈结构化和面向对象软件开发方法, 《电大理工》2007年6月第2期
[5] 汪寒昊, 谢加胜, 邢跃, 软件开发方法——结构化方法与面向对象方法比较, 《SCIENCE & TECHNOLOGY INFORMATION》2011年第13期
结构化方法与面向对象方法的比较